@tanstack/table-core 8.5.16 → 8.5.18

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.16",
4
+ "version": "8.5.18",
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",
@@ -56,6 +56,11 @@ export function createColumn<TData extends RowData, TValue>(
56
56
 
57
57
  for (const key of accessorKey.split('.')) {
58
58
  result = result[key]
59
+ if (process.env.NODE_ENV !== 'production' && result === undefined) {
60
+ throw new Error(
61
+ `"${key}" in deeply nested key "${accessorKey}" returned undefined.`
62
+ )
63
+ }
59
64
  }
60
65
 
61
66
  return result
package/src/core/row.ts CHANGED
@@ -8,7 +8,9 @@ export type CoreRow<TData extends RowData> = {
8
8
  original: TData
9
9
  depth: number
10
10
  _valuesCache: Record<string, unknown>
11
+ _uniqueValuesCache: Record<string, unknown>
11
12
  getValue: <TValue>(columnId: string) => TValue
13
+ getUniqueValues: <TValue>(columnId: string) => TValue[]
12
14
  renderValue: <TValue>(columnId: string) => TValue
13
15
  subRows: Row<TData>[]
14
16
  getLeafRows: () => Row<TData>[]
@@ -31,6 +33,7 @@ export const createRow = <TData extends RowData>(
31
33
  original,
32
34
  depth,
33
35
  _valuesCache: {},
36
+ _uniqueValuesCache: {},
34
37
  getValue: columnId => {
35
38
  if (row._valuesCache.hasOwnProperty(columnId)) {
36
39
  return row._valuesCache[columnId]
@@ -49,6 +52,29 @@ export const createRow = <TData extends RowData>(
49
52
 
50
53
  return row._valuesCache[columnId] as any
51
54
  },
55
+ getUniqueValues: columnId => {
56
+ if (row._uniqueValuesCache.hasOwnProperty(columnId)) {
57
+ return row._uniqueValuesCache[columnId]
58
+ }
59
+
60
+ const column = table.getColumn(columnId)
61
+
62
+ if (!column.accessorFn) {
63
+ return undefined
64
+ }
65
+
66
+ if (!column.columnDef.getUniqueValues) {
67
+ row._uniqueValuesCache[columnId] = [row.getValue(columnId)]
68
+ return row._uniqueValuesCache[columnId]
69
+ }
70
+
71
+ row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(
72
+ row.original as TData,
73
+ rowIndex
74
+ )
75
+
76
+ return row._uniqueValuesCache[columnId] as any
77
+ },
52
78
  renderValue: columnId =>
53
79
  row.getValue(columnId) ?? table.options.renderFallbackValue,
54
80
  subRows: subRows ?? [],
package/src/types.ts CHANGED
@@ -197,6 +197,7 @@ type ColumnIdentifiers<TData extends RowData, TValue> =
197
197
  //
198
198
 
199
199
  export type ColumnDefBase<TData extends RowData, TValue = unknown> = {
200
+ getUniqueValues?: AccessorFn<TData, unknown[]>
200
201
  footer?: ColumnDefTemplate<HeaderContext<TData, TValue>>
201
202
  cell?: ColumnDefTemplate<CellContext<TData, TValue>>
202
203
  meta?: ColumnMeta<TData, TValue>
@@ -9,7 +9,8 @@ export function getFacetedMinMaxValues<TData extends RowData>(): (
9
9
  memo(
10
10
  () => [table.getColumn(columnId).getFacetedRowModel()],
11
11
  facetedRowModel => {
12
- const firstValue = facetedRowModel.flatRows[0]?.getValue(columnId)
12
+ const firstValue =
13
+ facetedRowModel.flatRows[0]?.getUniqueValues(columnId)
13
14
 
14
15
  if (typeof firstValue === 'undefined') {
15
16
  return undefined
@@ -18,12 +19,17 @@ export function getFacetedMinMaxValues<TData extends RowData>(): (
18
19
  let facetedMinMaxValues: [any, any] = [firstValue, firstValue]
19
20
 
20
21
  for (let i = 0; i < facetedRowModel.flatRows.length; i++) {
21
- const value = facetedRowModel.flatRows[i]!.getValue<number>(columnId)
22
+ const values =
23
+ facetedRowModel.flatRows[i]!.getUniqueValues<number>(columnId)
22
24
 
23
- if (value < facetedMinMaxValues[0]) {
24
- facetedMinMaxValues[0] = value
25
- } else if (value > facetedMinMaxValues[1]) {
26
- facetedMinMaxValues[1] = value
25
+ for (let j = 0; j < values.length; j++) {
26
+ const value = values[j]!
27
+
28
+ if (value < facetedMinMaxValues[0]) {
29
+ facetedMinMaxValues[0] = value
30
+ } else if (value > facetedMinMaxValues[1]) {
31
+ facetedMinMaxValues[1] = value
32
+ }
27
33
  }
28
34
  }
29
35
 
@@ -12,15 +12,20 @@ export function getFacetedUniqueValues<TData extends RowData>(): (
12
12
  let facetedUniqueValues = new Map<any, number>()
13
13
 
14
14
  for (let i = 0; i < facetedRowModel.flatRows.length; i++) {
15
- const value = facetedRowModel.flatRows[i]?.getValue(columnId)
15
+ const values =
16
+ facetedRowModel.flatRows[i]!.getUniqueValues<number>(columnId)
16
17
 
17
- if (facetedUniqueValues.has(value)) {
18
- facetedUniqueValues.set(
19
- value,
20
- (facetedUniqueValues.get(value) ?? 0) + 1
21
- )
22
- } else {
23
- facetedUniqueValues.set(value, 1)
18
+ for (let j = 0; j < values.length; j++) {
19
+ const value = values[j]!
20
+
21
+ if (facetedUniqueValues.has(value)) {
22
+ facetedUniqueValues.set(
23
+ value,
24
+ (facetedUniqueValues.get(value) ?? 0) + 1
25
+ )
26
+ } else {
27
+ facetedUniqueValues.set(value, 1)
28
+ }
24
29
  }
25
30
  }
26
31