@1771technologies/lytenyte-pro 1.0.1 → 1.0.3
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 +1 -6
- package/dist/+types.d.ts +24 -4
- package/dist/cell-selection/cell-selection-driver.js +2 -1
- package/dist/cell-selection/cell-style-row.d.ts +2 -2
- package/dist/cell-selection/cell-style-row.js +1 -1
- package/dist/cell-selection/get-root-cell.js +3 -83
- package/dist/cell-selection/index.d.ts +0 -1
- package/dist/cell-selection/index.js +0 -1
- package/dist/cell-selection/split-cell-selection-rect.d.ts +8 -1
- package/dist/cell-selection/split-cell-selection-rect.js +13 -4
- package/dist/cell-selection/split-on-pivot.d.ts +3 -0
- package/dist/cell-selection/split-on-pivot.js +50 -0
- package/dist/cells/cell-editor.js +1 -1
- package/dist/cells/cell-spacer.d.ts +3 -0
- package/dist/cells/cell-spacer.js +37 -0
- package/dist/cells/cell.d.ts +1 -3
- package/dist/cells/cell.js +11 -9
- package/dist/column-manager/branch.js +1 -1
- package/dist/column-manager/leaf.js +1 -1
- package/dist/column-manager/move-handle.d.ts +0 -7
- package/dist/column-manager/move-handle.js +23 -6
- package/dist/filter-tree/leaf.js +3 -1
- package/dist/grid-box/+types.d.ts +2 -2
- package/dist/grid-box/item.js +3 -3
- package/dist/grid-box/use-aggregation-box-items.js +1 -2
- package/dist/grid-box/use-column-box-items.d.ts +2 -3
- package/dist/grid-box/use-column-box-items.js +3 -3
- package/dist/grid-box/use-row-group-box-items.d.ts +3 -3
- package/dist/grid-box/use-row-group-box-items.js +41 -5
- package/dist/grid.d.ts +1 -1
- package/dist/header/resize-handler.js +21 -15
- package/dist/license.js +1 -1
- package/dist/row-data-source-client/use-client-data-source-paginated.js +154 -164
- package/dist/row-data-source-client/use-client-data-source.js +144 -177
- package/dist/row-data-source-client/use-client-tree-data-source.js +119 -152
- package/dist/row-data-source-server/use-server-data-source.js +102 -120
- package/dist/rows/row/row.d.ts +1 -1
- package/dist/rows/row/row.js +11 -4
- package/dist/rows/rows-sections.js +1 -1
- package/dist/sort-manager/+types.d.ts +2 -0
- package/dist/sort-manager/hooks/use-sort-row-item.js +6 -6
- package/dist/sort-manager/utils/sort-item-to-sort-model.js +5 -0
- package/dist/sort-manager/utils/sort-model-to-sort-items.js +2 -1
- package/dist/state/+types.d.ts +8 -10
- package/dist/state/api/cell-root.d.ts +5 -0
- package/dist/state/api/cell-root.js +64 -0
- package/dist/state/api/edit-begin.js +5 -9
- package/dist/state/api/edit-is-cell-active.d.ts +1 -1
- package/dist/state/api/edit-is-cell-active.js +2 -7
- package/dist/state/api/focus-cell.js +2 -2
- package/dist/state/helpers/column-layout.d.ts +3 -3
- package/dist/state/helpers/column-layout.js +9 -15
- package/dist/state/helpers/get-full-width-callback.d.ts +1 -1
- package/dist/state/helpers/get-full-width-callback.js +2 -0
- package/dist/state/helpers/get-span-callback.d.ts +1 -1
- package/dist/state/helpers/get-span-callback.js +2 -0
- package/dist/state/helpers/row-layout/row-layout.d.ts +5 -4
- package/dist/state/helpers/row-layout/row-layout.js +112 -346
- package/dist/state/use-lytenyte.js +398 -334
- package/dist/viewport/viewport.js +3 -2
- package/main.css +27 -3
- package/package.json +7 -7
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { atom, createStore } from "@1771technologies/atom";
|
|
2
1
|
import {} from "../+types.js";
|
|
3
2
|
import { useRef } from "react";
|
|
4
3
|
import { makeColumnView } from "./helpers/column-view.js";
|
|
5
|
-
import {
|
|
4
|
+
import { computeBounds, computeColumnPositions, computed, computeRowPositions, effect, makeAtom, makeLayoutState, makeRowStore, signal, updateFull, } from "@1771technologies/lytenyte-shared";
|
|
6
5
|
import { makeRowLayout } from "./helpers/row-layout/row-layout.js";
|
|
7
|
-
import { equal } from "@1771technologies/lytenyte-js-utils";
|
|
6
|
+
import { equal, rangesOverlap } from "@1771technologies/lytenyte-js-utils";
|
|
8
7
|
import { makeColumnLayout } from "./helpers/column-layout.js";
|
|
9
8
|
import { emptyRowDataSource } from "./helpers/empty-row-data-source.js";
|
|
10
9
|
import { getFullWidthCallback } from "./helpers/get-full-width-callback.js";
|
|
@@ -47,84 +46,84 @@ import { makeExportDataRect } from "./api/export-data-rect.js";
|
|
|
47
46
|
import { makeDialogFrameClose, makeDialogFrameOpen } from "./api/dialog-frame.js";
|
|
48
47
|
import { makePopoverFrameClose, makePopoverFrameOpen } from "./api/popover-frame.js";
|
|
49
48
|
import { makePositionFromElement } from "./api/position-from-element.js";
|
|
50
|
-
import { splitCellSelectionRect } from "../cell-selection/split-cell-selection-rect.js";
|
|
49
|
+
import { splitCellSelectionRect, } from "../cell-selection/split-cell-selection-rect.js";
|
|
51
50
|
import { boundSelectionRect } from "../cell-selection/bound-selection-rect.js";
|
|
51
|
+
import { makeCellRoot } from "./api/cell-root.js";
|
|
52
|
+
import { splitOnPivot } from "../cell-selection/split-on-pivot.js";
|
|
53
|
+
const EMPTY_POSITION_ARRAY = new Uint32Array();
|
|
52
54
|
const DEFAULT_HEADER_HEIGHT = 40;
|
|
53
55
|
const COLUMN_GROUP_JOIN_DELIMITER = "-->";
|
|
54
56
|
export function makeLyteNyte(p) {
|
|
55
|
-
const store = createStore();
|
|
56
57
|
/**
|
|
57
58
|
* Primitive ATOMS and State
|
|
58
59
|
*/
|
|
59
|
-
const rtl =
|
|
60
|
-
const columns =
|
|
61
|
-
const base =
|
|
62
|
-
const gridId =
|
|
63
|
-
const headerHeight =
|
|
64
|
-
const headerGroupHeight =
|
|
65
|
-
const columnSizeToFit =
|
|
66
|
-
const viewport =
|
|
67
|
-
const viewportHeightInner =
|
|
68
|
-
const viewportHeightOuter =
|
|
69
|
-
const viewportWidthInner =
|
|
70
|
-
const viewportWidthOuter =
|
|
71
|
-
const columnGroupJoinDelimiter =
|
|
72
|
-
const columnGroupExpansions =
|
|
73
|
-
const columnGroupDefaultExpansion =
|
|
74
|
-
const rowDataSource =
|
|
75
|
-
const rowHeight =
|
|
76
|
-
if (typeof p.rowHeight === "function")
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
const
|
|
84
|
-
const
|
|
85
|
-
const
|
|
86
|
-
const
|
|
87
|
-
const
|
|
88
|
-
const
|
|
89
|
-
const
|
|
90
|
-
const
|
|
91
|
-
const
|
|
92
|
-
const
|
|
93
|
-
const
|
|
94
|
-
const
|
|
95
|
-
const
|
|
96
|
-
const
|
|
97
|
-
const
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
const
|
|
101
|
-
const
|
|
102
|
-
const
|
|
103
|
-
const
|
|
104
|
-
const
|
|
105
|
-
const
|
|
106
|
-
const
|
|
107
|
-
const
|
|
108
|
-
const
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
const
|
|
112
|
-
const
|
|
113
|
-
const
|
|
114
|
-
const
|
|
115
|
-
const
|
|
116
|
-
const
|
|
117
|
-
const
|
|
118
|
-
const
|
|
119
|
-
const
|
|
120
|
-
const
|
|
121
|
-
const
|
|
122
|
-
const
|
|
123
|
-
const
|
|
124
|
-
const
|
|
125
|
-
const
|
|
126
|
-
const columnPivotMode = atom(p.columnPivotMode ?? false);
|
|
127
|
-
const columnPivotModel = atom(p.columnPivotModel ??
|
|
60
|
+
const rtl = signal(p.rtl ?? false);
|
|
61
|
+
const columns = signal(p.columns ?? []);
|
|
62
|
+
const base = signal(p.columnBase ?? {});
|
|
63
|
+
const gridId = signal(p.gridId);
|
|
64
|
+
const headerHeight = signal(p.headerHeight ?? DEFAULT_HEADER_HEIGHT);
|
|
65
|
+
const headerGroupHeight = signal(p.headerGroupHeight ?? DEFAULT_HEADER_HEIGHT);
|
|
66
|
+
const columnSizeToFit = signal(p.columnSizeToFit ?? false);
|
|
67
|
+
const viewport = signal(null);
|
|
68
|
+
const viewportHeightInner = signal(0);
|
|
69
|
+
const viewportHeightOuter = signal(0);
|
|
70
|
+
const viewportWidthInner = signal(0);
|
|
71
|
+
const viewportWidthOuter = signal(0);
|
|
72
|
+
const columnGroupJoinDelimiter = signal(p.columnGroupJoinDelimiter ?? COLUMN_GROUP_JOIN_DELIMITER);
|
|
73
|
+
const columnGroupExpansions = signal(p.columnGroupExpansions ?? {});
|
|
74
|
+
const columnGroupDefaultExpansion = signal(p.columnGroupDefaultExpansion ?? true);
|
|
75
|
+
const rowDataSource = signal(emptyRowDataSource);
|
|
76
|
+
const rowHeight = signal(40);
|
|
77
|
+
if (typeof p.rowHeight === "function")
|
|
78
|
+
rowHeight.set(() => p.rowHeight);
|
|
79
|
+
else
|
|
80
|
+
rowHeight.set(p.rowHeight ?? 40);
|
|
81
|
+
const rowAutoHeightGuess = signal(p.rowAutoHeightGuess ?? 40);
|
|
82
|
+
const rowScanDistance = signal(p.rowScanDistance ?? 100);
|
|
83
|
+
const colScanDistance = signal(p.colScanDistance ?? 100);
|
|
84
|
+
const rowOverscanTop = signal(p.rowOverscanTop ?? 10);
|
|
85
|
+
const rowOverscanBottom = signal(p.rowOverscanBottom ?? 10);
|
|
86
|
+
const colOverScanStart = signal(p.colOverscanStart ?? 2);
|
|
87
|
+
const colOverscanEnd = signal(p.colOverscanEnd ?? 2);
|
|
88
|
+
const xScroll = signal(0);
|
|
89
|
+
const yScroll = signal(0);
|
|
90
|
+
const cellRenderers = signal(p.cellRenderers ?? {});
|
|
91
|
+
const rowFullWidthPredicate = signal({ fn: p.rowFullWidthPredicate ?? null });
|
|
92
|
+
const rowFullWidthRenderer = signal({ fn: p.rowFullWidthRenderer ?? (() => "Not defined") });
|
|
93
|
+
const sortModel = signal(p.sortModel ?? []);
|
|
94
|
+
const filterModel = signal(p.filterModel ?? {});
|
|
95
|
+
const filterInModel = signal(p.filterInModel ?? {});
|
|
96
|
+
const rowGroupModel = signal(p.rowGroupModel ?? []);
|
|
97
|
+
const aggModel = signal(p.aggModel ?? {});
|
|
98
|
+
const rowGroupDisplayMode = signal(p.rowGroupDisplayMode ?? "single-column");
|
|
99
|
+
const rowGroupDefaultExpansion = signal(p.rowGroupDefaultExpansion ?? false);
|
|
100
|
+
const rowGroupExpansions = signal(p.rowGroupExpansions ?? {});
|
|
101
|
+
const rowGroupColumn = signal(p.rowGroupColumn ?? {});
|
|
102
|
+
const headerCellRenderers = signal(p.headerCellRenderers ?? {});
|
|
103
|
+
const floatingCellRenderers = signal(p.floatingCellRenderers ?? {});
|
|
104
|
+
const floatingRowEnabled = signal(p.floatingRowEnabled ?? false);
|
|
105
|
+
const floatingRowHeight = signal(p.floatingRowHeight ?? 40);
|
|
106
|
+
const editRenderers = signal(p.editRenderers ?? {});
|
|
107
|
+
const editRowValidatorFn = signal({ fn: p.editRowValidatorFn ?? (() => true) });
|
|
108
|
+
const editClickActivator = signal(p.editClickActivator ?? "single");
|
|
109
|
+
const editCellMode = signal(p.editCellMode ?? "readonly");
|
|
110
|
+
const columnMarker = signal(p.columnMarker ?? {});
|
|
111
|
+
const columnMarkerEnabled = signal(p.columnMarkerEnabled ?? false);
|
|
112
|
+
const columnDoubleClickToAutosize = signal(p.columnDoubleClickToAutosize ?? true);
|
|
113
|
+
const rowDetailHeight = signal(p.rowDetailHeight ?? 300);
|
|
114
|
+
const rowDetailAutoHeightGuess = signal(p.rowDetailAutoHeightGuess ?? 300);
|
|
115
|
+
const rowDetailExpansions = signal(p.rowDetailExpansions ?? new Set());
|
|
116
|
+
const rowDetailRenderer = signal({ fn: p.rowDetailRenderer ?? (() => "Not defined") });
|
|
117
|
+
const rowSelectedIds = signal(p.rowSelectedIds ?? new Set());
|
|
118
|
+
const rowSelectionMode = signal(p.rowSelectionMode ?? "none");
|
|
119
|
+
const rowSelectChildren = signal(p.rowSelectChildren ?? false);
|
|
120
|
+
const rowSelectionActivator = signal(p.rowSelectionActivator ?? "single-click");
|
|
121
|
+
const virtualizeRows = signal(p.virtualizeRows ?? true);
|
|
122
|
+
const virtualizeCols = signal(p.virtualizeCols ?? true);
|
|
123
|
+
const quickSearch = signal(p.quickSearch ?? null);
|
|
124
|
+
const quickSearchSensitivity = signal(p.quickSearchSensitivity ?? "case-insensitive");
|
|
125
|
+
const columnPivotMode = signal(p.columnPivotMode ?? false);
|
|
126
|
+
const columnPivotModel = signal(p.columnPivotModel ??
|
|
128
127
|
{
|
|
129
128
|
columns: [],
|
|
130
129
|
filters: {},
|
|
@@ -133,20 +132,21 @@ export function makeLyteNyte(p) {
|
|
|
133
132
|
sorts: [],
|
|
134
133
|
values: [],
|
|
135
134
|
});
|
|
136
|
-
const columnPivotColumns =
|
|
137
|
-
const columnPivotColumnGroupExpansions =
|
|
138
|
-
const columnPivotRowGroupExpansions =
|
|
139
|
-
const cellSelections =
|
|
140
|
-
const cellSelectionMode =
|
|
141
|
-
const internal__rowGroupColumnState =
|
|
142
|
-
const internal_cellSelectionPivot =
|
|
143
|
-
const internal_cellSelectionAdditive =
|
|
144
|
-
const internal_cellSelectionSplits =
|
|
145
|
-
const selections =
|
|
146
|
-
const topCount =
|
|
147
|
-
const centerCount =
|
|
148
|
-
const meta =
|
|
149
|
-
|
|
135
|
+
const columnPivotColumns = signal([]);
|
|
136
|
+
const columnPivotColumnGroupExpansions = signal({});
|
|
137
|
+
const columnPivotRowGroupExpansions = signal({});
|
|
138
|
+
const cellSelections = signal(p.cellSelections ?? []);
|
|
139
|
+
const cellSelectionMode = signal(p.cellSelectionMode ?? "none");
|
|
140
|
+
const internal__rowGroupColumnState = signal({});
|
|
141
|
+
const internal_cellSelectionPivot = signal(null);
|
|
142
|
+
const internal_cellSelectionAdditive = signal(null);
|
|
143
|
+
const internal_cellSelectionSplits = computed(() => {
|
|
144
|
+
const selections = cellSelections();
|
|
145
|
+
const topCount = rowDataStore.rowTopCount.$();
|
|
146
|
+
const centerCount = rowDataStore.rowCenterCount.$();
|
|
147
|
+
const meta = columnMeta();
|
|
148
|
+
const p = internal_cellSelectionPivot();
|
|
149
|
+
const splits = selections.flatMap((rect) => {
|
|
150
150
|
return splitCellSelectionRect({
|
|
151
151
|
rect,
|
|
152
152
|
rowTopCount: topCount,
|
|
@@ -155,51 +155,79 @@ export function makeLyteNyte(p) {
|
|
|
155
155
|
colCenterCount: meta.columnVisibleCenterCount,
|
|
156
156
|
});
|
|
157
157
|
});
|
|
158
|
+
const firstWithinPivot = splits.findIndex((c) => p &&
|
|
159
|
+
p.rowStart >= c.rowStart &&
|
|
160
|
+
p.rowEnd <= c.rowEnd &&
|
|
161
|
+
p.columnStart >= c.columnStart &&
|
|
162
|
+
p.columnEnd <= c.columnEnd);
|
|
163
|
+
if (firstWithinPivot !== -1) {
|
|
164
|
+
const pivotSplits = splitOnPivot(splits[firstWithinPivot], p);
|
|
165
|
+
if (pivotSplits)
|
|
166
|
+
splits.splice(firstWithinPivot, 1, ...pivotSplits);
|
|
167
|
+
else
|
|
168
|
+
splits.splice(firstWithinPivot, 1);
|
|
169
|
+
}
|
|
170
|
+
return splits;
|
|
158
171
|
});
|
|
159
|
-
const dialogFrame =
|
|
160
|
-
const popoverFrame =
|
|
161
|
-
const internal_rowSelectionPivot =
|
|
162
|
-
const internal_rowSelectionLastWasDeselect =
|
|
163
|
-
const
|
|
164
|
-
const
|
|
165
|
-
const
|
|
166
|
-
const
|
|
167
|
-
const
|
|
168
|
-
const
|
|
169
|
-
const
|
|
170
|
-
const
|
|
171
|
-
const
|
|
172
|
-
const
|
|
173
|
-
const
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
172
|
+
const dialogFrame = signal(p.dialogFrames ?? {});
|
|
173
|
+
const popoverFrame = signal(p.popoverFrames ?? {});
|
|
174
|
+
const internal_rowSelectionPivot = signal(null);
|
|
175
|
+
const internal_rowSelectionLastWasDeselect = signal(false);
|
|
176
|
+
const internal_draggingHeader = signal(null);
|
|
177
|
+
const internal_rowAutoHeightCache = signal({});
|
|
178
|
+
const internal_rowDetailHeightCache = signal({});
|
|
179
|
+
const internal_focusActive = signal(null);
|
|
180
|
+
const internal_focusPrevCol = signal(null);
|
|
181
|
+
const internal_focusPrevRow = signal(null);
|
|
182
|
+
const internal_editActivePosition = signal(null);
|
|
183
|
+
const internal_editData = signal(null);
|
|
184
|
+
const internal_editValidation = signal(true);
|
|
185
|
+
const internal_dialogFrames = signal({});
|
|
186
|
+
const internal_popoverFrames = signal({});
|
|
187
|
+
const columnCount$ = computed(() => {
|
|
188
|
+
const view = columnView();
|
|
189
|
+
return view.visibleColumns.length;
|
|
190
|
+
});
|
|
191
|
+
const layoutState = makeLayoutState(0);
|
|
192
|
+
const layoutState$ = computed(() => {
|
|
193
|
+
rowDataStore.rowBottomCount.$();
|
|
194
|
+
rowDataStore.rowCenterCount.$();
|
|
195
|
+
rowDataStore.rowTopCount.$();
|
|
196
|
+
rowDataSource();
|
|
197
|
+
rowGroupModel();
|
|
198
|
+
sortModel();
|
|
199
|
+
filterModel();
|
|
200
|
+
aggModel();
|
|
201
|
+
filterInModel();
|
|
202
|
+
columnPivotModel();
|
|
203
|
+
columns();
|
|
204
|
+
columnPivotColumns();
|
|
205
|
+
const rowCount = rowDataStore.rowCount.$();
|
|
206
|
+
const columnCount = columnCount$();
|
|
207
|
+
if (rowCount > layoutState.computed.length || columnCount != layoutState.base.length) {
|
|
208
|
+
Object.assign(layoutState, makeLayoutState(columnCount, rowCount + 2000));
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
layoutState.computed.fill(0);
|
|
212
|
+
layoutState.special.fill(0);
|
|
213
|
+
layoutState.lookup.clear();
|
|
214
|
+
}
|
|
215
|
+
return { layout: { ...layoutState }, cache: new Map() };
|
|
187
216
|
});
|
|
188
217
|
/**
|
|
189
218
|
* VIEW BOUNDS
|
|
190
219
|
*/
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
const
|
|
194
|
-
const
|
|
195
|
-
const
|
|
196
|
-
const
|
|
197
|
-
const
|
|
198
|
-
const
|
|
199
|
-
const
|
|
200
|
-
const
|
|
201
|
-
const
|
|
202
|
-
const end = g(endCount);
|
|
220
|
+
const bounds = computed(() => {
|
|
221
|
+
const vpWidth = viewportWidthInner();
|
|
222
|
+
const vpHeight = viewportHeightInner();
|
|
223
|
+
const scrollTop = yScroll();
|
|
224
|
+
const scrollLeft = xScroll();
|
|
225
|
+
const xPos = xPositions();
|
|
226
|
+
const yPos = yPositions();
|
|
227
|
+
const topCount = rowDataStore.rowTopCount.$();
|
|
228
|
+
const bottomCount = rowDataStore.rowBottomCount.$();
|
|
229
|
+
const start = startCount();
|
|
230
|
+
const end = endCount();
|
|
203
231
|
const bounds = computeBounds({
|
|
204
232
|
viewportWidth: vpWidth,
|
|
205
233
|
viewportHeight: vpHeight,
|
|
@@ -211,65 +239,88 @@ export function makeLyteNyte(p) {
|
|
|
211
239
|
bottomCount,
|
|
212
240
|
startCount: start,
|
|
213
241
|
endCount: end,
|
|
214
|
-
rowOverscanTop:
|
|
215
|
-
rowOverscanBottom:
|
|
216
|
-
colOverscanStart:
|
|
217
|
-
colOverscanEnd:
|
|
242
|
+
rowOverscanTop: rowOverscanTop(),
|
|
243
|
+
rowOverscanBottom: rowOverscanBottom(),
|
|
244
|
+
colOverscanStart: colOverScanStart(),
|
|
245
|
+
colOverscanEnd: colOverscanEnd(),
|
|
218
246
|
});
|
|
219
|
-
if (equal(prevBounds, bounds))
|
|
220
|
-
return prevBounds;
|
|
221
|
-
prevBounds = bounds;
|
|
222
247
|
return bounds;
|
|
223
|
-
});
|
|
248
|
+
}, { dirty: (prev, next) => !equal(prev, next) });
|
|
224
249
|
/**
|
|
225
250
|
* COLUMN VIEW
|
|
226
251
|
* Compute the column layout. This impacts both the row layout and header layout. Column layout
|
|
227
252
|
* is impacted by the column definitions, the group expansions, the row group display mode.
|
|
228
253
|
*/
|
|
229
|
-
const columnView =
|
|
230
|
-
const groupState =
|
|
231
|
-
const pivotMode =
|
|
254
|
+
const columnView = computed(() => {
|
|
255
|
+
const groupState = internal__rowGroupColumnState();
|
|
256
|
+
const pivotMode = columnPivotMode();
|
|
232
257
|
let cols;
|
|
233
258
|
if (pivotMode) {
|
|
234
|
-
const model =
|
|
259
|
+
const model = columnPivotModel();
|
|
235
260
|
cols = columnAddRowGroup({
|
|
236
|
-
columns:
|
|
261
|
+
columns: columnPivotColumns(),
|
|
237
262
|
rowGroupDisplayMode: "single-column",
|
|
238
263
|
rowGroupModel: model.rows.filter((c) => c.active ?? true).map((c) => c.field),
|
|
239
|
-
rowGroupTemplate:
|
|
264
|
+
rowGroupTemplate: rowGroupColumn(),
|
|
240
265
|
rowGroupColumnState: groupState,
|
|
241
266
|
});
|
|
242
267
|
}
|
|
243
268
|
else {
|
|
244
269
|
cols = columnAddRowGroup({
|
|
245
|
-
columns:
|
|
246
|
-
rowGroupDisplayMode:
|
|
247
|
-
rowGroupModel:
|
|
248
|
-
rowGroupTemplate:
|
|
270
|
+
columns: columns(),
|
|
271
|
+
rowGroupDisplayMode: rowGroupDisplayMode(),
|
|
272
|
+
rowGroupModel: rowGroupModel(),
|
|
273
|
+
rowGroupTemplate: rowGroupColumn(),
|
|
249
274
|
rowGroupColumnState: groupState,
|
|
250
275
|
});
|
|
251
276
|
}
|
|
252
277
|
const colsWithMarker = columnHandleMarker({
|
|
253
278
|
columns: cols,
|
|
254
|
-
marker:
|
|
255
|
-
markerEnabled:
|
|
279
|
+
marker: columnMarker(),
|
|
280
|
+
markerEnabled: columnMarkerEnabled(),
|
|
256
281
|
});
|
|
257
282
|
const view = makeColumnView({
|
|
258
283
|
columns: colsWithMarker,
|
|
259
|
-
base:
|
|
260
|
-
groupExpansionDefault:
|
|
261
|
-
groupExpansions:
|
|
262
|
-
groupJoinDelimiter:
|
|
284
|
+
base: base(),
|
|
285
|
+
groupExpansionDefault: columnGroupDefaultExpansion(),
|
|
286
|
+
groupExpansions: columnGroupExpansions(),
|
|
287
|
+
groupJoinDelimiter: columnGroupJoinDelimiter(),
|
|
263
288
|
});
|
|
264
289
|
return view;
|
|
265
290
|
});
|
|
266
291
|
/**
|
|
267
292
|
* COMPUTE ATOMS
|
|
268
293
|
*/
|
|
269
|
-
const
|
|
270
|
-
const view =
|
|
271
|
-
const layout = makeColumnLayout(view
|
|
272
|
-
|
|
294
|
+
const headerLayoutFull = computed(() => {
|
|
295
|
+
const view = columnView();
|
|
296
|
+
const layout = makeColumnLayout(view, floatingRowEnabled());
|
|
297
|
+
return { maxCol: view.maxCol, maxRow: view.maxRow, layout };
|
|
298
|
+
});
|
|
299
|
+
const headerPosition$ = computed(() => {
|
|
300
|
+
const focus = internal_focusActive();
|
|
301
|
+
return focus?.kind === "header-cell" ||
|
|
302
|
+
focus?.kind === "floating-cell" ||
|
|
303
|
+
focus?.kind === "header-group-cell"
|
|
304
|
+
? focus
|
|
305
|
+
: null;
|
|
306
|
+
});
|
|
307
|
+
const headerLayout = computed(() => {
|
|
308
|
+
const view = columnView();
|
|
309
|
+
const layout = headerLayoutFull();
|
|
310
|
+
const spanBounds = bounds();
|
|
311
|
+
const headerPos = headerPosition$();
|
|
312
|
+
const filtered = layout.layout.map((row) => {
|
|
313
|
+
return row.filter((col) => {
|
|
314
|
+
if (col.colPin)
|
|
315
|
+
return true;
|
|
316
|
+
if (headerPos) {
|
|
317
|
+
if (rangesOverlap(col.colStart, col.colEnd, headerPos.colIndex, headerPos.colIndex + 1))
|
|
318
|
+
return true;
|
|
319
|
+
}
|
|
320
|
+
return col.colStart >= spanBounds.colCenterStart && col.colStart < spanBounds.colCenterEnd;
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
const dragged = internal_draggingHeader();
|
|
273
324
|
// When dragging a group column, we may end up removing that group column when joining
|
|
274
325
|
// the group with other columns in the same group (if they are separated). We want to ensure
|
|
275
326
|
// the group remains mounted until after the drag. Hence we check if there would've been a merge
|
|
@@ -277,16 +328,16 @@ export function makeLyteNyte(p) {
|
|
|
277
328
|
// isHiddenMove is important for this.
|
|
278
329
|
if (dragged) {
|
|
279
330
|
const row = dragged.rowStart;
|
|
280
|
-
const has =
|
|
331
|
+
const has = filtered[row].findIndex((c) => c.kind === "group" && c.idOccurrence === dragged.idOccurrence);
|
|
281
332
|
if (has === -1) {
|
|
282
|
-
|
|
333
|
+
filtered[row].push({ ...dragged, isHiddenMove: true });
|
|
283
334
|
}
|
|
284
335
|
}
|
|
285
|
-
return { maxCol: view.maxCol, maxRow: view.maxRow, layout:
|
|
336
|
+
return { maxCol: view.maxCol, maxRow: view.maxRow, layout: filtered };
|
|
286
337
|
});
|
|
287
|
-
const columnGroupMeta =
|
|
288
|
-
const columnMeta =
|
|
289
|
-
const view =
|
|
338
|
+
const columnGroupMeta = computed(() => columnView().meta);
|
|
339
|
+
const columnMeta = computed(() => {
|
|
340
|
+
const view = columnView();
|
|
290
341
|
return {
|
|
291
342
|
columnLookup: view.lookup,
|
|
292
343
|
columnsVisible: view.visibleColumns,
|
|
@@ -295,84 +346,106 @@ export function makeLyteNyte(p) {
|
|
|
295
346
|
columnVisibleStartCount: view.startCount,
|
|
296
347
|
};
|
|
297
348
|
});
|
|
298
|
-
const xPositions =
|
|
299
|
-
|
|
300
|
-
|
|
349
|
+
const xPositions = computed(() => {
|
|
350
|
+
if (!viewport())
|
|
351
|
+
return EMPTY_POSITION_ARRAY;
|
|
352
|
+
const view = columnView();
|
|
353
|
+
return computeColumnPositions(view.visibleColumns, base(), viewportWidthInner(), columnSizeToFit());
|
|
301
354
|
});
|
|
302
|
-
const widthTotal =
|
|
303
|
-
const headerHeightTotal =
|
|
304
|
-
const groupHHeight =
|
|
305
|
-
const hHeight =
|
|
306
|
-
const view =
|
|
307
|
-
const floating =
|
|
308
|
-
const floatingHeight =
|
|
355
|
+
const widthTotal = computed(() => xPositions().at(-1));
|
|
356
|
+
const headerHeightTotal = computed(() => {
|
|
357
|
+
const groupHHeight = headerGroupHeight();
|
|
358
|
+
const hHeight = headerHeight();
|
|
359
|
+
const view = columnView();
|
|
360
|
+
const floating = floatingRowEnabled();
|
|
361
|
+
const floatingHeight = floatingRowHeight();
|
|
309
362
|
return (view.maxRow - 1) * groupHHeight + hHeight + (floating ? floatingHeight : 0);
|
|
310
363
|
});
|
|
311
|
-
const startCount =
|
|
312
|
-
const endCount =
|
|
364
|
+
const startCount = computed(() => columnView().startCount);
|
|
365
|
+
const endCount = computed(() => columnView().endCount);
|
|
313
366
|
/** ROWS */
|
|
314
|
-
const
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
367
|
+
const rowDataStore = makeRowStore({
|
|
368
|
+
getRow: (r) => {
|
|
369
|
+
return rowDataSource().rowByIndex(r);
|
|
370
|
+
},
|
|
371
|
+
});
|
|
372
|
+
const yPositions = computed(() => {
|
|
373
|
+
if (!viewport())
|
|
374
|
+
return EMPTY_POSITION_ARRAY;
|
|
375
|
+
const rowCount = rowDataStore.rowCount.$();
|
|
376
|
+
const innerHeight = viewportHeightInner();
|
|
377
|
+
const detailExpansions = rowDetailExpansions();
|
|
378
|
+
internal_rowDetailHeightCache();
|
|
379
|
+
const rds = rowDataSource();
|
|
322
380
|
const rows = Object.fromEntries([...detailExpansions]
|
|
323
381
|
.map((x) => rds.rowToIndex(x))
|
|
324
382
|
.filter((x) => x != null)
|
|
325
383
|
.map((x) => [x, api.rowByIndex(x)]));
|
|
326
|
-
const headerHeight =
|
|
327
|
-
return computeRowPositions(rowCount,
|
|
384
|
+
const headerHeight = headerHeightTotal();
|
|
385
|
+
return computeRowPositions(rowCount, rowHeight(), rowAutoHeightGuess(), internal_rowAutoHeightCache(), (i) => {
|
|
328
386
|
const row = rows[i];
|
|
329
387
|
if (!row || !api.rowDetailIsExpanded(row))
|
|
330
388
|
return 0;
|
|
331
389
|
return api.rowDetailRenderedHeight(row);
|
|
332
390
|
}, innerHeight - headerHeight);
|
|
333
391
|
});
|
|
334
|
-
const heightTotal =
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
392
|
+
const heightTotal = computed(() => yPositions().at(-1));
|
|
393
|
+
const rowView = computed(() => {
|
|
394
|
+
if (!viewport())
|
|
395
|
+
return {
|
|
396
|
+
bottom: [],
|
|
397
|
+
center: [],
|
|
398
|
+
rowBottomTotalHeight: 0,
|
|
399
|
+
rowCenterTotalHeight: 0,
|
|
400
|
+
rowFirstCenter: 0,
|
|
401
|
+
rowFocusedIndex: 0,
|
|
402
|
+
rowTopTotalHeight: 0,
|
|
403
|
+
top: [],
|
|
404
|
+
};
|
|
405
|
+
let n = bounds();
|
|
406
|
+
if (!virtualizeRows()) {
|
|
339
407
|
n = { ...n, rowCenterStart: n.rowTopEnd, rowCenterEnd: n.rowCenterLast };
|
|
340
408
|
}
|
|
341
|
-
if (!
|
|
409
|
+
if (!virtualizeCols()) {
|
|
342
410
|
n = { ...n, colCenterStart: n.colStartEnd, colCenterEnd: n.colCenterLast };
|
|
343
411
|
}
|
|
344
|
-
const rowScan =
|
|
345
|
-
const
|
|
346
|
-
const
|
|
347
|
-
const
|
|
348
|
-
|
|
412
|
+
const rowScan = rowScanDistance();
|
|
413
|
+
const columns = columnMeta().columnsVisible;
|
|
414
|
+
const rds = rowDataSource();
|
|
415
|
+
const { layout, cache } = layoutState$();
|
|
416
|
+
const topCount = rowDataStore.rowTopCount.$();
|
|
417
|
+
const botCount = rowDataStore.rowBottomCount.$();
|
|
418
|
+
const rowCount = rowDataStore.rowCount.$();
|
|
419
|
+
const fullWidthPredicate = rowFullWidthPredicate().fn;
|
|
420
|
+
updateFull({
|
|
421
|
+
topCount,
|
|
422
|
+
botCount,
|
|
423
|
+
startCount: n.colStartEnd,
|
|
424
|
+
endCount: n.colEndEnd - n.colEndStart,
|
|
425
|
+
centerCount: n.colCenterLast - n.colStartEnd,
|
|
349
426
|
computeColSpan: getSpanFn(rds, grid, columns, "col"),
|
|
350
427
|
computeRowSpan: getSpanFn(rds, grid, columns, "row"),
|
|
351
|
-
|
|
352
|
-
rowScanDistance: rowScan,
|
|
353
|
-
invalidated: true,
|
|
354
|
-
isFullWidth: getFullWidthCallback(rds, g(rowFullWidthPredicate).fn, grid),
|
|
428
|
+
isFullWidth: fullWidthPredicate ? getFullWidthCallback(rds, fullWidthPredicate, grid) : null,
|
|
355
429
|
isRowCutoff: (r) => {
|
|
356
430
|
const row = rds.rowByIndex(r);
|
|
357
431
|
return !row || row.kind === "branch";
|
|
358
432
|
},
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
433
|
+
rowScanDistance: rowScan,
|
|
434
|
+
rowStart: n.rowCenterStart,
|
|
435
|
+
rowEnd: n.rowCenterEnd,
|
|
436
|
+
rowMax: n.rowCenterLast,
|
|
437
|
+
...layout,
|
|
362
438
|
});
|
|
363
|
-
|
|
364
|
-
const topCount = g(rdsAtoms.topCount);
|
|
365
|
-
const botCount = g(rdsAtoms.bottomCount);
|
|
366
|
-
const rowCount = g(rdsAtoms.rowCount);
|
|
367
|
-
const yPos = g(yPositions);
|
|
439
|
+
const yPos = yPositions();
|
|
368
440
|
const botStart = rowCount - botCount;
|
|
369
|
-
const focus =
|
|
441
|
+
const focus = internal_focusActive();
|
|
370
442
|
const view = makeRowLayout({
|
|
371
|
-
|
|
372
|
-
|
|
443
|
+
view: n,
|
|
444
|
+
viewCache: cache,
|
|
445
|
+
layout,
|
|
373
446
|
rds: rowDataStore,
|
|
374
447
|
columns,
|
|
375
|
-
focus:
|
|
448
|
+
focus: internal_focusActive(),
|
|
376
449
|
});
|
|
377
450
|
const topHeight = yPos[topCount];
|
|
378
451
|
const botHeight = yPos.at(-1) - yPos[botStart];
|
|
@@ -393,96 +466,97 @@ export function makeLyteNyte(p) {
|
|
|
393
466
|
/**
|
|
394
467
|
* STATE VIEW AND API
|
|
395
468
|
*/
|
|
396
|
-
const gridView =
|
|
469
|
+
const gridView = computed(() => {
|
|
397
470
|
return {
|
|
398
|
-
header:
|
|
399
|
-
rows:
|
|
471
|
+
header: headerLayout(),
|
|
472
|
+
rows: rowView(),
|
|
400
473
|
};
|
|
401
474
|
});
|
|
402
475
|
const state = {
|
|
403
|
-
rtl:
|
|
404
|
-
columns:
|
|
405
|
-
columnMeta:
|
|
406
|
-
columnBase:
|
|
407
|
-
columnGroupExpansions:
|
|
408
|
-
columnGroupDefaultExpansion:
|
|
409
|
-
columnGroupJoinDelimiter:
|
|
410
|
-
columnGroupMeta:
|
|
411
|
-
columnSizeToFit:
|
|
412
|
-
gridId:
|
|
413
|
-
widthTotal:
|
|
414
|
-
heightTotal:
|
|
415
|
-
headerHeight:
|
|
416
|
-
headerGroupHeight:
|
|
417
|
-
viewport:
|
|
418
|
-
viewportHeightInner:
|
|
419
|
-
viewportHeightOuter:
|
|
420
|
-
viewportWidthInner:
|
|
421
|
-
viewportWidthOuter:
|
|
422
|
-
xPositions:
|
|
423
|
-
yPositions:
|
|
476
|
+
rtl: makeAtom(rtl),
|
|
477
|
+
columns: makeAtom(columns),
|
|
478
|
+
columnMeta: makeAtom(columnMeta),
|
|
479
|
+
columnBase: makeAtom(base),
|
|
480
|
+
columnGroupExpansions: makeAtom(columnGroupExpansions),
|
|
481
|
+
columnGroupDefaultExpansion: makeAtom(columnGroupDefaultExpansion),
|
|
482
|
+
columnGroupJoinDelimiter: makeAtom(columnGroupJoinDelimiter),
|
|
483
|
+
columnGroupMeta: makeAtom(columnGroupMeta),
|
|
484
|
+
columnSizeToFit: makeAtom(columnSizeToFit),
|
|
485
|
+
gridId: makeAtom(gridId),
|
|
486
|
+
widthTotal: makeAtom(widthTotal),
|
|
487
|
+
heightTotal: makeAtom(heightTotal),
|
|
488
|
+
headerHeight: makeAtom(headerHeight),
|
|
489
|
+
headerGroupHeight: makeAtom(headerGroupHeight),
|
|
490
|
+
viewport: makeAtom(viewport),
|
|
491
|
+
viewportHeightInner: makeAtom(viewportHeightInner),
|
|
492
|
+
viewportHeightOuter: makeAtom(viewportHeightOuter),
|
|
493
|
+
viewportWidthInner: makeAtom(viewportWidthInner),
|
|
494
|
+
viewportWidthOuter: makeAtom(viewportWidthOuter),
|
|
495
|
+
xPositions: makeAtom(xPositions),
|
|
496
|
+
yPositions: makeAtom(yPositions),
|
|
424
497
|
rowDataStore,
|
|
425
|
-
rowDataSource:
|
|
426
|
-
rowAutoHeightGuess:
|
|
427
|
-
rowHeight:
|
|
428
|
-
rowScanDistance:
|
|
429
|
-
colScanDistance:
|
|
430
|
-
colOverscanStart:
|
|
431
|
-
colOverscanEnd:
|
|
432
|
-
rowOverscanTop:
|
|
433
|
-
rowOverscanBottom:
|
|
434
|
-
rowFullWidthPredicate:
|
|
435
|
-
rowFullWidthRenderer:
|
|
436
|
-
cellRenderers:
|
|
437
|
-
sortModel:
|
|
438
|
-
filterModel:
|
|
439
|
-
filterInModel:
|
|
440
|
-
rowGroupModel:
|
|
441
|
-
aggModel:
|
|
442
|
-
rowGroupColumn:
|
|
443
|
-
rowGroupDefaultExpansion:
|
|
444
|
-
rowGroupDisplayMode:
|
|
445
|
-
rowGroupExpansions:
|
|
446
|
-
headerCellRenderers:
|
|
447
|
-
floatingCellRenderers:
|
|
448
|
-
floatingRowEnabled:
|
|
449
|
-
floatingRowHeight:
|
|
450
|
-
editRenderers:
|
|
451
|
-
editCellMode:
|
|
452
|
-
editClickActivator:
|
|
453
|
-
editRowValidatorFn:
|
|
454
|
-
editActivePosition:
|
|
455
|
-
columnMarker:
|
|
456
|
-
columnMarkerEnabled:
|
|
457
|
-
columnDoubleClickToAutosize:
|
|
458
|
-
rowDetailExpansions:
|
|
459
|
-
rowDetailHeight:
|
|
460
|
-
rowDetailRenderer:
|
|
461
|
-
rowDetailAutoHeightGuess:
|
|
462
|
-
rowSelectedIds:
|
|
463
|
-
rowSelectionMode:
|
|
464
|
-
rowSelectionPivot:
|
|
465
|
-
rowSelectionActivator:
|
|
466
|
-
rowSelectChildren:
|
|
467
|
-
viewBounds:
|
|
468
|
-
virtualizeRows:
|
|
469
|
-
virtualizeCols:
|
|
470
|
-
quickSearch:
|
|
471
|
-
quickSearchSensitivity:
|
|
472
|
-
columnPivotMode:
|
|
473
|
-
columnPivotColumns:
|
|
474
|
-
columnPivotModel:
|
|
475
|
-
columnPivotColumnGroupExpansions:
|
|
476
|
-
columnPivotRowGroupExpansions:
|
|
477
|
-
dialogFrames:
|
|
478
|
-
popoverFrames:
|
|
479
|
-
cellSelections:
|
|
480
|
-
cellSelectionMode:
|
|
498
|
+
rowDataSource: makeAtom(rowDataSource),
|
|
499
|
+
rowAutoHeightGuess: makeAtom(rowAutoHeightGuess),
|
|
500
|
+
rowHeight: makeAtom(rowHeight),
|
|
501
|
+
rowScanDistance: makeAtom(rowScanDistance),
|
|
502
|
+
colScanDistance: makeAtom(colScanDistance),
|
|
503
|
+
colOverscanStart: makeAtom(colOverScanStart),
|
|
504
|
+
colOverscanEnd: makeAtom(colOverscanEnd),
|
|
505
|
+
rowOverscanTop: makeAtom(rowOverscanTop),
|
|
506
|
+
rowOverscanBottom: makeAtom(rowOverscanBottom),
|
|
507
|
+
rowFullWidthPredicate: makeAtom(rowFullWidthPredicate),
|
|
508
|
+
rowFullWidthRenderer: makeAtom(rowFullWidthRenderer),
|
|
509
|
+
cellRenderers: makeAtom(cellRenderers),
|
|
510
|
+
sortModel: makeAtom(sortModel),
|
|
511
|
+
filterModel: makeAtom(filterModel),
|
|
512
|
+
filterInModel: makeAtom(filterInModel),
|
|
513
|
+
rowGroupModel: makeAtom(rowGroupModel),
|
|
514
|
+
aggModel: makeAtom(aggModel),
|
|
515
|
+
rowGroupColumn: makeAtom(rowGroupColumn),
|
|
516
|
+
rowGroupDefaultExpansion: makeAtom(rowGroupDefaultExpansion),
|
|
517
|
+
rowGroupDisplayMode: makeAtom(rowGroupDisplayMode),
|
|
518
|
+
rowGroupExpansions: makeAtom(rowGroupExpansions),
|
|
519
|
+
headerCellRenderers: makeAtom(headerCellRenderers),
|
|
520
|
+
floatingCellRenderers: makeAtom(floatingCellRenderers),
|
|
521
|
+
floatingRowEnabled: makeAtom(floatingRowEnabled),
|
|
522
|
+
floatingRowHeight: makeAtom(floatingRowHeight),
|
|
523
|
+
editRenderers: makeAtom(editRenderers),
|
|
524
|
+
editCellMode: makeAtom(editCellMode),
|
|
525
|
+
editClickActivator: makeAtom(editClickActivator),
|
|
526
|
+
editRowValidatorFn: makeAtom(editRowValidatorFn),
|
|
527
|
+
editActivePosition: makeAtom(computed(() => internal_editActivePosition())),
|
|
528
|
+
columnMarker: makeAtom(columnMarker),
|
|
529
|
+
columnMarkerEnabled: makeAtom(columnMarkerEnabled),
|
|
530
|
+
columnDoubleClickToAutosize: makeAtom(columnDoubleClickToAutosize),
|
|
531
|
+
rowDetailExpansions: makeAtom(rowDetailExpansions),
|
|
532
|
+
rowDetailHeight: makeAtom(rowDetailHeight),
|
|
533
|
+
rowDetailRenderer: makeAtom(rowDetailRenderer),
|
|
534
|
+
rowDetailAutoHeightGuess: makeAtom(rowDetailAutoHeightGuess),
|
|
535
|
+
rowSelectedIds: makeAtom(rowSelectedIds),
|
|
536
|
+
rowSelectionMode: makeAtom(rowSelectionMode),
|
|
537
|
+
rowSelectionPivot: makeAtom(internal_rowSelectionPivot),
|
|
538
|
+
rowSelectionActivator: makeAtom(rowSelectionActivator),
|
|
539
|
+
rowSelectChildren: makeAtom(rowSelectChildren),
|
|
540
|
+
viewBounds: makeAtom(bounds),
|
|
541
|
+
virtualizeRows: makeAtom(virtualizeRows),
|
|
542
|
+
virtualizeCols: makeAtom(virtualizeCols),
|
|
543
|
+
quickSearch: makeAtom(quickSearch),
|
|
544
|
+
quickSearchSensitivity: makeAtom(quickSearchSensitivity),
|
|
545
|
+
columnPivotMode: makeAtom(columnPivotMode),
|
|
546
|
+
columnPivotColumns: makeAtom(columnPivotColumns),
|
|
547
|
+
columnPivotModel: makeAtom(columnPivotModel),
|
|
548
|
+
columnPivotColumnGroupExpansions: makeAtom(columnPivotColumnGroupExpansions),
|
|
549
|
+
columnPivotRowGroupExpansions: makeAtom(columnPivotRowGroupExpansions),
|
|
550
|
+
dialogFrames: makeAtom(dialogFrame),
|
|
551
|
+
popoverFrames: makeAtom(popoverFrame),
|
|
552
|
+
cellSelections: makeAtom(cellSelections),
|
|
553
|
+
cellSelectionMode: makeAtom(cellSelectionMode),
|
|
481
554
|
};
|
|
482
555
|
const api = {};
|
|
483
|
-
const grid = { state, view:
|
|
556
|
+
const grid = { state, view: makeAtom(gridView), api };
|
|
484
557
|
const listeners = makeEventListeners();
|
|
485
558
|
Object.assign(api, {
|
|
559
|
+
cellRoot: makeCellRoot(grid),
|
|
486
560
|
columnField: makeColumnField(grid),
|
|
487
561
|
columnByIndex: makeColumnByIndex(grid),
|
|
488
562
|
columnIndex: makeColumnIndex(grid),
|
|
@@ -529,56 +603,46 @@ export function makeLyteNyte(p) {
|
|
|
529
603
|
});
|
|
530
604
|
Object.assign(grid, {
|
|
531
605
|
internal: {
|
|
532
|
-
headerCols:
|
|
533
|
-
headerRows:
|
|
534
|
-
headerHeightTotal:
|
|
535
|
-
xScroll:
|
|
536
|
-
yScroll:
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
rowDetailAutoHeightCache: makeGridAtom(internal_rowDetailHeightCache, store),
|
|
606
|
+
headerCols: makeAtom(computed(() => columnView().maxCol)),
|
|
607
|
+
headerRows: makeAtom(computed(() => columnView().maxRow)),
|
|
608
|
+
headerHeightTotal: makeAtom(headerHeightTotal),
|
|
609
|
+
xScroll: makeAtom(xScroll),
|
|
610
|
+
yScroll: makeAtom(yScroll),
|
|
611
|
+
layout: layoutState,
|
|
612
|
+
focusActive: makeAtom(internal_focusActive),
|
|
613
|
+
focusPrevColIndex: makeAtom(internal_focusPrevCol),
|
|
614
|
+
focusPrevRowIndex: makeAtom(internal_focusPrevRow),
|
|
615
|
+
editActivePos: makeAtom(internal_editActivePosition),
|
|
616
|
+
editData: makeAtom(internal_editData),
|
|
617
|
+
editValidation: makeAtom(internal_editValidation),
|
|
618
|
+
rowAutoHeightCache: makeAtom(internal_rowAutoHeightCache),
|
|
619
|
+
rowDetailAutoHeightCache: makeAtom(internal_rowDetailHeightCache),
|
|
547
620
|
rowSelectedIds: rowSelectedIds,
|
|
548
|
-
rowSelectionPivot:
|
|
549
|
-
rowSelectionLastWasDeselect:
|
|
550
|
-
draggingHeader:
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
store: store,
|
|
621
|
+
rowSelectionPivot: makeAtom(internal_rowSelectionPivot),
|
|
622
|
+
rowSelectionLastWasDeselect: makeAtom(internal_rowSelectionLastWasDeselect),
|
|
623
|
+
draggingHeader: makeAtom(internal_draggingHeader),
|
|
624
|
+
rowGroupColumnState: makeAtom(internal__rowGroupColumnState),
|
|
625
|
+
dialogFrames: makeAtom(internal_dialogFrames),
|
|
626
|
+
popoverFrames: makeAtom(internal_popoverFrames),
|
|
627
|
+
cellSelectionPivot: makeAtom(internal_cellSelectionPivot),
|
|
628
|
+
cellSelectionAdditiveRects: makeAtom(internal_cellSelectionAdditive),
|
|
629
|
+
cellSelectionIsDeselect: makeAtom(signal(false)),
|
|
630
|
+
cellSelectionSplits: makeAtom(internal_cellSelectionSplits),
|
|
559
631
|
},
|
|
560
632
|
});
|
|
561
|
-
|
|
562
|
-
|
|
633
|
+
effect(() => {
|
|
634
|
+
rowDataSource().init(grid);
|
|
563
635
|
});
|
|
564
|
-
|
|
636
|
+
rowDataSource.set(p.rowDataSource ?? emptyRowDataSource);
|
|
565
637
|
// Ensure cell selections are bounded.
|
|
566
|
-
|
|
567
|
-
|
|
638
|
+
effect(() => {
|
|
639
|
+
rowDataStore.rowCount.$();
|
|
640
|
+
columnMeta();
|
|
641
|
+
const selections = cellSelections();
|
|
568
642
|
const safeSelections = selections.map((c) => boundSelectionRect(grid, c));
|
|
569
643
|
if (equal(selections, safeSelections))
|
|
570
644
|
return;
|
|
571
|
-
|
|
572
|
-
});
|
|
573
|
-
store.sub(rdsAtoms.rowCount, () => {
|
|
574
|
-
const selections = store.get(cellSelections);
|
|
575
|
-
const safeSelections = selections.map((c) => boundSelectionRect(grid, c));
|
|
576
|
-
store.set(cellSelections, safeSelections);
|
|
577
|
-
});
|
|
578
|
-
store.sub(columnMeta, () => {
|
|
579
|
-
const selections = store.get(cellSelections);
|
|
580
|
-
const safeSelections = selections.map((c) => boundSelectionRect(grid, c));
|
|
581
|
-
store.set(cellSelections, safeSelections);
|
|
645
|
+
cellSelections.set(selections);
|
|
582
646
|
});
|
|
583
647
|
return grid;
|
|
584
648
|
}
|