Skip to content

Commit e99205c

Browse files
committed
Enhance isSomeSelected logic and add related test cases
- Updated `isSomeSelected` to check if selected items exist in the current data. - Added tests to verify `isSomeSelected` returns correct values for various selection states.
1 parent e529129 commit e99205c

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

packages/@mantine/hooks/src/use-selection/use-selection.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,27 @@ describe('@mantine/hooks/use-selection', () => {
105105
expect(result2.current[1].isSomeSelected()).toBe(false);
106106
});
107107

108+
it('isSomeSelected returns false when selected items are not in current data', () => {
109+
const { result } = renderHook(() => useSelection([1, 2, 3]));
110+
111+
act(() => {
112+
result.current[1].setSelection([4, 5]);
113+
});
114+
115+
expect(result.current[1].isSomeSelected()).toBe(false);
116+
});
117+
118+
it('isSomeSelected returns true when some selected items exist in data', () => {
119+
const { result } = renderHook(() => useSelection([1, 2, 3]));
120+
121+
// Set selection with mix of existing and non-existing items
122+
act(() => {
123+
result.current[1].setSelection([1, 4, 5]);
124+
});
125+
126+
expect(result.current[1].isSomeSelected()).toBe(true);
127+
});
128+
108129
it('checks if some items are selected', () => {
109130
const { result } = renderHook(() => useSelection(initialData));
110131
// Initially, no items are selected

packages/@mantine/hooks/src/use-selection/use-selection.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,13 @@ export function useSelection<T>(data: T[], initialSelection?: T[]): [T[], Select
4848
}, []);
4949

5050
const isAllSelected = useCallback(
51-
() => data.length > 0 && data.every((item) => selected.has(item)),
51+
() => data.length > 0 && data.every(item => selected.has(item)),
5252
[data, selected]
5353
);
5454

5555
const isSomeSelected = useCallback(
56-
() => data.length > 0 && selected.size > 0 && !isAllSelected(),
56+
() => data.length > 0 && selected.size > 0 &&
57+
data.some(item => selected.has(item)) && !isAllSelected(),
5758
[data, selected, isAllSelected]
5859
);
5960

0 commit comments

Comments
 (0)