Skip to content

Commit 79751fb

Browse files
committed
fix test
add test typecheck improve test fixes fix flex render experimental reactivity improve test, fix reactivity toComputed enable experimental reactivity fix grouping example fix some examples
1 parent c85943a commit 79751fb

File tree

25 files changed

+696
-173
lines changed

25 files changed

+696
-173
lines changed

examples/angular/column-ordering/src/app/app.component.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import {
66
} from '@angular/core'
77
import {
88
FlexRenderDirective,
9+
columnOrderingFeature,
10+
columnVisibilityFeature,
911
createCoreRowModel,
1012
injectTable,
1113
} from '@tanstack/angular-table'
@@ -84,12 +86,15 @@ export class AppComponent {
8486

8587
readonly table = injectTable(() => ({
8688
data: this.data(),
89+
_features: {
90+
columnVisibilityFeature,
91+
columnOrderingFeature,
92+
},
8793
columns: defaultColumns,
8894
state: {
8995
columnOrder: this.columnOrder(),
9096
columnVisibility: this.columnVisibility(),
9197
},
92-
getCoreRowModel: createCoreRowModel(),
9398
onColumnVisibilityChange: (updaterOrValue) => {
9499
typeof updaterOrValue === 'function'
95100
? this.columnVisibility.update(updaterOrValue)

examples/angular/column-pinning-sticky/src/app/app.component.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import { Component, computed, signal } from '@angular/core'
22
import {
33
FlexRenderDirective,
4+
columnOrderingFeature,
5+
columnPinningFeature,
6+
columnResizingFeature,
7+
columnSizingFeature,
8+
columnVisibilityFeature,
49
createCoreRowModel,
510
injectTable,
611
} from '@tanstack/angular-table'
@@ -74,25 +79,35 @@ const defaultColumns: Array<ColumnDef<any, Person>> = [
7479
@Component({
7580
selector: 'app-root',
7681
standalone: true,
77-
imports: [FlexRenderDirective, SlicePipe, NgTemplateOutlet, NgStyle],
82+
imports: [FlexRenderDirective, NgStyle],
7883
templateUrl: './app.component.html',
7984
})
8085
export class AppComponent {
8186
readonly columns = signal([...defaultColumns])
8287
readonly data = signal<Array<Person>>(makeData(30))
8388
readonly columnVisibility = signal<ColumnVisibilityState>({})
8489
readonly columnOrder = signal<ColumnOrderState>([])
85-
readonly columnPinning = signal<ColumnPinningState>({})
90+
readonly columnPinning = signal<ColumnPinningState>({
91+
left: [],
92+
right: [],
93+
})
8694
readonly split = signal(false)
8795

8896
table = injectTable(() => ({
8997
data: this.data(),
98+
enableExperimentalReactivity: true,
99+
_features: {
100+
columnPinningFeature,
101+
columnVisibilityFeature,
102+
columnSizingFeature,
103+
columnOrderingFeature,
104+
columnResizingFeature,
105+
},
90106
columns: this.columns(),
91-
getCoreRowModel: createCoreRowModel(),
92107
debugTable: true,
93108
debugHeaders: true,
94109
debugColumns: true,
95-
columnResizeMode: 'onChange',
110+
columnResizeMode: 'onChange' as const,
96111
}))
97112

98113
stringifiedColumnPinning = computed(() => {

examples/angular/column-pinning/src/app/app.component.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,12 @@ import {
66
} from '@angular/core'
77
import {
88
FlexRenderDirective,
9+
columnOrderingFeature,
10+
columnPinningFeature,
11+
columnVisibilityFeature,
912
createCoreRowModel,
1013
injectTable,
14+
rowPinningFeature,
1115
} from '@tanstack/angular-table'
1216
import { faker } from '@faker-js/faker'
1317
import { NgTemplateOutlet, SlicePipe } from '@angular/common'
@@ -91,12 +95,21 @@ export class AppComponent {
9195
readonly data = signal<Array<Person>>(makeData(5000))
9296
readonly columnVisibility = signal<ColumnVisibilityState>({})
9397
readonly columnOrder = signal<ColumnOrderState>([])
94-
readonly columnPinning = signal<ColumnPinningState>({})
98+
readonly columnPinning = signal<ColumnPinningState>({
99+
left: [],
100+
right: [],
101+
})
95102
readonly split = signal(false)
96103

97104
table = injectTable(() => ({
98105
data: this.data(),
106+
_features: {
107+
columnPinningFeature,
108+
columnOrderingFeature,
109+
columnVisibilityFeature,
110+
},
99111
columns: defaultColumns,
112+
enableExperimentalReactivity: true,
100113
state: {
101114
columnVisibility: this.columnVisibility(),
102115
columnOrder: this.columnOrder(),
@@ -117,7 +130,6 @@ export class AppComponent {
117130
? this.columnPinning.update(updaterOrValue)
118131
: this.columnPinning.set(updaterOrValue)
119132
},
120-
getCoreRowModel: createCoreRowModel(),
121133
debugTable: true,
122134
debugHeaders: true,
123135
debugColumns: true,

examples/angular/grouping/src/app/app.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
<tbody>
4343
@for (row of table.getRowModel().rows; track row.id) {
4444
<tr>
45-
@for (cell of row.getVisibleCells(); track cell.id) {
45+
@for (cell of row.getAllCells(); track cell.id) {
4646
<td
4747
[style.background]="
4848
cell.getIsGrouped()

examples/angular/grouping/src/app/app.component.ts

Lines changed: 42 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,16 @@ import {
77
} from '@angular/core'
88
import {
99
FlexRenderDirective,
10+
columnFilteringFeature,
11+
columnGroupingFeature,
1012
createCoreRowModel,
1113
createExpandedRowModel,
1214
createFilteredRowModel,
1315
createGroupedRowModel,
1416
createPaginatedRowModel,
1517
injectTable,
18+
rowExpandingFeature,
19+
rowPaginationFeature,
1620
tableOptions,
1721
} from '@tanstack/angular-table'
1822
import { columns } from './columns'
@@ -28,35 +32,47 @@ import type { GroupingState, Updater } from '@tanstack/angular-table'
2832
})
2933
export class AppComponent {
3034
title = 'grouping'
31-
data = signal(makeData(10000))
32-
grouping = signal<GroupingState>([])
35+
readonly data = signal(makeData(10000))
36+
readonly grouping = signal<GroupingState>([])
3337

34-
stringifiedGrouping = computed(() => JSON.stringify(this.grouping(), null, 2))
35-
36-
tableOptions = computed(() =>
37-
tableOptions({
38-
data: this.data(),
39-
columns: columns,
40-
state: {
41-
grouping: this.grouping(),
42-
},
43-
onGroupingChange: (updaterOrValue: Updater<GroupingState>) => {
44-
const groupingState =
45-
typeof updaterOrValue === 'function'
46-
? updaterOrValue([...this.grouping()])
47-
: updaterOrValue
48-
this.grouping.set(groupingState)
49-
},
50-
getExpandedRowModel: createExpandedRowModel(),
51-
getGroupedRowModel: createGroupedRowModel(),
52-
getCoreRowModel: createCoreRowModel(),
53-
getPaginatedRowModel: createPaginatedRowModel(),
54-
getFilteredRowModel: createFilteredRowModel(),
55-
debugTable: true,
56-
}),
38+
readonly stringifiedGrouping = computed(() =>
39+
JSON.stringify(this.grouping(), null, 2),
5740
)
5841

59-
table = injectTable(this.tableOptions)
42+
readonly table = injectTable(() => ({
43+
data: this.data(),
44+
columns: columns,
45+
enableExperimentalReactivity: true,
46+
initialState: {
47+
pagination: { pageSize: 20, pageIndex: 0 },
48+
},
49+
state: {
50+
grouping: this.grouping(),
51+
},
52+
_features: {
53+
columnGroupingFeature,
54+
rowPaginationFeature,
55+
columnFilteringFeature,
56+
rowExpandingFeature,
57+
},
58+
_rowModels: {
59+
// @ts-expect-error Fix type
60+
groupedRowModel: createGroupedRowModel(),
61+
// @ts-expect-error Fix type
62+
expandedRowModel: createExpandedRowModel(),
63+
// @ts-expect-error Fix type
64+
paginatedRowModel: createPaginatedRowModel(),
65+
// @ts-expect-error Fix type
66+
filteredRowModel: createFilteredRowModel(),
67+
},
68+
onGroupingChange: (updaterOrValue: Updater<GroupingState>) => {
69+
const groupingState =
70+
typeof updaterOrValue === 'function'
71+
? updaterOrValue([...this.grouping()])
72+
: updaterOrValue
73+
this.grouping.set(groupingState)
74+
},
75+
}))
6076

6177
onPageInputChange(event: any): void {
6278
const page = event.target.value ? Number(event.target.value) - 1 : 0

examples/angular/row-selection-signal/src/app/app.component.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020

2121
@if (header.column.getCanFilter()) {
2222
<div>
23+
<!-- TODO fix type -->
2324
<app-table-filter
24-
[column]="header.column"
25+
[column]="$any(header.column)"
2526
[table]="table"
2627
/>
2728
</div>

examples/angular/row-selection-signal/src/app/app.component.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@ import {
77
} from '@angular/core'
88
import {
99
FlexRenderDirective,
10-
createCoreRowModel,
10+
columnFilteringFeature,
11+
columnVisibilityFeature,
1112
createFilteredRowModel,
1213
createPaginatedRowModel,
1314
injectTable,
15+
rowPaginationFeature,
16+
rowSelectionFeature,
1417
} from '@tanstack/angular-table'
1518
import { FilterComponent } from './filter'
1619
import { makeData } from './makeData'
@@ -97,6 +100,19 @@ export class AppComponent {
97100

98101
table = injectTable(() => ({
99102
data: this.data(),
103+
enableExperimentalReactivity: true,
104+
_features: {
105+
rowSelectionFeature,
106+
rowPaginationFeature,
107+
columnFilteringFeature,
108+
columnVisibilityFeature,
109+
},
110+
_rowModels: {
111+
// @ts-expect-error Fix type
112+
filteredRowModel: createFilteredRowModel(),
113+
// @ts-expect-error Fix type
114+
paginatedRowModel: createPaginatedRowModel(),
115+
},
100116
columns: this.columns,
101117
state: {
102118
rowSelection: this.rowSelection(),
@@ -110,9 +126,6 @@ export class AppComponent {
110126
: updaterOrValue,
111127
)
112128
},
113-
getCoreRowModel: createCoreRowModel(),
114-
getFilteredRowModel: createFilteredRowModel(),
115-
getPaginatedRowModel: createPaginatedRowModel(),
116129
debugTable: true,
117130
}))
118131

examples/angular/row-selection-signal/src/app/filter.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { CommonModule } from '@angular/common'
22
import { Component, input } from '@angular/core'
33
import type { OnInit } from '@angular/core'
4-
import type { Column, Table } from '@tanstack/angular-table'
4+
import type { Column, RowData, Table } from '@tanstack/angular-table'
55

66
@Component({
77
selector: 'app-table-filter',
@@ -39,10 +39,10 @@ import type { Column, Table } from '@tanstack/angular-table'
3939
standalone: true,
4040
imports: [CommonModule],
4141
})
42-
export class FilterComponent<T> implements OnInit {
42+
export class FilterComponent<T extends RowData> implements OnInit {
4343
column = input.required<Column<any, any>>()
4444

45-
table = input.required<Table<T>>()
45+
table = input.required<Table<any, T>>()
4646

4747
columnType!: string
4848

examples/angular/row-selection-signal/src/app/selection-column.component.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ChangeDetectionStrategy, Component, input } from '@angular/core'
2-
import type { Row, Table } from '@tanstack/angular-table'
2+
import type { Row, RowData, Table } from '@tanstack/angular-table'
33

44
@Component({
55
template: `
@@ -16,7 +16,7 @@ import type { Row, Table } from '@tanstack/angular-table'
1616
standalone: true,
1717
changeDetection: ChangeDetectionStrategy.OnPush,
1818
})
19-
export class TableHeadSelectionComponent<T> {
19+
export class TableHeadSelectionComponent<T extends RowData> {
2020
// Your component should also reflect the fields you use as props in flexRenderer directive.
2121
// Define the fields as input you want to use in your component
2222
// ie. In this case, you are passing HeaderContext object as props in flexRenderer directive.
@@ -25,7 +25,7 @@ export class TableHeadSelectionComponent<T> {
2525

2626
// column = input.required<Column<T, unknown>>()
2727
// header = input.required<Header<T, unknown>>()
28-
table = input.required<Table<T>>()
28+
table = input.required<Table<any, T>>()
2929
}
3030

3131
@Component({
@@ -42,6 +42,6 @@ export class TableHeadSelectionComponent<T> {
4242
standalone: true,
4343
changeDetection: ChangeDetectionStrategy.OnPush,
4444
})
45-
export class TableRowSelectionComponent<T> {
46-
row = input.required<Row<T>>()
45+
export class TableRowSelectionComponent<T extends RowData> {
46+
row = input.required<Row<any, T>>()
4747
}

examples/angular/row-selection/src/app/app.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ export class AppComponent {
124124
state: {
125125
rowSelection: this.rowSelection(),
126126
},
127+
enableExperimentalReactivity: true,
127128
enableRowSelection: true, // enable row selection for all rows
128129
// enableRowSelection: row => row.original.age > 18, // or enable row selection conditionally per row
129130
onRowSelectionChange: (updaterOrValue) => {

0 commit comments

Comments
 (0)