zubin-grid 0.41.13 → 0.42.13
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/README.md +75 -21
- package/dist/adaptors/react/index.d.ts +71 -0
- package/dist/adaptors/react/index.d.ts.map +1 -0
- package/dist/adaptors/react/index.js +249 -0
- package/dist/adaptors/react/index.js.map +1 -0
- package/dist/core/cell.d.ts +17 -8
- package/dist/core/cell.d.ts.map +1 -1
- package/dist/core/cell.js +28 -97
- package/dist/core/cell.js.map +1 -1
- package/dist/core/grid.d.ts +3 -4
- package/dist/core/grid.d.ts.map +1 -1
- package/dist/core/grid.js +242 -77
- package/dist/core/grid.js.map +1 -1
- package/dist/core/head.d.ts +1 -5
- package/dist/core/head.d.ts.map +1 -1
- package/dist/core/head.js +0 -54
- package/dist/core/head.js.map +1 -1
- package/dist/core/persist.d.ts.map +1 -1
- package/dist/core/persist.js +11 -1
- package/dist/core/persist.js.map +1 -1
- package/dist/core/tail.d.ts +1 -4
- package/dist/core/tail.d.ts.map +1 -1
- package/dist/core/tail.js +0 -23
- package/dist/core/tail.js.map +1 -1
- package/dist/core/types/grid.types.d.ts +14 -9
- package/dist/core/types/grid.types.d.ts.map +1 -1
- package/dist/core/types/persist.types.d.ts +2 -0
- package/dist/core/types/persist.types.d.ts.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -4,6 +4,8 @@ A lightweight grid state manager for React and TypeScript.
|
|
|
4
4
|
|
|
5
5
|
`zubin-grid` helps you model a 2D grid of reactive cells, update row and column headers, and compute derived row or column summaries with simple hooks.
|
|
6
6
|
|
|
7
|
+
The root package now stays framework-agnostic. React hooks live on the `zubin-grid/adaptors/react` subpath.
|
|
8
|
+
|
|
7
9
|
## Why use it?
|
|
8
10
|
|
|
9
11
|
- Reactive cell store with subscriptions
|
|
@@ -24,7 +26,7 @@ npm install zubin-grid react
|
|
|
24
26
|
|
|
25
27
|
## Local example app
|
|
26
28
|
|
|
27
|
-
This repository also includes a small Vite + React playground under `examples/` so you can try the JSON-friendly grid API, persistence, demo controls, and a Conway's Game of Life reactivity showcase locally.
|
|
29
|
+
This repository also includes a small Vite + React playground under `examples/` so you can try the JSON-friendly grid API, sparse-cell editing, elastic row/column resizing, persistence, demo controls, and a Conway's Game of Life reactivity showcase locally.
|
|
28
30
|
|
|
29
31
|
```bash
|
|
30
32
|
npm install
|
|
@@ -82,7 +84,8 @@ console.log(salesGrid.getValue('north', 'jan'))
|
|
|
82
84
|
Create the grid once outside render, or memoize it if you build it inside a component.
|
|
83
85
|
|
|
84
86
|
```tsx
|
|
85
|
-
import { grid
|
|
87
|
+
import { grid } from 'zubin-grid'
|
|
88
|
+
import { useCell } from 'zubin-grid/adaptors/react'
|
|
86
89
|
|
|
87
90
|
type BudgetRowId = 'marketing' | 'ops'
|
|
88
91
|
type BudgetColumnId = 'planned' | 'actual'
|
|
@@ -124,26 +127,52 @@ export function BudgetCell(props: {
|
|
|
124
127
|
row: number
|
|
125
128
|
col: number
|
|
126
129
|
}) {
|
|
127
|
-
const [value, setValue] = useCell(
|
|
130
|
+
const [value, setValue, meta] = useCell(
|
|
131
|
+
budgetGrid,
|
|
132
|
+
{ row: props.row, col: props.col },
|
|
133
|
+
{
|
|
134
|
+
placeholder: ({ rowId, columnId }) => ({
|
|
135
|
+
rowId,
|
|
136
|
+
columnId,
|
|
137
|
+
value: 0,
|
|
138
|
+
}),
|
|
139
|
+
},
|
|
140
|
+
)
|
|
128
141
|
|
|
129
142
|
return (
|
|
130
|
-
<
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
143
|
+
<label>
|
|
144
|
+
<input
|
|
145
|
+
type="number"
|
|
146
|
+
value={value.value}
|
|
147
|
+
onChange={(event) =>
|
|
148
|
+
setValue({
|
|
149
|
+
...value,
|
|
150
|
+
value: Number(event.target.value),
|
|
151
|
+
})
|
|
152
|
+
}
|
|
153
|
+
/>
|
|
154
|
+
|
|
155
|
+
<small>{meta.existsInDb ? 'stored' : 'placeholder'}</small>
|
|
156
|
+
</label>
|
|
135
157
|
)
|
|
136
158
|
}
|
|
137
159
|
```
|
|
138
160
|
|
|
139
|
-
`useCell(
|
|
161
|
+
`useCell(...)` now returns `[value, setValue, meta]`.
|
|
162
|
+
|
|
163
|
+
- `meta.existsInDb` tells you whether the sparse store currently has a persisted cell for that coordinate.
|
|
164
|
+
- `meta.isDirty` tells you whether the cell differs from the last hydrated or persisted snapshot.
|
|
165
|
+
- Passing a `placeholder` keeps the UI dense even when the store is sparse.
|
|
166
|
+
- Calling `setValue(undefined)` removes that sparse cell entry again.
|
|
167
|
+
|
|
168
|
+
For row-bound and column-bound dimension grids, pass `{ row }` or `{ col }` respectively. `useCellValue(...)` follows the same sparse read rules but returns only the current value.
|
|
140
169
|
|
|
141
170
|
## Working with heads
|
|
142
171
|
|
|
143
172
|
Headers are stored separately from cell values, so labels and order can change without rebuilding the grid.
|
|
144
173
|
|
|
145
174
|
```tsx
|
|
146
|
-
import { useColumnHead, useRowHead } from 'zubin-grid'
|
|
175
|
+
import { useColumnHead, useRowHead } from 'zubin-grid/adaptors/react'
|
|
147
176
|
|
|
148
177
|
export function HeaderControls() {
|
|
149
178
|
const { head: rowHead, updateLabel } = useRowHead(budgetGrid, 'marketing')
|
|
@@ -168,7 +197,7 @@ export function HeaderControls() {
|
|
|
168
197
|
Tails let you compute summaries such as totals.
|
|
169
198
|
|
|
170
199
|
```tsx
|
|
171
|
-
import { useRowTail } from 'zubin-grid'
|
|
200
|
+
import { useRowTail } from 'zubin-grid/adaptors/react'
|
|
172
201
|
|
|
173
202
|
export function MarketingRowTotal() {
|
|
174
203
|
const total = useRowTail(budgetGrid, 'marketing', (cells) => {
|
|
@@ -181,10 +210,10 @@ export function MarketingRowTotal() {
|
|
|
181
210
|
|
|
182
211
|
## Reordering rows and columns
|
|
183
212
|
|
|
184
|
-
`useGrid` now stays focused on reading the ordered row and column ids. Mutating helpers such as `reorderRow` and `reorderColumn` live on the `zubin-grid/helpers` subpath
|
|
213
|
+
`useGrid` now stays focused on reading the ordered row and column ids. Mutating helpers such as `reorderRow` and `reorderColumn` live on the `zubin-grid/helpers` subpath, and the React hooks themselves live on `zubin-grid/adaptors/react`.
|
|
185
214
|
|
|
186
215
|
```tsx
|
|
187
|
-
import { useGrid } from 'zubin-grid'
|
|
216
|
+
import { useGrid } from 'zubin-grid/adaptors/react'
|
|
188
217
|
import { reorderColumn, reorderRow } from 'zubin-grid/helpers'
|
|
189
218
|
|
|
190
219
|
export function GridToolbar() {
|
|
@@ -346,19 +375,25 @@ availabilityGrid.getValue(true, new Date('2026-04-14T00:00:00.000Z'))
|
|
|
346
375
|
```ts
|
|
347
376
|
const snapshot = salesGrid.getState()
|
|
348
377
|
|
|
378
|
+
const northFebruary = salesGrid.readCell('north', 'feb')
|
|
379
|
+
// { value: undefined, meta: { existsInDb: false, isDirty: false } }
|
|
380
|
+
|
|
349
381
|
salesGrid.upsertRows([{ id: 'west', label: 'West' }])
|
|
350
382
|
salesGrid.upsertColumns([{ id: 'mar', label: 'March' }])
|
|
351
383
|
salesGrid.upsertCell({ rowId: 'west', columnId: 'mar', value: 21 })
|
|
384
|
+
salesGrid.setCell('west', 'apr', { rowId: 'west', columnId: 'apr', value: 13 })
|
|
385
|
+
salesGrid.setCell('west', 'apr', undefined)
|
|
352
386
|
```
|
|
353
387
|
|
|
354
|
-
`getValue`, `getRowHead`, and `getColumnHead`
|
|
388
|
+
`readCell(rowId, columnId)` is the sparse-aware getter, and `setCell(rowId, columnId, nextValue)` lazily creates or removes sparse cell entries. `getValue`, `getRowHead`, and `getColumnHead` remain strict non-reactive getters when you only need an already-materialized cell or a targeted header read.
|
|
355
389
|
|
|
356
390
|
## Dimension grids
|
|
357
391
|
|
|
358
392
|
Use `createDimensionGrid` when you want one reactive cell per row or one reactive cell per column instead of a full row/column matrix. This is handy for statuses, visibility flags, notes, or other metadata attached to a single axis.
|
|
359
393
|
|
|
360
394
|
```tsx
|
|
361
|
-
import { createDimensionGrid
|
|
395
|
+
import { createDimensionGrid } from 'zubin-grid'
|
|
396
|
+
import { useCell } from 'zubin-grid/adaptors/react'
|
|
362
397
|
|
|
363
398
|
type ShipmentStatus = 'pending' | 'packed' | 'shipped'
|
|
364
399
|
|
|
@@ -402,7 +437,8 @@ function RowStatus(props: { row: number }) {
|
|
|
402
437
|
Use `createSubGrid` when you want a second grid layer that reuses the parent grid's row and column dimensions, but stores a different cell shape.
|
|
403
438
|
|
|
404
439
|
```ts
|
|
405
|
-
import { createSubGrid
|
|
440
|
+
import { createSubGrid } from 'zubin-grid'
|
|
441
|
+
import { useCell } from 'zubin-grid/adaptors/react'
|
|
406
442
|
|
|
407
443
|
type SalesNoteCell = {
|
|
408
444
|
note: string
|
|
@@ -441,7 +477,7 @@ Sub grids behave like normal grids for cell and hook usage, with a few important
|
|
|
441
477
|
|
|
442
478
|
- They inherit the parent grid's row ids, column ids, row heads, and column heads.
|
|
443
479
|
- Parent row and column changes stay in sync, including upserts, label changes, order changes, `setGrid(...)`, and `clearGrid()`.
|
|
444
|
-
- `useCell`, `useCellValue`, `useGrid`, `useRowHead`, `useColumnHead`, `useRowTail`, and `useColumnTail` all work with sub grids.
|
|
480
|
+
- `useCell`, `useCellValue`, `useGrid`, `useRowHead`, `useColumnHead`, `useRowTail`, and `useColumnTail` from `zubin-grid/adaptors/react` all work with sub grids.
|
|
445
481
|
- Persistence inherits from the parent when omitted, can be disabled with `persist: false`, or can use a custom key with `persist: ['your-key']`.
|
|
446
482
|
- Row and column mutations called on a sub grid are forwarded to the parent grid.
|
|
447
483
|
- `clearGrid()` on a sub grid clears the sub grid's own cells while keeping the inherited parent dimensions intact.
|
|
@@ -507,6 +543,8 @@ const persistedWithCustomAdapter = grid<SalesSchema>(initialState, {
|
|
|
507
543
|
- `useCell(columnDimensionGrid, { col })`
|
|
508
544
|
- `useCellValue(...)`
|
|
509
545
|
|
|
546
|
+
All React hooks are exported from `zubin-grid/adaptors/react`, not the root package.
|
|
547
|
+
|
|
510
548
|
### Head hooks
|
|
511
549
|
|
|
512
550
|
- `useRowHead(grid, rowId)`
|
|
@@ -519,10 +557,11 @@ const persistedWithCustomAdapter = grid<SalesSchema>(initialState, {
|
|
|
519
557
|
|
|
520
558
|
### Grid helpers
|
|
521
559
|
|
|
522
|
-
- `useGrid(grid, { onGridUpdate })` - reads the current ordered row and column ids and can subscribe to every grid mutation
|
|
523
560
|
- `createGridKey(rowId, columnId)`
|
|
524
561
|
- `grid.getState()`
|
|
562
|
+
- `grid.readCell(rowId, columnId)`
|
|
525
563
|
- `grid.setGrid(nextState, mode?)`
|
|
564
|
+
- `grid.setCell(rowId, columnId, nextValue)`
|
|
526
565
|
- `grid.upsertRow(...)`
|
|
527
566
|
- `grid.upsertRows(...)`
|
|
528
567
|
- `grid.upsertColumn(...)`
|
|
@@ -538,9 +577,17 @@ const persistedWithCustomAdapter = grid<SalesSchema>(initialState, {
|
|
|
538
577
|
- `reorderRow(grid, activeRowId, overRowId)` from `zubin-grid/helpers`
|
|
539
578
|
- `reorderColumn(grid, activeColumnId, overColumnId)` from `zubin-grid/helpers`
|
|
540
579
|
|
|
580
|
+
### React adaptor
|
|
581
|
+
|
|
582
|
+
- `useCell(...)` from `zubin-grid/adaptors/react`
|
|
583
|
+
- `useCellValue(...)` from `zubin-grid/adaptors/react`
|
|
584
|
+
- `useGrid(grid, { onGridUpdate })` from `zubin-grid/adaptors/react`
|
|
585
|
+
- `useRowHead(...)` / `useColumnHead(...)` from `zubin-grid/adaptors/react`
|
|
586
|
+
- `useRowTail(...)` / `useColumnTail(...)` from `zubin-grid/adaptors/react`
|
|
587
|
+
|
|
541
588
|
## Imports
|
|
542
589
|
|
|
543
|
-
Use the root package for
|
|
590
|
+
Use the root package for framework-agnostic state primitives:
|
|
544
591
|
|
|
545
592
|
```ts
|
|
546
593
|
import {
|
|
@@ -548,6 +595,13 @@ import {
|
|
|
548
595
|
createDimensionGrid,
|
|
549
596
|
createSubGrid,
|
|
550
597
|
grid,
|
|
598
|
+
} from 'zubin-grid'
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
Use the React adaptor for hooks:
|
|
602
|
+
|
|
603
|
+
```ts
|
|
604
|
+
import {
|
|
551
605
|
useCell,
|
|
552
606
|
useCellValue,
|
|
553
607
|
useRowHead,
|
|
@@ -555,7 +609,7 @@ import {
|
|
|
555
609
|
useRowTail,
|
|
556
610
|
useColumnTail,
|
|
557
611
|
useGrid,
|
|
558
|
-
} from 'zubin-grid'
|
|
612
|
+
} from 'zubin-grid/adaptors/react'
|
|
559
613
|
```
|
|
560
614
|
|
|
561
615
|
Subpath imports are also available:
|
|
@@ -563,7 +617,7 @@ Subpath imports are also available:
|
|
|
563
617
|
```ts
|
|
564
618
|
import { grid } from 'zubin-grid/grid'
|
|
565
619
|
import { reorderColumn, reorderRow } from 'zubin-grid/helpers'
|
|
566
|
-
import { useRowTail } from 'zubin-grid/
|
|
620
|
+
import { useRowTail } from 'zubin-grid/adaptors/react'
|
|
567
621
|
```
|
|
568
622
|
|
|
569
623
|
## Links
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Cell, Updater } from "../../core/types/cell.types.js";
|
|
2
|
+
import type { DimensionGrid, DimensionGridPosition, Grid, GridAxisIds, GridCellMeta, GridCellPosition, GridDimension, GridState, GridSubscriber } from "../../core/types/grid.types.js";
|
|
3
|
+
import type { GridHead, GridHeadHookResult, GridId } from "../../core/types/head.types.js";
|
|
4
|
+
import type { GridAxisTailUpdater, GridTailHookValue } from "../../core/types/tail.types.js";
|
|
5
|
+
export type { GridCellMeta } from "../../core/types/grid.types.js";
|
|
6
|
+
export type { GridHeadHookResult } from "../../core/types/head.types.js";
|
|
7
|
+
export type { GridTailHookValue } from "../../core/types/tail.types.js";
|
|
8
|
+
export interface UseGridOptions<TCell, TRowId extends GridId = GridId, TColumnId extends GridId = GridId, TRowHead extends GridHead<TRowId> = GridHead<TRowId>, TColumnHead extends GridHead<TColumnId> = GridHead<TColumnId>, TStateCell = unknown, TState extends GridState<TStateCell, TRowHead, TColumnHead> = GridState<TStateCell, TRowHead, TColumnHead>> {
|
|
9
|
+
onGridUpdate?: GridSubscriber<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>;
|
|
10
|
+
}
|
|
11
|
+
export type UseCellPlaceholder<TValue, TContext> = TValue | ((context: TContext) => TValue);
|
|
12
|
+
export interface GridCellPlaceholderContext<TRowId extends GridId = GridId, TColumnId extends GridId = GridId> {
|
|
13
|
+
row: number;
|
|
14
|
+
col: number;
|
|
15
|
+
rowId: TRowId;
|
|
16
|
+
columnId: TColumnId;
|
|
17
|
+
meta: GridCellMeta;
|
|
18
|
+
}
|
|
19
|
+
export interface DimensionCellPlaceholderContext<TDimension extends GridDimension = GridDimension, TRowId extends GridId = GridId, TColumnId extends GridId = GridId> {
|
|
20
|
+
dimension: TDimension;
|
|
21
|
+
index: number;
|
|
22
|
+
row?: number;
|
|
23
|
+
col?: number;
|
|
24
|
+
rowId?: TRowId;
|
|
25
|
+
columnId?: TColumnId;
|
|
26
|
+
meta: GridCellMeta;
|
|
27
|
+
}
|
|
28
|
+
export interface UseCellOptions<TValue, TContext> {
|
|
29
|
+
placeholder?: UseCellPlaceholder<TValue, TContext>;
|
|
30
|
+
}
|
|
31
|
+
export declare function useGrid<TCell, TRowId extends GridId, TColumnId extends GridId, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, options?: UseGridOptions<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>): GridAxisIds<TRowId, TColumnId>;
|
|
32
|
+
export declare function useRowHead<TCell, TRowId extends GridId, TColumnId extends GridId, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, rowId: TRowId): GridHeadHookResult<TRowHead>;
|
|
33
|
+
export declare function useColumnHead<TCell, TRowId extends GridId, TColumnId extends GridId, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, columnId: TColumnId): GridHeadHookResult<TColumnHead>;
|
|
34
|
+
export declare const useColHead: typeof useColumnHead;
|
|
35
|
+
export declare function useRowTail<TCell, TRowId extends GridId, TColumnId extends GridId, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>, TTail = void>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, rowId: TRowId, onRowUpdate?: GridAxisTailUpdater<TCell, TRowId, TColumnId, TTail>): GridTailHookValue<TTail>;
|
|
36
|
+
export declare function useColumnTail<TCell, TRowId extends GridId, TColumnId extends GridId, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>, TTail = void>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, columnId: TColumnId, onColumnUpdate?: GridAxisTailUpdater<TCell, TRowId, TColumnId, TTail>): GridTailHookValue<TTail>;
|
|
37
|
+
export declare function useCell<TCell>(currentCell: Cell<TCell>): readonly [TCell, (newValue: Updater<TCell>) => void, GridCellMeta];
|
|
38
|
+
export declare function useCell<TCell, TDimension extends GridDimension, TRowId extends GridId, TColumnId extends GridId>(currentGrid: DimensionGrid<TCell, TDimension, TRowId, TColumnId>, position: DimensionGridPosition<TDimension>): readonly [
|
|
39
|
+
TCell | undefined,
|
|
40
|
+
(newValue: Updater<TCell | undefined>) => void,
|
|
41
|
+
GridCellMeta
|
|
42
|
+
];
|
|
43
|
+
export declare function useCell<TCell, TDimension extends GridDimension, TRowId extends GridId, TColumnId extends GridId>(currentGrid: DimensionGrid<TCell, TDimension, TRowId, TColumnId>, position: DimensionGridPosition<TDimension>, options: UseCellOptions<TCell, DimensionCellPlaceholderContext<TDimension, TRowId, TColumnId>> & {
|
|
44
|
+
placeholder: UseCellPlaceholder<TCell, DimensionCellPlaceholderContext<TDimension, TRowId, TColumnId>>;
|
|
45
|
+
}): readonly [
|
|
46
|
+
TCell,
|
|
47
|
+
(newValue: TCell | undefined | ((currentValue: TCell) => TCell | undefined)) => void,
|
|
48
|
+
GridCellMeta
|
|
49
|
+
];
|
|
50
|
+
export declare function useCell<TCell, TRowId extends GridId, TColumnId extends GridId, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, position: GridCellPosition): readonly [
|
|
51
|
+
TCell | undefined,
|
|
52
|
+
(newValue: Updater<TCell | undefined>) => void,
|
|
53
|
+
GridCellMeta
|
|
54
|
+
];
|
|
55
|
+
export declare function useCell<TCell, TRowId extends GridId, TColumnId extends GridId, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, position: GridCellPosition, options: UseCellOptions<TCell, GridCellPlaceholderContext<TRowId, TColumnId>> & {
|
|
56
|
+
placeholder: UseCellPlaceholder<TCell, GridCellPlaceholderContext<TRowId, TColumnId>>;
|
|
57
|
+
}): readonly [
|
|
58
|
+
TCell,
|
|
59
|
+
(newValue: TCell | undefined | ((currentValue: TCell) => TCell | undefined)) => void,
|
|
60
|
+
GridCellMeta
|
|
61
|
+
];
|
|
62
|
+
export declare function useCellValue<TCell>(currentCell: Cell<TCell>): TCell;
|
|
63
|
+
export declare function useCellValue<TCell, TDimension extends GridDimension, TRowId extends GridId, TColumnId extends GridId>(currentGrid: DimensionGrid<TCell, TDimension, TRowId, TColumnId>, position: DimensionGridPosition<TDimension>): TCell | undefined;
|
|
64
|
+
export declare function useCellValue<TCell, TDimension extends GridDimension, TRowId extends GridId, TColumnId extends GridId>(currentGrid: DimensionGrid<TCell, TDimension, TRowId, TColumnId>, position: DimensionGridPosition<TDimension>, options: UseCellOptions<TCell, DimensionCellPlaceholderContext<TDimension, TRowId, TColumnId>> & {
|
|
65
|
+
placeholder: UseCellPlaceholder<TCell, DimensionCellPlaceholderContext<TDimension, TRowId, TColumnId>>;
|
|
66
|
+
}): TCell;
|
|
67
|
+
export declare function useCellValue<TCell, TRowId extends GridId, TColumnId extends GridId, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, position: GridCellPosition): TCell | undefined;
|
|
68
|
+
export declare function useCellValue<TCell, TRowId extends GridId, TColumnId extends GridId, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, position: GridCellPosition, options: UseCellOptions<TCell, GridCellPlaceholderContext<TRowId, TColumnId>> & {
|
|
69
|
+
placeholder: UseCellPlaceholder<TCell, GridCellPlaceholderContext<TRowId, TColumnId>>;
|
|
70
|
+
}): TCell;
|
|
71
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../adaptors/react/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useSyncExternalStore } from "react";
|
|
2
|
+
import { isDimensionGrid, isGrid, resolveDimensionGridIndex, resolveGridCoordinatesFromIndex, } from "../../core/cell.js";
|
|
3
|
+
import { readReactiveTailValue } from "../../core/tail.js";
|
|
4
|
+
const STATIC_CELL_META = {
|
|
5
|
+
existsInDb: true,
|
|
6
|
+
isDirty: false,
|
|
7
|
+
};
|
|
8
|
+
export function useGrid(currentGrid, options) {
|
|
9
|
+
const snapshotRef = useRef({
|
|
10
|
+
rows: currentGrid.rowHeaders,
|
|
11
|
+
cols: currentGrid.colHeaders,
|
|
12
|
+
});
|
|
13
|
+
const onGridUpdateRef = useRef(options?.onGridUpdate);
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
onGridUpdateRef.current = options?.onGridUpdate;
|
|
16
|
+
}, [options?.onGridUpdate]);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
return currentGrid.subscribeGrid((updatedGrid, diff) => {
|
|
19
|
+
onGridUpdateRef.current?.(updatedGrid, diff);
|
|
20
|
+
});
|
|
21
|
+
}, [currentGrid]);
|
|
22
|
+
const subscribe = useCallback((callback) => currentGrid.subscribeGrid(() => callback()), [currentGrid]);
|
|
23
|
+
const getSnapshot = useCallback(() => {
|
|
24
|
+
const nextRows = currentGrid.rowHeaders;
|
|
25
|
+
const nextCols = currentGrid.colHeaders;
|
|
26
|
+
const currentSnapshot = snapshotRef.current;
|
|
27
|
+
if (currentSnapshot.rows === nextRows && currentSnapshot.cols === nextCols) {
|
|
28
|
+
return currentSnapshot;
|
|
29
|
+
}
|
|
30
|
+
const nextSnapshot = {
|
|
31
|
+
rows: nextRows,
|
|
32
|
+
cols: nextCols,
|
|
33
|
+
};
|
|
34
|
+
snapshotRef.current = nextSnapshot;
|
|
35
|
+
return nextSnapshot;
|
|
36
|
+
}, [currentGrid]);
|
|
37
|
+
return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
38
|
+
}
|
|
39
|
+
export function useRowHead(currentGrid, rowId) {
|
|
40
|
+
const subscribe = useCallback((callback) => currentGrid.subscribeRowHead(rowId, callback), [currentGrid, rowId]);
|
|
41
|
+
const getSnapshot = useCallback(() => currentGrid.getRowHead(rowId), [currentGrid, rowId]);
|
|
42
|
+
const head = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
43
|
+
const setHead = useCallback((nextHead) => {
|
|
44
|
+
currentGrid.updateRowHead(rowId, nextHead);
|
|
45
|
+
}, [currentGrid, rowId]);
|
|
46
|
+
const updateLabel = useCallback((label) => {
|
|
47
|
+
currentGrid.updateRowHead(rowId, (currentHead) => ({
|
|
48
|
+
...currentHead,
|
|
49
|
+
label,
|
|
50
|
+
}));
|
|
51
|
+
}, [currentGrid, rowId]);
|
|
52
|
+
const updateOrder = useCallback((order) => {
|
|
53
|
+
currentGrid.updateRowHead(rowId, (currentHead) => ({
|
|
54
|
+
...currentHead,
|
|
55
|
+
order,
|
|
56
|
+
}));
|
|
57
|
+
}, [currentGrid, rowId]);
|
|
58
|
+
return {
|
|
59
|
+
head,
|
|
60
|
+
setHead,
|
|
61
|
+
updateLabel,
|
|
62
|
+
updateOrder,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export function useColumnHead(currentGrid, columnId) {
|
|
66
|
+
const subscribe = useCallback((callback) => currentGrid.subscribeColumnHead(columnId, callback), [currentGrid, columnId]);
|
|
67
|
+
const getSnapshot = useCallback(() => currentGrid.getColumnHead(columnId), [currentGrid, columnId]);
|
|
68
|
+
const head = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
69
|
+
const setHead = useCallback((nextHead) => {
|
|
70
|
+
currentGrid.updateColumnHead(columnId, nextHead);
|
|
71
|
+
}, [currentGrid, columnId]);
|
|
72
|
+
const updateLabel = useCallback((label) => {
|
|
73
|
+
currentGrid.updateColumnHead(columnId, (currentHead) => ({
|
|
74
|
+
...currentHead,
|
|
75
|
+
label,
|
|
76
|
+
}));
|
|
77
|
+
}, [currentGrid, columnId]);
|
|
78
|
+
const updateOrder = useCallback((order) => {
|
|
79
|
+
currentGrid.updateColumnHead(columnId, (currentHead) => ({
|
|
80
|
+
...currentHead,
|
|
81
|
+
order,
|
|
82
|
+
}));
|
|
83
|
+
}, [currentGrid, columnId]);
|
|
84
|
+
return {
|
|
85
|
+
head,
|
|
86
|
+
setHead,
|
|
87
|
+
updateLabel,
|
|
88
|
+
updateOrder,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export const useColHead = useColumnHead;
|
|
92
|
+
export function useRowTail(currentGrid, rowId, onRowUpdate) {
|
|
93
|
+
useEffect(() => {
|
|
94
|
+
if (!onRowUpdate)
|
|
95
|
+
return;
|
|
96
|
+
return currentGrid.registerRowTail(rowId, onRowUpdate);
|
|
97
|
+
}, [currentGrid, rowId, onRowUpdate]);
|
|
98
|
+
const subscribe = useCallback((callback) => currentGrid.subscribeRowTail(rowId, callback), [currentGrid, rowId]);
|
|
99
|
+
const getSnapshot = useCallback(() => readReactiveTailValue(currentGrid.getRowTailState(rowId)), [currentGrid, rowId]);
|
|
100
|
+
const tail = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
101
|
+
return tail;
|
|
102
|
+
}
|
|
103
|
+
export function useColumnTail(currentGrid, columnId, onColumnUpdate) {
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
if (!onColumnUpdate)
|
|
106
|
+
return;
|
|
107
|
+
return currentGrid.registerColumnTail(columnId, onColumnUpdate);
|
|
108
|
+
}, [currentGrid, columnId, onColumnUpdate]);
|
|
109
|
+
const subscribe = useCallback((callback) => currentGrid.subscribeColumnTail(columnId, callback), [currentGrid, columnId]);
|
|
110
|
+
const getSnapshot = useCallback(() => readReactiveTailValue(currentGrid.getColumnTailState(columnId)), [currentGrid, columnId]);
|
|
111
|
+
const tail = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
112
|
+
return tail;
|
|
113
|
+
}
|
|
114
|
+
export function useCell(cellOrGrid, position, options) {
|
|
115
|
+
const snapshot = useCellStoreSnapshot(cellOrGrid, position, options?.placeholder);
|
|
116
|
+
const setValue = useResolvedCellSetter(cellOrGrid, position, options?.placeholder);
|
|
117
|
+
return [snapshot.value, setValue, snapshot.meta];
|
|
118
|
+
}
|
|
119
|
+
export function useCellValue(cellOrGrid, position, options) {
|
|
120
|
+
return useCellStoreSnapshot(cellOrGrid, position, options?.placeholder).value;
|
|
121
|
+
}
|
|
122
|
+
function useCellStoreSnapshot(cellOrGrid, position, placeholder) {
|
|
123
|
+
const snapshotRef = useRef();
|
|
124
|
+
const subscribe = useCallback((callback) => subscribeToCellSource(cellOrGrid, callback), [cellOrGrid]);
|
|
125
|
+
const getSnapshot = useCallback(() => {
|
|
126
|
+
const previousSnapshot = snapshotRef.current;
|
|
127
|
+
const nextSnapshot = readHookCellSnapshot(cellOrGrid, position, placeholder, previousSnapshot);
|
|
128
|
+
snapshotRef.current = nextSnapshot;
|
|
129
|
+
return nextSnapshot;
|
|
130
|
+
}, [cellOrGrid, placeholder, position]);
|
|
131
|
+
return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
132
|
+
}
|
|
133
|
+
function useResolvedCellSetter(cellOrGrid, position, placeholder) {
|
|
134
|
+
return useCallback((nextValue) => {
|
|
135
|
+
const currentSnapshot = readHookCellSnapshot(cellOrGrid, position, placeholder);
|
|
136
|
+
if (isDimensionGrid(cellOrGrid)) {
|
|
137
|
+
const currentGrid = cellOrGrid;
|
|
138
|
+
const index = resolveDimensionGridIndex(currentGrid, position);
|
|
139
|
+
currentGrid.setCell(index, resolveUpdater(nextValue, currentSnapshot.value));
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (isGrid(cellOrGrid)) {
|
|
143
|
+
const currentGrid = cellOrGrid;
|
|
144
|
+
const { rowId, columnId } = resolveGridCoordinatesFromIndex(currentGrid, position);
|
|
145
|
+
currentGrid.setCell(rowId, columnId, resolveUpdater(nextValue, currentSnapshot.value));
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const currentCell = cellOrGrid;
|
|
149
|
+
currentCell.set(resolveUpdater(nextValue, currentCell.get()));
|
|
150
|
+
}, [cellOrGrid, placeholder, position]);
|
|
151
|
+
}
|
|
152
|
+
function subscribeToCellSource(cellOrGrid, callback) {
|
|
153
|
+
if (isDimensionGrid(cellOrGrid) || isGrid(cellOrGrid)) {
|
|
154
|
+
return cellOrGrid.subscribeGrid(() => callback());
|
|
155
|
+
}
|
|
156
|
+
return cellOrGrid.subscribe(callback);
|
|
157
|
+
}
|
|
158
|
+
function readHookCellSnapshot(cellOrGrid, position, placeholder, previousSnapshot) {
|
|
159
|
+
if (isDimensionGrid(cellOrGrid)) {
|
|
160
|
+
const currentGrid = cellOrGrid;
|
|
161
|
+
const index = resolveDimensionGridIndex(currentGrid, position);
|
|
162
|
+
const storedSnapshot = currentGrid.readCell(index);
|
|
163
|
+
const placeholderContext = createDimensionPlaceholderContext(currentGrid, index, storedSnapshot.meta);
|
|
164
|
+
return createHookCellSnapshot(storedSnapshot.value, storedSnapshot.meta, placeholder, placeholderContext, previousSnapshot);
|
|
165
|
+
}
|
|
166
|
+
if (isGrid(cellOrGrid)) {
|
|
167
|
+
const currentGrid = cellOrGrid;
|
|
168
|
+
const resolvedPosition = position;
|
|
169
|
+
const { rowId, columnId } = resolveGridCoordinatesFromIndex(currentGrid, resolvedPosition);
|
|
170
|
+
const storedSnapshot = currentGrid.readCell(rowId, columnId);
|
|
171
|
+
const placeholderContext = {
|
|
172
|
+
row: resolvedPosition.row,
|
|
173
|
+
col: resolvedPosition.col,
|
|
174
|
+
rowId,
|
|
175
|
+
columnId,
|
|
176
|
+
meta: storedSnapshot.meta,
|
|
177
|
+
};
|
|
178
|
+
return createHookCellSnapshot(storedSnapshot.value, storedSnapshot.meta, placeholder, placeholderContext, previousSnapshot);
|
|
179
|
+
}
|
|
180
|
+
const currentCell = cellOrGrid;
|
|
181
|
+
const value = currentCell.get();
|
|
182
|
+
if (previousSnapshot &&
|
|
183
|
+
previousSnapshot.meta.existsInDb === STATIC_CELL_META.existsInDb &&
|
|
184
|
+
previousSnapshot.meta.isDirty === STATIC_CELL_META.isDirty &&
|
|
185
|
+
Object.is(previousSnapshot.value, value)) {
|
|
186
|
+
return previousSnapshot;
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
value,
|
|
190
|
+
storedValue: value,
|
|
191
|
+
meta: STATIC_CELL_META,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
function createHookCellSnapshot(storedValue, meta, placeholder, placeholderContext, previousSnapshot) {
|
|
195
|
+
const visibleValue = storedValue !== undefined
|
|
196
|
+
? storedValue
|
|
197
|
+
: resolveVisiblePlaceholder(meta, placeholder, placeholderContext, previousSnapshot);
|
|
198
|
+
if (previousSnapshot &&
|
|
199
|
+
sameCellMeta(previousSnapshot.meta, meta) &&
|
|
200
|
+
Object.is(previousSnapshot.storedValue, storedValue) &&
|
|
201
|
+
Object.is(previousSnapshot.value, visibleValue)) {
|
|
202
|
+
return previousSnapshot;
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
value: visibleValue,
|
|
206
|
+
storedValue,
|
|
207
|
+
meta,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function resolveVisiblePlaceholder(meta, placeholder, placeholderContext, previousSnapshot) {
|
|
211
|
+
if (placeholder === undefined) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
if (previousSnapshot &&
|
|
215
|
+
previousSnapshot.storedValue === undefined &&
|
|
216
|
+
sameCellMeta(previousSnapshot.meta, meta)) {
|
|
217
|
+
return previousSnapshot.value;
|
|
218
|
+
}
|
|
219
|
+
return typeof placeholder === "function"
|
|
220
|
+
? placeholder(placeholderContext)
|
|
221
|
+
: placeholder;
|
|
222
|
+
}
|
|
223
|
+
function createDimensionPlaceholderContext(currentGrid, index, meta) {
|
|
224
|
+
if (currentGrid.dimension === "rows") {
|
|
225
|
+
return {
|
|
226
|
+
dimension: currentGrid.dimension,
|
|
227
|
+
index,
|
|
228
|
+
row: index,
|
|
229
|
+
rowId: currentGrid.rowHeaders[index],
|
|
230
|
+
meta,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
dimension: currentGrid.dimension,
|
|
235
|
+
index,
|
|
236
|
+
col: index,
|
|
237
|
+
columnId: currentGrid.colHeaders[index],
|
|
238
|
+
meta,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function resolveUpdater(nextValue, currentValue) {
|
|
242
|
+
return typeof nextValue === "function"
|
|
243
|
+
? nextValue(currentValue)
|
|
244
|
+
: nextValue;
|
|
245
|
+
}
|
|
246
|
+
function sameCellMeta(leftMeta, rightMeta) {
|
|
247
|
+
return (leftMeta.existsInDb === rightMeta.existsInDb && leftMeta.isDirty === rightMeta.isDirty);
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../adaptors/react/index.ts"],"names":[],"mappings":"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"}
|
package/dist/core/cell.d.ts
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
import type { Cell, CellInitializer } from "./types/cell.types.js";
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
2
|
+
import type { DimensionGridPosition, GridCellPosition, GridDimension } from "./types/grid.types.js";
|
|
3
|
+
import type { GridId } from "./types/head.types.js";
|
|
4
4
|
export type { Cell, Subscriber, Updater } from "./types/cell.types.js";
|
|
5
|
+
type IndexedGrid<TRowId extends GridId = GridId, TColumnId extends GridId = GridId> = {
|
|
6
|
+
rowHeaders: readonly TRowId[];
|
|
7
|
+
colHeaders: readonly TColumnId[];
|
|
8
|
+
};
|
|
9
|
+
type IndexedDimensionGrid<TDimension extends GridDimension = GridDimension> = {
|
|
10
|
+
dimension: TDimension;
|
|
11
|
+
size: number;
|
|
12
|
+
};
|
|
5
13
|
export declare function cell<TCell>(initialValue: TCell | CellInitializer<TCell>): Cell<TCell>;
|
|
6
|
-
export declare function
|
|
7
|
-
export declare function
|
|
8
|
-
export declare function
|
|
9
|
-
export declare function
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
export declare function isGrid(value: unknown): value is IndexedGrid;
|
|
15
|
+
export declare function isDimensionGrid(value: unknown): value is IndexedDimensionGrid;
|
|
16
|
+
export declare function resolveDimensionGridIndex(currentGrid: IndexedDimensionGrid, position: DimensionGridPosition): number;
|
|
17
|
+
export declare function resolveGridCoordinatesFromIndex<TRowId extends GridId, TColumnId extends GridId>(currentGrid: IndexedGrid<TRowId, TColumnId>, position: GridCellPosition): {
|
|
18
|
+
rowId: TRowId;
|
|
19
|
+
columnId: TColumnId;
|
|
20
|
+
};
|
|
12
21
|
//# sourceMappingURL=cell.d.ts.map
|
package/dist/core/cell.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell.d.ts","sourceRoot":"","sources":["../../core/cell.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cell.d.ts","sourceRoot":"","sources":["../../core/cell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAc,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EACV,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEvE,KAAK,WAAW,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,SAAS,SAAS,MAAM,GAAG,MAAM,IAAI;IACpF,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;CAClC,CAAC;AAEF,KAAK,oBAAoB,CAAC,UAAU,SAAS,aAAa,GAAG,aAAa,IAAI;IAC5E,SAAS,EAAE,UAAU,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAiCrF;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAQ3D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAU7E;AAED,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,oBAAoB,EACjC,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,CAkCR;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,SAAS,MAAM,EACrB,SAAS,SAAS,MAAM,EACxB,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,gBAAgB;;;EAwBxE"}
|