@tanstack/table-core 9.0.0-alpha.46 → 9.0.0-alpha.47
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/dist/core/cells/constructCell.cjs +4 -3
- package/dist/core/cells/constructCell.cjs.map +1 -1
- package/dist/core/cells/constructCell.js +4 -3
- package/dist/core/cells/constructCell.js.map +1 -1
- package/dist/core/columns/constructColumn.cjs +6 -4
- package/dist/core/columns/constructColumn.cjs.map +1 -1
- package/dist/core/columns/constructColumn.js +6 -4
- package/dist/core/columns/constructColumn.js.map +1 -1
- package/dist/core/columns/coreColumnsFeature.utils.cjs +10 -2
- package/dist/core/columns/coreColumnsFeature.utils.cjs.map +1 -1
- package/dist/core/columns/coreColumnsFeature.utils.js +10 -2
- package/dist/core/columns/coreColumnsFeature.utils.js.map +1 -1
- package/dist/core/headers/buildHeaderGroups.cjs +27 -19
- package/dist/core/headers/buildHeaderGroups.cjs.map +1 -1
- package/dist/core/headers/buildHeaderGroups.js +27 -19
- package/dist/core/headers/buildHeaderGroups.js.map +1 -1
- package/dist/core/headers/constructHeader.cjs +4 -3
- package/dist/core/headers/constructHeader.cjs.map +1 -1
- package/dist/core/headers/constructHeader.js +4 -3
- package/dist/core/headers/constructHeader.js.map +1 -1
- package/dist/core/headers/coreHeadersFeature.cjs +1 -6
- package/dist/core/headers/coreHeadersFeature.cjs.map +1 -1
- package/dist/core/headers/coreHeadersFeature.js +2 -7
- package/dist/core/headers/coreHeadersFeature.js.map +1 -1
- package/dist/core/headers/coreHeadersFeature.utils.cjs +20 -18
- package/dist/core/headers/coreHeadersFeature.utils.cjs.map +1 -1
- package/dist/core/headers/coreHeadersFeature.utils.d.cts +1 -1
- package/dist/core/headers/coreHeadersFeature.utils.d.ts +1 -1
- package/dist/core/headers/coreHeadersFeature.utils.js +21 -19
- package/dist/core/headers/coreHeadersFeature.utils.js.map +1 -1
- package/dist/core/reactivity/coreReactivityFeature.types.d.cts +4 -0
- package/dist/core/reactivity/coreReactivityFeature.types.d.ts +4 -0
- package/dist/core/rows/constructRow.cjs +8 -6
- package/dist/core/rows/constructRow.cjs.map +1 -1
- package/dist/core/rows/constructRow.js +8 -6
- package/dist/core/rows/constructRow.js.map +1 -1
- package/dist/core/rows/coreRowsFeature.utils.cjs +9 -4
- package/dist/core/rows/coreRowsFeature.utils.cjs.map +1 -1
- package/dist/core/rows/coreRowsFeature.utils.js +9 -4
- package/dist/core/rows/coreRowsFeature.utils.js.map +1 -1
- package/dist/core/table/constructTable.cjs +9 -5
- package/dist/core/table/constructTable.cjs.map +1 -1
- package/dist/core/table/constructTable.js +9 -5
- package/dist/core/table/constructTable.js.map +1 -1
- package/dist/core/table/coreTablesFeature.utils.cjs +5 -1
- package/dist/core/table/coreTablesFeature.utils.cjs.map +1 -1
- package/dist/core/table/coreTablesFeature.utils.js +5 -1
- package/dist/core/table/coreTablesFeature.utils.js.map +1 -1
- package/dist/features/column-faceting/createFacetedMinMaxValues.cjs +8 -5
- package/dist/features/column-faceting/createFacetedMinMaxValues.cjs.map +1 -1
- package/dist/features/column-faceting/createFacetedMinMaxValues.js +8 -5
- package/dist/features/column-faceting/createFacetedMinMaxValues.js.map +1 -1
- package/dist/features/column-faceting/createFacetedRowModel.cjs +8 -3
- package/dist/features/column-faceting/createFacetedRowModel.cjs.map +1 -1
- package/dist/features/column-faceting/createFacetedRowModel.js +8 -3
- package/dist/features/column-faceting/createFacetedRowModel.js.map +1 -1
- package/dist/features/column-faceting/createFacetedUniqueValues.cjs +7 -4
- package/dist/features/column-faceting/createFacetedUniqueValues.cjs.map +1 -1
- package/dist/features/column-faceting/createFacetedUniqueValues.js +7 -4
- package/dist/features/column-faceting/createFacetedUniqueValues.js.map +1 -1
- package/dist/features/column-filtering/createFilteredRowModel.cjs +11 -5
- package/dist/features/column-filtering/createFilteredRowModel.cjs.map +1 -1
- package/dist/features/column-filtering/createFilteredRowModel.js +11 -5
- package/dist/features/column-filtering/createFilteredRowModel.js.map +1 -1
- package/dist/features/column-ordering/columnOrderingFeature.utils.cjs +16 -6
- package/dist/features/column-ordering/columnOrderingFeature.utils.cjs.map +1 -1
- package/dist/features/column-ordering/columnOrderingFeature.utils.js +16 -6
- package/dist/features/column-ordering/columnOrderingFeature.utils.js.map +1 -1
- package/dist/features/column-pinning/columnPinningFeature.utils.cjs +41 -24
- package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
- package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +5 -4
- package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +5 -4
- package/dist/features/column-pinning/columnPinningFeature.utils.js +42 -25
- package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
- package/dist/features/column-sizing/columnSizingFeature.cjs +28 -4
- package/dist/features/column-sizing/columnSizingFeature.cjs.map +1 -1
- package/dist/features/column-sizing/columnSizingFeature.js +28 -4
- package/dist/features/column-sizing/columnSizingFeature.js.map +1 -1
- package/dist/features/column-visibility/columnVisibilityFeature.cjs +23 -14
- package/dist/features/column-visibility/columnVisibilityFeature.cjs.map +1 -1
- package/dist/features/column-visibility/columnVisibilityFeature.js +24 -15
- package/dist/features/column-visibility/columnVisibilityFeature.js.map +1 -1
- package/dist/features/column-visibility/columnVisibilityFeature.types.d.cts +4 -0
- package/dist/features/column-visibility/columnVisibilityFeature.types.d.ts +4 -0
- package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +40 -13
- package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
- package/dist/features/column-visibility/columnVisibilityFeature.utils.d.cts +12 -1
- package/dist/features/column-visibility/columnVisibilityFeature.utils.d.ts +12 -1
- package/dist/features/column-visibility/columnVisibilityFeature.utils.js +40 -14
- package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
- package/dist/features/row-expanding/rowExpandingFeature.utils.cjs +2 -2
- package/dist/features/row-expanding/rowExpandingFeature.utils.cjs.map +1 -1
- package/dist/features/row-expanding/rowExpandingFeature.utils.js +2 -2
- package/dist/features/row-expanding/rowExpandingFeature.utils.js.map +1 -1
- package/dist/features/row-pinning/rowPinningFeature.utils.cjs +13 -7
- package/dist/features/row-pinning/rowPinningFeature.utils.cjs.map +1 -1
- package/dist/features/row-pinning/rowPinningFeature.utils.js +13 -7
- package/dist/features/row-pinning/rowPinningFeature.utils.js.map +1 -1
- package/dist/features/row-selection/rowSelectionFeature.utils.cjs +6 -3
- package/dist/features/row-selection/rowSelectionFeature.utils.cjs.map +1 -1
- package/dist/features/row-selection/rowSelectionFeature.utils.js +6 -3
- package/dist/features/row-selection/rowSelectionFeature.utils.js.map +1 -1
- package/dist/features/row-sorting/createSortedRowModel.cjs +13 -8
- package/dist/features/row-sorting/createSortedRowModel.cjs.map +1 -1
- package/dist/features/row-sorting/createSortedRowModel.js +13 -8
- package/dist/features/row-sorting/createSortedRowModel.js.map +1 -1
- package/dist/features/row-sorting/rowSortingFeature.utils.cjs +2 -2
- package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
- package/dist/features/row-sorting/rowSortingFeature.utils.js +2 -2
- package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
- package/dist/fns/aggregationFns.cjs +14 -7
- package/dist/fns/aggregationFns.cjs.map +1 -1
- package/dist/fns/aggregationFns.js +14 -8
- package/dist/fns/aggregationFns.js.map +1 -1
- package/dist/index.cjs +0 -4
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/static-functions.cjs +1 -0
- package/dist/static-functions.d.cts +2 -2
- package/dist/static-functions.d.ts +2 -2
- package/dist/static-functions.js +2 -2
- package/dist/store-reactivity-bindings.cjs +1 -0
- package/dist/store-reactivity-bindings.cjs.map +1 -1
- package/dist/store-reactivity-bindings.js +1 -0
- package/dist/store-reactivity-bindings.js.map +1 -1
- package/dist/utils.cjs +18 -39
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +1 -23
- package/dist/utils.d.ts +1 -23
- package/dist/utils.js +19 -36
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/core/cells/constructCell.ts +3 -2
- package/src/core/columns/constructColumn.ts +5 -3
- package/src/core/columns/coreColumnsFeature.utils.ts +6 -2
- package/src/core/headers/buildHeaderGroups.ts +29 -30
- package/src/core/headers/constructHeader.ts +3 -2
- package/src/core/headers/coreHeadersFeature.ts +2 -27
- package/src/core/headers/coreHeadersFeature.utils.ts +29 -43
- package/src/core/reactivity/coreReactivityFeature.types.ts +4 -0
- package/src/core/rows/constructRow.ts +6 -4
- package/src/core/rows/coreRowsFeature.utils.ts +11 -4
- package/src/core/table/constructTable.ts +6 -4
- package/src/core/table/coreTablesFeature.utils.ts +3 -1
- package/src/features/column-faceting/createFacetedMinMaxValues.ts +8 -10
- package/src/features/column-faceting/createFacetedRowModel.ts +10 -6
- package/src/features/column-faceting/createFacetedUniqueValues.ts +4 -3
- package/src/features/column-filtering/createFilteredRowModel.ts +14 -8
- package/src/features/column-ordering/columnOrderingFeature.utils.ts +14 -6
- package/src/features/column-pinning/columnPinningFeature.utils.ts +53 -37
- package/src/features/column-sizing/columnSizingFeature.ts +16 -0
- package/src/features/column-visibility/columnVisibilityFeature.ts +8 -0
- package/src/features/column-visibility/columnVisibilityFeature.types.ts +7 -0
- package/src/features/column-visibility/columnVisibilityFeature.utils.ts +50 -17
- package/src/features/row-expanding/rowExpandingFeature.utils.ts +2 -2
- package/src/features/row-pinning/rowPinningFeature.utils.ts +20 -18
- package/src/features/row-selection/rowSelectionFeature.utils.ts +20 -19
- package/src/features/row-sorting/createSortedRowModel.ts +16 -13
- package/src/features/row-sorting/rowSortingFeature.utils.ts +2 -2
- package/src/fns/aggregationFns.ts +20 -8
- package/src/store-reactivity-bindings.ts +1 -0
- package/src/utils.ts +19 -46
|
@@ -49,20 +49,18 @@ function _createFacetedMinMaxValues<
|
|
|
49
49
|
): undefined | [number, number] {
|
|
50
50
|
if (!flatRows.length) return undefined
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
.filter((value) => !Number.isNaN(value))
|
|
52
|
+
let facetedMinValue = Number.POSITIVE_INFINITY
|
|
53
|
+
let facetedMaxValue = Number.NEGATIVE_INFINITY
|
|
54
|
+
let foundAny = false
|
|
56
55
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
for (const value of numericValues) {
|
|
56
|
+
for (let i = 0; i < flatRows.length; i++) {
|
|
57
|
+
const value = Number(flatRows[i]!.getValue(columnId))
|
|
58
|
+
if (Number.isNaN(value)) continue
|
|
59
|
+
foundAny = true
|
|
63
60
|
if (value < facetedMinValue) facetedMinValue = value
|
|
64
61
|
if (value > facetedMaxValue) facetedMaxValue = value
|
|
65
62
|
}
|
|
66
63
|
|
|
64
|
+
if (!foundAny) return undefined
|
|
67
65
|
return [facetedMinValue, facetedMaxValue]
|
|
68
66
|
}
|
|
@@ -60,17 +60,21 @@ function _createFacetedRowModel<
|
|
|
60
60
|
return preRowModel
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
const filterableIds = [
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
const filterableIds: Array<string> = []
|
|
64
|
+
if (columnFilters) {
|
|
65
|
+
for (let i = 0; i < columnFilters.length; i++) {
|
|
66
|
+
const id = columnFilters[i]!.id
|
|
67
|
+
if (id !== columnId) filterableIds.push(id)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (globalFilter) filterableIds.push('__global__')
|
|
67
71
|
|
|
68
72
|
const filterRowsImpl = (
|
|
69
73
|
row: Row<TFeatures, TData> & Partial<Row_ColumnFiltering<TFeatures, TData>>,
|
|
70
74
|
) => {
|
|
71
75
|
// Horizontally filter rows through each column
|
|
72
|
-
for (
|
|
73
|
-
if (row.columnFilters?.[
|
|
76
|
+
for (let i = 0; i < filterableIds.length; i++) {
|
|
77
|
+
if (row.columnFilters?.[filterableIds[i]!] === false) {
|
|
74
78
|
return false
|
|
75
79
|
}
|
|
76
80
|
}
|
|
@@ -46,10 +46,11 @@ function _createFacetedUniqueValues<
|
|
|
46
46
|
>(columnId: string, flatRows: Array<Row<TFeatures, TData>>): Map<any, number> {
|
|
47
47
|
const facetedUniqueValues = new Map<any, number>()
|
|
48
48
|
|
|
49
|
-
for (
|
|
50
|
-
const values =
|
|
49
|
+
for (let i = 0; i < flatRows.length; i++) {
|
|
50
|
+
const values = flatRows[i]!.getUniqueValues(columnId)
|
|
51
51
|
|
|
52
|
-
for (
|
|
52
|
+
for (let j = 0; j < values.length; j++) {
|
|
53
|
+
const value = values[j]
|
|
53
54
|
if (facetedUniqueValues.has(value)) {
|
|
54
55
|
facetedUniqueValues.set(
|
|
55
56
|
value,
|
|
@@ -57,9 +57,11 @@ function _createFilteredRowModel<
|
|
|
57
57
|
const globalFilter = table.atoms.globalFilter?.get()
|
|
58
58
|
|
|
59
59
|
if (!rowModel.rows.length || (!columnFilters?.length && !globalFilter)) {
|
|
60
|
-
|
|
60
|
+
const flatRows = rowModel.flatRows as Array<
|
|
61
61
|
Row<TFeatures, TData> & Partial<Row_ColumnFiltering<TFeatures, TData>>
|
|
62
|
-
>
|
|
62
|
+
>
|
|
63
|
+
for (let i = 0; i < flatRows.length; i++) {
|
|
64
|
+
const row = flatRows[i]!
|
|
63
65
|
row.columnFilters = {}
|
|
64
66
|
row.columnFiltersMeta = {}
|
|
65
67
|
}
|
|
@@ -110,13 +112,16 @@ function _createFilteredRowModel<
|
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
// Flag the pre-filtered row model with each filter state
|
|
113
|
-
|
|
115
|
+
const flatRows = rowModel.flatRows as Array<
|
|
114
116
|
Row<TFeatures, TData> & Partial<Row_ColumnFiltering<TFeatures, TData>>
|
|
115
|
-
>
|
|
117
|
+
>
|
|
118
|
+
for (let i = 0; i < flatRows.length; i++) {
|
|
119
|
+
const row = flatRows[i]!
|
|
116
120
|
row.columnFilters = {}
|
|
117
121
|
|
|
118
122
|
if (resolvedColumnFilters.length) {
|
|
119
|
-
for (
|
|
123
|
+
for (let j = 0; j < resolvedColumnFilters.length; j++) {
|
|
124
|
+
const currentColumnFilter = resolvedColumnFilters[j]!
|
|
120
125
|
const id = currentColumnFilter.id
|
|
121
126
|
|
|
122
127
|
// Tag the row with the column filter state
|
|
@@ -134,7 +139,8 @@ function _createFilteredRowModel<
|
|
|
134
139
|
}
|
|
135
140
|
|
|
136
141
|
if (resolvedGlobalFilters.length) {
|
|
137
|
-
for (
|
|
142
|
+
for (let j = 0; j < resolvedGlobalFilters.length; j++) {
|
|
143
|
+
const currentGlobalFilter = resolvedGlobalFilters[j]!
|
|
138
144
|
const id = currentGlobalFilter.id
|
|
139
145
|
// Tag the row with the first truthy global filter state
|
|
140
146
|
if (
|
|
@@ -164,8 +170,8 @@ function _createFilteredRowModel<
|
|
|
164
170
|
row: Row<TFeatures, TData> & Row_ColumnFiltering<TFeatures, TData>,
|
|
165
171
|
) => {
|
|
166
172
|
// Horizontally filter rows through each column
|
|
167
|
-
for (
|
|
168
|
-
if (row.columnFilters[
|
|
173
|
+
for (let i = 0; i < filterableIds.length; i++) {
|
|
174
|
+
if (row.columnFilters[filterableIds[i]!] === false) {
|
|
169
175
|
return false
|
|
170
176
|
}
|
|
171
177
|
}
|
|
@@ -156,11 +156,15 @@ export function table_getOrderColumnsFn<
|
|
|
156
156
|
string,
|
|
157
157
|
Column_Internal<TFeatures, TData, unknown>
|
|
158
158
|
>()
|
|
159
|
-
for (
|
|
159
|
+
for (let i = 0; i < columns.length; i++) {
|
|
160
|
+
const column = columns[i]!
|
|
161
|
+
remaining.set(column.id, column)
|
|
162
|
+
}
|
|
160
163
|
|
|
161
164
|
// Place columns in the requested order, removing each as it's used
|
|
162
165
|
// (handles duplicates and unknown ids in columnOrder)
|
|
163
|
-
for (
|
|
166
|
+
for (let i = 0; i < columnOrder.length; i++) {
|
|
167
|
+
const id = columnOrder[i]!
|
|
164
168
|
const column = remaining.get(id)
|
|
165
169
|
if (column) {
|
|
166
170
|
orderedColumns.push(column)
|
|
@@ -169,7 +173,8 @@ export function table_getOrderColumnsFn<
|
|
|
169
173
|
}
|
|
170
174
|
|
|
171
175
|
// Append leftover columns in their original order
|
|
172
|
-
for (
|
|
176
|
+
for (let i = 0; i < columns.length; i++) {
|
|
177
|
+
const column = columns[i]!
|
|
173
178
|
if (remaining.has(column.id)) orderedColumns.push(column)
|
|
174
179
|
}
|
|
175
180
|
}
|
|
@@ -214,11 +219,14 @@ export function orderColumns<
|
|
|
214
219
|
string,
|
|
215
220
|
Column_Internal<TFeatures, TData, unknown>
|
|
216
221
|
>()
|
|
217
|
-
for (
|
|
222
|
+
for (let i = 0; i < leafColumns.length; i++) {
|
|
223
|
+
const col = leafColumns[i]!
|
|
224
|
+
leafColumnsById.set(col.id, col)
|
|
225
|
+
}
|
|
218
226
|
|
|
219
227
|
const groupingColumns: Array<Column_Internal<TFeatures, TData, unknown>> = []
|
|
220
|
-
for (
|
|
221
|
-
const col = leafColumnsById.get(
|
|
228
|
+
for (let i = 0; i < grouping.length; i++) {
|
|
229
|
+
const col = leafColumnsById.get(grouping[i]!)
|
|
222
230
|
if (col) groupingColumns.push(col)
|
|
223
231
|
}
|
|
224
232
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
column_getIsVisible,
|
|
3
3
|
row_getVisibleCells,
|
|
4
|
+
row_getVisibleCellsByColumnId,
|
|
4
5
|
table_getVisibleLeafColumns,
|
|
5
6
|
} from '../column-visibility/columnVisibilityFeature.utils'
|
|
6
7
|
import { buildHeaderGroups } from '../../core/headers/buildHeaderGroups'
|
|
7
8
|
import { callMemoOrStaticFn, cloneState } from '../../utils'
|
|
9
|
+
import type { Header } from '../../types/Header'
|
|
8
10
|
import type { HeaderGroup } from '../../types/HeaderGroup'
|
|
9
11
|
import type { Cell } from '../../types/Cell'
|
|
10
12
|
import type { Row } from '../../types/Row'
|
|
@@ -56,10 +58,13 @@ export function column_pin<
|
|
|
56
58
|
column: Column_Internal<TFeatures, TData, TValue>,
|
|
57
59
|
position: ColumnPinningPosition,
|
|
58
60
|
) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
// Single pass: collect non-empty leaf-column ids.
|
|
62
|
+
const leafColumns = column.getLeafColumns()
|
|
63
|
+
const columnIds: Array<string> = []
|
|
64
|
+
for (let i = 0; i < leafColumns.length; i++) {
|
|
65
|
+
const id = leafColumns[i]!.id
|
|
66
|
+
if (id) columnIds.push(id)
|
|
67
|
+
}
|
|
63
68
|
|
|
64
69
|
table_setColumnPinning(column.table, (old) => {
|
|
65
70
|
if (position === 'right') {
|
|
@@ -209,12 +214,13 @@ export function row_getLeftVisibleCells<
|
|
|
209
214
|
if (!left.length) return []
|
|
210
215
|
const allVisibleCells = callMemoOrStaticFn(
|
|
211
216
|
row,
|
|
212
|
-
'
|
|
213
|
-
|
|
217
|
+
'getVisibleCellsByColumnId',
|
|
218
|
+
row_getVisibleCellsByColumnId,
|
|
214
219
|
)
|
|
215
|
-
const cells:
|
|
216
|
-
for (
|
|
217
|
-
const
|
|
220
|
+
const cells: Array<Cell<TFeatures, TData, unknown>> = []
|
|
221
|
+
for (let i = 0; i < left.length; i++) {
|
|
222
|
+
const columnId = left[i]!
|
|
223
|
+
const cell = allVisibleCells[columnId]
|
|
218
224
|
if (cell) {
|
|
219
225
|
// Assign position property directly to preserve prototype chain
|
|
220
226
|
cell.position = 'left'
|
|
@@ -243,12 +249,13 @@ export function row_getRightVisibleCells<
|
|
|
243
249
|
if (!right.length) return [] as Array<Cell<TFeatures, TData, unknown>>
|
|
244
250
|
const allVisibleCells = callMemoOrStaticFn(
|
|
245
251
|
row,
|
|
246
|
-
'
|
|
247
|
-
|
|
252
|
+
'getVisibleCellsByColumnId',
|
|
253
|
+
row_getVisibleCellsByColumnId,
|
|
248
254
|
)
|
|
249
|
-
const cells:
|
|
250
|
-
for (
|
|
251
|
-
const
|
|
255
|
+
const cells: Array<Cell<TFeatures, TData, unknown>> = []
|
|
256
|
+
for (let i = 0; i < right.length; i++) {
|
|
257
|
+
const columnId = right[i]!
|
|
258
|
+
const cell = allVisibleCells[columnId]
|
|
252
259
|
if (cell) {
|
|
253
260
|
// Assign position property directly to preserve prototype chain
|
|
254
261
|
cell.position = 'right'
|
|
@@ -353,8 +360,8 @@ export function table_getLeftHeaderGroups<
|
|
|
353
360
|
|
|
354
361
|
const orderedLeafColumns: Array<Column_Internal<TFeatures, TData, unknown>> =
|
|
355
362
|
[]
|
|
356
|
-
for (
|
|
357
|
-
const column = leafColumnsById[
|
|
363
|
+
for (let i = 0; i < left.length; i++) {
|
|
364
|
+
const column = leafColumnsById[left[i]!]
|
|
358
365
|
if (
|
|
359
366
|
column &&
|
|
360
367
|
callMemoOrStaticFn(column, 'getIsVisible', column_getIsVisible)
|
|
@@ -390,8 +397,8 @@ export function table_getRightHeaderGroups<
|
|
|
390
397
|
|
|
391
398
|
const orderedLeafColumns: Array<Column_Internal<TFeatures, TData, unknown>> =
|
|
392
399
|
[]
|
|
393
|
-
for (
|
|
394
|
-
const column = leafColumnsById[
|
|
400
|
+
for (let i = 0; i < right.length; i++) {
|
|
401
|
+
const column = leafColumnsById[right[i]!]
|
|
395
402
|
if (
|
|
396
403
|
column &&
|
|
397
404
|
callMemoOrStaticFn(column, 'getIsVisible', column_getIsVisible)
|
|
@@ -524,11 +531,14 @@ export function table_getLeftFlatHeaders<
|
|
|
524
531
|
'getLeftHeaderGroups',
|
|
525
532
|
table_getLeftHeaderGroups,
|
|
526
533
|
)
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
534
|
+
const result: Array<Header<TFeatures, TData, unknown>> = []
|
|
535
|
+
for (let i = 0; i < leftHeaderGroups.length; i++) {
|
|
536
|
+
const headers = leftHeaderGroups[i]!.headers
|
|
537
|
+
for (let j = 0; j < headers.length; j++) {
|
|
538
|
+
result.push(headers[j])
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
return result
|
|
532
542
|
}
|
|
533
543
|
|
|
534
544
|
/**
|
|
@@ -550,11 +560,14 @@ export function table_getRightFlatHeaders<
|
|
|
550
560
|
'getRightHeaderGroups',
|
|
551
561
|
table_getRightHeaderGroups,
|
|
552
562
|
)
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
563
|
+
const result: Array<Header<TFeatures, TData, unknown>> = []
|
|
564
|
+
for (let i = 0; i < rightHeaderGroups.length; i++) {
|
|
565
|
+
const headers = rightHeaderGroups[i]!.headers
|
|
566
|
+
for (let j = 0; j < headers.length; j++) {
|
|
567
|
+
result.push(headers[j])
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
return result
|
|
558
571
|
}
|
|
559
572
|
|
|
560
573
|
/**
|
|
@@ -576,11 +589,14 @@ export function table_getCenterFlatHeaders<
|
|
|
576
589
|
'getCenterHeaderGroups',
|
|
577
590
|
table_getCenterHeaderGroups,
|
|
578
591
|
)
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
592
|
+
const result: Array<Header<TFeatures, TData, unknown>> = []
|
|
593
|
+
for (let i = 0; i < centerHeaderGroups.length; i++) {
|
|
594
|
+
const headers = centerHeaderGroups[i]!.headers
|
|
595
|
+
for (let j = 0; j < headers.length; j++) {
|
|
596
|
+
result.push(headers[j])
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
return result
|
|
584
600
|
}
|
|
585
601
|
|
|
586
602
|
// leaf headers
|
|
@@ -668,8 +684,8 @@ export function table_getLeftLeafColumns<
|
|
|
668
684
|
table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()
|
|
669
685
|
const leafColumnsById = table.getAllLeafColumnsById()
|
|
670
686
|
const result: Array<Column_Internal<TFeatures, TData, unknown>> = []
|
|
671
|
-
for (
|
|
672
|
-
const column = leafColumnsById[
|
|
687
|
+
for (let i = 0; i < left.length; i++) {
|
|
688
|
+
const column = leafColumnsById[left[i]!]
|
|
673
689
|
if (column) result.push(column)
|
|
674
690
|
}
|
|
675
691
|
return result
|
|
@@ -693,8 +709,8 @@ export function table_getRightLeafColumns<
|
|
|
693
709
|
table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()
|
|
694
710
|
const leafColumnsById = table.getAllLeafColumnsById()
|
|
695
711
|
const result: Array<Column_Internal<TFeatures, TData, unknown>> = []
|
|
696
|
-
for (
|
|
697
|
-
const column = leafColumnsById[
|
|
712
|
+
for (let i = 0; i < right.length; i++) {
|
|
713
|
+
const column = leafColumnsById[right[i]!]
|
|
698
714
|
if (column) result.push(column)
|
|
699
715
|
}
|
|
700
716
|
return result
|
|
@@ -141,15 +141,31 @@ export function constructColumnSizingFeature<
|
|
|
141
141
|
},
|
|
142
142
|
table_getTotalSize: {
|
|
143
143
|
fn: () => table_getTotalSize(table),
|
|
144
|
+
memoDeps: () => [
|
|
145
|
+
table.atoms.columnSizing?.get(),
|
|
146
|
+
table.getHeaderGroups(),
|
|
147
|
+
],
|
|
144
148
|
},
|
|
145
149
|
table_getLeftTotalSize: {
|
|
146
150
|
fn: () => table_getLeftTotalSize(table),
|
|
151
|
+
memoDeps: () => [
|
|
152
|
+
table.atoms.columnSizing?.get(),
|
|
153
|
+
table.getHeaderGroups(),
|
|
154
|
+
],
|
|
147
155
|
},
|
|
148
156
|
table_getCenterTotalSize: {
|
|
149
157
|
fn: () => table_getCenterTotalSize(table),
|
|
158
|
+
memoDeps: () => [
|
|
159
|
+
table.atoms.columnSizing?.get(),
|
|
160
|
+
table.getHeaderGroups(),
|
|
161
|
+
],
|
|
150
162
|
},
|
|
151
163
|
table_getRightTotalSize: {
|
|
152
164
|
fn: () => table_getRightTotalSize(table),
|
|
165
|
+
memoDeps: () => [
|
|
166
|
+
table.atoms.columnSizing?.get(),
|
|
167
|
+
table.getHeaderGroups(),
|
|
168
|
+
],
|
|
153
169
|
},
|
|
154
170
|
})
|
|
155
171
|
},
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
column_toggleVisibility,
|
|
11
11
|
getDefaultColumnVisibilityState,
|
|
12
12
|
row_getVisibleCells,
|
|
13
|
+
row_getVisibleCellsByColumnId,
|
|
13
14
|
table_getIsAllColumnsVisible,
|
|
14
15
|
table_getIsSomeColumnsVisible,
|
|
15
16
|
table_getToggleAllColumnsVisibilityHandler,
|
|
@@ -97,6 +98,13 @@ export function constructColumnVisibilityFeature<
|
|
|
97
98
|
table.atoms.columnVisibility?.get(),
|
|
98
99
|
],
|
|
99
100
|
},
|
|
101
|
+
row_getVisibleCellsByColumnId: {
|
|
102
|
+
fn: (row) => row_getVisibleCellsByColumnId(row),
|
|
103
|
+
memoDeps: (row) => [
|
|
104
|
+
row.getAllCells(),
|
|
105
|
+
table.atoms.columnVisibility?.get(),
|
|
106
|
+
],
|
|
107
|
+
},
|
|
100
108
|
})
|
|
101
109
|
},
|
|
102
110
|
|
|
@@ -80,6 +80,13 @@ export interface Row_ColumnVisibility<
|
|
|
80
80
|
* Returns an array of cells that account for column visibility for the row.
|
|
81
81
|
*/
|
|
82
82
|
getVisibleCells: () => Array<Cell<TFeatures, TData, unknown>>
|
|
83
|
+
/**
|
|
84
|
+
* Returns visible cells by column id for the row.
|
|
85
|
+
*/
|
|
86
|
+
getVisibleCellsByColumnId: () => Record<
|
|
87
|
+
string,
|
|
88
|
+
Cell<TFeatures, TData, unknown>
|
|
89
|
+
>
|
|
83
90
|
}
|
|
84
91
|
|
|
85
92
|
export interface Column_ColumnVisibility {
|
|
@@ -130,42 +130,73 @@ export function row_getVisibleCells<
|
|
|
130
130
|
TFeatures extends TableFeatures,
|
|
131
131
|
TData extends RowData,
|
|
132
132
|
>(row: Row<TFeatures, TData>): Array<Cell<TFeatures, TData, unknown>> {
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
)
|
|
133
|
+
const allCells = row.getAllCells()
|
|
134
|
+
const visibleCells: Array<Cell<TFeatures, TData, unknown>> = []
|
|
135
|
+
for (let i = 0; i < allCells.length; i++) {
|
|
136
|
+
const cell = allCells[i]!
|
|
137
|
+
if (callMemoOrStaticFn(cell.column, 'getIsVisible', column_getIsVisible)) {
|
|
138
|
+
visibleCells.push(cell)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
138
142
|
const { left, right } =
|
|
139
143
|
row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()
|
|
140
|
-
if (!left.length && !right.length) return
|
|
144
|
+
if (!left.length && !right.length) return visibleCells // no pinning, return early
|
|
141
145
|
|
|
142
|
-
const
|
|
143
|
-
|
|
146
|
+
const visibleCellsByColumnId = callMemoOrStaticFn(
|
|
147
|
+
row,
|
|
148
|
+
'getVisibleCellsByColumnId',
|
|
149
|
+
row_getVisibleCellsByColumnId,
|
|
150
|
+
)
|
|
144
151
|
|
|
145
152
|
const leftCells: Array<Cell<TFeatures, TData, unknown>> = []
|
|
146
|
-
for (
|
|
147
|
-
const cell =
|
|
153
|
+
for (let i = 0; i < left.length; i++) {
|
|
154
|
+
const cell = visibleCellsByColumnId[left[i]!]
|
|
148
155
|
if (cell) leftCells.push(cell)
|
|
149
156
|
}
|
|
150
157
|
|
|
151
158
|
const rightCells: Array<Cell<TFeatures, TData, unknown>> = []
|
|
152
|
-
for (
|
|
153
|
-
const cell =
|
|
159
|
+
for (let i = 0; i < right.length; i++) {
|
|
160
|
+
const cell = visibleCellsByColumnId[right[i]!]
|
|
154
161
|
if (cell) rightCells.push(cell)
|
|
155
162
|
}
|
|
156
163
|
|
|
157
164
|
// Center cells: visible cells in natural column order, minus pinned ones.
|
|
158
|
-
const leftSet = new Set(left)
|
|
159
|
-
const rightSet = new Set(right)
|
|
160
165
|
const centerCells: Array<Cell<TFeatures, TData, unknown>> = []
|
|
161
|
-
for (
|
|
166
|
+
for (let i = 0; i < visibleCells.length; i++) {
|
|
167
|
+
const cell = visibleCells[i]!
|
|
162
168
|
const id = cell.column.id
|
|
163
|
-
if (!
|
|
169
|
+
if (!left.includes(id) && !right.includes(id)) centerCells.push(cell)
|
|
164
170
|
}
|
|
165
171
|
|
|
166
172
|
return [...leftCells, ...centerCells, ...rightCells]
|
|
167
173
|
}
|
|
168
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Returns visible cells by column id for a row.
|
|
177
|
+
*
|
|
178
|
+
* This is the static implementation behind the matching row instance API and may read row caches or table state atoms.
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```ts
|
|
182
|
+
* const value = row_getVisibleCellsByColumnId(row)
|
|
183
|
+
* ```
|
|
184
|
+
*/
|
|
185
|
+
export function row_getVisibleCellsByColumnId<
|
|
186
|
+
TFeatures extends TableFeatures,
|
|
187
|
+
TData extends RowData,
|
|
188
|
+
>(row: Row<TFeatures, TData>): Record<string, Cell<TFeatures, TData, unknown>> {
|
|
189
|
+
const result: Record<string, Cell<TFeatures, TData, unknown>> = {}
|
|
190
|
+
const allCells = row.getAllCells()
|
|
191
|
+
for (let i = 0; i < allCells.length; i++) {
|
|
192
|
+
const cell = allCells[i]!
|
|
193
|
+
if (callMemoOrStaticFn(cell.column, 'getIsVisible', column_getIsVisible)) {
|
|
194
|
+
result[cell.column.id] = cell
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return result
|
|
198
|
+
}
|
|
199
|
+
|
|
169
200
|
/**
|
|
170
201
|
* Returns visible flat columns for the table.
|
|
171
202
|
*
|
|
@@ -266,7 +297,9 @@ export function table_toggleAllColumnsVisible<
|
|
|
266
297
|
value = value ?? !table_getIsAllColumnsVisible(table)
|
|
267
298
|
|
|
268
299
|
const visibility: Record<string, boolean> = {}
|
|
269
|
-
|
|
300
|
+
const leafColumns = table.getAllLeafColumns()
|
|
301
|
+
for (let i = 0; i < leafColumns.length; i++) {
|
|
302
|
+
const column = leafColumns[i]!
|
|
270
303
|
visibility[column.id] = !value ? !column_getCanHide(column) : value
|
|
271
304
|
}
|
|
272
305
|
|
|
@@ -41,7 +41,7 @@ export function table_autoResetExpanded<
|
|
|
41
41
|
table.options.autoResetExpanded ??
|
|
42
42
|
!table.options.manualExpanding
|
|
43
43
|
) {
|
|
44
|
-
|
|
44
|
+
table._reactivity.schedule(() => table_resetExpanded(table))
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
|
|
@@ -330,7 +330,7 @@ export function row_getIsAllParentsExpanded<
|
|
|
330
330
|
|
|
331
331
|
while (isFullyExpanded && currentRow.parentId) {
|
|
332
332
|
currentRow = row.table.getRow(currentRow.parentId, true)
|
|
333
|
-
isFullyExpanded = row_getIsExpanded(
|
|
333
|
+
isFullyExpanded = row_getIsExpanded(currentRow)
|
|
334
334
|
}
|
|
335
335
|
|
|
336
336
|
return isFullyExpanded
|
|
@@ -109,26 +109,28 @@ function table_getPinnedRows<
|
|
|
109
109
|
): Array<Row<TFeatures, TData>> {
|
|
110
110
|
const visibleRows = table.getRowModel().rows
|
|
111
111
|
const pinnedRowIds = table.atoms.rowPinning?.get()?.[position] ?? []
|
|
112
|
+
const keepPinnedRows = table.options.keepPinnedRows ?? true
|
|
112
113
|
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
114
|
+
const result: Array<Row<TFeatures, TData>> = []
|
|
115
|
+
for (let i = 0; i < pinnedRowIds.length; i++) {
|
|
116
|
+
const rowId = pinnedRowIds[i]!
|
|
117
|
+
let row: Row<TFeatures, TData> | undefined
|
|
118
|
+
if (keepPinnedRows) {
|
|
119
|
+
// get all rows that are pinned even if they would not be otherwise
|
|
120
|
+
// visible; account for expanded parent rows, but not pagination/filtering
|
|
121
|
+
const fullRow = table.getRow(rowId, true)
|
|
122
|
+
if (row_getIsAllParentsExpanded(fullRow)) row = fullRow
|
|
123
|
+
} else {
|
|
124
|
+
// else get only visible rows that are pinned
|
|
125
|
+
row = visibleRows.find((r) => r.id === rowId)
|
|
126
|
+
}
|
|
127
|
+
if (!row)
|
|
128
|
+
continue
|
|
129
|
+
// Assign position property directly to preserve prototype chain
|
|
129
130
|
;(row as any).position = position
|
|
130
|
-
|
|
131
|
-
|
|
131
|
+
result.push(row)
|
|
132
|
+
}
|
|
133
|
+
return result
|
|
132
134
|
}
|
|
133
135
|
|
|
134
136
|
/**
|
|
@@ -622,32 +622,33 @@ export function selectRowsFn<
|
|
|
622
622
|
const newSelectedFlatRows: Array<Row<TFeatures, TData>> = []
|
|
623
623
|
const newSelectedRowsById: Record<string, Row<TFeatures, TData>> = {}
|
|
624
624
|
|
|
625
|
-
// Filters top level and nested rows
|
|
625
|
+
// Filters top level and nested rows.
|
|
626
626
|
const recurseRows = (
|
|
627
627
|
rows: Array<Row<TFeatures, TData>>,
|
|
628
628
|
depth = 0,
|
|
629
629
|
): Array<Row<TFeatures, TData>> => {
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
630
|
+
const result: Array<Row<TFeatures, TData>> = []
|
|
631
|
+
for (let i = 0; i < rows.length; i++) {
|
|
632
|
+
let row = rows[i]!
|
|
633
|
+
const isSelected = isRowSelected(row)
|
|
634
|
+
|
|
635
|
+
if (isSelected) {
|
|
636
|
+
newSelectedFlatRows.push(row)
|
|
637
|
+
newSelectedRowsById[row.id] = row
|
|
638
|
+
}
|
|
638
639
|
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
}
|
|
640
|
+
if (row.subRows.length) {
|
|
641
|
+
row = {
|
|
642
|
+
...row,
|
|
643
|
+
subRows: recurseRows(row.subRows, depth + 1),
|
|
644
644
|
}
|
|
645
|
+
}
|
|
645
646
|
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
647
|
+
if (isSelected) {
|
|
648
|
+
result.push(row)
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
return result
|
|
651
652
|
}
|
|
652
653
|
|
|
653
654
|
return {
|