Skip to content

Commit 1c4dd25

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 1c4dd25

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
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: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ export function useSelection<T>(data: T[], initialSelection?: T[]): [T[], Select
5353
);
5454

5555
const isSomeSelected = useCallback(
56-
() => data.length > 0 && selected.size > 0 && !isAllSelected(),
56+
() =>
57+
data.length > 0 &&
58+
selected.size > 0 &&
59+
data.some((item) => selected.has(item)) &&
60+
!isAllSelected(),
5761
[data, selected, isAllSelected]
5862
);
5963

0 commit comments

Comments
 (0)