@tanstack/table-core 8.5.2 → 8.5.5

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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tanstack/table-core",
3
3
  "author": "Tanner Linsley",
4
- "version": "8.5.2",
4
+ "version": "8.5.5",
5
5
  "description": "Headless UI for building powerful tables & datagrids for TS/JS.",
6
6
  "license": "MIT",
7
7
  "homepage": "https://github.com/tanstack/table#readme",
@@ -1,9 +1,11 @@
1
1
  import {
2
- CoreColumnDefDisplay,
3
- CoreColumnDefDisplayWithStringHeader,
4
- } from './core/column'
5
- import { GroupingColumnDef } from './features/Grouping'
6
- import { AccessorFn, ColumnDef, RowData } from './types'
2
+ AccessorFn,
3
+ ColumnDef,
4
+ DisplayColumnDef,
5
+ GroupColumnDef,
6
+ IdentifiedColumnDef,
7
+ RowData,
8
+ } from './types'
7
9
  import { DeepKeys, DeepValue, RequiredKeys } from './utils'
8
10
 
9
11
  // type Person = {
@@ -13,6 +15,7 @@ import { DeepKeys, DeepValue, RequiredKeys } from './utils'
13
15
  // visits: number
14
16
  // status: string
15
17
  // progress: number
18
+ // createdAt: Date
16
19
  // nested: {
17
20
  // foo: [
18
21
  // {
@@ -56,24 +59,12 @@ export type ColumnHelper<TData extends RowData> = {
56
59
  : never
57
60
  >(
58
61
  accessor: TAccessor,
59
- column: Omit<ColumnDef<TData, TValue>, 'accessorKey'>
62
+ column: TAccessor extends AccessorFn<TData>
63
+ ? DisplayColumnDef<TData, TValue>
64
+ : IdentifiedColumnDef<TData, TValue>
60
65
  ) => ColumnDef<TData, TValue>
61
- display: (
62
- column: RequiredKeys<
63
- Omit<ColumnDef<TData, unknown>, 'accessorKey' | 'accessorFn'>,
64
- 'id'
65
- >
66
- ) => ColumnDef<TData, unknown>
67
- group: (
68
- column: Omit<
69
- ColumnDef<TData, unknown>,
70
- 'id' | 'header' | 'accessorKey' | 'accessorFn' | 'columns'
71
- > &
72
- (
73
- | CoreColumnDefDisplayWithStringHeader<TData, unknown>
74
- | CoreColumnDefDisplay<TData, unknown>
75
- ) & { columns: ColumnDef<TData, any>[] }
76
- ) => ColumnDef<TData, unknown>
66
+ display: (column: DisplayColumnDef<TData>) => ColumnDef<TData, unknown>
67
+ group: (column: GroupColumnDef<TData>) => ColumnDef<TData, unknown>
77
68
  }
78
69
 
79
70
  export function createColumnHelper<
