@tanstack/react-table 0.0.1-alpha.9 → 8.0.0-alpha.1

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 (96) hide show
  1. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +112 -0
  2. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  3. package/build/cjs/aggregationTypes.js +130 -0
  4. package/build/cjs/aggregationTypes.js.map +1 -0
  5. package/build/cjs/core.js +493 -0
  6. package/build/cjs/core.js.map +1 -0
  7. package/build/cjs/createTable.js +103 -0
  8. package/build/cjs/createTable.js.map +1 -0
  9. package/build/cjs/features/Expanding.js +234 -0
  10. package/build/cjs/features/Expanding.js.map +1 -0
  11. package/build/cjs/features/Filters.js +396 -0
  12. package/build/cjs/features/Filters.js.map +1 -0
  13. package/build/cjs/features/Grouping.js +228 -0
  14. package/build/cjs/features/Grouping.js.map +1 -0
  15. package/build/cjs/features/Headers.js +483 -0
  16. package/build/cjs/features/Headers.js.map +1 -0
  17. package/build/cjs/features/Ordering.js +83 -0
  18. package/build/cjs/features/Ordering.js.map +1 -0
  19. package/build/cjs/features/Pinning.js +163 -0
  20. package/build/cjs/features/Pinning.js.map +1 -0
  21. package/build/cjs/features/Sorting.js +269 -0
  22. package/build/cjs/features/Sorting.js.map +1 -0
  23. package/build/cjs/features/Visibility.js +160 -0
  24. package/build/cjs/features/Visibility.js.map +1 -0
  25. package/build/cjs/filterTypes.js +172 -0
  26. package/build/cjs/filterTypes.js.map +1 -0
  27. package/build/cjs/index.js +30 -0
  28. package/build/cjs/index.js.map +1 -0
  29. package/build/cjs/sortTypes.js +121 -0
  30. package/build/cjs/sortTypes.js.map +1 -0
  31. package/build/cjs/utils/columnFilterRowsFn.js +130 -0
  32. package/build/cjs/utils/columnFilterRowsFn.js.map +1 -0
  33. package/build/cjs/utils/expandRowsFn.js +38 -0
  34. package/build/cjs/utils/expandRowsFn.js.map +1 -0
  35. package/build/cjs/utils/globalFilterRowsFn.js +100 -0
  36. package/build/cjs/utils/globalFilterRowsFn.js.map +1 -0
  37. package/build/cjs/utils/groupRowsFn.js +154 -0
  38. package/build/cjs/utils/groupRowsFn.js.map +1 -0
  39. package/build/cjs/utils/sortRowsFn.js +93 -0
  40. package/build/cjs/utils/sortRowsFn.js.map +1 -0
  41. package/build/cjs/utils.js +143 -0
  42. package/build/cjs/utils.js.map +1 -0
  43. package/build/esm/index.js +3389 -0
  44. package/build/esm/index.js.map +1 -0
  45. package/build/stats-html.html +2689 -0
  46. package/build/stats-react.json +703 -0
  47. package/build/types/aggregationTypes.d.ts +22 -0
  48. package/build/types/core.d.ts +122 -0
  49. package/build/types/createTable.d.ts +35 -0
  50. package/build/types/features/Expanding.d.ts +52 -0
  51. package/build/types/features/Filters.d.ts +93 -0
  52. package/build/types/features/Grouping.d.ts +82 -0
  53. package/build/types/features/Headers.d.ts +41 -0
  54. package/build/types/features/Ordering.d.ts +19 -0
  55. package/build/types/features/Pinning.d.ts +39 -0
  56. package/build/types/features/Sorting.d.ts +75 -0
  57. package/build/types/features/Visibility.d.ts +47 -0
  58. package/build/types/filterTypes.d.ts +50 -0
  59. package/build/types/index.d.ts +7 -0
  60. package/build/types/sortTypes.d.ts +17 -0
  61. package/build/types/types.d.ts +122 -0
  62. package/build/types/utils/columnFilterRowsFn.d.ts +2 -0
  63. package/build/types/utils/expandRowsFn.d.ts +2 -0
  64. package/build/types/utils/globalFilterRowsFn.d.ts +2 -0
  65. package/build/types/utils/groupRowsFn.d.ts +2 -0
  66. package/build/types/utils/sortRowsFn.d.ts +2 -0
  67. package/build/types/utils.d.ts +24 -0
  68. package/{dist/react-table.development.js → build/umd/index.development.js} +11 -1
  69. package/build/umd/index.development.js.map +1 -0
  70. package/{dist/react-table.production.min.js → build/umd/index.production.js} +11 -1
  71. package/build/umd/index.production.js.map +1 -0
  72. package/package.json +9 -94
  73. package/src/features/{withColumnResizing.ts → withColumnResizing.oldts} +0 -0
  74. package/src/features/{withPagination.ts → withPagination.oldts} +0 -0
  75. package/src/features/{withRowSelection.ts → withRowSelection.oldts} +0 -0
  76. package/dist/react-table.development.js.map +0 -1
  77. package/dist/react-table.production.min.js.map +0 -1
  78. package/lib/index.js +0 -65
  79. package/src/features/notest/useAbsoluteLayout.test.js +0 -152
  80. package/src/features/notest/useBlockLayout.test.js +0 -158
  81. package/src/features/notest/useColumnOrder.test.js +0 -186
  82. package/src/features/notest/useExpanded.test.js +0 -125
  83. package/src/features/notest/useFilters.test.js +0 -393
  84. package/src/features/notest/useFiltersAndRowSelect.test.js +0 -256
  85. package/src/features/notest/useFlexLayout.test.js +0 -152
  86. package/src/features/notest/useGroupBy.test.js +0 -259
  87. package/src/features/notest/usePagination.test.js +0 -231
  88. package/src/features/notest/useResizeColumns.test.js +0 -229
  89. package/src/features/notest/useRowSelect.test.js +0 -250
  90. package/src/features/notest/useRowState.test.js +0 -178
  91. package/src/features/tests/Visibility.test.tsx +0 -225
  92. package/src/features/tests/__snapshots__/Visibility.test.tsx.snap +0 -390
  93. package/src/features/tests/withSorting.notest.tsx +0 -341
  94. package/src/test-utils/makeTestData.ts +0 -41
  95. package/src/tests/__snapshots__/core.test.tsx.snap +0 -148
  96. package/src/tests/core.test.tsx +0 -241
