@tanstack/table-core 8.0.0-alpha.9 → 8.0.0-beta.0

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 (186) hide show
  1. package/build/cjs/aggregationFns.js +120 -0
  2. package/build/cjs/aggregationFns.js.map +1 -0
  3. package/build/cjs/core/cell.js +40 -0
  4. package/build/cjs/core/cell.js.map +1 -0
  5. package/build/cjs/core/column.js +88 -0
  6. package/build/cjs/core/column.js.map +1 -0
  7. package/build/cjs/core/headers.js +403 -0
  8. package/build/cjs/core/headers.js.map +1 -0
  9. package/build/cjs/core/instance.js +255 -0
  10. package/build/cjs/core/instance.js.map +1 -0
  11. package/build/cjs/core/row.js +77 -0
  12. package/build/cjs/core/row.js.map +1 -0
  13. package/build/cjs/createTable.js +36 -29
  14. package/build/cjs/createTable.js.map +1 -1
  15. package/build/cjs/features/ColumnSizing.js +157 -189
  16. package/build/cjs/features/ColumnSizing.js.map +1 -1
  17. package/build/cjs/features/Expanding.js +103 -155
  18. package/build/cjs/features/Expanding.js.map +1 -1
  19. package/build/cjs/features/Filters.js +155 -304
  20. package/build/cjs/features/Filters.js.map +1 -1
  21. package/build/cjs/features/Grouping.js +97 -157
  22. package/build/cjs/features/Grouping.js.map +1 -1
  23. package/build/cjs/features/Ordering.js +30 -41
  24. package/build/cjs/features/Ordering.js.map +1 -1
  25. package/build/cjs/features/Pagination.js +102 -105
  26. package/build/cjs/features/Pagination.js.map +1 -1
  27. package/build/cjs/features/Pinning.js +131 -89
  28. package/build/cjs/features/Pinning.js.map +1 -1
  29. package/build/cjs/features/RowSelection.js +138 -267
  30. package/build/cjs/features/RowSelection.js.map +1 -1
  31. package/build/cjs/features/Sorting.js +82 -167
  32. package/build/cjs/features/Sorting.js.map +1 -1
  33. package/build/cjs/features/Visibility.js +69 -115
  34. package/build/cjs/features/Visibility.js.map +1 -1
  35. package/build/cjs/filterFns.js +107 -0
  36. package/build/cjs/filterFns.js.map +1 -0
  37. package/build/cjs/index.js +36 -23
  38. package/build/cjs/index.js.map +1 -1
  39. package/build/cjs/sortingFns.js +124 -0
  40. package/build/cjs/sortingFns.js.map +1 -0
  41. package/build/cjs/utils/filterRowsUtils.js +117 -0
  42. package/build/cjs/utils/filterRowsUtils.js.map +1 -0
  43. package/build/cjs/utils/getCoreRowModel.js +79 -0
  44. package/build/cjs/utils/getCoreRowModel.js.map +1 -0
  45. package/build/cjs/utils/getExpandedRowModel.js +57 -0
  46. package/build/cjs/utils/getExpandedRowModel.js.map +1 -0
  47. package/build/cjs/utils/getFacetedMinMaxValues.js +54 -0
  48. package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -0
  49. package/build/cjs/utils/getFacetedRowModel.js +50 -0
  50. package/build/cjs/utils/getFacetedRowModel.js.map +1 -0
  51. package/build/cjs/utils/getFacetedUniqueValues.js +48 -0
  52. package/build/cjs/utils/getFacetedUniqueValues.js.map +1 -0
  53. package/build/cjs/utils/getFilteredRowModel.js +139 -0
  54. package/build/cjs/utils/getFilteredRowModel.js.map +1 -0
  55. package/build/cjs/utils/getGroupedRowModel.js +161 -0
  56. package/build/cjs/utils/getGroupedRowModel.js.map +1 -0
  57. package/build/cjs/utils/getPaginationRowModel.js +61 -0
  58. package/build/cjs/utils/getPaginationRowModel.js.map +1 -0
  59. package/build/cjs/utils/getSortedRowModel.js +110 -0
  60. package/build/cjs/utils/getSortedRowModel.js.map +1 -0
  61. package/build/cjs/utils.js +38 -107
  62. package/build/cjs/utils.js.map +1 -1
  63. package/build/esm/index.js +2976 -3853
  64. package/build/esm/index.js.map +1 -1
  65. package/build/stats-html.html +1 -1
  66. package/build/stats-react.json +586 -408
  67. package/build/types/aggregationFns.d.ts +13 -0
  68. package/build/types/core/cell.d.ts +9 -0
  69. package/build/types/core/column.d.ts +40 -0
  70. package/build/types/core/headers.d.ts +46 -0
  71. package/build/types/core/instance.d.ts +57 -0
  72. package/build/types/core/row.d.ts +15 -0
  73. package/build/types/createTable.d.ts +47 -26
  74. package/build/types/features/ColumnSizing.d.ts +32 -44
  75. package/build/types/features/Expanding.d.ts +15 -26
  76. package/build/types/features/Filters.d.ts +64 -63
  77. package/build/types/features/Grouping.d.ts +32 -46
  78. package/build/types/features/Ordering.d.ts +7 -10
  79. package/build/types/features/Pagination.d.ts +16 -15
  80. package/build/types/features/Pinning.d.ts +16 -17
  81. package/build/types/features/RowSelection.d.ts +13 -33
  82. package/build/types/features/Sorting.d.ts +25 -44
  83. package/build/types/features/Visibility.d.ts +16 -25
  84. package/build/types/filterFns.d.ts +13 -0
  85. package/build/types/index.d.ts +16 -10
  86. package/build/types/sortingFns.d.ts +11 -0
  87. package/build/types/types.d.ts +37 -122
  88. package/build/types/utils/filterRowsUtils.d.ts +4 -0
  89. package/build/types/utils/getCoreRowModel.d.ts +2 -0
  90. package/build/types/utils/getExpandedRowModel.d.ts +7 -0
  91. package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
  92. package/build/types/utils/getFacetedRowModel.d.ts +2 -0
  93. package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
  94. package/build/types/utils/getFilteredRowModel.d.ts +2 -0
  95. package/build/types/utils/getGroupedRowModel.d.ts +2 -0
  96. package/build/types/utils/getPaginationRowModel.d.ts +4 -0
  97. package/build/types/utils/getSortedRowModel.d.ts +2 -0
  98. package/build/types/utils.d.ts +7 -11
  99. package/build/umd/index.development.js +3024 -3893
  100. package/build/umd/index.development.js.map +1 -1
  101. package/build/umd/index.production.js +1 -1
  102. package/build/umd/index.production.js.map +1 -1
  103. package/package.json +9 -10
  104. package/src/.DS_Store +0 -0
  105. package/src/aggregationFns.ts +123 -0
  106. package/src/core/cell.ts +48 -0
  107. package/src/core/column.ts +147 -0
  108. package/src/core/headers.ts +575 -0
  109. package/src/core/instance.ts +361 -0
  110. package/src/core/row.ts +85 -0
  111. package/src/createTable.ts +188 -0
  112. package/src/features/ColumnSizing.ts +170 -185
  113. package/src/features/Expanding.ts +122 -194
  114. package/src/features/Filters.ts +301 -381
  115. package/src/features/Grouping.ts +160 -220
  116. package/src/features/Ordering.ts +24 -25
  117. package/src/features/Pagination.ts +90 -73
  118. package/src/features/Pinning.ts +186 -63
  119. package/src/features/RowSelection.ts +107 -245
  120. package/src/features/Sorting.ts +127 -225
  121. package/src/features/Visibility.ts +116 -132
  122. package/src/filterFns.ts +135 -0
  123. package/src/index.ts +29 -0
  124. package/src/{sortTypes.ts → sortingFns.ts} +63 -85
  125. package/src/types.ts +62 -168
  126. package/src/utils/filterRowsUtils.ts +112 -0
  127. package/src/utils/getCoreRowModel.ts +84 -0
  128. package/src/utils/getExpandedRowModel.ts +54 -0
  129. package/src/utils/getFacetedMinMaxValues.ts +40 -0
  130. package/src/utils/getFacetedRowModel.ts +50 -0
  131. package/src/utils/getFacetedUniqueValues.ts +37 -0
  132. package/src/utils/getFilteredRowModel.ts +159 -0
  133. package/src/utils/getGroupedRowModel.ts +175 -0
  134. package/src/utils/getPaginationRowModel.ts +48 -0
  135. package/src/utils/getSortedRowModel.ts +116 -0
  136. package/src/utils.ts +126 -0
  137. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  138. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  139. package/build/cjs/aggregationTypes.js +0 -130
  140. package/build/cjs/aggregationTypes.js.map +0 -1
  141. package/build/cjs/core.js +0 -545
  142. package/build/cjs/core.js.map +0 -1
  143. package/build/cjs/features/Headers.js +0 -630
  144. package/build/cjs/features/Headers.js.map +0 -1
  145. package/build/cjs/filterTypes.js +0 -172
  146. package/build/cjs/filterTypes.js.map +0 -1
  147. package/build/cjs/sortTypes.js +0 -122
  148. package/build/cjs/sortTypes.js.map +0 -1
  149. package/build/cjs/types.js +0 -22
  150. package/build/cjs/types.js.map +0 -1
  151. package/build/cjs/utils/columnFilterRowsFn.js +0 -131
  152. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  153. package/build/cjs/utils/expandRowsFn.js +0 -38
  154. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  155. package/build/cjs/utils/globalFilterRowsFn.js +0 -101
  156. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  157. package/build/cjs/utils/groupRowsFn.js +0 -155
  158. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  159. package/build/cjs/utils/paginateRowsFn.js +0 -44
  160. package/build/cjs/utils/paginateRowsFn.js.map +0 -1
  161. package/build/cjs/utils/sortRowsFn.js +0 -94
  162. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  163. package/build/types/aggregationTypes.d.ts +0 -22
  164. package/build/types/core.d.ts +0 -105
  165. package/build/types/features/Headers.d.ts +0 -43
  166. package/build/types/filterTypes.d.ts +0 -50
  167. package/build/types/sortTypes.d.ts +0 -18
  168. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  169. package/build/types/utils/expandRowsFn.d.ts +0 -2
  170. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  171. package/build/types/utils/groupRowsFn.d.ts +0 -2
  172. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  173. package/build/types/utils/sortRowsFn.d.ts +0 -2
  174. package/src/aggregationTypes.ts +0 -115
  175. package/src/core.tsx +0 -763
  176. package/src/createTable.tsx +0 -137
  177. package/src/features/Headers.ts +0 -747
  178. package/src/filterTypes.ts +0 -188
  179. package/src/index.tsx +0 -23
  180. package/src/utils/columnFilterRowsFn.ts +0 -113
  181. package/src/utils/expandRowsFn.ts +0 -30
  182. package/src/utils/globalFilterRowsFn.ts +0 -89
  183. package/src/utils/groupRowsFn.ts +0 -170
  184. package/src/utils/paginateRowsFn.ts +0 -28
  185. package/src/utils/sortRowsFn.ts +0 -95
  186. package/src/utils.tsx +0 -221
