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

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 (129) 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 +552 -0
  6. package/build/cjs/core.js.map +1 -0
  7. package/build/cjs/createTable.js +108 -0
  8. package/build/cjs/createTable.js.map +1 -0
  9. package/build/cjs/features/ColumnSizing.js +317 -0
  10. package/build/cjs/features/ColumnSizing.js.map +1 -0
  11. package/build/cjs/features/Expanding.js +255 -0
  12. package/build/cjs/features/Expanding.js.map +1 -0
  13. package/build/cjs/features/Filters.js +445 -0
  14. package/build/cjs/features/Filters.js.map +1 -0
  15. package/build/cjs/features/Grouping.js +249 -0
  16. package/build/cjs/features/Grouping.js.map +1 -0
  17. package/build/cjs/features/Headers.js +549 -0
  18. package/build/cjs/features/Headers.js.map +1 -0
  19. package/build/cjs/features/Ordering.js +86 -0
  20. package/build/cjs/features/Ordering.js.map +1 -0
  21. package/build/cjs/features/Pagination.js +194 -0
  22. package/build/cjs/features/Pagination.js.map +1 -0
  23. package/build/cjs/features/Pinning.js +149 -0
  24. package/build/cjs/features/Pinning.js.map +1 -0
  25. package/build/cjs/features/RowSelection.js +541 -0
  26. package/build/cjs/features/RowSelection.js.map +1 -0
  27. package/build/cjs/features/Sorting.js +327 -0
  28. package/build/cjs/features/Sorting.js.map +1 -0
  29. package/build/cjs/features/Visibility.js +166 -0
  30. package/build/cjs/features/Visibility.js.map +1 -0
  31. package/build/cjs/filterTypes.js +172 -0
  32. package/build/cjs/filterTypes.js.map +1 -0
  33. package/build/cjs/index.js +30 -0
  34. package/build/cjs/index.js.map +1 -0
  35. package/build/cjs/sortTypes.js +122 -0
  36. package/build/cjs/sortTypes.js.map +1 -0
  37. package/build/cjs/utils/columnFilterRowsFn.js +131 -0
  38. package/build/cjs/utils/columnFilterRowsFn.js.map +1 -0
  39. package/build/cjs/utils/expandRowsFn.js +38 -0
  40. package/build/cjs/utils/expandRowsFn.js.map +1 -0
  41. package/build/cjs/utils/globalFilterRowsFn.js +101 -0
  42. package/build/cjs/utils/globalFilterRowsFn.js.map +1 -0
  43. package/build/cjs/utils/groupRowsFn.js +155 -0
  44. package/build/cjs/utils/groupRowsFn.js.map +1 -0
  45. package/build/cjs/utils/sortRowsFn.js +94 -0
  46. package/build/cjs/utils/sortRowsFn.js.map +1 -0
  47. package/build/cjs/utils.js +146 -0
  48. package/build/cjs/utils.js.map +1 -0
  49. package/build/esm/index.js +4747 -0
  50. package/build/esm/index.js.map +1 -0
  51. package/build/stats-html.html +2689 -0
  52. package/build/stats-react.json +817 -0
  53. package/build/types/aggregationTypes.d.ts +22 -0
  54. package/build/types/core.d.ts +111 -0
  55. package/build/types/createTable.d.ts +53 -0
  56. package/build/types/features/ColumnSizing.d.ts +67 -0
  57. package/build/types/features/Expanding.d.ts +53 -0
  58. package/build/types/features/Filters.d.ts +98 -0
  59. package/build/types/features/Grouping.d.ts +82 -0
  60. package/build/types/features/Headers.d.ts +41 -0
  61. package/build/types/features/Ordering.d.ts +19 -0
  62. package/build/types/features/Pagination.d.ts +43 -0
  63. package/build/types/features/Pinning.d.ts +39 -0
  64. package/build/types/features/RowSelection.d.ts +66 -0
  65. package/build/types/features/Sorting.d.ts +78 -0
  66. package/build/types/features/Visibility.d.ts +47 -0
  67. package/build/types/filterTypes.d.ts +50 -0
  68. package/build/types/index.d.ts +7 -0
  69. package/build/types/sortTypes.d.ts +18 -0
  70. package/build/types/types.d.ts +127 -0
  71. package/build/types/utils/columnFilterRowsFn.d.ts +2 -0
  72. package/build/types/utils/expandRowsFn.d.ts +2 -0
  73. package/build/types/utils/globalFilterRowsFn.d.ts +2 -0
  74. package/build/types/utils/groupRowsFn.d.ts +2 -0
  75. package/build/types/utils/paginateRowsFn.d.ts +2 -0
  76. package/build/types/utils/sortRowsFn.d.ts +2 -0
  77. package/build/types/utils.d.ts +28 -0
  78. package/{dist/react-table.development.js → build/umd/index.development.js} +1617 -249
  79. package/build/umd/index.development.js.map +1 -0
  80. package/build/umd/index.production.js +12 -0
  81. package/build/umd/index.production.js.map +1 -0
  82. package/package.json +9 -94
  83. package/src/core.tsx +252 -264
  84. package/src/createTable.tsx +69 -9
  85. package/src/features/ColumnSizing.ts +453 -0
  86. package/src/features/Expanding.ts +27 -11
  87. package/src/features/Filters.ts +75 -20
  88. package/src/features/Grouping.ts +27 -12
  89. package/src/features/Headers.ts +55 -50
  90. package/src/features/Ordering.ts +2 -3
  91. package/src/features/Pagination.ts +314 -0
  92. package/src/features/Pinning.ts +3 -16
  93. package/src/features/RowSelection.ts +831 -0
  94. package/src/features/Sorting.ts +82 -22
  95. package/src/features/Visibility.ts +2 -4
  96. package/src/sortTypes.ts +1 -1
  97. package/src/types.ts +55 -9
  98. package/src/utils/columnFilterRowsFn.ts +5 -12
  99. package/src/utils/expandRowsFn.ts +2 -5
  100. package/src/utils/globalFilterRowsFn.ts +3 -10
  101. package/src/utils/groupRowsFn.ts +3 -5
  102. package/src/utils/paginateRowsFn.ts +34 -0
  103. package/src/utils/sortRowsFn.ts +5 -5
  104. package/src/utils.tsx +20 -6
  105. package/dist/react-table.development.js.map +0 -1
  106. package/dist/react-table.production.min.js +0 -2
  107. package/dist/react-table.production.min.js.map +0 -1
  108. package/lib/index.js +0 -65
  109. package/src/features/notest/useAbsoluteLayout.test.js +0 -152
  110. package/src/features/notest/useBlockLayout.test.js +0 -158
  111. package/src/features/notest/useColumnOrder.test.js +0 -186
  112. package/src/features/notest/useExpanded.test.js +0 -125
  113. package/src/features/notest/useFilters.test.js +0 -393
  114. package/src/features/notest/useFiltersAndRowSelect.test.js +0 -256
  115. package/src/features/notest/useFlexLayout.test.js +0 -152
  116. package/src/features/notest/useGroupBy.test.js +0 -259
  117. package/src/features/notest/usePagination.test.js +0 -231
  118. package/src/features/notest/useResizeColumns.test.js +0 -229
  119. package/src/features/notest/useRowSelect.test.js +0 -250
  120. package/src/features/notest/useRowState.test.js +0 -178
  121. package/src/features/tests/Visibility.test.tsx +0 -225
  122. package/src/features/tests/__snapshots__/Visibility.test.tsx.snap +0 -390
  123. package/src/features/tests/withSorting.notest.tsx +0 -341
  124. package/src/features/withColumnResizing.ts +0 -281
  125. package/src/features/withPagination.ts +0 -208
  126. package/src/features/withRowSelection.ts +0 -467
  127. package/src/test-utils/makeTestData.ts +0 -41
  128. package/src/tests/__snapshots__/core.test.tsx.snap +0 -148
  129. package/src/tests/core.test.tsx +0 -241
