Skip to content

Commit a75c648

Browse files
author
Zabilsya
committed
[DOP-21974] add search to ManagedSelect
1 parent 56ba73a commit a75c648

File tree

29 files changed

+353
-39
lines changed

29 files changed

+353
-39
lines changed

src/app/styles/antd.less

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
}
2828

2929
.ant-avatar,
30-
.ant-modal-close-x {
30+
.ant-modal-close-x,
31+
.ant-select-item-empty {
3132
display: flex;
3233
justify-content: center;
3334
align-items: center;

src/features/group/AddGroupUser/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ export const AddGroupUser = ({ groupId, onSuccess, onCancel }: AddGroupUserProps
2323
size="large"
2424
queryKey={[UserQueryKey.GET_USERS]}
2525
queryFunction={userService.getUsers}
26-
renderOptionValue={(user) => user.id}
2726
renderOptionLabel={(user) => user.username}
27+
renderOptionValue={(user) => user.id}
28+
detailQueryKey={[UserQueryKey.GET_USER]}
29+
detailQueryFunction={(value) => userService.getUser({ id: value })}
2830
/>
2931
</Form.Item>
3032

src/features/group/SelectGroup/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ export const SelectGroup = () => {
1717
onSelect={handleSelectGroup}
1818
renderOptionLabel={(group) => group.data.name}
1919
renderOptionValue={(group) => group.data.id}
20+
detailQueryKey={[GroupQueryKey.GET_GROUP]}
21+
detailQueryFunction={(value) => groupService.getGroup({ id: value })}
2022
placeholder="Select group"
2123
/>
2224
);

src/features/group/UpdateGroup/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ export const UpdateGroup = ({ group }: UpdateGroupProps) => {
4949
queryFunction={userService.getUsers}
5050
renderOptionValue={(user) => user.id}
5151
renderOptionLabel={(user) => user.username}
52+
detailQueryKey={[UserQueryKey.GET_USER]}
53+
detailQueryFunction={(value) => userService.getUser({ id: value })}
5254
//TODO: [DOP-20030] Need to delete prop "disabled" when the backend leaves the user with access to the group, even after changing the owner
5355
disabled
5456
/>

src/features/transfer/MutateTransferForm/components/SourceParams/SourceParams.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ export const SourceParams = ({ groupId, initialSourceConnectionType }: SourcePar
2525
renderOptionValue={(connection) => connection.id}
2626
renderOptionLabel={(connection) => connection.name}
2727
onSelect={handleSelectConnection}
28+
detailQueryKey={[ConnectionQueryKey.GET_CONNECTION]}
29+
detailQueryFunction={(value) => connectionService.getConnection({ id: value })}
2830
placeholder="Select source connection"
2931
/>
3032
</Form.Item>

src/features/transfer/MutateTransferForm/components/TargetParams/TargetParams.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ export const TargetParams = ({ groupId, initialTargetConnectionType }: TargetPar
2525
renderOptionValue={(connection) => connection.id}
2626
renderOptionLabel={(connection) => connection.name}
2727
onSelect={handleSelectConnection}
28+
detailQueryKey={[ConnectionQueryKey.GET_CONNECTION]}
29+
detailQueryFunction={(value) => connectionService.getConnection({ id: value })}
2830
placeholder="Select target connection"
2931
/>
3032
</Form.Item>

src/features/transfer/MutateTransferForm/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ export const MutateTransferForm = ({
3030
queryFunction={(params) => queueService.getQueues({ group_id: group.id, ...params })}
3131
renderOptionValue={(queue) => queue.id}
3232
renderOptionLabel={(queue) => queue.name}
33+
detailQueryKey={[QueueQueryKey.GET_QUEUE]}
34+
detailQueryFunction={(value) => queueService.getQueue({ id: value })}
3335
placeholder="Select queue"
3436
/>
3537
</Form.Item>

src/shared/hooks/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from './useModalState';
2+
export * from './useDebouncedState';
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { SetStateAction, useCallback, useEffect, useRef, useState } from 'react';
2+
3+
/**
4+
* Hook for handling debounced state
5+
*
6+
* @param initialValue - initial state
7+
* @param delay - state change timeout
8+
*/
9+
export function useDebouncedState<T>(initialValue: T, delay: number) {
10+
const [value, setValue] = useState(initialValue);
11+
const timeoutRef = useRef<number | null>(null);
12+
13+
const clearTimeout = () => window.clearTimeout(timeoutRef.current!);
14+
useEffect(() => clearTimeout, []);
15+
16+
const setDebouncedValue = useCallback(
17+
(newValue: SetStateAction<T>) => {
18+
clearTimeout();
19+
timeoutRef.current = window.setTimeout(() => {
20+
setValue(newValue);
21+
}, delay);
22+
},
23+
[delay],
24+
);
25+
26+
const setValueImmediately = (newValue: T) => {
27+
clearTimeout();
28+
setValue(newValue);
29+
};
30+
31+
return { value, setValue: setValueImmediately, setDebouncedValue };
32+
}

src/shared/types/api.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,8 @@ export interface PageParams {
1919
page: number;
2020
}
2121

22-
export interface PaginationRequest extends PageParams {}
22+
export interface SearchParams {
23+
search_query?: string;
24+
}
25+
26+
export interface PaginationRequest extends PageParams, SearchParams {}

0 commit comments

Comments
 (0)