Skip to content

Commit 228f34d

Browse files
authored
feat: DH-16336: usePickerWithSelectedValues - boolean flags should be calculated based on trimmed search text (#1750)
Supports DH-16336: - Added an `isDebouncing` prop to `useDebouncedValue` - Added support for search text trimming to `usePickerWithSelectedValues` - Introduced a validation delay to account for viewport filtering to improve UX and avoid flicker of validation message resolves #1747 Note that there's not any place in DHC that uses the `usePickerWithSelectedValues` hook yet. I've been testing locally as part of DH-16336. BREAKING CHANGE: `usePickerWithSelectedValues` now takes an object as an argument instead of positional args
1 parent b14b714 commit 228f34d

8 files changed

Lines changed: 289 additions & 165 deletions

packages/components/src/modal/DebouncedModal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ function DebouncedModal({
2828
debounceMs,
2929
isOpen = false,
3030
}: DebouncedModalProps): JSX.Element {
31-
const debouncedIsOpen = useDebouncedValue(isOpen, debounceMs);
31+
const { value: debouncedIsOpen } = useDebouncedValue(isOpen, debounceMs);
3232

3333
return (
3434
<>

packages/jsapi-components/src/useCheckIfExistsValue.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,10 @@ export function useCheckIfExistsValue(
3636
const tableUtils = useTableUtils();
3737

3838
const [valueTrimmed, setValueTrimmed] = useState('');
39-
const valueTrimmedDebounced = useDebouncedValue(valueTrimmed, debounceMs);
39+
const { value: valueTrimmedDebounced } = useDebouncedValue(
40+
valueTrimmed,
41+
debounceMs
42+
);
4043

4144
const trimAndUpdateValue = useCallback((text: string) => {
4245
setValueTrimmed(text.trim());

packages/jsapi-components/src/useDebouncedViewportSelectionFilter.test.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ const mockViewportData =
3232
createMockProxy<WindowedListData<KeyedItem<unknown>>>();
3333

3434
const mockSelection = {
35-
useDebounceValueResult: { selection: new Set('a'), isInverted: true },
35+
useDebounceValueResult: {
36+
isDebouncing: false,
37+
value: { selection: new Set('a'), isInverted: true },
38+
},
3639
useIsEqualMemoResult: { selection: new Set('b'), isInverted: true },
3740
useMappedSelectionResult: { selection: new Set('c'), isInverted: true },
3841
} as const;
@@ -96,7 +99,7 @@ it('should memoize debounced selection based on value equality', () => {
9699
renderHook(() => useDebouncedViewportSelectionFilter(options));
97100

98101
expect(useIsEqualMemo).toHaveBeenCalledWith(
99-
mockSelection.useDebounceValueResult,
102+
mockSelection.useDebounceValueResult.value,
100103
isSelectionMaybeInvertedEqual
101104
);
102105
});

packages/jsapi-components/src/useDebouncedViewportSelectionFilter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export function useDebouncedViewportSelectionFilter<TItem, TValue>({
4444

4545
// Debounce so user can rapidly select multiple items in a row without the
4646
// cost of updating the table on each change
47-
const debouncedValuesSelection = useDebouncedValue(
47+
const { value: debouncedValuesSelection } = useDebouncedValue(
4848
valuesSelection,
4949
DEBOUNCE_MS
5050
);

0 commit comments

Comments
 (0)