@tanstack/react-table 8.0.0-alpha.2 → 8.0.0-alpha.20

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 (99) hide show
  1. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -78
  2. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  3. package/build/cjs/index.js +96 -12
  4. package/build/cjs/index.js.map +1 -1
  5. package/build/esm/index.js +40 -3663
  6. package/build/esm/index.js.map +1 -1
  7. package/build/stats-html.html +1 -1
  8. package/build/stats-react.json +28 -676
  9. package/build/types/index.d.ts +13 -7
  10. package/build/umd/index.development.js +50 -3665
  11. package/build/umd/index.development.js.map +1 -1
  12. package/build/umd/index.production.js +1 -1
  13. package/build/umd/index.production.js.map +1 -1
  14. package/package.json +4 -1
  15. package/src/index.tsx +104 -7
  16. package/build/cjs/aggregationTypes.js +0 -130
  17. package/build/cjs/aggregationTypes.js.map +0 -1
  18. package/build/cjs/core.js +0 -519
  19. package/build/cjs/core.js.map +0 -1
  20. package/build/cjs/createTable.js +0 -103
  21. package/build/cjs/createTable.js.map +0 -1
  22. package/build/cjs/features/ColumnSizing.js +0 -331
  23. package/build/cjs/features/ColumnSizing.js.map +0 -1
  24. package/build/cjs/features/Expanding.js +0 -234
  25. package/build/cjs/features/Expanding.js.map +0 -1
  26. package/build/cjs/features/Filters.js +0 -396
  27. package/build/cjs/features/Filters.js.map +0 -1
  28. package/build/cjs/features/Grouping.js +0 -228
  29. package/build/cjs/features/Grouping.js.map +0 -1
  30. package/build/cjs/features/Headers.js +0 -486
  31. package/build/cjs/features/Headers.js.map +0 -1
  32. package/build/cjs/features/Ordering.js +0 -83
  33. package/build/cjs/features/Ordering.js.map +0 -1
  34. package/build/cjs/features/Pinning.js +0 -163
  35. package/build/cjs/features/Pinning.js.map +0 -1
  36. package/build/cjs/features/Sorting.js +0 -269
  37. package/build/cjs/features/Sorting.js.map +0 -1
  38. package/build/cjs/features/Visibility.js +0 -160
  39. package/build/cjs/features/Visibility.js.map +0 -1
  40. package/build/cjs/filterTypes.js +0 -172
  41. package/build/cjs/filterTypes.js.map +0 -1
  42. package/build/cjs/sortTypes.js +0 -121
  43. package/build/cjs/sortTypes.js.map +0 -1
  44. package/build/cjs/utils/columnFilterRowsFn.js +0 -130
  45. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  46. package/build/cjs/utils/expandRowsFn.js +0 -38
  47. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  48. package/build/cjs/utils/globalFilterRowsFn.js +0 -100
  49. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  50. package/build/cjs/utils/groupRowsFn.js +0 -154
  51. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  52. package/build/cjs/utils/sortRowsFn.js +0 -93
  53. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  54. package/build/cjs/utils.js +0 -143
  55. package/build/cjs/utils.js.map +0 -1
  56. package/build/types/aggregationTypes.d.ts +0 -22
  57. package/build/types/core.d.ts +0 -126
  58. package/build/types/createTable.d.ts +0 -35
  59. package/build/types/features/ColumnSizing.d.ts +0 -73
  60. package/build/types/features/Expanding.d.ts +0 -52
  61. package/build/types/features/Filters.d.ts +0 -93
  62. package/build/types/features/Grouping.d.ts +0 -82
  63. package/build/types/features/Headers.d.ts +0 -41
  64. package/build/types/features/Ordering.d.ts +0 -19
  65. package/build/types/features/Pinning.d.ts +0 -39
  66. package/build/types/features/Sorting.d.ts +0 -75
  67. package/build/types/features/Visibility.d.ts +0 -47
  68. package/build/types/filterTypes.d.ts +0 -50
  69. package/build/types/sortTypes.d.ts +0 -17
  70. package/build/types/types.d.ts +0 -124
  71. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  72. package/build/types/utils/expandRowsFn.d.ts +0 -2
  73. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  74. package/build/types/utils/groupRowsFn.d.ts +0 -2
  75. package/build/types/utils/sortRowsFn.d.ts +0 -2
  76. package/build/types/utils.d.ts +0 -24
  77. package/src/aggregationTypes.ts +0 -115
  78. package/src/core.tsx +0 -1232
  79. package/src/createTable.tsx +0 -181
  80. package/src/features/ColumnSizing.ts +0 -482
  81. package/src/features/Expanding.ts +0 -388
  82. package/src/features/Filters.ts +0 -707
  83. package/src/features/Grouping.ts +0 -451
  84. package/src/features/Headers.ts +0 -944
  85. package/src/features/Ordering.ts +0 -134
  86. package/src/features/Pinning.ts +0 -213
  87. package/src/features/Sorting.ts +0 -487
  88. package/src/features/Visibility.ts +0 -281
  89. package/src/features/withPagination.oldts +0 -208
  90. package/src/features/withRowSelection.oldts +0 -467
  91. package/src/filterTypes.ts +0 -251
  92. package/src/sortTypes.ts +0 -159
  93. package/src/types.ts +0 -314
  94. package/src/utils/columnFilterRowsFn.ts +0 -162
  95. package/src/utils/expandRowsFn.ts +0 -53
  96. package/src/utils/globalFilterRowsFn.ts +0 -129
  97. package/src/utils/groupRowsFn.ts +0 -196
  98. package/src/utils/sortRowsFn.ts +0 -115
  99. package/src/utils.tsx +0 -249
