@patternfly/react-data-view 6.3.0-prerelease.3 → 6.4.0-prerelease.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/cjs/DataViewTableTree/DataViewTableTree.d.ts +2 -0
  2. package/dist/cjs/DataViewTableTree/DataViewTableTree.js +28 -1
  3. package/dist/cjs/DataViewTableTree/DataViewTableTree.test.js +4 -0
  4. package/dist/cjs/Hooks/selection.d.ts +1 -0
  5. package/dist/cjs/Hooks/selection.js +5 -1
  6. package/dist/cjs/Hooks/selection.test.js +48 -0
  7. package/dist/cjs/InternalContext/InternalContext.d.ts +2 -0
  8. package/dist/esm/DataViewTableTree/DataViewTableTree.d.ts +2 -0
  9. package/dist/esm/DataViewTableTree/DataViewTableTree.js +29 -2
  10. package/dist/esm/DataViewTableTree/DataViewTableTree.test.js +4 -0
  11. package/dist/esm/Hooks/selection.d.ts +1 -0
  12. package/dist/esm/Hooks/selection.js +5 -1
  13. package/dist/esm/Hooks/selection.test.js +48 -0
  14. package/dist/esm/InternalContext/InternalContext.d.ts +2 -0
  15. package/dist/tsconfig.tsbuildinfo +1 -1
  16. package/package.json +2 -2
  17. package/patternfly-docs/content/extensions/data-view/examples/Table/DataViewTableTreeExample.tsx +1 -0
  18. package/patternfly-docs/content/extensions/data-view/examples/Table/Table.md +2 -0
  19. package/patternfly-docs/content/extensions/data-view/examples/Toolbar/SelectionExample.tsx +14 -3
  20. package/patternfly-docs/content/extensions/data-view/examples/Toolbar/Toolbar.md +1 -0
  21. package/release.config.js +1 -1
  22. package/src/DataViewTableTree/DataViewTableTree.test.tsx +9 -0
  23. package/src/DataViewTableTree/DataViewTableTree.tsx +35 -1
  24. package/src/DataViewTableTree/__snapshots__/DataViewTableTree.test.tsx.snap +965 -0
  25. package/src/Hooks/selection.test.tsx +65 -1
  26. package/src/Hooks/selection.ts +6 -1
  27. package/src/InternalContext/InternalContext.tsx +2 -0
@@ -9,6 +9,7 @@ describe('useDataViewSelection', () => {
9
9
  selected: [],
10
10
  onSelect: expect.any(Function),
11
11
  isSelected: expect.any(Function),
12
+ setSelected: expect.any(Function),
12
13
  })
13
14
  });
14
15
 
@@ -19,6 +20,7 @@ describe('useDataViewSelection', () => {
19
20
  selected: initialSelected,
20
21
  onSelect: expect.any(Function),
21
22
  isSelected: expect.any(Function),
23
+ setSelected: expect.any(Function),
22
24
  })
23
25
  });
24
26
 
@@ -49,4 +51,66 @@ describe('useDataViewSelection', () => {
49
51
  expect(result.current.isSelected({ id: 1, name: 'test1' })).toBe(true);
50
52
  expect(result.current.isSelected({ id: 3, name: 'test2' })).toBe(false);
51
53
  });
52
- });
54
+
55
+ it('should have setSelected function in return object', () => {
56
+ const { result } = renderHook(() => useDataViewSelection({ matchOption: (a, b) => a.id === b.id }))
57
+ expect(result.current).toEqual({
58
+ selected: [],
59
+ onSelect: expect.any(Function),
60
+ isSelected: expect.any(Function),
61
+ setSelected: expect.any(Function),
62
+ })
63
+ });
64
+
65
+ it('should set selected items directly using setSelected - objects', async () => {
66
+ const initialSelected = [ { id: 1, name: 'test1' } ];
67
+ const { result } = renderHook(() => useDataViewSelection({ initialSelected, matchOption: (a, b) => a.id === b.id }))
68
+
69
+ const newSelected = [ { id: 2, name: 'test2' }, { id: 3, name: 'test3' } ];
70
+
71
+ await act(async () => {
72
+ result.current.setSelected(newSelected);
73
+ });
74
+
75
+ expect(result.current.selected).toEqual(newSelected);
76
+ });
77
+
78
+ it('should set selected items directly using setSelected - strings', async () => {
79
+ const initialSelected = [ 'test1', 'test2' ];
80
+ const { result } = renderHook(() => useDataViewSelection({ initialSelected, matchOption: (a, b) => a === b }))
81
+
82
+ const newSelected = [ 'test3', 'test4', 'test5' ];
83
+
84
+ await act(async () => {
85
+ result.current.setSelected(newSelected);
86
+ });
87
+
88
+ expect(result.current.selected).toEqual(newSelected);
89
+ });
90
+
91
+ it('should clear all selections using setSelected with empty array', async () => {
92
+ const initialSelected = [ { id: 1, name: 'test1' }, { id: 2, name: 'test2' } ];
93
+ const { result } = renderHook(() => useDataViewSelection({ initialSelected, matchOption: (a, b) => a.id === b.id }))
94
+
95
+ await act(async () => {
96
+ result.current.setSelected([]);
97
+ });
98
+
99
+ expect(result.current.selected).toEqual([]);
100
+ });
101
+
102
+ it('should update isSelected correctly after using setSelected', async () => {
103
+ const initialSelected = [ { id: 1, name: 'test1' } ];
104
+ const { result } = renderHook(() => useDataViewSelection({ initialSelected, matchOption: (a, b) => a.id === b.id }))
105
+
106
+ const newSelected = [ { id: 2, name: 'test2' }, { id: 3, name: 'test3' } ];
107
+
108
+ await act(async () => {
109
+ result.current.setSelected(newSelected);
110
+ });
111
+
112
+ expect(result.current.isSelected({ id: 1, name: 'test1' })).toBe(false);
113
+ expect(result.current.isSelected({ id: 2, name: 'test2' })).toBe(true);
114
+ expect(result.current.isSelected({ id: 3, name: 'test3' })).toBe(true);
115
+ });
116
+ });
@@ -24,9 +24,14 @@ export const useDataViewSelection = (props?: UseDataViewSelectionProps) => {
24
24
 
25
25
  const isSelected = (item: any): boolean => Boolean(selected.find(selected => matchOption(selected, item)));
26
26
 
27
+ const setSelectedItems = (items: any[]) => {
28
+ setSelected(items);
29
+ };
30
+
27
31
  return {
28
32
  selected,
29
33
  onSelect,
30
- isSelected
34
+ isSelected,
35
+ setSelected: setSelectedItems
31
36
  };
32
37
  };
@@ -6,6 +6,8 @@ export interface DataViewSelection {
6
6
  onSelect: (isSelecting: boolean, items?: any[] | any) => void; // eslint-disable-line @typescript-eslint/no-explicit-any
7
7
  /** Checks if a specific item is currently selected */
8
8
  isSelected: (item: any) => boolean; // eslint-disable-line @typescript-eslint/no-explicit-any
9
+ /** Directly sets the selected items */
10
+ setSelected?: (items: any[]) => void; // eslint-disable-line @typescript-eslint/no-explicit-any
9
11
  /** Determines if selection is disabled for a given item */
10
12
  isSelectDisabled?: (item: any) => boolean; // eslint-disable-line @typescript-eslint/no-explicit-any
11
13
  }