@@ -1,3 +1,4 @@
1
+ import { TaggedTemplateExpression } from '@babel/types'
1
2
  import {
2
3
  Column,
3
4
  Table,
@@ -6,62 +7,9 @@ import {
6
7
  ColumnDefTemplate,
7
8
  RowData,
8
9
  ColumnMeta,
10
+ ColumnDefResolved,
9
11
  } from '../types'
10
- import { DeepKeys, IsKnown, memo, UnionToIntersection } from '../utils'
11
- import { CellContext } from './cell'
12
- import { HeaderContext } from './headers'
13
-
14
- export type CoreColumnDefBase<TData extends RowData, TValue> = {
15
- columns?: ColumnDef<TData, unknown>[]
16
- header?: ColumnDefTemplate<HeaderContext<TData, TValue>>
17
- footer?: ColumnDefTemplate<HeaderContext<TData, TValue>>
18
- cell?: ColumnDefTemplate<CellContext<TData, TValue>>
19
- meta?: ColumnMeta<TData, TValue>
20
- }
21
-
22
- export type CoreColumnDefDisplay<
23
- TData extends RowData,
24
- TValue
25
- > = CoreColumnDefBase<TData, TValue> & {
26
- id: string
27
- }
28
-
29
- export type CoreColumnDefDisplayWithStringHeader<
30
- TData extends RowData,
31
- TValue
32
- > = CoreColumnDefBase<TData, TValue> & {
33
- header: string
34
- id?: string
35
- }
36
-
37
- export type CoreColumnDefAccessorFn<
38
- TData extends RowData,
39
- TValue
40
- > = CoreColumnDefBase<TData, TValue> & {
41
- accessorFn: AccessorFn<TData, TValue>
42
- id: string
43
- }
44
-
45
- export type CoreColumnDefAccessorKey<
46
- TData extends RowData,
47
- TValue
48
- > = CoreColumnDefBase<TData, TValue> & {
49
- accessorKey: DeepKeys<TData>
50
- id?: string
51
- }
52
-
53
- export type CoreColumnDef<TData extends RowData, TValue> =
54
- | CoreColumnDefDisplay<TData, TValue>
55
- | CoreColumnDefDisplayWithStringHeader<TData, TValue>
56
- | CoreColumnDefAccessorFn<TData, TValue>
57
- | CoreColumnDefAccessorKey<TData, TValue>
58
-
59
- export type CoreColumnDefResolved<
60
- TData extends RowData,
61
- TValue = unknown
62
- > = Partial<UnionToIntersection<CoreColumnDef<TData, TValue>>> & {
63
- accessorKey?: string
64
- }
12
+ import { memo } from '../utils'
65
13
 
66
14
  export type CoreColumn<TData extends RowData, TValue> = {
67
15
  id: string
@@ -85,7 +33,7 @@ export function createColumn<TData extends RowData, TValue>(
85
33
  const resolvedColumnDef = {
86
34
  ...defaultColumn,
87
35
  ...columnDef,
88
- } as CoreColumnDefResolved<TData>
36
+ } as ColumnDefResolved<TData>
89
37
 
90
38
  const accessorKey = resolvedColumnDef.accessorKey
91
39
 
package/src/core/table.ts CHANGED
@@ -14,17 +14,19 @@ import {
14
14
  TableOptions,
15
15
  RowData,
16
16
  TableMeta,
17
+ ColumnDefResolved,
18
+ GroupColumnDef,
17
19
  } from '../types'
18
20
 
19
21
  //
20
- import { CoreColumnDefResolved, createColumn } from './column'
22
+ import { createColumn } from './column'
21
23
  import { Headers } from './headers'
22
24
  //
23
25
 
24
26
  import { ColumnSizing } from '../features/ColumnSizing'
25
27
  import { Expanding } from '../features/Expanding'
26
28
  import { Filters } from '../features/Filters'
27
- import { Grouping } from '../features/Grouping'
29
+ import { Grouping, GroupingColumnDef } from '../features/Grouping'
28
30
  import { Ordering } from '../features/Ordering'
29
31
  import { Pagination } from '../features/Pagination'
30
32
  import { Pinning } from '../features/Pinning'
@@ -234,7 +236,7 @@ export function createTable<TData extends RowData>(
234
236
  return {
235
237
  header: props => {
236
238
  const resolvedColumnDef = props.header.column
237
- .columnDef as CoreColumnDefResolved<TData>
239
+ .columnDef as ColumnDefResolved<TData>
238
240
 
239
241
  if (resolvedColumnDef.accessorKey) {
240
242
  return resolvedColumnDef.accessorKey
@@ -273,8 +275,13 @@ export function createTable<TData extends RowData>(
273
275
  return columnDefs.map(columnDef => {
274
276
  const column = createColumn(table, columnDef, depth, parent)
275
277
 
276
- column.columns = columnDef.columns
277
- ? recurseColumns(columnDef.columns, column, depth + 1)
278
+ const groupingColumnDef = columnDef as GroupColumnDef<
279
+ TData,
280
+ unknown
281
+ >
282
+
283
+ column.columns = groupingColumnDef.columns
284
+ ? recurseColumns(groupingColumnDef.columns, column, depth + 1)
278
285
  : []
279
286
 
280
287
  return column
@@ -267,16 +267,16 @@ export const RowSelection: TableFeature = {
267
267
  // },
268
268
 
269
269
  getIsAllRowsSelected: () => {
270
- const preFilteredFlatRows = table.getPreFilteredRowModel().flatRows
270
+ const preGroupedFlatRows = table.getFilteredRowModel().flatRows
271
271
  const { rowSelection } = table.getState()
272
272
 
273
273
  let isAllRowsSelected = Boolean(
274
- preFilteredFlatRows.length && Object.keys(rowSelection).length
274
+ preGroupedFlatRows.length && Object.keys(rowSelection).length
275
275
  )
276
276
 
277
277
  if (isAllRowsSelected) {
278
278
  if (
279
- preFilteredFlatRows.some(
279
+ preGroupedFlatRows.some(
280
280
  row => row.getCanSelect() && !rowSelection[row.id]
281
281
  )
282
282
  ) {
@@ -309,7 +309,7 @@ export const RowSelection: TableFeature = {
309
309
  ).length
310
310
  return (
311
311
  totalSelected > 0 &&
312
- totalSelected < table.getCoreRowModel().flatRows.length
312
+ totalSelected < table.getFilteredRowModel().flatRows.length
313
313
  )
314
314
  },
315
315
 
package/src/types.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { CoreOptions, CoreTableState, CoreInstance } from './core/table'
2
- import { CoreColumn, CoreColumnDef } from './core/column'
3
2
  import {
4
3
  VisibilityInstance,
5
4
  VisibilityTableState,
@@ -21,7 +20,12 @@ import {
21
20
  ColumnPinningRow,
22
21
  ColumnPinningTableState,
23
22
  } from './features/Pinning'
24
- import { CoreHeader, CoreHeaderGroup, HeadersInstance } from './core/headers'
23
+ import {
24
+ CoreHeader,
25
+ CoreHeaderGroup,
26
+ HeaderContext,
27
+ HeadersInstance,
28
+ } from './core/headers'
25
29
  import {
26
30
  FilterFn,
27
31
  FiltersColumn,
@@ -75,8 +79,9 @@ import {
75
79
  RowSelectionTableState,
76
80
  } from './features/RowSelection'
77
81
  import { CoreRow } from './core/row'
78
- import { PartialKeys } from './utils'
79
- import { CoreCell } from './core/cell'
82
+ import { DeepKeys, PartialKeys, UnionToIntersection } from './utils'
83
+ import { CellContext, CoreCell } from './core/cell'
84
+ import { CoreColumn } from './core/column'
80
85
 
81
86
  export interface TableMeta<TData extends RowData> {}
82
87
  export interface ColumnMeta<TData extends RowData, TValue> {}
@@ -171,18 +176,97 @@ export type ColumnDefTemplate<TProps extends object> =
171
176
  | string
172
177
  | ((props: TProps) => any)
173
178
 
174
- export type ColumnDef<
175
- TData extends RowData,
176
- TValue extends any = unknown
177
- > = CoreColumnDef<TData, TValue> &
178
- VisibilityColumnDef &
179
+ export type StringOrTemplateHeader<TData, TValue> =
180
+ | string
181
+ | ColumnDefTemplate<HeaderContext<TData, TValue>>
182
+
183
+ type StringHeaderIdentifier = {
184
+ header: string
185
+ id?: string
186
+ }
187
+
188
+ type IdIdentifier<TData extends RowData, TValue> = {
189
+ id: string
190
+ header?: StringOrTemplateHeader<TData, TValue>
191
+ }
192
+
193
+ type ColumnIdentifiers<TData extends RowData, TValue> =
194
+ | IdIdentifier<TData, TValue>
195
+ | StringHeaderIdentifier
196
+
197
+ //
198
+
199
+ export type ColumnDefBase<TData extends RowData, TValue = unknown> = {
200
+ footer?: ColumnDefTemplate<HeaderContext<TData, TValue>>
201
+ cell?: ColumnDefTemplate<CellContext<TData, TValue>>
202
+ meta?: ColumnMeta<TData, TValue>
203
+ } & VisibilityColumnDef &
179
204
  ColumnPinningColumnDef &
180
205
  FiltersColumnDef<TData> &
181
206
  SortingColumnDef<TData> &
182
207
  GroupingColumnDef<TData, TValue> &
183
208
  ColumnSizingColumnDef
184
209
 
185
- export type Column<TData extends RowData, TValue> = CoreColumn<TData, TValue> &
210
+ //
211
+
212
+ export type IdentifiedColumnDef<
213
+ TData extends RowData,
214
+ TValue = unknown
215
+ > = ColumnDefBase<TData, TValue> & {
216
+ id?: string
217
+ header?: StringOrTemplateHeader<TData, TValue>
218
+ }
219
+
220
+ export type DisplayColumnDef<
221
+ TData extends RowData,
222
+ TValue = unknown
223
+ > = ColumnDefBase<TData, TValue> & ColumnIdentifiers<TData, TValue>
224
+
225
+ export type GroupColumnDef<
226
+ TData extends RowData,
227
+ TValue = unknown
228
+ > = ColumnDefBase<TData, TValue> &
229
+ ColumnIdentifiers<TData, TValue> & {
230
+ columns?: ColumnDef<TData, any>[]
231
+ }
232
+
233
+ export type AccessorFnColumnDef<
234
+ TData extends RowData,
235
+ TValue = unknown
236
+ > = ColumnDefBase<TData, TValue> &
237
+ ColumnIdentifiers<TData, TValue> & {
238
+ accessorFn: AccessorFn<TData, TValue>
239
+ }
240
+
241
+ export type AccessorKeyColumnDef<TData extends RowData, TValue = unknown> = {
242
+ id?: string
243
+ } & ColumnIdentifiers<TData, TValue> &
244
+ ColumnDefBase<TData, TValue> & {
245
+ accessorKey: DeepKeys<TData>
246
+ }
247
+
248
+ export type AccessorColumnDef<TData extends RowData, TValue = unknown> =
249
+ | AccessorKeyColumnDef<TData, TValue>
250
+ | AccessorFnColumnDef<TData, TValue>
251
+
252
+ //
253
+
254
+ export type ColumnDef<TData extends RowData, TValue = unknown> =
255
+ | DisplayColumnDef<TData, TValue>
256
+ | GroupColumnDef<TData, TValue>
257
+ | AccessorColumnDef<TData, TValue>
258
+
259
+ export type ColumnDefResolved<
260
+ TData extends RowData,
261
+ TValue = unknown
262
+ > = Partial<UnionToIntersection<ColumnDef<TData, TValue>>> & {
263
+ accessorKey?: string
264
+ }
265
+
266
+ export type Column<TData extends RowData, TValue = unknown> = CoreColumn<
267
+ TData,
268
+ TValue
269
+ > &
186
270
  ColumnVisibilityColumn &
187
271
  ColumnPinningColumn &
188
272
  FiltersColumn<TData> &
package/src/utils.ts CHANGED
@@ -51,6 +51,8 @@ export type DeepKeys<T> = unknown extends T
51
51
  ? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>>
52
52
  : T extends any[]
53
53
  ? never & 'Dynamic length array indexing is not supported'
54
+ : T extends Date
55
+ ? never
54
56
  : T extends object
55
57
  ? (keyof T & string) | DeepKeysPrefix<T, keyof T>
56
58
  : never