@@ -1,152 +0,0 @@
1
- import React from 'react'
2
- import { useTable } from '../../hooks/useTable'
3
- import { useFlexLayout } from '../useFlexLayout'
4
- import { render } from '../../../test-utils/react-testing'
5
-
6
- const data = [
7
- {
8
- firstName: 'tanner',
9
- lastName: 'linsley',
10
- age: 29,
11
- visits: 100,
12
- status: 'In Relationship',
13
- progress: 50,
14
- },
15
- {
16
- firstName: 'derek',
17
- lastName: 'perkins',
18
- age: 30,
19
- visits: 40,
20
- status: 'Single',
21
- progress: 80,
22
- },
23
- {
24
- firstName: 'joe',
25
- lastName: 'bergevin',
26
- age: 45,
27
- visits: 20,
28
- status: 'Complicated',
29
- progress: 10,
30
- },
31
- ]
32
-
33
- const defaultColumn = {
34
- Cell: ({ value, column: { id } }) => `${id}: ${value}`,
35
- width: 200,
36
- minWidth: 100,
37
- maxWidth: 300,
38
- }
39
-
40
- function Table({ columns, data }) {
41
- const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } =
42
- useTable(
43
- {
44
- columns,
45
- data,
46
- defaultColumn,
47
- },
48
- useFlexLayout
49
- )
50
-
51
- return (
52
- <div {...getTableProps()} className="table">
53
- <div>
54
- {headerGroups.map(headerGroup => (
55
- <div {...headerGroup.getHeaderGroupProps()} className="row">
56
- {headerGroup.headers.map(column => (
57
- <div {...column.getHeaderProps()} className="cell header">
58
- {column.render('Header')}
59
- </div>
60
- ))}
61
- </div>
62
- ))}
63
- </div>
64
-
65
- <div {...getTableBodyProps()}>
66
- {rows.map(
67
- (row, i) =>
68
- prepareRow(row) || (
69
- <div {...row.getRowProps()} className="row">
70
- {row.cells.map(cell => {
71
- return (
72
- <div {...cell.getCellProps()} className="cell">
73
- {cell.render('Cell')}
74
- </div>
75
- )
76
- })}
77
- </div>
78
- )
79
- )}
80
- </div>
81
- </div>
82
- )
83
- }
84
-
85
- function App() {
86
- const columns = React.useMemo(
87
- () => [
88
- {
89
- Header: 'Name',
90
- columns: [
91
- {
92
- Header: 'First Name',
93
- accessor: 'firstName',
94
- width: 250,
95
- },
96
- {
97
- Header: 'Last Name',
98
- accessor: 'lastName',
99
- width: 350,
100
- },
101
- ],
102
- },
103
- {
104
- Header: 'Info',
105
- columns: [
106
- {
107
- Header: 'Age',
108
- accessor: 'age',
109
- minWidth: 300,
110
- },
111
- {
112
- Header: 'Visits',
113
- accessor: 'visits',
114
- maxWidth: 150,
115
- },
116
- {
117
- Header: 'Status',
118
- accessor: 'status',
119
- },
120
- {
121
- Header: 'Profile Progress',
122
- accessor: 'progress',
123
- },
124
- ],
125
- },
126
- ],
127
- []
128
- )
129
-
130
- return <Table columns={columns} data={data} />
131
- }
132
-
133
- test('renders a table', () => {
134
- const rendered = render(<App />)
135
-
136
- const [headerRow, , firstRow] = rendered.queryAllByRole('row')
137
-
138
- expect(headerRow.getAttribute('style')).toEqual(
139
- 'display: flex; flex: 1 0 auto; min-width: 800px;'
140
- )
141
-
142
- expect(
143
- Array.from(firstRow.children).map(d => d.getAttribute('style'))
144
- ).toEqual([
145
- 'box-sizing: border-box; flex: 0 0 auto; min-width: 100px; width: 250px;',
146
- 'box-sizing: border-box; flex: 0 0 auto; min-width: 100px; width: 300px;',
147
- 'box-sizing: border-box; flex: 0 0 auto; min-width: 300px; width: 300px;',
148
- 'box-sizing: border-box; flex: 0 0 auto; min-width: 100px; width: 150px;',
149
- 'box-sizing: border-box; flex: 0 0 auto; min-width: 100px; width: 200px;',
150
- 'box-sizing: border-box; flex: 0 0 auto; min-width: 100px; width: 200px;',
151
- ])
152
- })
@@ -1,259 +0,0 @@
1
- import React from 'react'
2
- import { render, fireEvent } from '../../../test-utils/react-testing'
3
- import { useTable } from '../../hooks/useTable'
4
- import { useGrouping } from '../useGrouping'
5
- import { useExpanded } from '../useExpanded'
6
-
7
- const data = [
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: 'joe',
34
- lastName: 'dirt',
35
- age: 20,
36
- visits: 5,
37
- status: 'Complicated',
38
- progress: 97,
39
- },
40
- {
41
- firstName: 'jaylen',
42
- lastName: 'linsley',
43
- age: 26,
44
- visits: 99,
45
- status: 'In Relationship',
46
- progress: 70,
47
- },
48
- ]
49
-
50
- const defaultColumn = {
51
- Cell: ({ value, column: { id } }) => `${id}: ${value}`,
52
- Filter: ({ filterValue, setFilter }) => (
53
- <input
54
- value={filterValue || ''}
55
- onChange={e => {
56
- setFilter(e.target.value || undefined) // Set undefined to remove the filter entirely
57
- }}
58
- placeholder="Search..."
59
- />
60
- ),
61
- }
62
-
63
- function Table({ columns, data }) {
64
- const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } =
65
- useTable(
66
- {
67
- columns,
68
- data,
69
- defaultColumn,
70
- initialState: {
71
- grouping: ["Column Doesn't Exist"],
72
- },
73
- },
74
- useGrouping,
75
- useExpanded
76
- )
77
-
78
- return (
79
- <table {...getTableProps()}>
80
- <thead>
81
- {headerGroups.map(headerGroup => (
82
- <tr {...headerGroup.getHeaderGroupProps()}>
83
- {headerGroup.headers.map(column => (
84
- <th {...column.getHeaderProps()}>
85
- {column.canGroup ? (
86
- // If the column can be grouped, let's add a toggle
87
- <span {...column.getToggleGroupingProps()}>
88
- {column.getIsGrouped() ? 'Ungroup' : 'Group'} {column.id}
89
- </span>
90
- ) : null}
91
- {column.render('Header')}
92
- </th>
93
- ))}
94
- </tr>
95
- ))}
96
- </thead>
97
- <tbody {...getTableBodyProps()}>
98
- {rows.map(
99
- (row, i) =>
100
- prepareRow(row) || (
101
- <tr {...row.getRowProps()}>
102
- {row.cells.map(cell => {
103
- return (
104
- <td {...cell.getCellProps()}>
105
- {cell.getIsGrouped() ? (
106
- <>
107
- <span
108
- style={{
109
- cursor: 'pointer',
110
- }}
111
- onClick={() => row.toggleRowExpanded()}
112
- >
113
- {row.getIsExpanded() ? '👇' : '👉'}
114
- </span>
115
- {cell.render('Cell')} ({row.subRows.length})
116
- </>
117
- ) : cell.getIsAggregated() ? (
118
- cell.render('Aggregated')
119
- ) : cell.getIsPlaceholder() ? null : (
120
- cell.render('Cell')
121
- )}
122
- </td>
123
- )
124
- })}
125
- </tr>
126
- )
127
- )}
128
- </tbody>
129
- </table>
130
- )
131
- }
132
-
133
- // This is a custom aggregator that
134
- // takes in an array of leaf values and
135
- // returns the rounded median
136
- function roundedMedian(leafValues) {
137
- let min = leafValues[0] || 0
138
- let max = leafValues[0] || 0
139
-
140
- leafValues.forEach(value => {
141
- min = Math.min(min, value)
142
- max = Math.max(max, value)
143
- })
144
-
145
- return Math.round((min + max) / 2)
146
- }
147
-
148
- function App() {
149
- const columns = React.useMemo(
150
- () => [
151
- {
152
- Header: 'Name',
153
- columns: [
154
- {
155
- Header: 'First Name',
156
- accessor: 'firstName',
157
- aggregate: 'count',
158
- Aggregated: ({ value }) => `First Name Aggregated: ${value} Names`,
159
- },
160
- {
161
- Header: 'Last Name',
162
- accessor: 'lastName',
163
- aggregate: 'uniqueCount',
164
- Aggregated: ({ value }) =>
165
- `Last Name Aggregated: ${value} Unique Names`,
166
- },
167
- ],
168
- },
169
- {
170
- Header: 'Info',
171
- columns: [
172
- {
173
- Header: 'Age',
174
- accessor: 'age',
175
- aggregate: 'average',
176
- Aggregated: ({ value }) => `Age Aggregated: ${value} (avg)`,
177
- },
178
- {
179
- Header: 'Visits',
180
- accessor: 'visits',
181
- aggregate: 'sum',
182
- Aggregated: ({ value }) => `Visits Aggregated: ${value} (total)`,
183
- },
184
- {
185
- Header: 'Min Visits',
186
- id: 'minVisits',
187
- accessor: 'visits',
188
- aggregate: 'min',
189
- Aggregated: ({ value }) => `Visits Aggregated: ${value} (min)`,
190
- },
191
- {
192
- Header: 'Max Visits',
193
- id: 'maxVisits',
194
- accessor: 'visits',
195
- aggregate: 'max',
196
- Aggregated: ({ value }) => `Visits Aggregated: ${value} (max)`,
197
- },
198
- {
199
- Header: 'Min/Max Visits',
200
- id: 'minMaxVisits',
201
- accessor: 'visits',
202
- aggregate: 'minMax',
203
- Aggregated: ({ value }) => `Visits Aggregated: ${value} (minMax)`,
204
- },
205
- {
206
- Header: 'Status',
207
- accessor: 'status',
208
- aggregate: 'unique',
209
- Aggregated: ({ value }) =>
210
- `Visits Aggregated: ${value.join(', ')} (unique)`,
211
- },
212
- {
213
- Header: 'Profile Progress (Median)',
214
- accessor: 'progress',
215
- id: 'progress',
216
- aggregate: 'median',
217
- Aggregated: ({ value }) => `Process Aggregated: ${value} (median)`,
218
- },
219
- {
220
- Header: 'Profile Progress (Rounded Median)',
221
- accessor: 'progress',
222
- id: 'progressRounded',
223
- aggregate: roundedMedian,
224
- Aggregated: ({ value }) =>
225
- `Process Aggregated: ${value} (rounded median)`,
226
- },
227
- ],
228
- },
229
- ],
230
- []
231
- )
232
-
233
- return <Table columns={columns} data={data} />
234
- }
235
-
236
- test('renders a groupable table', () => {
237
- const rendered = render(<App />)
238
-
239
- fireEvent.click(rendered.getByText('Group lastName'))
240
-
241
- rendered.getByText('lastName: linsley (2)')
242
-
243
- fireEvent.click(rendered.getByText('Group visits'))
244
-
245
- fireEvent.click(rendered.getByText('Ungroup lastName'))
246
-
247
- rendered.getByText('visits: 100 (1)')
248
-
249
- fireEvent.click(rendered.getByText('Ungroup visits'))
250
-
251
- fireEvent.click(rendered.getByText('Group firstName'))
252
-
253
- rendered.getByText('firstName: tanner (1)')
254
-
255
- rendered.debugDiff(false)
256
- fireEvent.click(rendered.getByText('Group age'))
257
-
258
- rendered.getByText('Last Name Aggregated: 2 Unique Names')
259
- })
@@ -1,231 +0,0 @@
1
- import React from 'react'
2
- import { renderHook, act } from '@testing-library/react-hooks'
3
- import { render, fireEvent } from '../../../test-utils/react-testing'
4
- import { useTable } from '../../hooks/useTable'
5
- import { usePagination } from '../usePagination'
6
- import { useFilters } from '../useFilters'
7
-
8
- const data = [...new Array(1000)].fill(null).map((d, i) => ({
9
- firstName: `tanner ${i + 1}`,
10
- lastName: 'linsley',
11
- age: 29,
12
- visits: 100,
13
- status: 'In Relationship',
14
- progress: 50,
15
- }))
16
-
17
- const columns = [
18
- {
19
- Header: 'Name',
20
- columns: [
21
- {
22
- Header: 'First Name',
23
- accessor: 'firstName',
24
- },
25
- {
26
- Header: 'Last Name',
27
- accessor: 'lastName',
28
- },
29
- ],
30
- },
31
- {
32
- Header: 'Info',
33
- columns: [
34
- {
35
- Header: 'Age',
36
- accessor: 'age',
37
- },
38
- {
39
- Header: 'Visits',
40
- accessor: 'visits',
41
- },
42
- {
43
- Header: 'Status',
44
- accessor: 'status',
45
- },
46
- {
47
- Header: 'Profile Progress',
48
- accessor: 'progress',
49
- },
50
- ],
51
- },
52
- ]
53
-
54
- function Table({ columns, data }) {
55
- const {
56
- getTableProps,
57
- getTableBodyProps,
58
- headerGroups,
59
- prepareRow,
60
- page,
61
- canPreviousPage,
62
- canNextPage,
63
- pageOptions,
64
- pageCount,
65
- gotoPage,
66
- nextPage,
67
- previousPage,
68
- setPageSize,
69
- state: { pageIndex, pageSize },
70
- } = useTable(
71
- {
72
- columns,
73
- data,
74
- initialState: { pageIndex: 2 },
75
- },
76
- usePagination
77
- )
78
-
79
- return (
80
- <>
81
- <table {...getTableProps()}>
82
- <thead>
83
- {headerGroups.map(headerGroup => (
84
- <tr {...headerGroup.getHeaderGroupProps()}>
85
- {headerGroup.headers.map(column => (
86
- <th {...column.getHeaderProps()}>{column.render('Header')}</th>
87
- ))}
88
- </tr>
89
- ))}
90
- </thead>
91
- <tbody {...getTableBodyProps()}>
92
- {page.map(
93
- (row, i) =>
94
- prepareRow(row) || (
95
- <tr {...row.getRowProps()}>
96
- {row.cells.map(cell => {
97
- return (
98
- <td {...cell.getCellProps()}>{cell.render('Cell')}</td>
99
- )
100
- })}
101
- </tr>
102
- )
103
- )}
104
- </tbody>
105
- </table>
106
- <div className="pagination">
107
- <button onClick={() => gotoPage(0)} disabled={!canPreviousPage}>
108
- {'<<'}
109
- </button>{' '}
110
- <button onClick={() => previousPage()} disabled={!canPreviousPage}>
111
- {'<'}
112
- </button>{' '}
113
- <button onClick={() => nextPage()} disabled={!canNextPage}>
114
- {'>'}
115
- </button>{' '}
116
- <button onClick={() => gotoPage(pageCount - 1)} disabled={!canNextPage}>
117
- {'>>'}
118
- </button>{' '}
119
- <span>
120
- Page{' '}
121
- <strong>
122
- {pageIndex + 1} of {pageOptions.length}
123
- </strong>{' '}
124
- </span>
125
- <span>
126
- | Go to page:{' '}
127
- <input
128
- type="number"
129
- defaultValue={pageIndex + 1}
130
- onChange={e => {
131
- const page = e.target.value ? Number(e.target.value) - 1 : 0
132
- gotoPage(page)
133
- }}
134
- style={{ width: '100px' }}
135
- />
136
- </span>{' '}
137
- <select
138
- value={pageSize}
139
- onChange={e => {
140
- setPageSize(Number(e.target.value))
141
- }}
142
- data-testid="page-size-select"
143
- >
144
- {[10, 20, 30, 40, 50].map(pageSize => (
145
- <option key={pageSize} value={pageSize}>
146
- Show {pageSize}
147
- </option>
148
- ))}
149
- </select>
150
- </div>
151
- </>
152
- )
153
- }
154
-
155
- function App() {
156
- return <Table columns={columns} data={data} />
157
- }
158
-
159
- test('renders a paginated table', () => {
160
- const rendered = render(<App />)
161
-
162
- expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 21')
163
-
164
- fireEvent.click(rendered.getByText('>'))
165
- expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 31')
166
-
167
- fireEvent.click(rendered.getByText('>'))
168
- expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 41')
169
-
170
- fireEvent.click(rendered.getByText('>>'))
171
- expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 991')
172
-
173
- fireEvent.click(rendered.getByText('<<'))
174
- expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 1')
175
-
176
- fireEvent.change(rendered.getByTestId('page-size-select'), {
177
- target: { value: 30 },
178
- })
179
-
180
- expect(
181
- rendered.queryAllByRole('row').slice(2).reverse()[0].children[0].textContent
182
- ).toEqual('tanner 30')
183
- })
184
-
185
- describe('usePagination', () => {
186
- test('renders a paginated table', () => {
187
- const rendered = render(<App />)
188
-
189
- expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 21')
190
-
191
- fireEvent.click(rendered.getByText('>'))
192
- expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 31')
193
-
194
- fireEvent.click(rendered.getByText('>'))
195
- expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 41')
196
-
197
- fireEvent.click(rendered.getByText('>>'))
198
- expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 991')
199
-
200
- fireEvent.click(rendered.getByText('<<'))
201
- expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 1')
202
-
203
- fireEvent.change(rendered.getByTestId('page-size-select'), {
204
- target: { value: 30 },
205
- })
206
-
207
- expect(
208
- rendered.queryAllByRole('row').slice(2).reverse()[0].children[0]
209
- .textContent
210
- ).toEqual('tanner 30')
211
- })
212
-
213
- test('changing columnFilters resets pagination', async () => {
214
- const { result } = renderHook(() =>
215
- useTable(
216
- {
217
- columns,
218
- data,
219
- },
220
- useFilters,
221
- usePagination
222
- )
223
- )
224
-
225
- act(() => result.current.nextPage())
226
- act(() => result.current.nextPage())
227
- expect(result.current.state.pageIndex).toEqual(2)
228
- act(() => result.current.leafColumns[0].setFilter('tanner'))
229
- expect(result.current.state.pageIndex).toEqual(0)
230
- })
231
- })