@vuu-ui/vuu-table 0.8.96 → 0.8.98
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/cjs/Table.css.js +1 -1
- package/cjs/Table.js +12 -0
- package/cjs/Table.js.map +1 -1
- package/cjs/bulk-edit/BulkEditRow.js.map +1 -1
- package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +1 -1
- package/cjs/column-menu/ColumnMenu.js +2 -1
- package/cjs/column-menu/ColumnMenu.js.map +1 -1
- package/cjs/table-cell/TableCell.css.js +1 -1
- package/cjs/table-dom-utils.js.map +1 -1
- package/cjs/useCellFocus.js +76 -19
- package/cjs/useCellFocus.js.map +1 -1
- package/cjs/useKeyboardNavigation.js +56 -20
- package/cjs/useKeyboardNavigation.js.map +1 -1
- package/cjs/useTable.js +31 -2
- package/cjs/useTable.js.map +1 -1
- package/cjs/useTableModel.js +7 -7
- package/cjs/useTableModel.js.map +1 -1
- package/cjs/useTableScroll.js +116 -62
- package/cjs/useTableScroll.js.map +1 -1
- package/esm/Table.css.js +1 -1
- package/esm/Table.js +12 -0
- package/esm/Table.js.map +1 -1
- package/esm/bulk-edit/BulkEditRow.js.map +1 -1
- package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +1 -1
- package/esm/column-menu/ColumnMenu.js +2 -1
- package/esm/column-menu/ColumnMenu.js.map +1 -1
- package/esm/table-cell/TableCell.css.js +1 -1
- package/esm/table-dom-utils.js.map +1 -1
- package/esm/useCellFocus.js +78 -21
- package/esm/useCellFocus.js.map +1 -1
- package/esm/useKeyboardNavigation.js +56 -20
- package/esm/useKeyboardNavigation.js.map +1 -1
- package/esm/useTable.js +31 -2
- package/esm/useTable.js.map +1 -1
- package/esm/useTableModel.js +7 -7
- package/esm/useTableModel.js.map +1 -1
- package/esm/useTableScroll.js +116 -62
- package/esm/useTableScroll.js.map +1 -1
- package/package.json +9 -9
- package/types/table-dom-utils.d.ts +1 -4
- package/types/useCellFocus.d.ts +7 -4
- package/types/useKeyboardNavigation.d.ts +5 -3
- package/types/useTable.d.ts +2 -0
- package/types/useTableScroll.d.ts +15 -5
|
@@ -26,9 +26,22 @@ const isNavigationKey = (key, navigationStyle) => {
|
|
|
26
26
|
return false;
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
|
+
const focusColumnMenuIfAppropriate = (e, [rowIdx], el) => {
|
|
30
|
+
if (e.shiftKey && e.key.match(/Arrow(Left|Right)/) && rowIdx === -1) {
|
|
31
|
+
if (el?.classList.contains("vuuTableHeaderCell")) {
|
|
32
|
+
const menuButton = el?.querySelector(".vuuColumnMenu");
|
|
33
|
+
if (menuButton) {
|
|
34
|
+
menuButton.focus();
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
};
|
|
29
41
|
const PageKeys = ["Home", "End", "PageUp", "PageDown"];
|
|
30
42
|
const isPagingKey = (key) => PageKeys.includes(key);
|
|
31
43
|
const useKeyboardNavigation = ({
|
|
44
|
+
cellFocusStateRef,
|
|
32
45
|
columnCount = 0,
|
|
33
46
|
containerRef,
|
|
34
47
|
defaultHighlightedIndex,
|
|
@@ -41,8 +54,6 @@ const useKeyboardNavigation = ({
|
|
|
41
54
|
rowCount = 0,
|
|
42
55
|
viewportRowCount
|
|
43
56
|
}) => {
|
|
44
|
-
const focusedCellPos = react.useRef([-1, -1]);
|
|
45
|
-
const activeCellPos = react.useRef([-1, 0]);
|
|
46
57
|
const highlightedIndexRef = react.useRef();
|
|
47
58
|
const [highlightedIndex, setHighlightedIdx] = core.useControlled({
|
|
48
59
|
controlled: highlightedIndexProp,
|
|
@@ -51,26 +62,28 @@ const useKeyboardNavigation = ({
|
|
|
51
62
|
});
|
|
52
63
|
highlightedIndexRef.current = highlightedIndex;
|
|
53
64
|
const setHighlightedIndex = react.useCallback(
|
|
54
|
-
(idx
|
|
65
|
+
(idx) => {
|
|
55
66
|
onHighlight?.(idx);
|
|
56
67
|
setHighlightedIdx(idx);
|
|
57
68
|
},
|
|
58
69
|
[onHighlight, setHighlightedIdx]
|
|
59
70
|
);
|
|
60
|
-
const getFocusedCell = (
|
|
61
|
-
"
|
|
62
|
-
|
|
71
|
+
const getFocusedCell = (el) => {
|
|
72
|
+
if (el?.role == "cell" || el?.role === "columnheader") {
|
|
73
|
+
return el;
|
|
74
|
+
} else {
|
|
75
|
+
return el?.closest(
|
|
76
|
+
"[role='columnHeader'],[role='cell']"
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
63
80
|
const setActiveCell = react.useCallback(
|
|
64
81
|
(rowIdx, colIdx, fromKeyboard = false) => {
|
|
65
82
|
const pos = [rowIdx, colIdx];
|
|
66
|
-
activeCellPos.current = pos;
|
|
67
83
|
if (navigationStyle === "row") {
|
|
68
84
|
setHighlightedIdx(rowIdx);
|
|
69
85
|
} else {
|
|
70
|
-
focusCell(pos);
|
|
71
|
-
}
|
|
72
|
-
if (fromKeyboard) {
|
|
73
|
-
focusedCellPos.current = pos;
|
|
86
|
+
focusCell(pos, fromKeyboard);
|
|
74
87
|
}
|
|
75
88
|
},
|
|
76
89
|
[focusCell, navigationStyle, setHighlightedIdx]
|
|
@@ -78,10 +91,12 @@ const useKeyboardNavigation = ({
|
|
|
78
91
|
const nextPageItemIdx = react.useCallback(
|
|
79
92
|
(key, [rowIdx, colIdx]) => new Promise((resolve) => {
|
|
80
93
|
let newRowIdx = rowIdx;
|
|
94
|
+
const { current: focusState } = cellFocusStateRef;
|
|
81
95
|
switch (key) {
|
|
82
96
|
case "PageDown": {
|
|
83
97
|
newRowIdx = Math.min(rowCount - 1, rowIdx + viewportRowCount);
|
|
84
98
|
if (newRowIdx !== rowIdx) {
|
|
99
|
+
focusState.cellPos = [newRowIdx, colIdx];
|
|
85
100
|
requestScroll?.({ type: "scroll-page", direction: "down" });
|
|
86
101
|
}
|
|
87
102
|
break;
|
|
@@ -89,6 +104,7 @@ const useKeyboardNavigation = ({
|
|
|
89
104
|
case "PageUp": {
|
|
90
105
|
newRowIdx = Math.max(0, rowIdx - viewportRowCount);
|
|
91
106
|
if (newRowIdx !== rowIdx) {
|
|
107
|
+
focusState.cellPos = [newRowIdx, colIdx];
|
|
92
108
|
requestScroll?.({ type: "scroll-page", direction: "up" });
|
|
93
109
|
}
|
|
94
110
|
break;
|
|
@@ -96,6 +112,7 @@ const useKeyboardNavigation = ({
|
|
|
96
112
|
case "Home": {
|
|
97
113
|
newRowIdx = 0;
|
|
98
114
|
if (newRowIdx !== rowIdx) {
|
|
115
|
+
focusState.cellPos = [0, colIdx];
|
|
99
116
|
requestScroll?.({ type: "scroll-end", direction: "home" });
|
|
100
117
|
}
|
|
101
118
|
break;
|
|
@@ -103,6 +120,7 @@ const useKeyboardNavigation = ({
|
|
|
103
120
|
case "End": {
|
|
104
121
|
newRowIdx = rowCount - 1;
|
|
105
122
|
if (newRowIdx !== rowIdx) {
|
|
123
|
+
focusState.cellPos = [newRowIdx, colIdx];
|
|
106
124
|
requestScroll?.({ type: "scroll-end", direction: "end" });
|
|
107
125
|
}
|
|
108
126
|
break;
|
|
@@ -112,16 +130,16 @@ const useKeyboardNavigation = ({
|
|
|
112
130
|
resolve([newRowIdx, colIdx]);
|
|
113
131
|
}, 35);
|
|
114
132
|
}),
|
|
115
|
-
[requestScroll, rowCount, viewportRowCount]
|
|
133
|
+
[cellFocusStateRef, requestScroll, rowCount, viewportRowCount]
|
|
116
134
|
);
|
|
117
135
|
const handleFocus = react.useCallback(() => {
|
|
118
136
|
if (disableHighlightOnFocus !== true) {
|
|
119
137
|
if (containerRef.current?.contains(document.activeElement)) {
|
|
120
138
|
const focusedCell = getFocusedCell(document.activeElement);
|
|
121
139
|
if (focusedCell) {
|
|
122
|
-
|
|
140
|
+
cellFocusStateRef.current.cellPos = tableDomUtils.getTableCellPos(focusedCell);
|
|
123
141
|
if (navigationStyle === "row") {
|
|
124
|
-
setHighlightedIdx(
|
|
142
|
+
setHighlightedIdx(cellFocusStateRef.current.cellPos[0]);
|
|
125
143
|
}
|
|
126
144
|
}
|
|
127
145
|
}
|
|
@@ -129,18 +147,22 @@ const useKeyboardNavigation = ({
|
|
|
129
147
|
}, [
|
|
130
148
|
disableHighlightOnFocus,
|
|
131
149
|
containerRef,
|
|
150
|
+
cellFocusStateRef,
|
|
132
151
|
navigationStyle,
|
|
133
152
|
setHighlightedIdx
|
|
134
153
|
]);
|
|
135
154
|
const navigateChildItems = react.useCallback(
|
|
136
155
|
async (key) => {
|
|
137
|
-
const
|
|
138
|
-
|
|
156
|
+
const {
|
|
157
|
+
current: { cellPos }
|
|
158
|
+
} = cellFocusStateRef;
|
|
159
|
+
const [nextRowIdx, nextColIdx] = isPagingKey(key) ? await nextPageItemIdx(key, cellPos) : tableDomUtils.getNextCellPos(key, cellPos, columnCount, rowCount);
|
|
160
|
+
const [rowIdx, colIdx] = cellPos;
|
|
139
161
|
if (nextRowIdx !== rowIdx || nextColIdx !== colIdx) {
|
|
140
162
|
setActiveCell(nextRowIdx, nextColIdx, true);
|
|
141
163
|
}
|
|
142
164
|
},
|
|
143
|
-
[columnCount, nextPageItemIdx, rowCount, setActiveCell]
|
|
165
|
+
[cellFocusStateRef, columnCount, nextPageItemIdx, rowCount, setActiveCell]
|
|
144
166
|
);
|
|
145
167
|
const scrollRowIntoViewIfNecessary = react.useCallback(
|
|
146
168
|
(rowIndex) => {
|
|
@@ -174,7 +196,10 @@ const useKeyboardNavigation = ({
|
|
|
174
196
|
}, [highlightedIndexProp, scrollRowIntoViewIfNecessary]);
|
|
175
197
|
const handleKeyDown = react.useCallback(
|
|
176
198
|
(e) => {
|
|
177
|
-
const cell = vuuUtils.queryClosest(
|
|
199
|
+
const cell = vuuUtils.queryClosest(
|
|
200
|
+
e.target,
|
|
201
|
+
".vuuTableCell,.vuuColumnMenu,.vuuTableHeaderCell"
|
|
202
|
+
);
|
|
178
203
|
if (tableDomUtils.cellDropdownShowing(cell)) {
|
|
179
204
|
return;
|
|
180
205
|
}
|
|
@@ -184,11 +209,22 @@ const useKeyboardNavigation = ({
|
|
|
184
209
|
if (navigationStyle === "row") {
|
|
185
210
|
moveHighlightedRow(e.key);
|
|
186
211
|
} else {
|
|
187
|
-
|
|
212
|
+
const {
|
|
213
|
+
current: { cellPos }
|
|
214
|
+
} = cellFocusStateRef;
|
|
215
|
+
if (!focusColumnMenuIfAppropriate(e, cellPos, cell)) {
|
|
216
|
+
navigateChildItems(e.key);
|
|
217
|
+
}
|
|
188
218
|
}
|
|
189
219
|
}
|
|
190
220
|
},
|
|
191
|
-
[
|
|
221
|
+
[
|
|
222
|
+
rowCount,
|
|
223
|
+
navigationStyle,
|
|
224
|
+
moveHighlightedRow,
|
|
225
|
+
cellFocusStateRef,
|
|
226
|
+
navigateChildItems
|
|
227
|
+
]
|
|
192
228
|
);
|
|
193
229
|
const handleClick = react.useCallback(
|
|
194
230
|
// Might not be a cell e.g the Settings button
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useKeyboardNavigation.js","sources":["../src/useKeyboardNavigation.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { PageKey, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport { useControlled } from \"@salt-ds/core\";\nimport {\n KeyboardEvent,\n MouseEvent,\n RefObject,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { TableNavigationStyle } from \"./Table\";\nimport {\n CellPos,\n NavigationKey,\n cellDropdownShowing,\n closestRowIndex,\n getTableCellPos,\n getNextCellPos,\n} from \"./table-dom-utils\";\nimport { ScrollRequestHandler } from \"./useTableScroll\";\nimport { FocusCell } from \"./useCellFocus\";\n\nconst rowNavigationKeys = new Set<NavigationKey>([\n \"Home\",\n \"End\",\n \"PageUp\",\n \"PageDown\",\n \"ArrowDown\",\n \"ArrowUp\",\n]);\n\nconst cellNavigationKeys = new Set(rowNavigationKeys);\ncellNavigationKeys.add(\"ArrowLeft\");\ncellNavigationKeys.add(\"ArrowRight\");\n\nexport const isNavigationKey = (\n key: string,\n navigationStyle: TableNavigationStyle,\n): key is NavigationKey => {\n switch (navigationStyle) {\n case \"cell\":\n return cellNavigationKeys.has(key as NavigationKey);\n case \"row\":\n return rowNavigationKeys.has(key as NavigationKey);\n default:\n return false;\n }\n};\n\nconst PageKeys = [\"Home\", \"End\", \"PageUp\", \"PageDown\"];\nexport const isPagingKey = (key: string): key is PageKey =>\n PageKeys.includes(key);\n\nexport interface NavigationHookProps {\n containerRef: RefObject<HTMLElement>;\n columnCount?: number;\n defaultHighlightedIndex?: number;\n disableFocus?: boolean;\n disableHighlightOnFocus?: boolean;\n focusCell: FocusCell;\n highlightedIndex?: number;\n label?: string;\n navigationStyle: TableNavigationStyle;\n viewportRange: VuuRange;\n onHighlight?: (idx: number) => void;\n requestScroll?: ScrollRequestHandler;\n restoreLastFocus?: boolean;\n rowCount?: number;\n selected?: unknown;\n viewportRowCount: number;\n}\n\nexport const useKeyboardNavigation = ({\n columnCount = 0,\n containerRef,\n defaultHighlightedIndex,\n disableHighlightOnFocus,\n focusCell,\n highlightedIndex: highlightedIndexProp,\n navigationStyle,\n requestScroll,\n onHighlight,\n rowCount = 0,\n viewportRowCount,\n}: NavigationHookProps) => {\n const focusedCellPos = useRef<CellPos>([-1, -1]);\n const activeCellPos = useRef<CellPos>([-1, 0]);\n // Keep this in sync with state value. This can be used by functions that need\n // to reference highlightedIndex at call time but do not need to be regenerated\n // every time it changes (i.e keep highlightedIndex out of their dependency\n // arrays, as it can update frequently)\n const highlightedIndexRef = useRef<number | undefined>();\n\n const [highlightedIndex, setHighlightedIdx] = useControlled({\n controlled: highlightedIndexProp,\n default: defaultHighlightedIndex,\n name: \"UseKeyboardNavigation\",\n });\n highlightedIndexRef.current = highlightedIndex;\n const setHighlightedIndex = useCallback(\n (idx: number, fromKeyboard = false) => {\n onHighlight?.(idx);\n setHighlightedIdx(idx);\n if (fromKeyboard) {\n // lastFocus.current = idx;\n }\n },\n [onHighlight, setHighlightedIdx],\n );\n\n const getFocusedCell = (element: HTMLElement | Element | null) =>\n element?.closest(\n \"[role='columnHeader'],[role='cell']\",\n ) as HTMLDivElement | null;\n\n const setActiveCell = useCallback(\n (rowIdx: number, colIdx: number, fromKeyboard = false) => {\n const pos: CellPos = [rowIdx, colIdx];\n activeCellPos.current = pos;\n if (navigationStyle === \"row\") {\n setHighlightedIdx(rowIdx);\n } else {\n focusCell(pos);\n }\n if (fromKeyboard) {\n focusedCellPos.current = pos;\n }\n },\n [focusCell, navigationStyle, setHighlightedIdx],\n );\n\n const nextPageItemIdx = useCallback(\n (\n key: \"PageDown\" | \"PageUp\" | \"Home\" | \"End\",\n [rowIdx, colIdx]: CellPos,\n ): Promise<CellPos> =>\n new Promise((resolve) => {\n let newRowIdx = rowIdx;\n switch (key) {\n case \"PageDown\": {\n newRowIdx = Math.min(rowCount - 1, rowIdx + viewportRowCount);\n if (newRowIdx !== rowIdx) {\n requestScroll?.({ type: \"scroll-page\", direction: \"down\" });\n }\n break;\n }\n case \"PageUp\": {\n newRowIdx = Math.max(0, rowIdx - viewportRowCount);\n if (newRowIdx !== rowIdx) {\n requestScroll?.({ type: \"scroll-page\", direction: \"up\" });\n }\n break;\n }\n case \"Home\": {\n newRowIdx = 0;\n if (newRowIdx !== rowIdx) {\n requestScroll?.({ type: \"scroll-end\", direction: \"home\" });\n }\n break;\n }\n case \"End\": {\n newRowIdx = rowCount - 1;\n if (newRowIdx !== rowIdx) {\n requestScroll?.({ type: \"scroll-end\", direction: \"end\" });\n }\n break;\n }\n }\n // Introduce a delay to allow the scroll operation to complete,\n // which will trigger a range reset and rerender of rows. We\n // might need to tweak how this works. If we introduce too big\n // a delay, we risk seeing the newly rendered rows, with the focus\n // still on the old cell, which will be apparent as a brief flash\n // of the old cell focus before switching to correct cell. If we were\n // to change the way re assign keys such that we can guarantee that\n // when we page down, rows in same position get same keys, then same\n // cell would be focussed in new page as previous and issue would not\n // arise.\n setTimeout(() => {\n resolve([newRowIdx, colIdx]);\n }, 35);\n }),\n [requestScroll, rowCount, viewportRowCount],\n );\n\n const handleFocus = useCallback(() => {\n if (disableHighlightOnFocus !== true) {\n if (containerRef.current?.contains(document.activeElement)) {\n // IF focus arrives via keyboard, a cell will have received focus,\n // we handle that here. If focus arrives via click on a cell with\n // no tabindex (i.e all cells except one) we leave that to the\n // click handler.\n const focusedCell = getFocusedCell(document.activeElement);\n if (focusedCell) {\n focusedCellPos.current = getTableCellPos(focusedCell);\n if (navigationStyle === \"row\") {\n setHighlightedIdx(focusedCellPos.current[0]);\n }\n }\n }\n }\n }, [\n disableHighlightOnFocus,\n containerRef,\n navigationStyle,\n setHighlightedIdx,\n ]);\n\n const navigateChildItems = useCallback(\n async (key: NavigationKey) => {\n const [nextRowIdx, nextColIdx] = isPagingKey(key)\n ? await nextPageItemIdx(key, activeCellPos.current)\n : getNextCellPos(key, activeCellPos.current, columnCount, rowCount);\n const [rowIdx, colIdx] = activeCellPos.current;\n if (nextRowIdx !== rowIdx || nextColIdx !== colIdx) {\n setActiveCell(nextRowIdx, nextColIdx, true);\n }\n },\n [columnCount, nextPageItemIdx, rowCount, setActiveCell],\n );\n\n const scrollRowIntoViewIfNecessary = useCallback(\n (rowIndex: number) => {\n requestScroll?.({ type: \"scroll-row\", rowIndex });\n },\n [requestScroll],\n );\n\n const moveHighlightedRow = useCallback(\n async (key: NavigationKey) => {\n const { current: highlighted } = highlightedIndexRef;\n const [nextRowIdx] = isPagingKey(key)\n ? await nextPageItemIdx(key, [highlighted ?? -1, 0])\n : getNextCellPos(key, [highlighted ?? -1, 0], columnCount, rowCount);\n if (nextRowIdx !== highlighted) {\n setHighlightedIndex(nextRowIdx);\n // TO(DO make this a scroll request)\n scrollRowIntoViewIfNecessary(nextRowIdx);\n }\n },\n [\n columnCount,\n nextPageItemIdx,\n rowCount,\n scrollRowIntoViewIfNecessary,\n setHighlightedIndex,\n ],\n );\n\n useEffect(() => {\n if (highlightedIndexProp !== undefined && highlightedIndexProp !== -1) {\n requestAnimationFrame(() => {\n // deferred call, ensuring table has fully rendered\n scrollRowIntoViewIfNecessary(highlightedIndexProp);\n });\n }\n }, [highlightedIndexProp, scrollRowIntoViewIfNecessary]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n const cell = queryClosest<HTMLDivElement>(e.target, \".vuuTableCell\");\n if (cellDropdownShowing(cell)) {\n return;\n }\n if (rowCount > 0 && isNavigationKey(e.key, navigationStyle)) {\n e.preventDefault();\n e.stopPropagation();\n if (navigationStyle === \"row\") {\n moveHighlightedRow(e.key);\n } else {\n void navigateChildItems(e.key);\n }\n }\n },\n [rowCount, navigationStyle, moveHighlightedRow, navigateChildItems],\n );\n\n const handleClick = useCallback(\n // Might not be a cell e.g the Settings button\n (evt: MouseEvent) => {\n const target = evt.target as HTMLElement;\n const focusedCell = getFocusedCell(target);\n if (focusedCell) {\n const [rowIdx, colIdx] = getTableCellPos(focusedCell);\n setActiveCell(rowIdx, colIdx);\n }\n },\n [setActiveCell],\n );\n\n const handleMouseLeave = useCallback(() => {\n setHighlightedIndex(-1);\n }, [setHighlightedIndex]);\n\n const handleMouseMove = useCallback(\n (evt: MouseEvent) => {\n const idx = closestRowIndex(evt.target as HTMLElement);\n if (idx !== -1 && idx !== highlightedIndexRef.current) {\n setHighlightedIndex(idx);\n }\n },\n [setHighlightedIndex],\n );\n\n const navigate = useCallback(() => {\n navigateChildItems(\"ArrowDown\");\n }, [navigateChildItems]);\n\n return {\n highlightedIndexRef,\n navigate,\n onClick: handleClick,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n onMouseLeave: navigationStyle === \"row\" ? handleMouseLeave : undefined,\n onMouseMove: navigationStyle === \"row\" ? handleMouseMove : undefined,\n };\n};\n"],"names":["useRef","useControlled","useCallback","getTableCellPos","getNextCellPos","useEffect","queryClosest","cellDropdownShowing","closestRowIndex"],"mappings":";;;;;;;AAuBA,MAAM,iBAAA,uBAAwB,GAAmB,CAAA;AAAA,EAC/C,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AACF,CAAC,CAAA,CAAA;AAED,MAAM,kBAAA,GAAqB,IAAI,GAAA,CAAI,iBAAiB,CAAA,CAAA;AACpD,kBAAA,CAAmB,IAAI,WAAW,CAAA,CAAA;AAClC,kBAAA,CAAmB,IAAI,YAAY,CAAA,CAAA;AAEtB,MAAA,eAAA,GAAkB,CAC7B,GAAA,EACA,eACyB,KAAA;AACzB,EAAA,QAAQ,eAAiB;AAAA,IACvB,KAAK,MAAA;AACH,MAAO,OAAA,kBAAA,CAAmB,IAAI,GAAoB,CAAA,CAAA;AAAA,IACpD,KAAK,KAAA;AACH,MAAO,OAAA,iBAAA,CAAkB,IAAI,GAAoB,CAAA,CAAA;AAAA,IACnD;AACE,MAAO,OAAA,KAAA,CAAA;AAAA,GACX;AACF,EAAA;AAEA,MAAM,QAAW,GAAA,CAAC,MAAQ,EAAA,KAAA,EAAO,UAAU,UAAU,CAAA,CAAA;AAC9C,MAAM,WAAc,GAAA,CAAC,GAC1B,KAAA,QAAA,CAAS,SAAS,GAAG,EAAA;AAqBhB,MAAM,wBAAwB,CAAC;AAAA,EACpC,WAAc,GAAA,CAAA;AAAA,EACd,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAkB,EAAA,oBAAA;AAAA,EAClB,eAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAW,GAAA,CAAA;AAAA,EACX,gBAAA;AACF,CAA2B,KAAA;AACzB,EAAA,MAAM,cAAiB,GAAAA,YAAA,CAAgB,CAAC,CAAA,CAAA,EAAI,EAAE,CAAC,CAAA,CAAA;AAC/C,EAAA,MAAM,aAAgB,GAAAA,YAAA,CAAgB,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAA,CAAA;AAK7C,EAAA,MAAM,sBAAsBA,YAA2B,EAAA,CAAA;AAEvD,EAAA,MAAM,CAAC,gBAAA,EAAkB,iBAAiB,CAAA,GAAIC,kBAAc,CAAA;AAAA,IAC1D,UAAY,EAAA,oBAAA;AAAA,IACZ,OAAS,EAAA,uBAAA;AAAA,IACT,IAAM,EAAA,uBAAA;AAAA,GACP,CAAA,CAAA;AACD,EAAA,mBAAA,CAAoB,OAAU,GAAA,gBAAA,CAAA;AAC9B,EAAA,MAAM,mBAAsB,GAAAC,iBAAA;AAAA,IAC1B,CAAC,GAAa,EAAA,YAAA,GAAe,KAAU,KAAA;AACrC,MAAA,WAAA,GAAc,GAAG,CAAA,CAAA;AACjB,MAAA,iBAAA,CAAkB,GAAG,CAAA,CAAA;AAGrB,KACF;AAAA,IACA,CAAC,aAAa,iBAAiB,CAAA;AAAA,GACjC,CAAA;AAEA,EAAM,MAAA,cAAA,GAAiB,CAAC,OAAA,KACtB,OAAS,EAAA,OAAA;AAAA,IACP,qCAAA;AAAA,GACF,CAAA;AAEF,EAAA,MAAM,aAAgB,GAAAA,iBAAA;AAAA,IACpB,CAAC,MAAA,EAAgB,MAAgB,EAAA,YAAA,GAAe,KAAU,KAAA;AACxD,MAAM,MAAA,GAAA,GAAe,CAAC,MAAA,EAAQ,MAAM,CAAA,CAAA;AACpC,MAAA,aAAA,CAAc,OAAU,GAAA,GAAA,CAAA;AACxB,MAAA,IAAI,oBAAoB,KAAO,EAAA;AAC7B,QAAA,iBAAA,CAAkB,MAAM,CAAA,CAAA;AAAA,OACnB,MAAA;AACL,QAAA,SAAA,CAAU,GAAG,CAAA,CAAA;AAAA,OACf;AACA,MAAA,IAAI,YAAc,EAAA;AAChB,QAAA,cAAA,CAAe,OAAU,GAAA,GAAA,CAAA;AAAA,OAC3B;AAAA,KACF;AAAA,IACA,CAAC,SAAW,EAAA,eAAA,EAAiB,iBAAiB,CAAA;AAAA,GAChD,CAAA;AAEA,EAAA,MAAM,eAAkB,GAAAA,iBAAA;AAAA,IACtB,CACE,KACA,CAAC,MAAA,EAAQ,MAAM,CAEf,KAAA,IAAI,OAAQ,CAAA,CAAC,OAAY,KAAA;AACvB,MAAA,IAAI,SAAY,GAAA,MAAA,CAAA;AAChB,MAAA,QAAQ,GAAK;AAAA,QACX,KAAK,UAAY,EAAA;AACf,UAAA,SAAA,GAAY,IAAK,CAAA,GAAA,CAAI,QAAW,GAAA,CAAA,EAAG,SAAS,gBAAgB,CAAA,CAAA;AAC5D,UAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,YAAA,aAAA,GAAgB,EAAE,IAAA,EAAM,aAAe,EAAA,SAAA,EAAW,QAAQ,CAAA,CAAA;AAAA,WAC5D;AACA,UAAA,MAAA;AAAA,SACF;AAAA,QACA,KAAK,QAAU,EAAA;AACb,UAAA,SAAA,GAAY,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,MAAA,GAAS,gBAAgB,CAAA,CAAA;AACjD,UAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,YAAA,aAAA,GAAgB,EAAE,IAAA,EAAM,aAAe,EAAA,SAAA,EAAW,MAAM,CAAA,CAAA;AAAA,WAC1D;AACA,UAAA,MAAA;AAAA,SACF;AAAA,QACA,KAAK,MAAQ,EAAA;AACX,UAAY,SAAA,GAAA,CAAA,CAAA;AACZ,UAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,YAAA,aAAA,GAAgB,EAAE,IAAA,EAAM,YAAc,EAAA,SAAA,EAAW,QAAQ,CAAA,CAAA;AAAA,WAC3D;AACA,UAAA,MAAA;AAAA,SACF;AAAA,QACA,KAAK,KAAO,EAAA;AACV,UAAA,SAAA,GAAY,QAAW,GAAA,CAAA,CAAA;AACvB,UAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,YAAA,aAAA,GAAgB,EAAE,IAAA,EAAM,YAAc,EAAA,SAAA,EAAW,OAAO,CAAA,CAAA;AAAA,WAC1D;AACA,UAAA,MAAA;AAAA,SACF;AAAA,OACF;AAWA,MAAA,UAAA,CAAW,MAAM;AACf,QAAQ,OAAA,CAAA,CAAC,SAAW,EAAA,MAAM,CAAC,CAAA,CAAA;AAAA,SAC1B,EAAE,CAAA,CAAA;AAAA,KACN,CAAA;AAAA,IACH,CAAC,aAAe,EAAA,QAAA,EAAU,gBAAgB,CAAA;AAAA,GAC5C,CAAA;AAEA,EAAM,MAAA,WAAA,GAAcA,kBAAY,MAAM;AACpC,IAAA,IAAI,4BAA4B,IAAM,EAAA;AACpC,MAAA,IAAI,YAAa,CAAA,OAAA,EAAS,QAAS,CAAA,QAAA,CAAS,aAAa,CAAG,EAAA;AAK1D,QAAM,MAAA,WAAA,GAAc,cAAe,CAAA,QAAA,CAAS,aAAa,CAAA,CAAA;AACzD,QAAA,IAAI,WAAa,EAAA;AACf,UAAe,cAAA,CAAA,OAAA,GAAUC,8BAAgB,WAAW,CAAA,CAAA;AACpD,UAAA,IAAI,oBAAoB,KAAO,EAAA;AAC7B,YAAkB,iBAAA,CAAA,cAAA,CAAe,OAAQ,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,WAC7C;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,GACC,EAAA;AAAA,IACD,uBAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,kBAAqB,GAAAD,iBAAA;AAAA,IACzB,OAAO,GAAuB,KAAA;AAC5B,MAAA,MAAM,CAAC,UAAY,EAAA,UAAU,IAAI,WAAY,CAAA,GAAG,IAC5C,MAAM,eAAA,CAAgB,GAAK,EAAA,aAAA,CAAc,OAAO,CAChD,GAAAE,4BAAA,CAAe,KAAK,aAAc,CAAA,OAAA,EAAS,aAAa,QAAQ,CAAA,CAAA;AACpE,MAAA,MAAM,CAAC,MAAA,EAAQ,MAAM,CAAA,GAAI,aAAc,CAAA,OAAA,CAAA;AACvC,MAAI,IAAA,UAAA,KAAe,MAAU,IAAA,UAAA,KAAe,MAAQ,EAAA;AAClD,QAAc,aAAA,CAAA,UAAA,EAAY,YAAY,IAAI,CAAA,CAAA;AAAA,OAC5C;AAAA,KACF;AAAA,IACA,CAAC,WAAA,EAAa,eAAiB,EAAA,QAAA,EAAU,aAAa,CAAA;AAAA,GACxD,CAAA;AAEA,EAAA,MAAM,4BAA+B,GAAAF,iBAAA;AAAA,IACnC,CAAC,QAAqB,KAAA;AACpB,MAAA,aAAA,GAAgB,EAAE,IAAA,EAAM,YAAc,EAAA,QAAA,EAAU,CAAA,CAAA;AAAA,KAClD;AAAA,IACA,CAAC,aAAa,CAAA;AAAA,GAChB,CAAA;AAEA,EAAA,MAAM,kBAAqB,GAAAA,iBAAA;AAAA,IACzB,OAAO,GAAuB,KAAA;AAC5B,MAAM,MAAA,EAAE,OAAS,EAAA,WAAA,EAAgB,GAAA,mBAAA,CAAA;AACjC,MAAM,MAAA,CAAC,UAAU,CAAI,GAAA,WAAA,CAAY,GAAG,CAChC,GAAA,MAAM,eAAgB,CAAA,GAAA,EAAK,CAAC,WAAA,IAAe,IAAI,CAAC,CAAC,CACjD,GAAAE,4BAAA,CAAe,GAAK,EAAA,CAAC,eAAe,CAAI,CAAA,EAAA,CAAC,CAAG,EAAA,WAAA,EAAa,QAAQ,CAAA,CAAA;AACrE,MAAA,IAAI,eAAe,WAAa,EAAA;AAC9B,QAAA,mBAAA,CAAoB,UAAU,CAAA,CAAA;AAE9B,QAAA,4BAAA,CAA6B,UAAU,CAAA,CAAA;AAAA,OACzC;AAAA,KACF;AAAA,IACA;AAAA,MACE,WAAA;AAAA,MACA,eAAA;AAAA,MACA,QAAA;AAAA,MACA,4BAAA;AAAA,MACA,mBAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAI,IAAA,oBAAA,KAAyB,KAAa,CAAA,IAAA,oBAAA,KAAyB,CAAI,CAAA,EAAA;AACrE,MAAA,qBAAA,CAAsB,MAAM;AAE1B,QAAA,4BAAA,CAA6B,oBAAoB,CAAA,CAAA;AAAA,OAClD,CAAA,CAAA;AAAA,KACH;AAAA,GACC,EAAA,CAAC,oBAAsB,EAAA,4BAA4B,CAAC,CAAA,CAAA;AAEvD,EAAA,MAAM,aAAgB,GAAAH,iBAAA;AAAA,IACpB,CAAC,CAAqB,KAAA;AACpB,MAAA,MAAM,IAAO,GAAAI,qBAAA,CAA6B,CAAE,CAAA,MAAA,EAAQ,eAAe,CAAA,CAAA;AACnE,MAAI,IAAAC,iCAAA,CAAoB,IAAI,CAAG,EAAA;AAC7B,QAAA,OAAA;AAAA,OACF;AACA,MAAA,IAAI,WAAW,CAAK,IAAA,eAAA,CAAgB,CAAE,CAAA,GAAA,EAAK,eAAe,CAAG,EAAA;AAC3D,QAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AACjB,QAAA,CAAA,CAAE,eAAgB,EAAA,CAAA;AAClB,QAAA,IAAI,oBAAoB,KAAO,EAAA;AAC7B,UAAA,kBAAA,CAAmB,EAAE,GAAG,CAAA,CAAA;AAAA,SACnB,MAAA;AACL,UAAK,KAAA,kBAAA,CAAmB,EAAE,GAAG,CAAA,CAAA;AAAA,SAC/B;AAAA,OACF;AAAA,KACF;AAAA,IACA,CAAC,QAAA,EAAU,eAAiB,EAAA,kBAAA,EAAoB,kBAAkB,CAAA;AAAA,GACpE,CAAA;AAEA,EAAA,MAAM,WAAc,GAAAL,iBAAA;AAAA;AAAA,IAElB,CAAC,GAAoB,KAAA;AACnB,MAAA,MAAM,SAAS,GAAI,CAAA,MAAA,CAAA;AACnB,MAAM,MAAA,WAAA,GAAc,eAAe,MAAM,CAAA,CAAA;AACzC,MAAA,IAAI,WAAa,EAAA;AACf,QAAA,MAAM,CAAC,MAAA,EAAQ,MAAM,CAAA,GAAIC,8BAAgB,WAAW,CAAA,CAAA;AACpD,QAAA,aAAA,CAAc,QAAQ,MAAM,CAAA,CAAA;AAAA,OAC9B;AAAA,KACF;AAAA,IACA,CAAC,aAAa,CAAA;AAAA,GAChB,CAAA;AAEA,EAAM,MAAA,gBAAA,GAAmBD,kBAAY,MAAM;AACzC,IAAA,mBAAA,CAAoB,CAAE,CAAA,CAAA,CAAA;AAAA,GACxB,EAAG,CAAC,mBAAmB,CAAC,CAAA,CAAA;AAExB,EAAA,MAAM,eAAkB,GAAAA,iBAAA;AAAA,IACtB,CAAC,GAAoB,KAAA;AACnB,MAAM,MAAA,GAAA,GAAMM,6BAAgB,CAAA,GAAA,CAAI,MAAqB,CAAA,CAAA;AACrD,MAAA,IAAI,GAAQ,KAAA,CAAA,CAAA,IAAM,GAAQ,KAAA,mBAAA,CAAoB,OAAS,EAAA;AACrD,QAAA,mBAAA,CAAoB,GAAG,CAAA,CAAA;AAAA,OACzB;AAAA,KACF;AAAA,IACA,CAAC,mBAAmB,CAAA;AAAA,GACtB,CAAA;AAEA,EAAM,MAAA,QAAA,GAAWN,kBAAY,MAAM;AACjC,IAAA,kBAAA,CAAmB,WAAW,CAAA,CAAA;AAAA,GAChC,EAAG,CAAC,kBAAkB,CAAC,CAAA,CAAA;AAEvB,EAAO,OAAA;AAAA,IACL,mBAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAS,EAAA,WAAA;AAAA,IACT,OAAS,EAAA,WAAA;AAAA,IACT,SAAW,EAAA,aAAA;AAAA,IACX,YAAA,EAAc,eAAoB,KAAA,KAAA,GAAQ,gBAAmB,GAAA,KAAA,CAAA;AAAA,IAC7D,WAAA,EAAa,eAAoB,KAAA,KAAA,GAAQ,eAAkB,GAAA,KAAA,CAAA;AAAA,GAC7D,CAAA;AACF;;;;;;"}
|
|
1
|
+
{"version":3,"file":"useKeyboardNavigation.js","sources":["../src/useKeyboardNavigation.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { PageKey, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport { useControlled } from \"@salt-ds/core\";\nimport {\n KeyboardEvent,\n MouseEvent,\n MutableRefObject,\n RefObject,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { TableNavigationStyle } from \"./Table\";\nimport {\n NavigationKey,\n cellDropdownShowing,\n closestRowIndex,\n getTableCellPos,\n getNextCellPos,\n} from \"./table-dom-utils\";\nimport { ScrollRequestHandler } from \"./useTableScroll\";\nimport { FocusCell } from \"./useCellFocus\";\nimport { CellFocusState, CellPos } from \"@vuu-ui/vuu-table-types\";\n\nconst rowNavigationKeys = new Set<NavigationKey>([\n \"Home\",\n \"End\",\n \"PageUp\",\n \"PageDown\",\n \"ArrowDown\",\n \"ArrowUp\",\n]);\n\nconst cellNavigationKeys = new Set(rowNavigationKeys);\ncellNavigationKeys.add(\"ArrowLeft\");\ncellNavigationKeys.add(\"ArrowRight\");\n\nexport const isNavigationKey = (\n key: string,\n navigationStyle: TableNavigationStyle,\n): key is NavigationKey => {\n switch (navigationStyle) {\n case \"cell\":\n return cellNavigationKeys.has(key as NavigationKey);\n case \"row\":\n return rowNavigationKeys.has(key as NavigationKey);\n default:\n return false;\n }\n};\n\nconst focusColumnMenuIfAppropriate = (\n e: KeyboardEvent,\n [rowIdx]: CellPos,\n el: HTMLElement | null,\n) => {\n if (e.shiftKey && e.key.match(/Arrow(Left|Right)/) && rowIdx === -1) {\n if (el?.classList.contains(\"vuuTableHeaderCell\")) {\n const menuButton = el?.querySelector<HTMLButtonElement>(\".vuuColumnMenu\");\n if (menuButton) {\n menuButton.focus();\n return true;\n }\n }\n }\n return false;\n};\n\nconst PageKeys = [\"Home\", \"End\", \"PageUp\", \"PageDown\"];\nexport const isPagingKey = (key: string): key is PageKey =>\n PageKeys.includes(key);\n\nexport interface NavigationHookProps {\n cellFocusStateRef: MutableRefObject<CellFocusState>;\n containerRef: RefObject<HTMLElement>;\n columnCount?: number;\n defaultHighlightedIndex?: number;\n disableFocus?: boolean;\n disableHighlightOnFocus?: boolean;\n focusCell: FocusCell;\n highlightedIndex?: number;\n label?: string;\n navigationStyle: TableNavigationStyle;\n viewportRange: VuuRange;\n onHighlight?: (idx: number) => void;\n requestScroll?: ScrollRequestHandler;\n restoreLastFocus?: boolean;\n rowCount?: number;\n selected?: unknown;\n viewportRowCount: number;\n}\n\nexport const useKeyboardNavigation = ({\n cellFocusStateRef,\n columnCount = 0,\n containerRef,\n defaultHighlightedIndex,\n disableHighlightOnFocus,\n focusCell,\n highlightedIndex: highlightedIndexProp,\n navigationStyle,\n requestScroll,\n onHighlight,\n rowCount = 0,\n viewportRowCount,\n}: NavigationHookProps) => {\n // Keep this in sync with state value. This can be used by functions that need\n // to reference highlightedIndex at call time but do not need to be regenerated\n // every time it changes (i.e keep highlightedIndex out of their dependency\n // arrays, as it can update frequently)\n const highlightedIndexRef = useRef<number | undefined>();\n\n const [highlightedIndex, setHighlightedIdx] = useControlled({\n controlled: highlightedIndexProp,\n default: defaultHighlightedIndex,\n name: \"UseKeyboardNavigation\",\n });\n highlightedIndexRef.current = highlightedIndex;\n const setHighlightedIndex = useCallback(\n (idx: number) => {\n onHighlight?.(idx);\n setHighlightedIdx(idx);\n },\n [onHighlight, setHighlightedIdx],\n );\n\n const getFocusedCell = (el: HTMLElement | Element | null) => {\n if (el?.role == \"cell\" || el?.role === \"columnheader\") {\n return el as HTMLDivElement;\n } else {\n return el?.closest(\n \"[role='columnHeader'],[role='cell']\",\n ) as HTMLDivElement | null;\n }\n };\n\n const setActiveCell = useCallback(\n (rowIdx: number, colIdx: number, fromKeyboard = false) => {\n const pos: CellPos = [rowIdx, colIdx];\n if (navigationStyle === \"row\") {\n setHighlightedIdx(rowIdx);\n } else {\n focusCell(pos, fromKeyboard);\n }\n },\n [focusCell, navigationStyle, setHighlightedIdx],\n );\n\n const nextPageItemIdx = useCallback(\n (\n key: \"PageDown\" | \"PageUp\" | \"Home\" | \"End\",\n [rowIdx, colIdx]: CellPos,\n ): Promise<CellPos> =>\n new Promise((resolve) => {\n let newRowIdx = rowIdx;\n const { current: focusState } = cellFocusStateRef;\n switch (key) {\n case \"PageDown\": {\n newRowIdx = Math.min(rowCount - 1, rowIdx + viewportRowCount);\n if (newRowIdx !== rowIdx) {\n focusState.cellPos = [newRowIdx, colIdx];\n requestScroll?.({ type: \"scroll-page\", direction: \"down\" });\n }\n break;\n }\n case \"PageUp\": {\n newRowIdx = Math.max(0, rowIdx - viewportRowCount);\n if (newRowIdx !== rowIdx) {\n focusState.cellPos = [newRowIdx, colIdx];\n requestScroll?.({ type: \"scroll-page\", direction: \"up\" });\n }\n break;\n }\n case \"Home\": {\n newRowIdx = 0;\n if (newRowIdx !== rowIdx) {\n focusState.cellPos = [0, colIdx];\n requestScroll?.({ type: \"scroll-end\", direction: \"home\" });\n }\n break;\n }\n case \"End\": {\n newRowIdx = rowCount - 1;\n if (newRowIdx !== rowIdx) {\n focusState.cellPos = [newRowIdx, colIdx];\n requestScroll?.({ type: \"scroll-end\", direction: \"end\" });\n }\n break;\n }\n }\n // Introduce a delay to allow the scroll operation to complete,\n // which will trigger a range reset and rerender of rows. We\n // might need to tweak how this works. If we introduce too big\n // a delay, we risk seeing the newly rendered rows, with the focus\n // still on the old cell, which will be apparent as a brief flash\n // of the old cell focus before switching to correct cell. If we were\n // to change the way re assign keys such that we can guarantee that\n // when we page down, rows in same position get same keys, then same\n // cell would be focussed in new page as previous and issue would not\n // arise.\n setTimeout(() => {\n resolve([newRowIdx, colIdx]);\n }, 35);\n }),\n [cellFocusStateRef, requestScroll, rowCount, viewportRowCount],\n );\n\n const handleFocus = useCallback(() => {\n if (disableHighlightOnFocus !== true) {\n if (containerRef.current?.contains(document.activeElement)) {\n // IF focus arrives via keyboard, a cell will have received focus,\n // we handle that here. If focus arrives via click on a cell with\n // no tabindex (i.e all cells except one) we leave that to the\n // click handler.\n const focusedCell = getFocusedCell(document.activeElement);\n if (focusedCell) {\n cellFocusStateRef.current.cellPos = getTableCellPos(focusedCell);\n if (navigationStyle === \"row\") {\n setHighlightedIdx(cellFocusStateRef.current.cellPos[0]);\n }\n }\n }\n }\n }, [\n disableHighlightOnFocus,\n containerRef,\n cellFocusStateRef,\n navigationStyle,\n setHighlightedIdx,\n ]);\n\n const navigateChildItems = useCallback(\n async (key: NavigationKey) => {\n const {\n current: { cellPos },\n } = cellFocusStateRef;\n const [nextRowIdx, nextColIdx] = isPagingKey(key)\n ? await nextPageItemIdx(key, cellPos)\n : getNextCellPos(key, cellPos, columnCount, rowCount);\n const [rowIdx, colIdx] = cellPos;\n if (nextRowIdx !== rowIdx || nextColIdx !== colIdx) {\n setActiveCell(nextRowIdx, nextColIdx, true);\n }\n },\n [cellFocusStateRef, columnCount, nextPageItemIdx, rowCount, setActiveCell],\n );\n\n const scrollRowIntoViewIfNecessary = useCallback(\n (rowIndex: number) => {\n requestScroll?.({ type: \"scroll-row\", rowIndex });\n },\n [requestScroll],\n );\n\n const moveHighlightedRow = useCallback(\n async (key: NavigationKey) => {\n const { current: highlighted } = highlightedIndexRef;\n const [nextRowIdx] = isPagingKey(key)\n ? await nextPageItemIdx(key, [highlighted ?? -1, 0])\n : getNextCellPos(key, [highlighted ?? -1, 0], columnCount, rowCount);\n if (nextRowIdx !== highlighted) {\n setHighlightedIndex(nextRowIdx);\n // TO(DO make this a scroll request)\n scrollRowIntoViewIfNecessary(nextRowIdx);\n }\n },\n [\n columnCount,\n nextPageItemIdx,\n rowCount,\n scrollRowIntoViewIfNecessary,\n setHighlightedIndex,\n ],\n );\n\n useEffect(() => {\n if (highlightedIndexProp !== undefined && highlightedIndexProp !== -1) {\n requestAnimationFrame(() => {\n // deferred call, ensuring table has fully rendered\n scrollRowIntoViewIfNecessary(highlightedIndexProp);\n });\n }\n }, [highlightedIndexProp, scrollRowIntoViewIfNecessary]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n const cell = queryClosest<HTMLDivElement>(\n e.target,\n \".vuuTableCell,.vuuColumnMenu,.vuuTableHeaderCell\",\n );\n if (cellDropdownShowing(cell)) {\n return;\n }\n if (rowCount > 0 && isNavigationKey(e.key, navigationStyle)) {\n e.preventDefault();\n e.stopPropagation();\n if (navigationStyle === \"row\") {\n moveHighlightedRow(e.key);\n } else {\n const {\n current: { cellPos },\n } = cellFocusStateRef;\n if (!focusColumnMenuIfAppropriate(e, cellPos, cell)) {\n navigateChildItems(e.key);\n }\n }\n }\n },\n [\n rowCount,\n navigationStyle,\n moveHighlightedRow,\n cellFocusStateRef,\n navigateChildItems,\n ],\n );\n\n const handleClick = useCallback(\n // Might not be a cell e.g the Settings button\n (evt: MouseEvent) => {\n const target = evt.target as HTMLElement;\n const focusedCell = getFocusedCell(target);\n if (focusedCell) {\n const [rowIdx, colIdx] = getTableCellPos(focusedCell);\n setActiveCell(rowIdx, colIdx);\n }\n },\n [setActiveCell],\n );\n\n const handleMouseLeave = useCallback(() => {\n setHighlightedIndex(-1);\n }, [setHighlightedIndex]);\n\n const handleMouseMove = useCallback(\n (evt: MouseEvent) => {\n const idx = closestRowIndex(evt.target as HTMLElement);\n if (idx !== -1 && idx !== highlightedIndexRef.current) {\n setHighlightedIndex(idx);\n }\n },\n [setHighlightedIndex],\n );\n\n const navigate = useCallback(() => {\n navigateChildItems(\"ArrowDown\");\n }, [navigateChildItems]);\n\n return {\n highlightedIndexRef,\n navigate,\n onClick: handleClick,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n onMouseLeave: navigationStyle === \"row\" ? handleMouseLeave : undefined,\n onMouseMove: navigationStyle === \"row\" ? handleMouseMove : undefined,\n };\n};\n"],"names":["useRef","useControlled","useCallback","getTableCellPos","getNextCellPos","useEffect","queryClosest","cellDropdownShowing","closestRowIndex"],"mappings":"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"}
|
package/cjs/useTable.js
CHANGED
|
@@ -23,6 +23,13 @@ var useTableViewport = require('./useTableViewport.js');
|
|
|
23
23
|
const stripInternalProperties = (tableConfig) => {
|
|
24
24
|
return tableConfig;
|
|
25
25
|
};
|
|
26
|
+
const NullCellFocusState = {
|
|
27
|
+
cellPos: void 0,
|
|
28
|
+
el: null,
|
|
29
|
+
outsideViewport: false,
|
|
30
|
+
placeholderEl: null,
|
|
31
|
+
pos: void 0
|
|
32
|
+
};
|
|
26
33
|
const { KEY, IS_EXPANDED, IS_LEAF } = vuuUtils.metadataKeys;
|
|
27
34
|
const NULL_DRAG_DROP = {
|
|
28
35
|
draggable: void 0,
|
|
@@ -65,6 +72,9 @@ const useTable = ({
|
|
|
65
72
|
react.useMemo(() => {
|
|
66
73
|
tableConfigRef.current = config;
|
|
67
74
|
}, [config]);
|
|
75
|
+
const initialState = react.useMemo(() => ({ ...NullCellFocusState }), []);
|
|
76
|
+
const cellFocusStateRef = react.useRef(initialState);
|
|
77
|
+
const focusCellRef = react.useRef();
|
|
68
78
|
const [headerHeight, setHeaderHeight] = react.useState(showColumnHeaders ? -1 : 0);
|
|
69
79
|
const [rowCount, setRowCount] = react.useState(dataSource.size);
|
|
70
80
|
if (dataSource === void 0) {
|
|
@@ -157,7 +167,9 @@ const useTable = ({
|
|
|
157
167
|
onSubscribed
|
|
158
168
|
});
|
|
159
169
|
const { requestScroll, ...scrollProps } = useTableScroll.useTableScroll({
|
|
170
|
+
cellFocusStateRef,
|
|
160
171
|
columns,
|
|
172
|
+
focusCell: focusCellRef.current,
|
|
161
173
|
getRowAtPosition,
|
|
162
174
|
rowHeight,
|
|
163
175
|
scrollingApiRef,
|
|
@@ -384,11 +396,18 @@ const useTable = ({
|
|
|
384
396
|
},
|
|
385
397
|
[columnMap, columns, dataSource, dispatchTableModelAction]
|
|
386
398
|
);
|
|
387
|
-
const {
|
|
399
|
+
const {
|
|
400
|
+
focusCell,
|
|
401
|
+
focusCellPlaceholderKeyDown,
|
|
402
|
+
focusCellPlaceholderRef,
|
|
403
|
+
tableBodyRef
|
|
404
|
+
} = useCellFocus.useCellFocus({
|
|
405
|
+
cellFocusStateRef,
|
|
388
406
|
containerRef,
|
|
389
407
|
disableFocus,
|
|
390
408
|
requestScroll
|
|
391
409
|
});
|
|
410
|
+
focusCellRef.current = focusCell;
|
|
392
411
|
const columnCount = columns.filter((c) => c.hidden !== true).length;
|
|
393
412
|
const {
|
|
394
413
|
highlightedIndexRef,
|
|
@@ -397,6 +416,7 @@ const useTable = ({
|
|
|
397
416
|
onKeyDown: navigationKeyDown,
|
|
398
417
|
...containerProps
|
|
399
418
|
} = useKeyboardNavigation.useKeyboardNavigation({
|
|
419
|
+
cellFocusStateRef,
|
|
400
420
|
columnCount,
|
|
401
421
|
containerRef,
|
|
402
422
|
disableFocus,
|
|
@@ -476,6 +496,13 @@ const useTable = ({
|
|
|
476
496
|
onSelectionChange: handleSelectionChange,
|
|
477
497
|
selectionModel
|
|
478
498
|
});
|
|
499
|
+
const handleSelectCellBlock = react.useCallback(
|
|
500
|
+
(cellBlock2) => {
|
|
501
|
+
handleSelectionChange([]);
|
|
502
|
+
onSelectCellBlock?.(cellBlock2);
|
|
503
|
+
},
|
|
504
|
+
[handleSelectionChange, onSelectCellBlock]
|
|
505
|
+
);
|
|
479
506
|
const {
|
|
480
507
|
onMouseDown: cellBlockHookMouseDown,
|
|
481
508
|
cellBlock,
|
|
@@ -485,7 +512,7 @@ const useTable = ({
|
|
|
485
512
|
columnCount,
|
|
486
513
|
containerRef,
|
|
487
514
|
focusCell,
|
|
488
|
-
onSelectCellBlock,
|
|
515
|
+
onSelectCellBlock: handleSelectCellBlock,
|
|
489
516
|
rowCount
|
|
490
517
|
});
|
|
491
518
|
const handleRowClick = react.useCallback(
|
|
@@ -592,6 +619,8 @@ const useTable = ({
|
|
|
592
619
|
columns,
|
|
593
620
|
data,
|
|
594
621
|
draggableRow,
|
|
622
|
+
focusCellPlaceholderKeyDown,
|
|
623
|
+
focusCellPlaceholderRef,
|
|
595
624
|
getRowOffset,
|
|
596
625
|
handleContextMenuAction,
|
|
597
626
|
headerHeight,
|
package/cjs/useTable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTable.js","sources":["../src/useTable.ts"],"sourcesContent":["import {\n DataSourceConfig,\n DataSourceRow,\n DataSourceSubscribedMessage,\n SelectionChangeHandler,\n} from \"@vuu-ui/vuu-data-types\";\nimport { VuuSortType } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnDescriptor,\n DataCellEditHandler,\n RuntimeColumnDescriptor,\n TableColumnResizeHandler,\n TableConfig,\n TableRowClickHandlerInternal,\n TableRowSelectHandlerInternal,\n TableSelectionModel,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n DragStartHandler,\n MeasuredProps,\n MeasuredSize,\n useDragDrop,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport {\n asDataSourceRowObject,\n buildColumnMap,\n isGroupColumn,\n isJsonGroup,\n isValidNumber,\n metadataKeys,\n toggleOrApplySort,\n updateColumn,\n useLayoutEffectSkipFirst,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n FocusEvent,\n KeyboardEvent,\n MouseEventHandler,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { TableProps } from \"./Table\";\nimport { useCellBlockSelection } from \"./cell-block/useCellBlockSelection\";\nimport {\n buildContextMenuDescriptors,\n useHandleTableContextMenu,\n} from \"./context-menu\";\nimport { updateTableConfig } from \"./table-config\";\nimport { getIndexFromRowElement } from \"./table-dom-utils\";\nimport { useCellEditing } from \"./useCellEditing\";\nimport { useCellFocus } from \"./useCellFocus\";\nimport { useDataSource } from \"./useDataSource\";\nimport { useKeyboardNavigation } from \"./useKeyboardNavigation\";\nimport { useRowClassNameGenerators } from \"./useRowClassNameGenerators\";\nimport { useSelection } from \"./useSelection\";\nimport { useTableAndColumnSettings } from \"./useTableAndColumnSettings\";\nimport { useTableContextMenu } from \"./useTableContextMenu\";\nimport {\n ColumnActionHide,\n ColumnActionPin,\n PersistentColumnAction,\n isShowColumnSettings,\n isShowTableSettings,\n useTableModel,\n} from \"./useTableModel\";\nimport { useTableScroll } from \"./useTableScroll\";\nimport { useTableViewport } from \"./useTableViewport\";\n\nconst stripInternalProperties = (tableConfig: TableConfig): TableConfig => {\n return tableConfig;\n};\n\nexport interface TableHookProps\n extends MeasuredProps,\n Pick<\n TableProps,\n | \"allowCellBlockSelection\"\n | \"allowDragDrop\"\n | \"availableColumns\"\n | \"config\"\n | \"dataSource\"\n | \"disableFocus\"\n | \"highlightedIndex\"\n | \"id\"\n | \"navigationStyle\"\n | \"onAvailableColumnsChange\"\n | \"onConfigChange\"\n | \"onDragStart\"\n | \"onDrop\"\n | \"onHighlight\"\n | \"onSelect\"\n | \"onSelectCellBlock\"\n | \"onSelectionChange\"\n | \"onRowClick\"\n | \"renderBufferSize\"\n | \"scrollingApiRef\"\n | \"showColumnHeaders\"\n | \"showPaginationControls\"\n > {\n containerRef: RefObject<HTMLDivElement>;\n rowHeight: number;\n selectionModel: TableSelectionModel;\n size: MeasuredSize;\n}\n\nconst { KEY, IS_EXPANDED, IS_LEAF } = metadataKeys;\n\nconst NULL_DRAG_DROP = {\n draggable: undefined,\n onMouseDown: undefined,\n};\nconst useNullDragDrop = () => NULL_DRAG_DROP;\n\nconst addColumn = (\n tableConfig: TableConfig,\n column: ColumnDescriptor,\n): TableConfig => ({\n ...tableConfig,\n columns: tableConfig.columns.concat(column),\n});\n\nexport const useTable = ({\n allowCellBlockSelection,\n allowDragDrop = false,\n availableColumns,\n config,\n containerRef,\n dataSource,\n disableFocus,\n highlightedIndex: highlightedIndexProp,\n id,\n navigationStyle = \"cell\",\n onAvailableColumnsChange,\n onConfigChange,\n onDragStart,\n onDrop,\n onHighlight,\n onRowClick: onRowClickProp,\n onSelect,\n onSelectCellBlock,\n onSelectionChange,\n renderBufferSize = 0,\n rowHeight = 20,\n scrollingApiRef,\n selectionModel,\n showColumnHeaders,\n showPaginationControls,\n size,\n}: TableHookProps) => {\n const tableConfigRef = useRef<TableConfig>(config);\n useMemo(() => {\n tableConfigRef.current = config;\n }, [config]);\n\n const [headerHeight, setHeaderHeight] = useState(showColumnHeaders ? -1 : 0);\n const [rowCount, setRowCount] = useState<number>(dataSource.size);\n if (dataSource === undefined) {\n throw Error(\"no data source provided to Vuu Table\");\n }\n\n const onDataRowcountChange = useCallback((size: number) => {\n setRowCount(size);\n }, []);\n\n const virtualContentHeight = rowHeight * rowCount;\n const viewportBodyHeight =\n size.height - (headerHeight === -1 ? 0 : headerHeight);\n const verticalScrollbarWidth =\n virtualContentHeight > viewportBodyHeight ? 10 : 0;\n const availableWidth = size.width - (verticalScrollbarWidth + 8);\n\n const rowClassNameGenerator = useRowClassNameGenerators(config);\n\n const useRowDragDrop = allowDragDrop ? useDragDrop : useNullDragDrop;\n\n const menuBuilder = useMemo(\n () => buildContextMenuDescriptors(dataSource),\n [dataSource],\n );\n\n const {\n columns,\n dispatchTableModelAction,\n headings,\n tableAttributes,\n tableConfig,\n } = useTableModel(config, dataSource, selectionModel, availableWidth);\n\n useLayoutEffectSkipFirst(() => {\n dispatchTableModelAction({\n availableWidth,\n type: \"init\",\n // tableConfig: config,\n tableConfig: tableConfigRef.current,\n dataSource,\n });\n }, [\n availableWidth,\n config,\n dataSource,\n dispatchTableModelAction,\n verticalScrollbarWidth,\n ]);\n\n const applyTableConfigChange = useCallback(\n (config: TableConfig) => {\n dispatchTableModelAction({\n availableWidth,\n type: \"init\",\n tableConfig: config,\n dataSource,\n });\n tableConfigRef.current = config;\n onConfigChange?.(stripInternalProperties(config));\n },\n [availableWidth, dataSource, dispatchTableModelAction, onConfigChange],\n );\n\n const columnMap = useMemo(\n () => buildColumnMap(dataSource.columns),\n [dataSource.columns],\n );\n\n const onSubscribed = useCallback(\n ({ tableSchema }: DataSourceSubscribedMessage) => {\n if (tableSchema) {\n dispatchTableModelAction({\n type: \"setTableSchema\",\n tableSchema,\n });\n } else {\n console.log(\"subscription message with no schema\");\n }\n },\n [dispatchTableModelAction],\n );\n\n const {\n getRowAtPosition,\n getRowOffset,\n setInSituRowOffset: viewportHookSetInSituRowOffset,\n setScrollTop: viewportHookSetScrollTop,\n ...viewportMeasurements\n } = useTableViewport({\n columns,\n headerHeight,\n rowCount,\n rowHeight,\n size: size,\n showPaginationControls,\n });\n\n const { data, dataRef, getSelectedRows, range, setRange } = useDataSource({\n dataSource,\n // We need to factor this out of Table\n renderBufferSize,\n onSizeChange: onDataRowcountChange,\n onSubscribed,\n });\n\n const { requestScroll, ...scrollProps } = useTableScroll({\n columns,\n getRowAtPosition,\n rowHeight,\n scrollingApiRef,\n setRange,\n showPaginationControls,\n onVerticalScroll: viewportHookSetScrollTop,\n onVerticalScrollInSitu: viewportHookSetInSituRowOffset,\n viewportMeasurements,\n });\n\n // TODO does this belong here ?\n const handleConfigEditedInSettingsPanel = useCallback(\n (tableConfig: TableConfig) => {\n dispatchTableModelAction({\n availableWidth,\n dataSource,\n tableConfig,\n type: \"init\",\n });\n tableConfigRef.current = tableConfig;\n onConfigChange?.(stripInternalProperties(tableConfig));\n },\n [availableWidth, dataSource, dispatchTableModelAction, onConfigChange],\n );\n\n const handleDataSourceConfigChanged = useCallback(\n (dataSourceConfig: DataSourceConfig) => {\n dataSource.config = {\n ...dataSource.config,\n ...dataSourceConfig,\n };\n },\n [dataSource],\n );\n\n useEffect(() => {\n dataSource.on(\"config\", (config, confirmed, changes) => {\n const scrollSensitiveChanges =\n changes?.filterChanged || changes?.groupByChanged;\n if (scrollSensitiveChanges && dataSource.range.from > 0) {\n requestScroll({\n type: \"scroll-end\",\n direction: \"home\",\n });\n }\n dispatchTableModelAction({\n type: \"tableConfig\",\n ...config,\n confirmed,\n });\n });\n }, [dataSource, dispatchTableModelAction, requestScroll]);\n\n const handleCreateCalculatedColumn = useCallback(\n (column: ColumnDescriptor) => {\n dataSource.columns = dataSource.columns.concat(column.name);\n applyTableConfigChange(addColumn(tableConfig, column));\n },\n [dataSource, tableConfig, applyTableConfigChange],\n );\n\n const hideColumns = useCallback(\n (action: ColumnActionHide) => {\n const { columns } = action;\n const hiddenColumns = columns.map((c) => c.name);\n const newTableConfig = {\n ...tableConfig,\n columns: tableConfig.columns.map((col) =>\n hiddenColumns.includes(col.name) ? { ...col, hidden: true } : col,\n ),\n };\n applyTableConfigChange(newTableConfig);\n },\n [tableConfig, applyTableConfigChange],\n );\n\n const pinColumn = useCallback(\n (action: ColumnActionPin) => {\n applyTableConfigChange({\n ...tableConfig,\n columns: updateColumn(tableConfig.columns, {\n ...action.column,\n pin: action.pin,\n }),\n });\n },\n [tableConfig, applyTableConfigChange],\n );\n\n const { showColumnSettingsPanel, showTableSettingsPanel } =\n useTableAndColumnSettings({\n availableColumns:\n availableColumns ??\n tableConfig.columns.map(({ name, serverDataType = \"string\" }) => ({\n name,\n serverDataType,\n })),\n onAvailableColumnsChange,\n onConfigChange: handleConfigEditedInSettingsPanel,\n onCreateCalculatedColumn: handleCreateCalculatedColumn,\n onDataSourceConfigChange: handleDataSourceConfigChanged,\n tableConfig,\n });\n\n const onPersistentColumnOperation = useCallback(\n (action: PersistentColumnAction) => {\n if (isShowColumnSettings(action)) {\n showColumnSettingsPanel(action);\n } else if (isShowTableSettings(action)) {\n showTableSettingsPanel();\n } else {\n switch (action.type) {\n case \"hideColumns\":\n return hideColumns(action);\n case \"pinColumn\":\n return pinColumn(action);\n default:\n dispatchTableModelAction(action);\n }\n }\n },\n [\n dispatchTableModelAction,\n hideColumns,\n pinColumn,\n showColumnSettingsPanel,\n showTableSettingsPanel,\n ],\n );\n\n const handleContextMenuAction = useHandleTableContextMenu({\n dataSource,\n onPersistentColumnOperation,\n });\n\n const handleSort = useCallback(\n (column: ColumnDescriptor, extendSort = false, sortType?: VuuSortType) => {\n if (dataSource) {\n dataSource.sort = toggleOrApplySort(\n dataSource.sort,\n column,\n extendSort,\n sortType,\n );\n }\n },\n [dataSource],\n );\n\n const resizeCells = useRef<HTMLElement[] | undefined>();\n\n const onResizeColumn: TableColumnResizeHandler = useCallback(\n (phase, columnName, width) => {\n const column = columns.find((column) => column.name === columnName);\n if (column) {\n if (phase === \"resize\") {\n resizeCells.current?.forEach((cell) => {\n cell.style.width = `${width}px`;\n });\n } else if (phase === \"end\") {\n resizeCells.current = undefined;\n if (isValidNumber(width)) {\n dispatchTableModelAction({\n type: \"resizeColumn\",\n phase,\n column,\n width,\n });\n onConfigChange?.(\n stripInternalProperties(\n updateTableConfig(tableConfig, {\n type: \"col-size\",\n column,\n columns,\n width,\n }),\n ),\n );\n }\n } else {\n const byColIndex = `[aria-colindex='${column.index}']`;\n resizeCells.current = Array.from(\n containerRef.current?.querySelectorAll(\n `.vuuTableCell${byColIndex},.vuuTableHeaderCell${byColIndex}`,\n ) ?? [],\n );\n dispatchTableModelAction({\n type: \"resizeColumn\",\n phase,\n column,\n width,\n });\n }\n } else {\n throw Error(\n `useDataTable.handleColumnResize, column ${columnName} not found`,\n );\n }\n },\n [\n columns,\n dispatchTableModelAction,\n onConfigChange,\n tableConfig,\n containerRef,\n ],\n );\n\n const onToggleGroup = useCallback(\n (row: DataSourceRow, column: RuntimeColumnDescriptor) => {\n const isJson = isJsonGroup(column, row, columnMap);\n const key = row[KEY];\n\n if (row[IS_EXPANDED]) {\n dataSource.closeTreeNode(key, true);\n if (isJson) {\n const idx = columns.indexOf(column);\n const rows = dataSource.getRowsAtDepth?.(idx + 1);\n if (rows && !rows.some((row) => row[IS_EXPANDED] || row[IS_LEAF])) {\n dispatchTableModelAction({\n type: \"hideColumns\",\n columns: columns.slice(idx + 2),\n });\n }\n }\n } else {\n dataSource.openTreeNode(key);\n if (isJson) {\n const childRows = dataSource.getChildRows?.(key);\n const idx = columns.indexOf(column) + 1;\n const columnsToShow = [columns[idx]];\n if (childRows && childRows.some((row) => row[IS_LEAF])) {\n columnsToShow.push(columns[idx + 1]);\n }\n if (columnsToShow.some((col) => col.hidden)) {\n dispatchTableModelAction({\n type: \"showColumns\",\n columns: columnsToShow,\n });\n }\n }\n }\n },\n [columnMap, columns, dataSource, dispatchTableModelAction],\n );\n\n const { focusCell, tableBodyRef } = useCellFocus({\n containerRef,\n disableFocus,\n requestScroll,\n });\n\n const columnCount = columns.filter((c) => c.hidden !== true).length;\n\n const {\n highlightedIndexRef,\n navigate,\n onFocus: navigationFocus,\n onKeyDown: navigationKeyDown,\n ...containerProps\n } = useKeyboardNavigation({\n columnCount,\n containerRef,\n disableFocus,\n focusCell,\n highlightedIndex: highlightedIndexProp,\n navigationStyle,\n requestScroll,\n rowCount,\n onHighlight,\n viewportRange: range,\n viewportRowCount: viewportMeasurements.rowCount,\n });\n\n const {\n onBlur: editingBlur,\n onDoubleClick: editingDoubleClick,\n onKeyDown: editingKeyDown,\n onFocus: editingFocus,\n } = useCellEditing({\n navigate,\n });\n\n const handleFocus = useCallback(\n (e: FocusEvent<HTMLElement>) => {\n navigationFocus();\n if (!e.defaultPrevented) {\n editingFocus(e);\n }\n },\n [editingFocus, navigationFocus],\n );\n\n const onContextMenu = useTableContextMenu({\n columns,\n data,\n dataSource,\n getSelectedRows,\n });\n\n const onMoveGroupColumn = useCallback(\n (columns: ColumnDescriptor[]) => {\n dataSource.groupBy = columns.map((col) => col.name);\n },\n [dataSource],\n );\n\n const onRemoveGroupColumn = useCallback(\n (column: RuntimeColumnDescriptor) => {\n if (isGroupColumn(column)) {\n dataSource.groupBy = [];\n } else {\n if (dataSource && dataSource.groupBy.includes(column.name)) {\n dataSource.groupBy = dataSource.groupBy.filter(\n (columnName) => columnName !== column.name,\n );\n }\n }\n },\n [dataSource],\n );\n\n const handleSelectionChange: SelectionChangeHandler = useCallback(\n (selected) => {\n dataSource.select(selected);\n onSelectionChange?.(selected);\n },\n [dataSource, onSelectionChange],\n );\n\n const handleSelect = useCallback<TableRowSelectHandlerInternal>(\n (row) => {\n if (onSelect) {\n onSelect(row === null ? null : asDataSourceRowObject(row, columnMap));\n }\n },\n [columnMap, onSelect],\n );\n\n const {\n onKeyDown: selectionHookKeyDown,\n onRowClick: selectionHookOnRowClick,\n } = useSelection({\n highlightedIndexRef,\n onSelect: handleSelect,\n onSelectionChange: handleSelectionChange,\n selectionModel,\n });\n\n const {\n onMouseDown: cellBlockHookMouseDown,\n cellBlock,\n onKeyDown: cellBlockSelectionKeyDown,\n } = useCellBlockSelection({\n allowCellBlockSelection,\n columnCount,\n containerRef,\n focusCell,\n onSelectCellBlock,\n rowCount,\n });\n\n const handleRowClick = useCallback<TableRowClickHandlerInternal>(\n (evt, row, rangeSelect, keepExistingSelection) => {\n selectionHookOnRowClick(evt, row, rangeSelect, keepExistingSelection);\n onRowClickProp?.(evt, asDataSourceRowObject(row, columnMap));\n },\n [columnMap, onRowClickProp, selectionHookOnRowClick],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLElement>) => {\n cellBlockSelectionKeyDown?.(e);\n if (!e.defaultPrevented) {\n navigationKeyDown(e);\n }\n if (!e.defaultPrevented) {\n editingKeyDown(e);\n }\n if (!e.defaultPrevented) {\n selectionHookKeyDown(e);\n }\n },\n [\n cellBlockSelectionKeyDown,\n navigationKeyDown,\n editingKeyDown,\n selectionHookKeyDown,\n ],\n );\n\n const onMoveColumn = useCallback(\n (columns: ColumnDescriptor[]) => {\n const newTableConfig = {\n ...tableConfig,\n columns,\n };\n\n tableConfigRef.current = newTableConfig;\n\n dispatchTableModelAction({\n availableWidth,\n type: \"init\",\n tableConfig: newTableConfig,\n dataSource,\n });\n onConfigChange?.(stripInternalProperties(newTableConfig));\n },\n [\n availableWidth,\n dataSource,\n dispatchTableModelAction,\n onConfigChange,\n tableConfig,\n ],\n );\n\n const handleDropRow = useCallback(\n (dragDropState) => {\n onDrop?.(dragDropState);\n },\n [onDrop],\n );\n\n const handleDataEdited = useCallback<DataCellEditHandler>(\n async (row, columnName, value) => {\n return dataSource.applyEdit(row[KEY], columnName, value);\n },\n [dataSource],\n );\n\n const handleDragStartRow = useCallback<DragStartHandler>(\n (dragDropState) => {\n const { initialDragElement } = dragDropState;\n const rowIndex = getIndexFromRowElement(initialDragElement);\n const row = dataRef.current.find((row) => row[0] === rowIndex);\n if (row) {\n dragDropState.setPayload(row);\n } else {\n // should we abort the operation ?\n }\n onDragStart?.(dragDropState);\n },\n [dataRef, onDragStart],\n );\n\n const onHeaderHeightMeasured = useCallback((height: number) => {\n setHeaderHeight(height);\n }, []);\n\n // Drag Drop rows\n const { onMouseDown: rowDragMouseDown, draggable: draggableRow } =\n useRowDragDrop({\n allowDragDrop,\n containerRef,\n draggableClassName: `vuuTable`,\n id,\n onDragStart: handleDragStartRow,\n onDrop: handleDropRow,\n orientation: \"vertical\",\n itemQuery: \".vuuTableRow\",\n });\n\n const handleMouseDown = useCallback<MouseEventHandler>(\n (evt) => {\n rowDragMouseDown?.(evt);\n if (!evt.isPropagationStopped()) {\n cellBlockHookMouseDown?.(evt);\n }\n },\n [rowDragMouseDown, cellBlockHookMouseDown],\n );\n\n return {\n ...containerProps,\n \"aria-rowcount\": dataSource.size,\n cellBlock,\n columnMap,\n columns,\n data,\n draggableRow,\n getRowOffset,\n handleContextMenuAction,\n headerHeight,\n headings,\n highlightedIndex: highlightedIndexRef.current,\n menuBuilder,\n onBlur: editingBlur,\n onDoubleClick: editingDoubleClick,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n onMouseDown: handleMouseDown,\n onContextMenu,\n onDataEdited: handleDataEdited,\n onHeaderHeightMeasured,\n onMoveColumn,\n onMoveGroupColumn,\n onRemoveGroupColumn,\n onRowClick: handleRowClick,\n onSortColumn: handleSort,\n onResizeColumn,\n onToggleGroup,\n rowClassNameGenerator,\n scrollProps,\n // TODO don't think we need these ...\n tableAttributes,\n tableBodyRef,\n tableConfig,\n viewportMeasurements,\n };\n};\n"],"names":["metadataKeys","useRef","useMemo","useState","useCallback","size","useRowClassNameGenerators","useDragDrop","buildContextMenuDescriptors","tableConfig","useTableModel","useLayoutEffectSkipFirst","config","buildColumnMap","useTableViewport","useDataSource","useTableScroll","useEffect","columns","updateColumn","useTableAndColumnSettings","isShowColumnSettings","isShowTableSettings","useHandleTableContextMenu","toggleOrApplySort","column","isValidNumber","updateTableConfig","isJsonGroup","row","useCellFocus","useKeyboardNavigation","useCellEditing","useTableContextMenu","isGroupColumn","asDataSourceRowObject","useSelection","useCellBlockSelection","getIndexFromRowElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useTable.js","sources":["../src/useTable.ts"],"sourcesContent":["import {\n DataSourceConfig,\n DataSourceRow,\n DataSourceSubscribedMessage,\n SelectionChangeHandler,\n} from \"@vuu-ui/vuu-data-types\";\nimport { VuuSortType } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n CellFocusState,\n ColumnDescriptor,\n DataCellEditHandler,\n RuntimeColumnDescriptor,\n TableColumnResizeHandler,\n TableConfig,\n TableRowClickHandlerInternal,\n TableRowSelectHandlerInternal,\n TableSelectionModel,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n DragStartHandler,\n MeasuredProps,\n MeasuredSize,\n useDragDrop,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport {\n asDataSourceRowObject,\n buildColumnMap,\n isGroupColumn,\n isJsonGroup,\n isValidNumber,\n metadataKeys,\n toggleOrApplySort,\n updateColumn,\n useLayoutEffectSkipFirst,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n FocusEvent,\n KeyboardEvent,\n MouseEventHandler,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { TableProps } from \"./Table\";\nimport { useCellBlockSelection } from \"./cell-block/useCellBlockSelection\";\nimport {\n buildContextMenuDescriptors,\n useHandleTableContextMenu,\n} from \"./context-menu\";\nimport { updateTableConfig } from \"./table-config\";\nimport { getIndexFromRowElement } from \"./table-dom-utils\";\nimport { useCellEditing } from \"./useCellEditing\";\nimport { FocusCell, useCellFocus } from \"./useCellFocus\";\nimport { useDataSource } from \"./useDataSource\";\nimport { useKeyboardNavigation } from \"./useKeyboardNavigation\";\nimport { useRowClassNameGenerators } from \"./useRowClassNameGenerators\";\nimport { useSelection } from \"./useSelection\";\nimport { useTableAndColumnSettings } from \"./useTableAndColumnSettings\";\nimport { useTableContextMenu } from \"./useTableContextMenu\";\nimport {\n ColumnActionHide,\n ColumnActionPin,\n PersistentColumnAction,\n isShowColumnSettings,\n isShowTableSettings,\n useTableModel,\n} from \"./useTableModel\";\nimport { useTableScroll } from \"./useTableScroll\";\nimport { useTableViewport } from \"./useTableViewport\";\nimport { TableCellBlock } from \"./cell-block/cellblock-utils\";\n\nconst stripInternalProperties = (tableConfig: TableConfig): TableConfig => {\n return tableConfig;\n};\n\nconst NullCellFocusState: CellFocusState = {\n cellPos: undefined,\n el: null,\n outsideViewport: false,\n placeholderEl: null,\n pos: undefined,\n};\n\nexport interface TableHookProps\n extends MeasuredProps,\n Pick<\n TableProps,\n | \"allowCellBlockSelection\"\n | \"allowDragDrop\"\n | \"availableColumns\"\n | \"config\"\n | \"dataSource\"\n | \"disableFocus\"\n | \"highlightedIndex\"\n | \"id\"\n | \"navigationStyle\"\n | \"onAvailableColumnsChange\"\n | \"onConfigChange\"\n | \"onDragStart\"\n | \"onDrop\"\n | \"onHighlight\"\n | \"onSelect\"\n | \"onSelectCellBlock\"\n | \"onSelectionChange\"\n | \"onRowClick\"\n | \"renderBufferSize\"\n | \"scrollingApiRef\"\n | \"showColumnHeaders\"\n | \"showPaginationControls\"\n > {\n containerRef: RefObject<HTMLDivElement>;\n rowHeight: number;\n selectionModel: TableSelectionModel;\n size: MeasuredSize;\n}\n\nconst { KEY, IS_EXPANDED, IS_LEAF } = metadataKeys;\n\nconst NULL_DRAG_DROP = {\n draggable: undefined,\n onMouseDown: undefined,\n};\nconst useNullDragDrop = () => NULL_DRAG_DROP;\n\nconst addColumn = (\n tableConfig: TableConfig,\n column: ColumnDescriptor,\n): TableConfig => ({\n ...tableConfig,\n columns: tableConfig.columns.concat(column),\n});\n\nexport const useTable = ({\n allowCellBlockSelection,\n allowDragDrop = false,\n availableColumns,\n config,\n containerRef,\n dataSource,\n disableFocus,\n highlightedIndex: highlightedIndexProp,\n id,\n navigationStyle = \"cell\",\n onAvailableColumnsChange,\n onConfigChange,\n onDragStart,\n onDrop,\n onHighlight,\n onRowClick: onRowClickProp,\n onSelect,\n onSelectCellBlock,\n onSelectionChange,\n renderBufferSize = 0,\n rowHeight = 20,\n scrollingApiRef,\n selectionModel,\n showColumnHeaders,\n showPaginationControls,\n size,\n}: TableHookProps) => {\n const tableConfigRef = useRef<TableConfig>(config);\n useMemo(() => {\n tableConfigRef.current = config;\n }, [config]);\n\n // state is mutated, so make every component gets a fresh copy\n const initialState = useMemo(() => ({ ...NullCellFocusState }), []);\n\n const cellFocusStateRef = useRef<CellFocusState>(initialState);\n // Needed to avoid circular dependency between useTableScroll and useCellFocus\n const focusCellRef = useRef<FocusCell>();\n\n const [headerHeight, setHeaderHeight] = useState(showColumnHeaders ? -1 : 0);\n const [rowCount, setRowCount] = useState<number>(dataSource.size);\n if (dataSource === undefined) {\n throw Error(\"no data source provided to Vuu Table\");\n }\n\n const onDataRowcountChange = useCallback((size: number) => {\n setRowCount(size);\n }, []);\n\n const virtualContentHeight = rowHeight * rowCount;\n const viewportBodyHeight =\n size.height - (headerHeight === -1 ? 0 : headerHeight);\n const verticalScrollbarWidth =\n virtualContentHeight > viewportBodyHeight ? 10 : 0;\n const availableWidth = size.width - (verticalScrollbarWidth + 8);\n\n const rowClassNameGenerator = useRowClassNameGenerators(config);\n\n const useRowDragDrop = allowDragDrop ? useDragDrop : useNullDragDrop;\n\n const menuBuilder = useMemo(\n () => buildContextMenuDescriptors(dataSource),\n [dataSource],\n );\n\n const {\n columns,\n dispatchTableModelAction,\n headings,\n tableAttributes,\n tableConfig,\n } = useTableModel(config, dataSource, selectionModel, availableWidth);\n\n useLayoutEffectSkipFirst(() => {\n dispatchTableModelAction({\n availableWidth,\n type: \"init\",\n // tableConfig: config,\n tableConfig: tableConfigRef.current,\n dataSource,\n });\n }, [\n availableWidth,\n config,\n dataSource,\n dispatchTableModelAction,\n verticalScrollbarWidth,\n ]);\n\n const applyTableConfigChange = useCallback(\n (config: TableConfig) => {\n dispatchTableModelAction({\n availableWidth,\n type: \"init\",\n tableConfig: config,\n dataSource,\n });\n tableConfigRef.current = config;\n onConfigChange?.(stripInternalProperties(config));\n },\n [availableWidth, dataSource, dispatchTableModelAction, onConfigChange],\n );\n\n const columnMap = useMemo(\n () => buildColumnMap(dataSource.columns),\n [dataSource.columns],\n );\n\n const onSubscribed = useCallback(\n ({ tableSchema }: DataSourceSubscribedMessage) => {\n if (tableSchema) {\n dispatchTableModelAction({\n type: \"setTableSchema\",\n tableSchema,\n });\n } else {\n console.log(\"subscription message with no schema\");\n }\n },\n [dispatchTableModelAction],\n );\n\n const {\n getRowAtPosition,\n getRowOffset,\n setInSituRowOffset: viewportHookSetInSituRowOffset,\n setScrollTop: viewportHookSetScrollTop,\n ...viewportMeasurements\n } = useTableViewport({\n columns,\n headerHeight,\n rowCount,\n rowHeight,\n size: size,\n showPaginationControls,\n });\n\n const { data, dataRef, getSelectedRows, range, setRange } = useDataSource({\n dataSource,\n // We need to factor this out of Table\n renderBufferSize,\n onSizeChange: onDataRowcountChange,\n onSubscribed,\n });\n\n const { requestScroll, ...scrollProps } = useTableScroll({\n cellFocusStateRef,\n columns,\n focusCell: focusCellRef.current,\n getRowAtPosition,\n rowHeight,\n scrollingApiRef,\n setRange,\n showPaginationControls,\n onVerticalScroll: viewportHookSetScrollTop,\n onVerticalScrollInSitu: viewportHookSetInSituRowOffset,\n viewportMeasurements,\n });\n\n // TODO does this belong here ?\n const handleConfigEditedInSettingsPanel = useCallback(\n (tableConfig: TableConfig) => {\n dispatchTableModelAction({\n availableWidth,\n dataSource,\n tableConfig,\n type: \"init\",\n });\n tableConfigRef.current = tableConfig;\n onConfigChange?.(stripInternalProperties(tableConfig));\n },\n [availableWidth, dataSource, dispatchTableModelAction, onConfigChange],\n );\n\n const handleDataSourceConfigChanged = useCallback(\n (dataSourceConfig: DataSourceConfig) => {\n dataSource.config = {\n ...dataSource.config,\n ...dataSourceConfig,\n };\n },\n [dataSource],\n );\n\n useEffect(() => {\n dataSource.on(\"config\", (config, confirmed, changes) => {\n const scrollSensitiveChanges =\n changes?.filterChanged || changes?.groupByChanged;\n if (scrollSensitiveChanges && dataSource.range.from > 0) {\n requestScroll({\n type: \"scroll-end\",\n direction: \"home\",\n });\n }\n dispatchTableModelAction({\n type: \"tableConfig\",\n ...config,\n confirmed,\n });\n });\n }, [dataSource, dispatchTableModelAction, requestScroll]);\n\n const handleCreateCalculatedColumn = useCallback(\n (column: ColumnDescriptor) => {\n dataSource.columns = dataSource.columns.concat(column.name);\n applyTableConfigChange(addColumn(tableConfig, column));\n },\n [dataSource, tableConfig, applyTableConfigChange],\n );\n\n const hideColumns = useCallback(\n (action: ColumnActionHide) => {\n const { columns } = action;\n const hiddenColumns = columns.map((c) => c.name);\n const newTableConfig = {\n ...tableConfig,\n columns: tableConfig.columns.map((col) =>\n hiddenColumns.includes(col.name) ? { ...col, hidden: true } : col,\n ),\n };\n applyTableConfigChange(newTableConfig);\n },\n [tableConfig, applyTableConfigChange],\n );\n\n const pinColumn = useCallback(\n (action: ColumnActionPin) => {\n applyTableConfigChange({\n ...tableConfig,\n columns: updateColumn(tableConfig.columns, {\n ...action.column,\n pin: action.pin,\n }),\n });\n },\n [tableConfig, applyTableConfigChange],\n );\n\n const { showColumnSettingsPanel, showTableSettingsPanel } =\n useTableAndColumnSettings({\n availableColumns:\n availableColumns ??\n tableConfig.columns.map(({ name, serverDataType = \"string\" }) => ({\n name,\n serverDataType,\n })),\n onAvailableColumnsChange,\n onConfigChange: handleConfigEditedInSettingsPanel,\n onCreateCalculatedColumn: handleCreateCalculatedColumn,\n onDataSourceConfigChange: handleDataSourceConfigChanged,\n tableConfig,\n });\n\n const onPersistentColumnOperation = useCallback(\n (action: PersistentColumnAction) => {\n if (isShowColumnSettings(action)) {\n showColumnSettingsPanel(action);\n } else if (isShowTableSettings(action)) {\n showTableSettingsPanel();\n } else {\n switch (action.type) {\n case \"hideColumns\":\n return hideColumns(action);\n case \"pinColumn\":\n return pinColumn(action);\n default:\n dispatchTableModelAction(action);\n }\n }\n },\n [\n dispatchTableModelAction,\n hideColumns,\n pinColumn,\n showColumnSettingsPanel,\n showTableSettingsPanel,\n ],\n );\n\n const handleContextMenuAction = useHandleTableContextMenu({\n dataSource,\n onPersistentColumnOperation,\n });\n\n const handleSort = useCallback(\n (column: ColumnDescriptor, extendSort = false, sortType?: VuuSortType) => {\n if (dataSource) {\n dataSource.sort = toggleOrApplySort(\n dataSource.sort,\n column,\n extendSort,\n sortType,\n );\n }\n },\n [dataSource],\n );\n\n const resizeCells = useRef<HTMLElement[] | undefined>();\n\n const onResizeColumn: TableColumnResizeHandler = useCallback(\n (phase, columnName, width) => {\n const column = columns.find((column) => column.name === columnName);\n if (column) {\n if (phase === \"resize\") {\n resizeCells.current?.forEach((cell) => {\n cell.style.width = `${width}px`;\n });\n } else if (phase === \"end\") {\n resizeCells.current = undefined;\n if (isValidNumber(width)) {\n dispatchTableModelAction({\n type: \"resizeColumn\",\n phase,\n column,\n width,\n });\n onConfigChange?.(\n stripInternalProperties(\n updateTableConfig(tableConfig, {\n type: \"col-size\",\n column,\n columns,\n width,\n }),\n ),\n );\n }\n } else {\n const byColIndex = `[aria-colindex='${column.index}']`;\n resizeCells.current = Array.from(\n containerRef.current?.querySelectorAll(\n `.vuuTableCell${byColIndex},.vuuTableHeaderCell${byColIndex}`,\n ) ?? [],\n );\n dispatchTableModelAction({\n type: \"resizeColumn\",\n phase,\n column,\n width,\n });\n }\n } else {\n throw Error(\n `useDataTable.handleColumnResize, column ${columnName} not found`,\n );\n }\n },\n [\n columns,\n dispatchTableModelAction,\n onConfigChange,\n tableConfig,\n containerRef,\n ],\n );\n\n const onToggleGroup = useCallback(\n (row: DataSourceRow, column: RuntimeColumnDescriptor) => {\n const isJson = isJsonGroup(column, row, columnMap);\n const key = row[KEY];\n\n if (row[IS_EXPANDED]) {\n dataSource.closeTreeNode(key, true);\n if (isJson) {\n const idx = columns.indexOf(column);\n const rows = dataSource.getRowsAtDepth?.(idx + 1);\n if (rows && !rows.some((row) => row[IS_EXPANDED] || row[IS_LEAF])) {\n dispatchTableModelAction({\n type: \"hideColumns\",\n columns: columns.slice(idx + 2),\n });\n }\n }\n } else {\n dataSource.openTreeNode(key);\n if (isJson) {\n const childRows = dataSource.getChildRows?.(key);\n const idx = columns.indexOf(column) + 1;\n const columnsToShow = [columns[idx]];\n if (childRows && childRows.some((row) => row[IS_LEAF])) {\n columnsToShow.push(columns[idx + 1]);\n }\n if (columnsToShow.some((col) => col.hidden)) {\n dispatchTableModelAction({\n type: \"showColumns\",\n columns: columnsToShow,\n });\n }\n }\n }\n },\n [columnMap, columns, dataSource, dispatchTableModelAction],\n );\n\n const {\n focusCell,\n focusCellPlaceholderKeyDown,\n focusCellPlaceholderRef,\n tableBodyRef,\n } = useCellFocus({\n cellFocusStateRef,\n containerRef,\n disableFocus,\n requestScroll,\n });\n\n focusCellRef.current = focusCell;\n\n const columnCount = columns.filter((c) => c.hidden !== true).length;\n\n const {\n highlightedIndexRef,\n navigate,\n onFocus: navigationFocus,\n onKeyDown: navigationKeyDown,\n ...containerProps\n } = useKeyboardNavigation({\n cellFocusStateRef,\n columnCount,\n containerRef,\n disableFocus,\n focusCell,\n highlightedIndex: highlightedIndexProp,\n navigationStyle,\n requestScroll,\n rowCount,\n onHighlight,\n viewportRange: range,\n viewportRowCount: viewportMeasurements.rowCount,\n });\n\n const {\n onBlur: editingBlur,\n onDoubleClick: editingDoubleClick,\n onKeyDown: editingKeyDown,\n onFocus: editingFocus,\n } = useCellEditing({\n navigate,\n });\n\n const handleFocus = useCallback(\n (e: FocusEvent<HTMLElement>) => {\n navigationFocus();\n if (!e.defaultPrevented) {\n editingFocus(e);\n }\n },\n [editingFocus, navigationFocus],\n );\n\n const onContextMenu = useTableContextMenu({\n columns,\n data,\n dataSource,\n getSelectedRows,\n });\n\n const onMoveGroupColumn = useCallback(\n (columns: ColumnDescriptor[]) => {\n dataSource.groupBy = columns.map((col) => col.name);\n },\n [dataSource],\n );\n\n const onRemoveGroupColumn = useCallback(\n (column: RuntimeColumnDescriptor) => {\n if (isGroupColumn(column)) {\n dataSource.groupBy = [];\n } else {\n if (dataSource && dataSource.groupBy.includes(column.name)) {\n dataSource.groupBy = dataSource.groupBy.filter(\n (columnName) => columnName !== column.name,\n );\n }\n }\n },\n [dataSource],\n );\n\n const handleSelectionChange: SelectionChangeHandler = useCallback(\n (selected) => {\n dataSource.select(selected);\n onSelectionChange?.(selected);\n },\n [dataSource, onSelectionChange],\n );\n\n const handleSelect = useCallback<TableRowSelectHandlerInternal>(\n (row) => {\n if (onSelect) {\n onSelect(row === null ? null : asDataSourceRowObject(row, columnMap));\n }\n },\n [columnMap, onSelect],\n );\n\n const {\n onKeyDown: selectionHookKeyDown,\n onRowClick: selectionHookOnRowClick,\n } = useSelection({\n highlightedIndexRef,\n onSelect: handleSelect,\n onSelectionChange: handleSelectionChange,\n selectionModel,\n });\n\n const handleSelectCellBlock = useCallback(\n (cellBlock: TableCellBlock) => {\n handleSelectionChange([]);\n onSelectCellBlock?.(cellBlock);\n },\n [handleSelectionChange, onSelectCellBlock],\n );\n\n const {\n onMouseDown: cellBlockHookMouseDown,\n cellBlock,\n onKeyDown: cellBlockSelectionKeyDown,\n } = useCellBlockSelection({\n allowCellBlockSelection,\n columnCount,\n containerRef,\n focusCell,\n onSelectCellBlock: handleSelectCellBlock,\n rowCount,\n });\n\n const handleRowClick = useCallback<TableRowClickHandlerInternal>(\n (evt, row, rangeSelect, keepExistingSelection) => {\n selectionHookOnRowClick(evt, row, rangeSelect, keepExistingSelection);\n onRowClickProp?.(evt, asDataSourceRowObject(row, columnMap));\n },\n [columnMap, onRowClickProp, selectionHookOnRowClick],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLElement>) => {\n cellBlockSelectionKeyDown?.(e);\n if (!e.defaultPrevented) {\n navigationKeyDown(e);\n }\n if (!e.defaultPrevented) {\n editingKeyDown(e);\n }\n if (!e.defaultPrevented) {\n selectionHookKeyDown(e);\n }\n },\n [\n cellBlockSelectionKeyDown,\n navigationKeyDown,\n editingKeyDown,\n selectionHookKeyDown,\n ],\n );\n\n const onMoveColumn = useCallback(\n (columns: ColumnDescriptor[]) => {\n const newTableConfig = {\n ...tableConfig,\n columns,\n };\n\n tableConfigRef.current = newTableConfig;\n\n dispatchTableModelAction({\n availableWidth,\n type: \"init\",\n tableConfig: newTableConfig,\n dataSource,\n });\n onConfigChange?.(stripInternalProperties(newTableConfig));\n },\n [\n availableWidth,\n dataSource,\n dispatchTableModelAction,\n onConfigChange,\n tableConfig,\n ],\n );\n\n const handleDropRow = useCallback(\n (dragDropState) => {\n onDrop?.(dragDropState);\n },\n [onDrop],\n );\n\n const handleDataEdited = useCallback<DataCellEditHandler>(\n async (row, columnName, value) => {\n return dataSource.applyEdit(row[KEY], columnName, value);\n },\n [dataSource],\n );\n\n const handleDragStartRow = useCallback<DragStartHandler>(\n (dragDropState) => {\n const { initialDragElement } = dragDropState;\n const rowIndex = getIndexFromRowElement(initialDragElement);\n const row = dataRef.current.find((row) => row[0] === rowIndex);\n if (row) {\n dragDropState.setPayload(row);\n } else {\n // should we abort the operation ?\n }\n onDragStart?.(dragDropState);\n },\n [dataRef, onDragStart],\n );\n\n const onHeaderHeightMeasured = useCallback((height: number) => {\n setHeaderHeight(height);\n }, []);\n\n // Drag Drop rows\n const { onMouseDown: rowDragMouseDown, draggable: draggableRow } =\n useRowDragDrop({\n allowDragDrop,\n containerRef,\n draggableClassName: `vuuTable`,\n id,\n onDragStart: handleDragStartRow,\n onDrop: handleDropRow,\n orientation: \"vertical\",\n itemQuery: \".vuuTableRow\",\n });\n\n const handleMouseDown = useCallback<MouseEventHandler>(\n (evt) => {\n rowDragMouseDown?.(evt);\n if (!evt.isPropagationStopped()) {\n cellBlockHookMouseDown?.(evt);\n }\n },\n [rowDragMouseDown, cellBlockHookMouseDown],\n );\n\n return {\n ...containerProps,\n \"aria-rowcount\": dataSource.size,\n cellBlock,\n columnMap,\n columns,\n data,\n draggableRow,\n focusCellPlaceholderKeyDown,\n focusCellPlaceholderRef,\n getRowOffset,\n handleContextMenuAction,\n headerHeight,\n headings,\n highlightedIndex: highlightedIndexRef.current,\n menuBuilder,\n onBlur: editingBlur,\n onDoubleClick: editingDoubleClick,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n onMouseDown: handleMouseDown,\n onContextMenu,\n onDataEdited: handleDataEdited,\n onHeaderHeightMeasured,\n onMoveColumn,\n onMoveGroupColumn,\n onRemoveGroupColumn,\n onRowClick: handleRowClick,\n onSortColumn: handleSort,\n onResizeColumn,\n onToggleGroup,\n rowClassNameGenerator,\n scrollProps,\n // TODO don't think we need these ...\n tableAttributes,\n tableBodyRef,\n tableConfig,\n viewportMeasurements,\n };\n};\n"],"names":["metadataKeys","useRef","useMemo","useState","useCallback","size","useRowClassNameGenerators","useDragDrop","buildContextMenuDescriptors","tableConfig","useTableModel","useLayoutEffectSkipFirst","config","buildColumnMap","useTableViewport","useDataSource","useTableScroll","useEffect","columns","updateColumn","useTableAndColumnSettings","isShowColumnSettings","isShowTableSettings","useHandleTableContextMenu","toggleOrApplySort","column","isValidNumber","updateTableConfig","isJsonGroup","row","useCellFocus","useKeyboardNavigation","useCellEditing","useTableContextMenu","isGroupColumn","asDataSourceRowObject","useSelection","cellBlock","useCellBlockSelection","getIndexFromRowElement"],"mappings":"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"}
|
package/cjs/useTableModel.js
CHANGED
|
@@ -104,19 +104,19 @@ function init({
|
|
|
104
104
|
tableSchema
|
|
105
105
|
);
|
|
106
106
|
const runtimeColumns = columns.filter(vuuUtils.subscribedOnly(dataSourceConfig?.columns)).map(toRuntimeColumnDescriptor);
|
|
107
|
-
const { columnLayout = "static" } = tableConfig;
|
|
108
|
-
const runtimeColumnsWithLayout = vuuUtils.applyWidthToColumns(runtimeColumns, {
|
|
109
|
-
availableWidth,
|
|
110
|
-
columnLayout
|
|
111
|
-
});
|
|
112
|
-
const columnsInRenderOrder = runtimeColumnsWithLayout.some(vuuUtils.isPinned) ? vuuUtils.sortPinnedColumns(runtimeColumnsWithLayout) : runtimeColumnsWithLayout;
|
|
113
107
|
if (selectionModel === "checkbox") {
|
|
114
|
-
|
|
108
|
+
runtimeColumns.splice(
|
|
115
109
|
0,
|
|
116
110
|
0,
|
|
117
111
|
toRuntimeColumnDescriptor(checkboxColumnDescriptor, -1)
|
|
118
112
|
);
|
|
119
113
|
}
|
|
114
|
+
const { columnLayout = "static" } = tableConfig;
|
|
115
|
+
const runtimeColumnsWithLayout = vuuUtils.applyWidthToColumns(runtimeColumns, {
|
|
116
|
+
availableWidth,
|
|
117
|
+
columnLayout
|
|
118
|
+
});
|
|
119
|
+
const columnsInRenderOrder = runtimeColumnsWithLayout.some(vuuUtils.isPinned) ? vuuUtils.sortPinnedColumns(runtimeColumnsWithLayout) : runtimeColumnsWithLayout;
|
|
120
120
|
let state = {
|
|
121
121
|
availableWidth,
|
|
122
122
|
columns: columnsInRenderOrder,
|