Skip to content

Commit b5086d5

Browse files
committed
feat: move reactivity feature to core
1 parent 03422ae commit b5086d5

17 files changed

Lines changed: 283 additions & 348 deletions

File tree

examples/solid/row-selection/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
},
1919
"dependencies": {
2020
"@tanstack/solid-table": "^9.0.0-alpha.10",
21+
"@tanstack/solid-devtools": "^0.7.26",
22+
"@tanstack/solid-table-devtools": "9.0.0-alpha.11",
2123
"solid-js": "^1.9.11"
2224
}
2325
}

examples/solid/row-selection/src/App.tsx

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
import type {
2+
Column,
3+
ColumnDef,
4+
SolidTable,
5+
Table,
6+
} from '@tanstack/solid-table'
17
import {
28
columnFilteringFeature,
39
createFilteredRowModel,
@@ -11,15 +17,11 @@ import {
1117
tableFeatures,
1218
} from '@tanstack/solid-table'
1319
import { For, Show, createEffect, createSignal } from 'solid-js'
14-
import { makeData } from './makeData'
15-
import type {
16-
Column,
17-
ColumnDef,
18-
SolidTable,
19-
Table,
20-
} from '@tanstack/solid-table'
2120
import type { Person } from './makeData'
21+
import { makeData } from './makeData'
2222
import './index.css'
23+
import { TanStackDevtools } from '@tanstack/solid-devtools'
24+
import { tableDevtoolsPlugin } from '@tanstack/solid-table-devtools'
2325

2426
export const _features = tableFeatures({
2527
rowPaginationFeature,
@@ -51,16 +53,18 @@ function App() {
5153
</table.Subscribe>
5254
)
5355
},
54-
cell: ({ row }) => (
55-
<div class="px-1">
56-
<IndeterminateCheckbox
57-
checked={row.getIsSelected()}
58-
disabled={!row.getCanSelect()}
59-
indeterminate={row.getIsSomeSelected()}
60-
onChange={row.getToggleSelectedHandler()}
61-
/>
62-
</div>
63-
),
56+
cell: ({ row }) => {
57+
return (
58+
<div class="px-1">
59+
<IndeterminateCheckbox
60+
checked={row.getIsSelected()}
61+
disabled={!row.getCanSelect()}
62+
indeterminate={row.getIsSomeSelected()}
63+
onChange={row.getToggleSelectedHandler()}
64+
/>
65+
</div>
66+
)
67+
},
6468
},
6569
{
6670
header: 'Name',
@@ -113,6 +117,8 @@ function App() {
113117
},
114118
]
115119

120+
const [enableRowSelection, setEnableRowSelection] = createSignal(true)
121+
116122
table = createTable({
117123
_features,
118124
_rowModels: {
@@ -124,11 +130,14 @@ function App() {
124130
},
125131
columns,
126132
getRowId: (row) => row.id,
127-
enableRowSelection: true, // enable row selection for all rows
128-
// enableRowSelection: row => row.original.age > 18, // or enable row selection conditionally per row
133+
get enableRowSelection() {
134+
return enableRowSelection()
135+
},
129136
debugTable: true,
130137
})
131138

139+
window.setEnable = setEnableRowSelection
140+
132141
return (
133142
// <table.Subscribe
134143
// selector={(state) => ({
@@ -140,6 +149,8 @@ function App() {
140149
// >
141150
// {(state) => (
142151
<div class="p-2">
152+
<TanStackDevtools plugins={[tableDevtoolsPlugin({ table })]} />
153+
143154
<div>
144155
<table.Subscribe
145156
selector={(state) => ({ globalFilter: state.globalFilter })}
@@ -333,8 +344,6 @@ function App() {
333344
</table.Subscribe>
334345
</div>
335346
</div>
336-
// )}
337-
// </table.Subscribe>
338347
)
339348
}
340349

packages/angular-table/src/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { FlexRenderDirective } from './flexRender'
33

44
export * from '@tanstack/table-core'
55

6-
export * from './angularReactivityFeature'
76
export * from './flexRender'
87
export * from './injectTable'
98
export * from './flex-render/flexRenderComponent'

packages/angular-table/src/injectTable.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@ import {
33
assertInInjectionContext,
44
computed,
55
inject,
6+
isSignal,
7+
signal,
68
untracked,
79
} from '@angular/core'
8-
import { constructTable } from '@tanstack/table-core'
10+
import {
11+
constructReactivityFeature,
12+
constructTable,
13+
} from '@tanstack/table-core'
914
import { injectStore } from '@tanstack/angular-store'
1015
import { lazyInit } from './lazySignalInitializer'
11-
import { angularReactivityFeature } from './angularReactivityFeature'
1216
import type {
1317
RowData,
1418
Table,
@@ -104,6 +108,16 @@ export function injectTable<
104108
assertInInjectionContext(injectTable)
105109
const injector = inject(Injector)
106110

111+
const angularReactivityFeature = constructReactivityFeature({
112+
createSignal: (value) => {
113+
return signal(value) as any
114+
},
115+
createMemo: (fn) => {
116+
return computed(() => fn())
117+
},
118+
isSignal: (value) => isSignal(value),
119+
})
120+
107121
return lazyInit(() => {
108122
const resolvedOptions: TableOptions<TFeatures, TData> = {
109123
...options(),
@@ -142,13 +156,15 @@ export function injectTable<
142156
const tableSignalNotifier = computed(
143157
() => {
144158
tableState()
145-
table.setOptions(updatedOptions())
159+
const newOptions = updatedOptions()
160+
untracked(() => table.setOptions(newOptions))
146161
untracked(() => table.baseStore.setState((prev) => ({ ...prev })))
147162
return table
148163
},
149164
{ equal: () => false },
150165
)
151166

167+
// @ts-ignore
152168
table.setTableNotifier(tableSignalNotifier)
153169

154170
table.Subscribe = function Subscribe<TSubSelected = {}>(props: {

packages/angular-table/tests/injectTable.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ describe('injectTable', () => {
7575
})
7676

7777
test('supports "Object.keys"', () => {
78-
const keys = Object.keys(table.get()).concat('state')
78+
const keys = Object.keys(table.value()).concat('state')
7979
expect(Object.keys(table)).toEqual(keys)
8080
})
8181

packages/angular-table/tests/reactivityUtils.test.ts

Lines changed: 0 additions & 210 deletions
This file was deleted.

0 commit comments

Comments
 (0)