@@ -1,393 +0,0 @@
1
- import React from 'react'
2
- import { render, fireEvent } from '../../../test-utils/react-testing'
3
- import { useTable } from '../../hooks/useTable'
4
- import { useFilters } from '../useFilters'
5
- import { useGlobalFilter } from '../useGlobalFilter'
6
-
7
- const makeData = () => [
8
- {
9
- firstName: 'tanner',
10
- lastName: 'linsley',
11
- age: 29,
12
- visits: 100,
13
- status: 'In Relationship',
14
- progress: 50,
15
- },
16
- {
17
- firstName: 'derek',
18
- lastName: 'perkins',
19
- age: 40,
20
- visits: 40,
21
- status: 'Single',
22
- progress: 80,
23
- },
24
- {
25
- firstName: 'joe',
26
- lastName: 'bergevin',
27
- age: 45,
28
- visits: 20,
29
- status: 'Complicated',
30
- progress: 10,
31
- },
32
- {
33
- firstName: 'jaylen',
34
- lastName: 'linsley',
35
- age: 26,
36
- visits: 99,
37
- status: 'In Relationship',
38
- progress: 70,
39
- },
40
- ]
41
-
42
- const defaultColumn = {
43
- Cell: ({ value, column: { id } }) => `${id}: ${value}`,
44
- Filter: ({ column: { filterValue, setFilter } }) => (
45
- <input
46
- value={filterValue || ''}
47
- onChange={e => {
48
- setFilter(e.target.value || undefined) // Set undefined to remove the filter entirely
49
- }}
50
- placeholder="Search..."
51
- />
52
- ),
53
- }
54
-
55
- function App(props) {
56
- const [data, setData] = React.useState(makeData)
57
-
58
- const columns = React.useMemo(() => {
59
- if (props.columns) {
60
- return props.columns
61
- }
62
- return [
63
- {
64
- Header: 'Name',
65
- columns: [
66
- {
67
- Header: 'First Name',
68
- accessor: 'firstName',
69
- },
70
- {
71
- Header: 'Last Name',
72
- accessor: 'lastName',
73
- },
74
- ],
75
- },
76
- {
77
- Header: 'Info',
78
- columns: [
79
- {
80
- Header: 'Age',
81
- accessor: 'age',
82
- },
83
- {
84
- Header: 'Visits',
85
- accessor: 'visits',
86
- },
87
- {
88
- Header: 'Status',
89
- accessor: 'status',
90
- },
91
- {
92
- Header: 'Profile Progress',
93
- accessor: 'progress',
94
- },
95
- ],
96
- },
97
- ]
98
- }, [props.columns])
99
-
100
- const {
101
- getTableProps,
102
- getTableBodyProps,
103
- headerGroups,
104
- rows,
105
- prepareRow,
106
- leafColumns,
107
- state,
108
- setGlobalFilter,
109
- } = useTable(
110
- {
111
- columns,
112
- data,
113
- defaultColumn,
114
- },
115
- useFilters,
116
- useGlobalFilter
117
- )
118
-
119
- const reset = () => setData(makeData())
120
-
121
- return (
122
- <>
123
- <button onClick={reset}>Reset Data</button>
124
- <table {...getTableProps()}>
125
- <thead>
126
- {headerGroups.map(headerGroup => (
127
- <tr {...headerGroup.getHeaderGroupProps()}>
128
- {headerGroup.headers.map(column => (
129
- <th {...column.getHeaderProps()}>
130
- {column.render('Header')}
131
- {column.canFilter ? column.render('Filter') : null}
132
- </th>
133
- ))}
134
- </tr>
135
- ))}
136
- <tr>
137
- <th
138
- colSpan={leafColumns.length}
139
- style={{
140
- textAlign: 'left',
141
- }}
142
- >
143
- <span>
144
- <input
145
- value={state.globalFilter || ''}
146
- onChange={e => {
147
- setGlobalFilter(e.target.value || undefined) // Set undefined to remove the filter entirely
148
- }}
149
- placeholder={`Global search...`}
150
- style={{
151
- fontSize: '1.1rem',
152
- border: '0',
153
- }}
154
- />
155
- </span>
156
- </th>
157
- </tr>
158
- </thead>
159
- <tbody {...getTableBodyProps()}>
160
- {rows.map(
161
- (row, i) =>
162
- prepareRow(row) || (
163
- <tr {...row.getRowProps()}>
164
- {row.cells.map(cell => (
165
- <td {...cell.getCellProps()}>{cell.render('Cell')}</td>
166
- ))}
167
- </tr>
168
- )
169
- )}
170
- </tbody>
171
- </table>
172
- </>
173
- )
174
- }
175
-
176
- test('renders a filterable table', async () => {
177
- const rendered = render(<App />)
178
-
179
- const resetButton = rendered.getByText('Reset Data')
180
- const globalFilterInput = rendered.getByPlaceholderText('Global search...')
181
- const filterInputs = rendered.getAllByPlaceholderText('Search...')
182
-
183
- expect(filterInputs).toHaveLength(6)
184
-
185
- fireEvent.change(filterInputs[1], { target: { value: 'l' } })
186
- expect(
187
- rendered
188
- .queryAllByRole('row')
189
- .slice(3)
190
- .map(row => Array.from(row.children)[0].textContent)
191
- ).toEqual(['firstName: tanner', 'firstName: jaylen'])
192
-
193
- fireEvent.change(filterInputs[1], { target: { value: 'er' } })
194
- expect(
195
- rendered
196
- .queryAllByRole('row')
197
- .slice(3)
198
- .map(row => Array.from(row.children)[0].textContent)
199
- ).toEqual(['firstName: derek', 'firstName: joe'])
200
-
201
- fireEvent.change(filterInputs[2], { target: { value: 'nothing' } })
202
- expect(
203
- rendered
204
- .queryAllByRole('row')
205
- .slice(3)
206
- .map(row => Array.from(row.children)[0].textContent)
207
- ).toEqual([])
208
-
209
- fireEvent.change(filterInputs[1], { target: { value: '' } })
210
- expect(
211
- rendered
212
- .queryAllByRole('row')
213
- .slice(3)
214
- .map(row => Array.from(row.children)[0].textContent)
215
- ).toEqual([])
216
-
217
- fireEvent.change(filterInputs[2], { target: { value: '' } })
218
- expect(
219
- rendered
220
- .queryAllByRole('row')
221
- .slice(3)
222
- .map(row => Array.from(row.children)[0].textContent)
223
- ).toEqual([
224
- 'firstName: tanner',
225
- 'firstName: derek',
226
- 'firstName: joe',
227
- 'firstName: jaylen',
228
- ])
229
-
230
- fireEvent.change(globalFilterInput, { target: { value: 'li' } })
231
- expect(
232
- rendered
233
- .queryAllByRole('row')
234
- .slice(3)
235
- .map(row => Array.from(row.children)[0].textContent)
236
- ).toEqual(['firstName: tanner', 'firstName: joe', 'firstName: jaylen'])
237
-
238
- fireEvent.click(resetButton)
239
- expect(
240
- rendered
241
- .queryAllByRole('row')
242
- .slice(3)
243
- .map(row => Array.from(row.children)[0].textContent)
244
- ).toEqual([
245
- 'firstName: tanner',
246
- 'firstName: derek',
247
- 'firstName: joe',
248
- 'firstName: jaylen',
249
- ])
250
- })
251
-
252
- test('does not filter columns marked as disableFilters', () => {
253
- const columns = [
254
- {
255
- Header: 'Name',
256
- columns: [
257
- {
258
- Header: 'First Name',
259
- accessor: 'firstName',
260
- disableFilters: true,
261
- },
262
- {
263
- Header: 'Last Name',
264
- accessor: 'lastName',
265
- disableFilters: true,
266
- },
267
- ],
268
- },
269
- {
270
- Header: 'Info',
271
- columns: [
272
- {
273
- Header: 'Age',
274
- accessor: 'age',
275
- },
276
- {
277
- Header: 'Visits',
278
- accessor: 'visits',
279
- },
280
- {
281
- Header: 'Status',
282
- accessor: 'status',
283
- },
284
- {
285
- Header: 'Profile Progress',
286
- accessor: 'progress',
287
- },
288
- ],
289
- },
290
- ]
291
- const rendered = render(<App columns={columns} />)
292
-
293
- const filterInputs = rendered.getAllByPlaceholderText('Search...')
294
-
295
- expect(filterInputs).toHaveLength(4)
296
-
297
- // should be Age column
298
- fireEvent.change(filterInputs[0], { target: { value: '45' } })
299
- expect(
300
- rendered
301
- .queryAllByRole('row')
302
- .slice(3)
303
- .map(row => Array.from(row.children)[0].textContent)
304
- ).toEqual(['firstName: joe'])
305
-
306
- fireEvent.change(filterInputs[0], { target: { value: '' } })
307
- expect(
308
- rendered
309
- .queryAllByRole('row')
310
- .slice(3)
311
- .map(row => Array.from(row.children)[0].textContent)
312
- ).toEqual([
313
- 'firstName: tanner',
314
- 'firstName: derek',
315
- 'firstName: joe',
316
- 'firstName: jaylen',
317
- ])
318
- })
319
-
320
- test('does not filter columns with GlobalFilter if marked disableGlobalFilter', () => {
321
- const columns = [
322
- {
323
- Header: 'Name',
324
- columns: [
325
- {
326
- Header: 'First Name',
327
- accessor: 'firstName',
328
- disableGlobalFilter: true,
329
- },
330
- {
331
- Header: 'Last Name',
332
- accessor: 'lastName',
333
- disableGlobalFilter: true,
334
- },
335
- ],
336
- },
337
- {
338
- Header: 'Info',
339
- columns: [
340
- {
341
- Header: 'Age',
342
- accessor: 'age',
343
- },
344
- {
345
- Header: 'Visits',
346
- accessor: 'visits',
347
- },
348
- {
349
- Header: 'Status',
350
- accessor: 'status',
351
- },
352
- {
353
- Header: 'Profile Progress',
354
- accessor: 'progress',
355
- },
356
- ],
357
- },
358
- ]
359
- const rendered = render(<App columns={columns} />)
360
-
361
- const globalFilterInput = rendered.getByPlaceholderText('Global search...')
362
-
363
- fireEvent.change(globalFilterInput, { target: { value: '' } })
364
- expect(
365
- rendered
366
- .queryAllByRole('row')
367
- .slice(3)
368
- .map(row => Array.from(row.children)[0].textContent)
369
- ).toEqual([
370
- 'firstName: tanner',
371
- 'firstName: derek',
372
- 'firstName: joe',
373
- 'firstName: jaylen',
374
- ])
375
-
376
- // global filter shouldn't apply to firstName or lastName
377
- fireEvent.change(globalFilterInput, { target: { value: 'li' } })
378
- expect(
379
- rendered
380
- .queryAllByRole('row')
381
- .slice(3)
382
- .map(row => Array.from(row.children)[0].textContent)
383
- ).toEqual(['firstName: joe'])
384
-
385
- // double check global filter ignore (should ignore joe bergevin)
386
- fireEvent.change(globalFilterInput, { target: { value: 'in' } })
387
- expect(
388
- rendered
389
- .queryAllByRole('row')
390
- .slice(3)
391
- .map(row => Array.from(row.children)[0].textContent)
392
- ).toEqual(['firstName: tanner', 'firstName: derek', 'firstName: jaylen'])
393
- })
@@ -1,256 +0,0 @@
1
- import React from 'react'
2
- import { render, fireEvent } from '@testing-library/react'
3
- import { useTable } from '../../hooks/useTable'
4
- import { useRowSelect } from '../useRowSelect'
5
- import { useFilters } from '../useFilters'
6
-
7
- const dataPiece = [
8
- {
9
- firstName: 'tanner',
10
- lastName: 'linsley',
11
- age: 29,
12
- visits: 100,
13
- status: 'In Relationship',
14
- progress: 50,
15
- },
16
- {
17
- firstName: 'derek',
18
- lastName: 'perkins',
19
- age: 40,
20
- visits: 40,
21
- status: 'Single',
22
- progress: 80,
23
- },
24
- {
25
- firstName: 'jaylen',
26
- lastName: 'linsley',
27
- age: 26,
28
- visits: 99,
29
- status: 'In Relationship',
30
- progress: 70,
31
- },
32
- ]
33
-
34
- const data = [
35
- ...dataPiece,
36
- ...dataPiece,
37
- ...dataPiece,
38
- ...dataPiece,
39
- ...dataPiece,
40
- ...dataPiece,
41
- ]
42
-
43
- function Table({ columns, data }) {
44
- // Use the state and functions returned from useTable to build your UI
45
- const {
46
- getTableProps,
47
- getTableBodyProps,
48
- headerGroups,
49
- rows,
50
- prepareRow,
51
- state,
52
- } = useTable(
53
- {
54
- columns,
55
- data,
56
- defaultColumn,
57
- },
58
- useFilters,
59
- useRowSelect
60
- )
61
-
62
- // Render the UI for your table
63
- return (
64
- <>
65
- <table {...getTableProps()}>
66
- <thead>
67
- {headerGroups.map(headerGroup => (
68
- <tr {...headerGroup.getHeaderGroupProps()}>
69
- {headerGroup.headers.map(column => (
70
- <th {...column.getHeaderProps()}>
71
- {column.render('Header')}
72
- {column.canFilter ? column.render('Filter') : null}
73
- </th>
74
- ))}
75
- </tr>
76
- ))}
77
- </thead>
78
- <tbody {...getTableBodyProps()}>
79
- {rows.map(
80
- (row, i) =>
81
- prepareRow(row) || (
82
- <tr {...row.getRowProps()}>
83
- {row.cells.map(cell => {
84
- return (
85
- <td {...cell.getCellProps()}>{cell.render('Cell')}</td>
86
- )
87
- })}
88
- </tr>
89
- )
90
- )}
91
- </tbody>
92
- </table>
93
- <p>
94
- Selected Rows:{' '}
95
- <span data-testid="selected-count">
96
- {Object.keys(state.selection).length}
97
- </span>
98
- </p>
99
- <pre>
100
- <code>{JSON.stringify({ selection: state.selection }, null, 2)}</code>
101
- </pre>
102
- </>
103
- )
104
- }
105
-
106
- const defaultColumn = {
107
- Cell: ({ value, column: { id } }) => `${id}: ${value}`,
108
- Filter: ({ column: { filterValue, setFilter } }) => (
109
- <input
110
- value={filterValue || ''}
111
- onChange={e => {
112
- setFilter(e.target.value || undefined) // Set undefined to remove the filter entirely
113
- }}
114
- placeholder="Search..."
115
- />
116
- ),
117
- }
118
-
119
- const IndeterminateCheckbox = React.forwardRef(
120
- ({ indeterminate, ...rest }, ref) => {
121
- const defaultRef = React.useRef()
122
- const resolvedRef = ref || defaultRef
123
-
124
- React.useEffect(() => {
125
- resolvedRef.current.indeterminate = indeterminate
126
- }, [resolvedRef, indeterminate])
127
-
128
- return <input type="checkbox" ref={resolvedRef} {...rest} />
129
- }
130
- )
131
-
132
- function App() {
133
- const columns = React.useMemo(
134
- () => [
135
- {
136
- id: 'selection',
137
- // The header can use the table's getToggleAllRowsSelectedProps method
138
- // to render a checkbox
139
- Header: ({ getToggleAllRowsSelectedProps }) => (
140
- <div>
141
- <label>
142
- <IndeterminateCheckbox {...getToggleAllRowsSelectedProps()} />{' '}
143
- Select All
144
- </label>
145
- </div>
146
- ),
147
- // The cell can use the individual row's getToggleRowSelectedProps method
148
- // to the render a checkbox
149
- Cell: ({ row }) => (
150
- <div>
151
- <label>
152
- <IndeterminateCheckbox {...row.getToggleRowSelectedProps()} />{' '}
153
- Select Row
154
- </label>
155
- </div>
156
- ),
157
- },
158
- {
159
- id: 'selectedStatus',
160
- Cell: ({ row }) => (
161
- <div>
162
- Row {row.id} {row.isSelected ? 'Selected' : 'Not Selected'}
163
- </div>
164
- ),
165
- },
166
- {
167
- Header: 'Name',
168
- columns: [
169
- {
170
- Header: 'First Name',
171
- accessor: 'firstName',
172
- },
173
- {
174
- Header: 'Last Name',
175
- accessor: 'lastName',
176
- },
177
- ],
178
- },
179
- {
180
- Header: 'Info',
181
- columns: [
182
- {
183
- Header: 'Age',
184
- accessor: 'age',
185
- },
186
- {
187
- id: 'visits',
188
- Header: 'Visits',
189
- accessor: 'visits',
190
- filter: 'equals',
191
- },
192
- {
193
- Header: 'Status',
194
- accessor: 'status',
195
- },
196
- {
197
- Header: 'Profile Progress',
198
- accessor: 'progress',
199
- },
200
- ],
201
- },
202
- ],
203
- []
204
- )
205
-
206
- return <Table columns={columns} data={data} />
207
- }
208
-
209
- test('Select/Clear All while filtered only affects visible rows', () => {
210
- const { getAllByPlaceholderText, getByLabelText, getByTestId } = render(
211
- <App />
212
- )
213
- const selectedCount = getByTestId('selected-count')
214
- const selectAllCheckbox = getByLabelText('Select All')
215
- const fe = fireEvent
216
- const filterInputs = getAllByPlaceholderText('Search...')
217
-
218
- fireEvent.change(filterInputs[3], { target: { value: '40' } })
219
- expect(selectedCount.textContent).toBe('0') // No selection has been made
220
-
221
- expect(selectAllCheckbox.checked).toBe(false)
222
- fireEvent.click(selectAllCheckbox)
223
- expect(selectAllCheckbox.checked).toBe(true)
224
- expect(selectedCount.textContent).toBe('6') // "Select All" has happened
225
-
226
- // This filter hides all the rows (nothing matches it)
227
- fireEvent.change(filterInputs[3], { target: { value: '10' } })
228
- expect(selectedCount.textContent).toBe('6') // Filtering does not alter the selection
229
-
230
- expect(selectAllCheckbox.checked).toBe(false) // None of the selected items are visible, this should be false
231
- fireEvent.click(selectAllCheckbox) // The selection is is for no rows
232
- expect(selectAllCheckbox.checked).toBe(false) // So clicking this checkbox does nothing
233
- expect(selectedCount.textContent).toBe('6') // And does not affect the existing selection
234
-
235
- fireEvent.change(filterInputs[3], { target: { value: '100' } })
236
- expect(selectAllCheckbox.checked).toBe(false) // None of the selected items are visible, this should be false
237
- fireEvent.click(selectAllCheckbox)
238
- expect(selectAllCheckbox.checked).toBe(true) // Now all of the visible rows are ALSO selected
239
- expect(selectedCount.textContent).toBe('12') // Clearing all should leave the original 6 selected
240
-
241
- // Now deselect all the rows that match the filter
242
- fireEvent.click(selectAllCheckbox)
243
- expect(selectAllCheckbox.checked).toBe(false) // Now all of the visible rows are ALSO selected
244
- expect(selectedCount.textContent).toBe('6') // Clearing all should leave the original 6 selected
245
-
246
- fireEvent.change(filterInputs[3], { target: { value: '' } })
247
- expect(selectedCount.textContent).toBe('6') // Clearing the Filter does not alter the selection
248
-
249
- expect(selectAllCheckbox.checked).toBe(false) // Only a subset are selected so this button should show indeterminant
250
- fireEvent.click(selectAllCheckbox)
251
- expect(selectAllCheckbox.checked).toBe(true) // Now all of the visible rows are ALSO selected
252
- expect(selectedCount.textContent).toBe(data.length.toString()) // Select All should select ALL of the rows
253
-
254
- fireEvent.click(selectAllCheckbox)
255
- expect(selectedCount.textContent).toBe('0') // Select All should now clear ALL of the rows
256
- })