@@ -1,14 +1,20 @@
1
+ import { TableFeature } from '../core/instance'
1
2
  import {
2
3
  Cell,
3
4
  Column,
4
- Getter,
5
5
  OnChangeFn,
6
- PartialGenerics,
7
- PropGetterValue,
6
+ TableGenerics,
8
7
  TableInstance,
9
8
  Updater,
9
+ Row,
10
10
  } from '../types'
11
- import { functionalUpdate, makeStateUpdater, memo, propGetter } from '../utils'
11
+ import { makeStateUpdater, memo } from '../utils'
12
+
13
+ export type VisibilityState = Record<string, boolean>
14
+
15
+ export type VisibilityTableState = {
16
+ columnVisibility: VisibilityState
17
+ }
12
18
 
13
19
  export type VisibilityOptions = {
14
20
  onColumnVisibilityChange?: OnChangeFn<VisibilityState>
@@ -19,38 +25,26 @@ export type VisibilityDefaultOptions = {
19
25
  onColumnVisibilityChange: OnChangeFn<VisibilityState>
20
26
  }
21
27
 
22
- export type VisibilityState = Record<string, boolean>
23
-
24
- export type VisibilityTableState = {
25
- columnVisibility: VisibilityState
26
- }
27
-
28
- export type VisibilityInstance<TGenerics extends PartialGenerics> = {
28
+ export type VisibilityInstance<TGenerics extends TableGenerics> = {
29
29
  getVisibleFlatColumns: () => Column<TGenerics>[]
30
30
  getVisibleLeafColumns: () => Column<TGenerics>[]
31
+ getLeftVisibleLeafColumns: () => Column<TGenerics>[]
32
+ getRightVisibleLeafColumns: () => Column<TGenerics>[]
33
+ getCenterVisibleLeafColumns: () => Column<TGenerics>[]
31
34
  setColumnVisibility: (updater: Updater<VisibilityState>) => void
32
- toggleColumnVisibility: (columnId: string, value?: boolean) => void
35
+ resetColumnVisibility: (defaultState?: boolean) => void
33
36
  toggleAllColumnsVisible: (value?: boolean) => void
34
- getColumnIsVisible: (columId: string) => boolean
35
- getColumnCanHide: (columnId: string) => boolean
36
37
  getIsAllColumnsVisible: () => boolean
37
38
  getIsSomeColumnsVisible: () => boolean
38
- getToggleAllColumnsVisibilityProps: <
39
- TGetter extends Getter<ToggleAllColumnsVisibilityProps>
40
- >(
41
- userProps?: TGetter
42
- ) => undefined | PropGetterValue<ToggleAllColumnsVisibilityProps, TGetter>
39
+ getToggleAllColumnsVisibilityHandler: () => (event: unknown) => void
43
40
  }
44
41
 
45
- type ToggleVisibilityProps = {}
46
- type ToggleAllColumnsVisibilityProps = {}
47
-
48
42
  export type VisibilityColumnDef = {
49
43
  enableHiding?: boolean
50
- defaultCanHide?: boolean
51
44
  }
52
45
 
53
- export type VisibilityRow<TGenerics extends PartialGenerics> = {
46
+ export type VisibilityRow<TGenerics extends TableGenerics> = {
47
+ _getAllVisibleCells: () => Cell<TGenerics>[]
54
48
  getVisibleCells: () => Cell<TGenerics>[]
55
49
  }
56
50
 
@@ -58,21 +52,20 @@ export type VisibilityColumn = {
58
52
  getCanHide: () => boolean
59
53
  getIsVisible: () => boolean
60
54
  toggleVisibility: (value?: boolean) => void
61
- getToggleVisibilityProps: <TGetter extends Getter<ToggleVisibilityProps>>(
62
- userProps?: TGetter
63
- ) => PropGetterValue<ToggleVisibilityProps, TGetter>
55
+ getToggleVisibilityHandler: () => (event: unknown) => void
64
56
  }
65
57
 
66
58
  //
67
59
 
68
- export const Visibility = {
69
- getInitialState: (): VisibilityTableState => {
60
+ export const Visibility: TableFeature = {
61
+ getInitialState: (state): VisibilityTableState => {
70
62
  return {
71
63
  columnVisibility: {},
64
+ ...state,
72
65
  }
73
66
  },
74
67
 
75
- getDefaultOptions: <TGenerics extends PartialGenerics>(
68
+ getDefaultOptions: <TGenerics extends TableGenerics>(
76
69
  instance: TableInstance<TGenerics>
77
70
  ): VisibilityDefaultOptions => {
78
71
  return {
@@ -80,93 +73,125 @@ export const Visibility = {
80
73
  }
81
74
  },
82
75
 
83
- getDefaultColumn: () => {
84
- return {
85
- defaultIsVisible: true,
86
- }
87
- },
88
-
89
- createColumn: <TGenerics extends PartialGenerics>(
76
+ createColumn: <TGenerics extends TableGenerics>(
90
77
  column: Column<TGenerics>,
91
78
  instance: TableInstance<TGenerics>
92
79
  ): VisibilityColumn => {
93
80
  return {
94
- getCanHide: () => instance.getColumnCanHide(column.id),
95
- getIsVisible: () => instance.getColumnIsVisible(column.id),
96
- toggleVisibility: value =>
97
- instance.toggleColumnVisibility(column.id, value),
98
- getToggleVisibilityProps: userProps => {
99
- const props: ToggleVisibilityProps = {
100
- type: 'checkbox',
101
- checked: column.getIsVisible?.(),
102
- title: 'Toggle Column Visibility',
103
- onChange: (e: MouseEvent | TouchEvent) => {
104
- column.toggleVisibility?.((e.target as HTMLInputElement).checked)
105
- },
81
+ toggleVisibility: value => {
82
+ if (column.getCanHide()) {
83
+ instance.setColumnVisibility(old => ({
84
+ ...old,
85
+ [column.id]: value ?? !column.getIsVisible(),
86
+ }))
106
87
  }
88
+ },
89
+ getIsVisible: () => {
90
+ return instance.getState().columnVisibility?.[column.id] ?? true
91
+ },
107
92
 
108
- return propGetter(props, userProps)
93
+ getCanHide: () => {
94
+ return (
95
+ (column.columnDef.enableHiding ?? true) &&
96
+ (instance.options.enableHiding ?? true)
97
+ )
98
+ },
99
+ getToggleVisibilityHandler: () => {
100
+ return (e: unknown) => {
101
+ column.toggleVisibility?.(
102
+ ((e as MouseEvent).target as HTMLInputElement).checked
103
+ )
104
+ }
109
105
  },
110
106
  }
111
107
  },
112
108
 
113
- getInstance: <TGenerics extends PartialGenerics>(
109
+ createRow: <TGenerics extends TableGenerics>(
110
+ row: Row<TGenerics>,
114
111
  instance: TableInstance<TGenerics>
115
- ): VisibilityInstance<TGenerics> => {
112
+ ): VisibilityRow<TGenerics> => {
116
113
  return {
117
- getVisibleFlatColumns: memo(
114
+ _getAllVisibleCells: memo(
115
+ () => [row.getAllCells(), instance.getState().columnVisibility],
116
+ cells => {
117
+ return cells.filter(cell => cell.column.getIsVisible())
118
+ },
119
+ {
120
+ key:
121
+ process.env.NODE_ENV === 'production' && 'row._getAllVisibleCells',
122
+ debug: () => instance.options.debugAll ?? instance.options.debugRows,
123
+ }
124
+ ),
125
+ getVisibleCells: memo(
118
126
  () => [
119
- instance.getAllFlatColumns(),
120
- instance
121
- .getAllFlatColumns()
122
- .filter(d => d.getIsVisible?.())
123
- .map(d => d.id)
124
- .join('_'),
127
+ row.getLeftVisibleCells(),
128
+ row.getCenterVisibleCells(),
129
+ row.getRightVisibleCells(),
125
130
  ],
126
- allFlatColumns => {
127
- return allFlatColumns.filter(d => d.getIsVisible?.())
128
- },
131
+ (left, center, right) => [...left, ...center, ...right],
129
132
  {
130
- key: 'getVisibleFlatColumns',
131
- debug: () =>
132
- instance.options.debugAll ?? instance.options.debugColumns,
133
+ key: process.env.NODE_ENV === 'development' && 'row.getVisibleCells',
134
+ debug: () => instance.options.debugAll ?? instance.options.debugRows,
133
135
  }
134
136
  ),
137
+ }
138
+ },
135
139
 
136
- getVisibleLeafColumns: memo(
140
+ createInstance: <TGenerics extends TableGenerics>(
141
+ instance: TableInstance<TGenerics>
142
+ ): VisibilityInstance<TGenerics> => {
143
+ const makeVisibleColumnsMethod = (
144
+ key: string,
145
+ getColumns: () => Column<TGenerics>[]
146
+ ): (() => Column<TGenerics>[]) => {
147
+ return memo(
137
148
  () => [
138
- instance.getAllLeafColumns(),
139
- instance
140
- .getAllLeafColumns()
141
- .filter(d => d.getIsVisible?.())
149
+ getColumns(),
150
+ getColumns()
151
+ .filter(d => d.getIsVisible())
142
152
  .map(d => d.id)
143
153
  .join('_'),
144
154
  ],
145
- allFlatColumns => {
146
- return allFlatColumns.filter(d => d.getIsVisible?.())
155
+ columns => {
156
+ return columns.filter(d => d.getIsVisible?.())
147
157
  },
148
158
  {
149
- key: 'getVisibleLeafColumns',
159
+ key,
150
160
  debug: () =>
151
161
  instance.options.debugAll ?? instance.options.debugColumns,
152
162
  }
163
+ )
164
+ }
165
+
166
+ return {
167
+ getVisibleFlatColumns: makeVisibleColumnsMethod(
168
+ 'getVisibleFlatColumns',
169
+ () => instance.getAllFlatColumns()
170
+ ),
171
+ getVisibleLeafColumns: makeVisibleColumnsMethod(
172
+ 'getVisibleLeafColumns',
173
+ () => instance.getAllLeafColumns()
174
+ ),
175
+ getLeftVisibleLeafColumns: makeVisibleColumnsMethod(
176
+ 'getLeftVisibleLeafColumns',
177
+ () => instance.getLeftLeafColumns()
178
+ ),
179
+ getRightVisibleLeafColumns: makeVisibleColumnsMethod(
180
+ 'getRightVisibleLeafColumns',
181
+ () => instance.getRightLeafColumns()
182
+ ),
183
+ getCenterVisibleLeafColumns: makeVisibleColumnsMethod(
184
+ 'getCenterVisibleLeafColumns',
185
+ () => instance.getCenterLeafColumns()
153
186
  ),
154
187
 
155
188
  setColumnVisibility: updater =>
156
- instance.options.onColumnVisibilityChange?.(
157
- updater,
158
- functionalUpdate(updater, instance.getState().columnVisibility)
159
- ),
189
+ instance.options.onColumnVisibilityChange?.(updater),
160
190
 
161
- toggleColumnVisibility: (columnId, value) => {
162
- if (!columnId) return
163
-
164
- if (instance.getColumnCanHide(columnId)) {
165
- instance.setColumnVisibility(old => ({
166
- ...old,
167
- [columnId]: value ?? !instance.getColumnIsVisible(columnId),
168
- }))
169
- }
191
+ resetColumnVisibility: defaultState => {
192
+ instance.setColumnVisibility(
193
+ defaultState ? {} : instance.initialState.columnVisibility ?? {}
194
+ )
170
195
  },
171
196
 
172
197
  toggleAllColumnsVisible: value => {
@@ -183,59 +208,18 @@ export const Visibility = {
183
208
  )
184
209
  },
185
210
 
186
- getColumnIsVisible: columnId => {
187
- const column = instance.getColumn(columnId)
188
-
189
- if (!column) {
190
- throw new Error()
191
- }
192
-
193
- return (
194
- instance.getState().columnVisibility?.[columnId] ??
195
- column.defaultIsVisible ??
196
- true
197
- )
198
- },
199
-
200
- getColumnCanHide: columnId => {
201
- const column = instance.getColumn(columnId)
202
-
203
- if (!column) {
204
- throw new Error()
205
- }
206
-
207
- return (
208
- instance.options.enableHiding ??
209
- column.enableHiding ??
210
- column.defaultCanHide ??
211
- true
212
- )
213
- },
214
-
215
211
  getIsAllColumnsVisible: () =>
216
212
  !instance.getAllLeafColumns().some(column => !column.getIsVisible?.()),
217
213
 
218
214
  getIsSomeColumnsVisible: () =>
219
215
  instance.getAllLeafColumns().some(column => column.getIsVisible?.()),
220
216
 
221
- getToggleAllColumnsVisibilityProps: userProps => {
222
- const props: ToggleAllColumnsVisibilityProps = {
223
- onChange: (e: MouseEvent) => {
224
- instance.toggleAllColumnsVisible(
225
- (e.target as HTMLInputElement)?.checked
226
- )
227
- },
228
- type: 'checkbox',
229
- title: 'Toggle visibility for all columns',
230
- checked: instance.getIsAllColumnsVisible(),
231
- indeterminate:
232
- !instance.getIsAllColumnsVisible() &&
233
- instance.getIsSomeColumnsVisible()
234
- ? 'indeterminate'
235
- : undefined,
217
+ getToggleAllColumnsVisibilityHandler: () => {
218
+ return (e: unknown) => {
219
+ instance.toggleAllColumnsVisible(
220
+ ((e as MouseEvent).target as HTMLInputElement)?.checked
221
+ )
236
222
  }
237
-
238
- return propGetter(props, userProps)
239
223
  },
240
224
  }
241
225
  },
@@ -0,0 +1,135 @@
1
+ import { FilterFn } from './features/Filters'
2
+
3
+ const includesString: FilterFn<any> = (
4
+ row,
5
+ columnId: string,
6
+ filterValue: string
7
+ ) => {
8
+ const search = filterValue.toLowerCase()
9
+ return row.getValue(columnId).toLowerCase().includes(search)
10
+ }
11
+
12
+ includesString.autoRemove = (val: any) => testFalsey(val)
13
+
14
+ const includesStringSensitive: FilterFn<any> = (
15
+ row,
16
+ columnId: string,
17
+ filterValue: string
18
+ ) => {
19
+ return row.getValue(columnId).includes(filterValue)
20
+ }
21
+
22
+ includesStringSensitive.autoRemove = (val: any) => testFalsey(val)
23
+
24
+ const equalsString: FilterFn<any> = (
25
+ row,
26
+ columnId: string,
27
+ filterValue: string
28
+ ) => {
29
+ return row.getValue(columnId).toLowerCase() === filterValue.toLowerCase()
30
+ }
31
+
32
+ equalsString.autoRemove = (val: any) => testFalsey(val)
33
+
34
+ const arrIncludes: FilterFn<any> = (
35
+ row,
36
+ columnId: string,
37
+ filterValue: unknown
38
+ ) => {
39
+ return row.getValue(columnId).includes(filterValue)
40
+ }
41
+
42
+ arrIncludes.autoRemove = (val: any) => testFalsey(val) || !val?.length
43
+
44
+ const arrIncludesAll: FilterFn<any> = (
45
+ row,
46
+ columnId: string,
47
+ filterValue: unknown[]
48
+ ) => {
49
+ return !filterValue.some(val => !row.getValue(columnId).includes(val))
50
+ }
51
+
52
+ arrIncludesAll.autoRemove = (val: any) => testFalsey(val) || !val?.length
53
+
54
+ const arrIncludesSome: FilterFn<any> = (
55
+ row,
56
+ columnId: string,
57
+ filterValue: unknown[]
58
+ ) => {
59
+ return filterValue.some(val => row.getValue(columnId).includes(val))
60
+ }
61
+
62
+ arrIncludesSome.autoRemove = (val: any) => testFalsey(val) || !val?.length
63
+
64
+ const equals: FilterFn<any> = (row, columnId: string, filterValue: unknown) => {
65
+ return row.getValue(columnId) === filterValue
66
+ }
67
+
68
+ equals.autoRemove = (val: any) => testFalsey(val)
69
+
70
+ const weakEquals: FilterFn<any> = (
71
+ row,
72
+ columnId: string,
73
+ filterValue: unknown
74
+ ) => {
75
+ return row.getValue(columnId) == filterValue
76
+ }
77
+
78
+ weakEquals.autoRemove = (val: any) => testFalsey(val)
79
+
80
+ const inNumberRange: FilterFn<any> = (
81
+ row,
82
+ columnId: string,
83
+ filterValue: [number, number]
84
+ ) => {
85
+ let [min, max] = filterValue
86
+
87
+ const rowValue = row.getValue(columnId)
88
+ return rowValue >= min && rowValue <= max
89
+ }
90
+
91
+ inNumberRange.resolveFilterValue = (val: [any, any]) => {
92
+ let [unsafeMin, unsafeMax] = val
93
+
94
+ let parsedMin =
95
+ typeof unsafeMin !== 'number' ? parseFloat(unsafeMin as string) : unsafeMin
96
+ let parsedMax =
97
+ typeof unsafeMax !== 'number' ? parseFloat(unsafeMax as string) : unsafeMax
98
+
99
+ let min =
100
+ unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin
101
+ let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax
102
+
103
+ if (min > max) {
104
+ const temp = min
105
+ min = max
106
+ max = temp
107
+ }
108
+
109
+ return [min, max] as const
110
+ }
111
+
112
+ inNumberRange.autoRemove = (val: any) =>
113
+ testFalsey(val) || (testFalsey(val[0]) && testFalsey(val[1]))
114
+
115
+ // Export
116
+
117
+ export const filterFns = {
118
+ includesString,
119
+ includesStringSensitive,
120
+ equalsString,
121
+ arrIncludes,
122
+ arrIncludesAll,
123
+ arrIncludesSome,
124
+ equals,
125
+ weakEquals,
126
+ inNumberRange,
127
+ }
128
+
129
+ export type BuiltInFilterFn = keyof typeof filterFns
130
+
131
+ // Utils
132
+
133
+ function testFalsey(val: any) {
134
+ return val === undefined || val === null || val === ''
135
+ }
package/src/index.ts ADDED
@@ -0,0 +1,29 @@
1
+ export * from './core/instance'
2
+ export * from './types'
3
+ export * from './createTable'
4
+ export * from './core/column'
5
+ export * from './core/headers'
6
+ export * from './core/row'
7
+ export * from './features/ColumnSizing'
8
+ export * from './features/Expanding'
9
+ export * from './features/Filters'
10
+ export * from './features/Grouping'
11
+ export * from './features/Ordering'
12
+ export * from './features/Pagination'
13
+ export * from './features/Pinning'
14
+ export * from './features/RowSelection'
15
+ export * from './features/Sorting'
16
+ export * from './features/Visibility'
17
+ export * from './filterFns'
18
+ export * from './sortingFns'
19
+ export * from './aggregationFns'
20
+ export * from './utils'
21
+ export * from './utils/getCoreRowModel'
22
+ export * from './utils/getFilteredRowModel'
23
+ export * from './utils/getFacetedRowModel'
24
+ export * from './utils/getFacetedUniqueValues'
25
+ export * from './utils/getFacetedMinMaxValues'
26
+ export * from './utils/getSortedRowModel'
27
+ export * from './utils/getGroupedRowModel'
28
+ export * from './utils/getExpandedRowModel'
29
+ export * from './utils/getPaginationRowModel'
@@ -1,40 +1,69 @@
1
- import { PartialGenerics, Row } from './types'
1
+ import { SortingFn } from './features/Sorting'
2
2
 
3
3
  export const reSplitAlphaNumeric = /([0-9]+)/gm
4
4
 
5
- export const sortTypes = {
6
- alphanumeric,
7
- alphanumericCaseSensitive,
8
- text,
9
- textCaseSensitive,
10
- datetime,
11
- basic,
5
+ const alphanumeric: SortingFn<any> = (rowA, rowB, columnId) => {
6
+ return compareAlphanumeric(
7
+ toString(rowA.getValue(columnId)).toLowerCase(),
8
+ toString(rowB.getValue(columnId)).toLowerCase()
9
+ )
12
10
  }
13
11
 
14
- export type BuiltInSortType = keyof typeof sortTypes
15
-
16
- function alphanumeric<TGenerics extends PartialGenerics>(
17
- rowA: Row<TGenerics>,
18
- rowB: Row<TGenerics>,
19
- columnId: string
20
- ) {
12
+ const alphanumericCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {
21
13
  return compareAlphanumeric(
22
- toString(rowA.values[columnId]).toLowerCase(),
23
- toString(rowB.values[columnId]).toLowerCase()
14
+ toString(rowA.getValue(columnId)),
15
+ toString(rowB.getValue(columnId))
24
16
  )
25
17
  }
26
18
 
27
- function alphanumericCaseSensitive<TGenerics extends PartialGenerics>(
28
- rowA: Row<TGenerics>,
29
- rowB: Row<TGenerics>,
30
- columnId: string
31
- ) {
32
- return compareAlphanumeric(
33
- toString(rowA.values[columnId]),
34
- toString(rowB.values[columnId])
19
+ // The text filter is more basic (less numeric support)
20
+ // but is much faster
21
+ const text: SortingFn<any> = (rowA, rowB, columnId) => {
22
+ return compareBasic(
23
+ toString(rowA.getValue(columnId)).toLowerCase(),
24
+ toString(rowB.getValue(columnId)).toLowerCase()
25
+ )
26
+ }
27
+
28
+ // The text filter is more basic (less numeric support)
29
+ // but is much faster
30
+ const textCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {
31
+ return compareBasic(
32
+ toString(rowA.getValue(columnId)),
33
+ toString(rowB.getValue(columnId))
34
+ )
35
+ }
36
+
37
+ const datetime: SortingFn<any> = (rowA, rowB, columnId) => {
38
+ return compareBasic(
39
+ (rowA.getValue(columnId) as Date).getTime(),
40
+ (rowB.getValue(columnId) as Date).getTime()
35
41
  )
36
42
  }
37
43
 
44
+ const basic: SortingFn<any> = (rowA, rowB, columnId) => {
45
+ return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId))
46
+ }
47
+
48
+ // Utils
49
+
50
+ function compareBasic(a: any, b: any) {
51
+ return a === b ? 0 : a > b ? 1 : -1
52
+ }
53
+
54
+ function toString(a: any) {
55
+ if (typeof a === 'number') {
56
+ if (isNaN(a) || a === Infinity || a === -Infinity) {
57
+ return ''
58
+ }
59
+ return String(a)
60
+ }
61
+ if (typeof a === 'string') {
62
+ return a
63
+ }
64
+ return ''
65
+ }
66
+
38
67
  // Mixed sorting is slow, but very inclusive of many edge cases.
39
68
  // It handles numbers, mixed alphanumeric combinations, and even
40
69
  // null, undefined, and Infinity
@@ -82,66 +111,15 @@ function compareAlphanumeric(aStr: string, bStr: string) {
82
111
  return a.length - b.length
83
112
  }
84
113
 
85
- // The text filter is more basic (less numeric support)
86
- // but is much faster
87
- function text<TGenerics extends PartialGenerics>(
88
- rowA: Row<TGenerics>,
89
- rowB: Row<TGenerics>,
90
- columnId: string
91
- ) {
92
- return compareBasic(
93
- toString(rowA.values[columnId]).toLowerCase(),
94
- toString(rowB.values[columnId]).toLowerCase()
95
- )
96
- }
97
-
98
- // The text filter is more basic (less numeric support)
99
- // but is much faster
100
- function textCaseSensitive<TGenerics extends PartialGenerics>(
101
- rowA: Row<TGenerics>,
102
- rowB: Row<TGenerics>,
103
- columnId: string
104
- ) {
105
- return compareBasic(
106
- toString(rowA.values[columnId]),
107
- toString(rowB.values[columnId])
108
- )
109
- }
110
-
111
- function datetime<TGenerics extends PartialGenerics>(
112
- rowA: Row<TGenerics>,
113
- rowB: Row<TGenerics>,
114
- columnId: string
115
- ) {
116
- return compareBasic(
117
- (rowA.values[columnId] as Date).getTime(),
118
- (rowB.values[columnId] as Date).getTime()
119
- )
120
- }
121
-
122
- function basic<TGenerics extends PartialGenerics>(
123
- rowA: Row<TGenerics>,
124
- rowB: Row<TGenerics>,
125
- columnId: string
126
- ) {
127
- return compareBasic(rowA.values[columnId], rowB.values[columnId])
128
- }
129
-
130
- // Utils
114
+ // Exports
131
115
 
132
- function compareBasic(a: any, b: any) {
133
- return a === b ? 0 : a > b ? 1 : -1
116
+ export const sortingFns = {
117
+ alphanumeric,
118
+ alphanumericCaseSensitive,
119
+ text,
120
+ textCaseSensitive,
121
+ datetime,
122
+ basic,
134
123
  }
135
124
 
136
- function toString(a: any) {
137
- if (typeof a === 'number') {
138
- if (isNaN(a) || a === Infinity || a === -Infinity) {
139
- return ''
140
- }
141
- return String(a)
142
- }
143
- if (typeof a === 'string') {
144
- return a
145
- }
146
- return ''
147
- }
125
+ export type BuiltInSortingFn = keyof typeof sortingFns