@@ -1,281 +0,0 @@
1
- import {
2
- Cell,
3
- Column,
4
- Getter,
5
- OnChangeFn,
6
- PropGetterValue,
7
- ReactTable,
8
- Updater,
9
- } from '../types'
10
- import { functionalUpdate, makeStateUpdater, memo, propGetter } from '../utils'
11
-
12
- export type VisibilityOptions = {
13
- onColumnVisibilityChange?: OnChangeFn<VisibilityState>
14
- enableHiding?: boolean
15
- }
16
-
17
- export type VisibilityDefaultOptions = {
18
- onColumnVisibilityChange: OnChangeFn<VisibilityState>
19
- }
20
-
21
- export type VisibilityState = Record<string, boolean>
22
-
23
- export type VisibilityTableState = {
24
- columnVisibility: VisibilityState
25
- }
26
-
27
- export type VisibilityInstance<
28
- TData,
29
- TValue,
30
- TFilterFns,
31
- TSortingFns,
32
- TAggregationFns
33
- > = {
34
- getVisibleFlatColumns: () => Column<
35
- TData,
36
- TValue,
37
- TFilterFns,
38
- TSortingFns,
39
- TAggregationFns
40
- >[]
41
- getVisibleLeafColumns: () => Column<
42
- TData,
43
- TValue,
44
- TFilterFns,
45
- TSortingFns,
46
- TAggregationFns
47
- >[]
48
- setColumnVisibility: (updater: Updater<VisibilityState>) => void
49
- toggleColumnVisibility: (columnId: string, value?: boolean) => void
50
- toggleAllColumnsVisible: (value?: boolean) => void
51
- getColumnIsVisible: (columId: string) => boolean
52
- getColumnCanHide: (columnId: string) => boolean
53
- getIsAllColumnsVisible: () => boolean
54
- getIsSomeColumnsVisible: () => boolean
55
- getToggleAllColumnsVisibilityProps: <
56
- TGetter extends Getter<ToggleAllColumnsVisibilityProps>
57
- >(
58
- userProps?: TGetter
59
- ) => undefined | PropGetterValue<ToggleAllColumnsVisibilityProps, TGetter>
60
- }
61
-
62
- type ToggleVisibilityProps = {}
63
- type ToggleAllColumnsVisibilityProps = {}
64
-
65
- export type VisibilityColumnDef = {
66
- enableHiding?: boolean
67
- defaultCanHide?: boolean
68
- }
69
-
70
- export type VisibilityRow<
71
- TData,
72
- TValue,
73
- TFilterFns,
74
- TSortingFns,
75
- TAggregationFns
76
- > = {
77
- getVisibleCells: () => Cell<
78
- TData,
79
- TValue,
80
- TFilterFns,
81
- TSortingFns,
82
- TAggregationFns
83
- >[]
84
- }
85
-
86
- export type VisibilityColumn = {
87
- getCanHide: () => boolean
88
- getIsVisible: () => boolean
89
- toggleVisibility: (value?: boolean) => void
90
- getToggleVisibilityProps: <TGetter extends Getter<ToggleVisibilityProps>>(
91
- userProps?: TGetter
92
- ) => PropGetterValue<ToggleVisibilityProps, TGetter>
93
- }
94
-
95
- //
96
-
97
- export function getInitialState(): VisibilityTableState {
98
- return {
99
- columnVisibility: {},
100
- }
101
- }
102
-
103
- export function getDefaultOptions<
104
- TData,
105
- TValue,
106
- TFilterFns,
107
- TSortingFns,
108
- TAggregationFns
109
- >(
110
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
111
- ): VisibilityDefaultOptions {
112
- return {
113
- onColumnVisibilityChange: makeStateUpdater('columnVisibility', instance),
114
- }
115
- }
116
-
117
- export function getDefaultColumn() {
118
- return {
119
- defaultIsVisible: true,
120
- }
121
- }
122
-
123
- export function createColumn<
124
- TData,
125
- TValue,
126
- TFilterFns,
127
- TSortingFns,
128
- TAggregationFns
129
- >(
130
- column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,
131
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
132
- ): VisibilityColumn {
133
- return {
134
- getCanHide: () => instance.getColumnCanHide(column.id),
135
- getIsVisible: () => instance.getColumnIsVisible(column.id),
136
- toggleVisibility: value =>
137
- instance.toggleColumnVisibility(column.id, value),
138
- getToggleVisibilityProps: userProps => {
139
- const props: ToggleVisibilityProps = {
140
- type: 'checkbox',
141
- checked: column.getIsVisible?.(),
142
- title: 'Toggle Column Visibility',
143
- onChange: (e: MouseEvent | TouchEvent) => {
144
- column.toggleVisibility?.((e.target as HTMLInputElement).checked)
145
- },
146
- }
147
-
148
- return propGetter(props, userProps)
149
- },
150
- }
151
- }
152
-
153
- export function getInstance<
154
- TData,
155
- TValue,
156
- TFilterFns,
157
- TSortingFns,
158
- TAggregationFns
159
- >(
160
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
161
- ): VisibilityInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {
162
- return {
163
- getVisibleFlatColumns: memo(
164
- () => [
165
- instance.getAllFlatColumns(),
166
- instance
167
- .getAllFlatColumns()
168
- .filter(d => d.getIsVisible?.())
169
- .map(d => d.id)
170
- .join('_'),
171
- ],
172
- allFlatColumns => {
173
- return allFlatColumns.filter(d => d.getIsVisible?.())
174
- },
175
- 'getVisibleFlatColumns',
176
- instance.options.debug
177
- ),
178
-
179
- getVisibleLeafColumns: memo(
180
- () => [
181
- instance.getAllLeafColumns(),
182
- instance
183
- .getAllLeafColumns()
184
- .filter(d => d.getIsVisible?.())
185
- .map(d => d.id)
186
- .join('_'),
187
- ],
188
- allFlatColumns => {
189
- return allFlatColumns.filter(d => d.getIsVisible?.())
190
- },
191
- 'getVisibleLeafColumns',
192
- instance.options.debug
193
- ),
194
-
195
- setColumnVisibility: updater =>
196
- instance.options.onColumnVisibilityChange?.(
197
- updater,
198
- functionalUpdate(updater, instance.getState().columnVisibility)
199
- ),
200
-
201
- toggleColumnVisibility: (columnId, value) => {
202
- if (!columnId) return
203
-
204
- if (instance.getColumnCanHide(columnId)) {
205
- instance.setColumnVisibility(old => ({
206
- ...old,
207
- [columnId]: value ?? !instance.getColumnIsVisible(columnId),
208
- }))
209
- }
210
- },
211
-
212
- toggleAllColumnsVisible: value => {
213
- value = value ?? !instance.getIsAllColumnsVisible()
214
-
215
- instance.setColumnVisibility(
216
- instance.getAllLeafColumns().reduce(
217
- (obj, column) => ({
218
- ...obj,
219
- [column.id]: !value ? !column.getCanHide?.() : value,
220
- }),
221
- {}
222
- )
223
- )
224
- },
225
-
226
- getColumnIsVisible: columnId => {
227
- const column = instance.getColumn(columnId)
228
-
229
- if (!column) {
230
- throw new Error()
231
- }
232
-
233
- return (
234
- instance.getState().columnVisibility?.[columnId] ??
235
- column.defaultIsVisible ??
236
- true
237
- )
238
- },
239
-
240
- getColumnCanHide: columnId => {
241
- const column = instance.getColumn(columnId)
242
-
243
- if (!column) {
244
- throw new Error()
245
- }
246
-
247
- return (
248
- instance.options.enableHiding ??
249
- column.enableHiding ??
250
- column.defaultCanHide ??
251
- true
252
- )
253
- },
254
-
255
- getIsAllColumnsVisible: () =>
256
- !instance.getAllLeafColumns().some(column => !column.getIsVisible?.()),
257
-
258
- getIsSomeColumnsVisible: () =>
259
- instance.getAllLeafColumns().some(column => column.getIsVisible?.()),
260
-
261
- getToggleAllColumnsVisibilityProps: userProps => {
262
- const props: ToggleAllColumnsVisibilityProps = {
263
- onChange: (e: MouseEvent) => {
264
- instance.toggleAllColumnsVisible(
265
- (e.target as HTMLInputElement)?.checked
266
- )
267
- },
268
- type: 'checkbox',
269
- title: 'Toggle visibility for all columns',
270
- checked: instance.getIsAllColumnsVisible(),
271
- indeterminate:
272
- !instance.getIsAllColumnsVisible() &&
273
- instance.getIsSomeColumnsVisible()
274
- ? 'indeterminate'
275
- : undefined,
276
- }
277
-
278
- return propGetter(props, userProps)
279
- },
280
- }
281
- }
@@ -1,208 +0,0 @@
1
- import React from 'react'
2
-
3
- import {
4
- functionalUpdate,
5
- expandRows,
6
- useLazyMemo,
7
- useMountedLayoutEffect,
8
- makeStateUpdater,
9
- } from '../utils'
10
-
11
- import {
12
- withPagination as name,
13
- withColumnVisibility,
14
- withColumnFilters,
15
- withGlobalFilter,
16
- withGrouping,
17
- withSorting,
18
- withExpanding,
19
- } from '../Constants'
20
- import { MakeInstance, GetDefaultOptions } from '../types'
21
-
22
- const getDefaultOptions: GetDefaultOptions = options => {
23
- return {
24
- onPageIndexChange: React.useCallback(makeStateUpdater('pageIndex'), []),
25
- onPageSizeChange: React.useCallback(makeStateUpdater('pageSize'), []),
26
- onPageCountChange: React.useCallback(makeStateUpdater('pageCount'), []),
27
- autoResetPageIndex: true,
28
- paginateExpandedRows: true,
29
- ...options,
30
- initialState: {
31
- pageIndex: 0,
32
- pageSize: 10,
33
- pageCount: 0,
34
- ...options.initialState,
35
- },
36
- }
37
- }
38
-
39
- const extendInstance: MakeInstance = instance => {
40
- const pageResetDeps = [
41
- instance.options.manualPagination ? null : instance.options.data,
42
- instance.state.globalFilter,
43
- instance.state.columnFilters,
44
- instance.state.grouping,
45
- instance.state.sorting,
46
- ]
47
- React.useMemo(() => {
48
- if (instance.options.autoResetPageIndex) {
49
- instance.state.pageIndex = instance.options.initialState?.pageIndex ?? 0
50
- }
51
- // eslint-disable-next-line react-hooks/exhaustive-deps
52
- }, pageResetDeps)
53
-
54
- useMountedLayoutEffect(() => {
55
- if (instance.options.autoResetPageIndex) {
56
- instance.resetPageIndex?.()
57
- }
58
- }, pageResetDeps)
59
-
60
- instance.setPageIndex = React.useCallback(
61
- updater =>
62
- instance.options.onPageIndexChange?.(old => {
63
- const newPageIndex = functionalUpdate(updater, old)
64
- const pageCount = instance.getPageCount?.() ?? 0
65
- const maxPageIndex =
66
- pageCount > 0 ? pageCount - 1 : Number.MAX_SAFE_INTEGER
67
-
68
- return Math.min(Math.max(0, newPageIndex), maxPageIndex)
69
- }, instance),
70
- [instance]
71
- )
72
-
73
- instance.setPageSize = React.useCallback(
74
- updater =>
75
- instance.options.onPageSizeChange?.(old => {
76
- const newPageSize = Math.max(1, functionalUpdate(updater, old))
77
- const topRowIndex = old! * instance.state.pageIndex!
78
- const pageIndex = Math.floor(topRowIndex / newPageSize)
79
-
80
- if (instance.state.pageIndex !== pageIndex) {
81
- instance.setPageIndex?.(pageIndex)
82
- }
83
-
84
- return newPageSize
85
- }, instance),
86
- [instance]
87
- )
88
-
89
- instance.setPageCount = React.useCallback(
90
- updater =>
91
- instance.options.onPageCountChange?.(
92
- old => Math.max(0, functionalUpdate(updater, old)),
93
- instance
94
- ),
95
- [instance]
96
- )
97
-
98
- instance.resetPageIndex = React.useCallback(
99
- () =>
100
- instance.setPageIndex?.(instance.options.initialState?.pageIndex ?? 0),
101
- [instance]
102
- )
103
-
104
- instance.resetPageSize = React.useCallback(
105
- () => instance.setPageSize?.(instance.options.initialState?.pageSize ?? 10),
106
- [instance]
107
- )
108
-
109
- instance.resetPageCount = React.useCallback(
110
- () =>
111
- instance.setPageCount?.(instance.options.initialState?.pageCount ?? 0),
112
- [instance]
113
- )
114
-
115
- instance.getPageCount = React.useCallback(
116
- () =>
117
- instance.options.manualPagination
118
- ? instance.state.pageCount!
119
- : instance.rows
120
- ? Math.ceil(instance.rows.length / instance.state.pageSize!)
121
- : -1,
122
- [
123
- instance.options.manualPagination,
124
- instance.rows,
125
- instance.state.pageCount,
126
- instance.state.pageSize,
127
- ]
128
- )
129
-
130
- const pageCount = instance.getPageCount?.()
131
-
132
- instance.getPageOptions = useLazyMemo(() => {
133
- let pageOptions: number[] = []
134
- if (pageCount > 0) {
135
- pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i)
136
- }
137
- return pageOptions
138
- }, [pageCount])
139
-
140
- instance.getPageRows = React.useCallback(() => {
141
- const {
142
- rows,
143
- state: { pageIndex, pageSize },
144
- options: { manualPagination },
145
- } = instance
146
- let page
147
-
148
- if (manualPagination) {
149
- page = rows
150
- } else {
151
- const pageStart = pageSize! * pageIndex!
152
- const pageEnd = pageStart + pageSize!
153
-
154
- page = rows.slice(pageStart, pageEnd)
155
- }
156
-
157
- if (instance.options.paginateExpandedRows) {
158
- return page
159
- }
160
-
161
- return expandRows(page, instance)
162
- }, [instance])
163
-
164
- instance.getCanPreviousPage = React.useCallback(
165
- () => instance.state.pageIndex! > 0,
166
- [instance.state.pageIndex]
167
- )
168
-
169
- instance.getCanNextPage = React.useCallback(() => {
170
- const {
171
- state: { pageSize, pageIndex },
172
- getPageRows,
173
- getPageCount,
174
- } = instance
175
-
176
- const pageCount = getPageCount?.() ?? 0
177
-
178
- return pageCount === 0
179
- ? (getPageRows?.().length ?? 0) >= pageSize!
180
- : pageIndex! < (pageCount ?? 0) - 1
181
- }, [instance])
182
-
183
- instance.gotoPreviousPage = React.useCallback(() => {
184
- return instance.setPageIndex?.(old => old! - 1)
185
- }, [instance])
186
-
187
- instance.gotoNextPage = React.useCallback(() => {
188
- return instance.setPageIndex?.(old => old! + 1)
189
- }, [instance])
190
-
191
- return instance
192
- }
193
-
194
- export const withPagination = {
195
- name,
196
- after: [
197
- withColumnVisibility,
198
- withColumnFilters,
199
- withGlobalFilter,
200
- withGrouping,
201
- withSorting,
202
- withExpanding,
203
- ],
204
- plugs: {
205
- getDefaultOptions,
206
- extendInstance,
207
- },
208
- }