@vuu-ui/vuu-table 0.0.26
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/LICENSE +201 -0
- package/README.md +0 -0
- package/cjs/Row.css.js +6 -0
- package/cjs/Row.css.js.map +1 -0
- package/cjs/Row.js +130 -0
- package/cjs/Row.js.map +1 -0
- package/cjs/Table.css.js +6 -0
- package/cjs/Table.css.js.map +1 -0
- package/cjs/Table.js +285 -0
- package/cjs/Table.js.map +1 -0
- package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js +6 -0
- package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +1 -0
- package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js +42 -0
- package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -0
- package/cjs/cell-renderers/input-cell/InputCell.css.js +6 -0
- package/cjs/cell-renderers/input-cell/InputCell.css.js.map +1 -0
- package/cjs/cell-renderers/input-cell/InputCell.js +58 -0
- package/cjs/cell-renderers/input-cell/InputCell.js.map +1 -0
- package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js +6 -0
- package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js.map +1 -0
- package/cjs/cell-renderers/toggle-cell/ToggleCell.js +68 -0
- package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +1 -0
- package/cjs/column-header-pill/ColumnHeaderPill.css.js +6 -0
- package/cjs/column-header-pill/ColumnHeaderPill.css.js.map +1 -0
- package/cjs/column-header-pill/ColumnHeaderPill.js +53 -0
- package/cjs/column-header-pill/ColumnHeaderPill.js.map +1 -0
- package/cjs/column-header-pill/GroupColumnPill.css.js +6 -0
- package/cjs/column-header-pill/GroupColumnPill.css.js.map +1 -0
- package/cjs/column-header-pill/GroupColumnPill.js +29 -0
- package/cjs/column-header-pill/GroupColumnPill.js.map +1 -0
- package/cjs/column-header-pill/SortIndicator.css.js +6 -0
- package/cjs/column-header-pill/SortIndicator.css.js.map +1 -0
- package/cjs/column-header-pill/SortIndicator.js +27 -0
- package/cjs/column-header-pill/SortIndicator.js.map +1 -0
- package/cjs/column-menu/ColumnMenu.css.js +6 -0
- package/cjs/column-menu/ColumnMenu.css.js.map +1 -0
- package/cjs/column-menu/ColumnMenu.js +30 -0
- package/cjs/column-menu/ColumnMenu.js.map +1 -0
- package/cjs/column-resizing/ColumnResizer.css.js +6 -0
- package/cjs/column-resizing/ColumnResizer.css.js.map +1 -0
- package/cjs/column-resizing/ColumnResizer.js +72 -0
- package/cjs/column-resizing/ColumnResizer.js.map +1 -0
- package/cjs/column-resizing/useTableColumnResize.js +55 -0
- package/cjs/column-resizing/useTableColumnResize.js.map +1 -0
- package/cjs/context-menu/buildContextMenuDescriptors.js +214 -0
- package/cjs/context-menu/buildContextMenuDescriptors.js.map +1 -0
- package/cjs/context-menu/useHandleTableContextMenu.js +81 -0
- package/cjs/context-menu/useHandleTableContextMenu.js.map +1 -0
- package/cjs/header-cell/GroupHeaderCell.css.js +6 -0
- package/cjs/header-cell/GroupHeaderCell.css.js.map +1 -0
- package/cjs/header-cell/GroupHeaderCell.js +117 -0
- package/cjs/header-cell/GroupHeaderCell.js.map +1 -0
- package/cjs/header-cell/HeaderCell.css.js +6 -0
- package/cjs/header-cell/HeaderCell.css.js.map +1 -0
- package/cjs/header-cell/HeaderCell.js +109 -0
- package/cjs/header-cell/HeaderCell.js.map +1 -0
- package/cjs/index.js +36 -0
- package/cjs/index.js.map +1 -0
- package/cjs/moving-window.js +61 -0
- package/cjs/moving-window.js.map +1 -0
- package/cjs/table-cell/TableCell.css.js +6 -0
- package/cjs/table-cell/TableCell.css.js.map +1 -0
- package/cjs/table-cell/TableCell.js +72 -0
- package/cjs/table-cell/TableCell.js.map +1 -0
- package/cjs/table-cell/TableGroupCell.css.js +6 -0
- package/cjs/table-cell/TableGroupCell.css.js.map +1 -0
- package/cjs/table-cell/TableGroupCell.js +54 -0
- package/cjs/table-cell/TableGroupCell.js.map +1 -0
- package/cjs/table-config.js +25 -0
- package/cjs/table-config.js.map +1 -0
- package/cjs/table-dom-utils.js +60 -0
- package/cjs/table-dom-utils.js.map +1 -0
- package/cjs/table-header/TableHeader.js +87 -0
- package/cjs/table-header/TableHeader.js.map +1 -0
- package/cjs/table-header/useTableHeader.js +72 -0
- package/cjs/table-header/useTableHeader.js.map +1 -0
- package/cjs/useCell.js +28 -0
- package/cjs/useCell.js.map +1 -0
- package/cjs/useCellEditing.js +79 -0
- package/cjs/useCellEditing.js.map +1 -0
- package/cjs/useControlledTableNavigation.js +43 -0
- package/cjs/useControlledTableNavigation.js.map +1 -0
- package/cjs/useDataSource.js +104 -0
- package/cjs/useDataSource.js.map +1 -0
- package/cjs/useInitialValue.js +11 -0
- package/cjs/useInitialValue.js.map +1 -0
- package/cjs/useKeyboardNavigation.js +304 -0
- package/cjs/useKeyboardNavigation.js.map +1 -0
- package/cjs/useRowClassNameGenerators.js +34 -0
- package/cjs/useRowClassNameGenerators.js.map +1 -0
- package/cjs/useRowHeight.js +43 -0
- package/cjs/useRowHeight.js.map +1 -0
- package/cjs/useSelection.js +64 -0
- package/cjs/useSelection.js.map +1 -0
- package/cjs/useTable.js +553 -0
- package/cjs/useTable.js.map +1 -0
- package/cjs/useTableAndColumnSettings.js +128 -0
- package/cjs/useTableAndColumnSettings.js.map +1 -0
- package/cjs/useTableContextMenu.js +42 -0
- package/cjs/useTableContextMenu.js.map +1 -0
- package/cjs/useTableModel.js +297 -0
- package/cjs/useTableModel.js.map +1 -0
- package/cjs/useTableScroll.js +396 -0
- package/cjs/useTableScroll.js.map +1 -0
- package/cjs/useTableViewport.js +122 -0
- package/cjs/useTableViewport.js.map +1 -0
- package/esm/Row.css.js +4 -0
- package/esm/Row.css.js.map +1 -0
- package/esm/Row.js +127 -0
- package/esm/Row.js.map +1 -0
- package/esm/Table.css.js +4 -0
- package/esm/Table.css.js.map +1 -0
- package/esm/Table.js +283 -0
- package/esm/Table.js.map +1 -0
- package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js +4 -0
- package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +1 -0
- package/esm/cell-renderers/checkbox-cell/CheckboxCell.js +40 -0
- package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -0
- package/esm/cell-renderers/input-cell/InputCell.css.js +4 -0
- package/esm/cell-renderers/input-cell/InputCell.css.js.map +1 -0
- package/esm/cell-renderers/input-cell/InputCell.js +56 -0
- package/esm/cell-renderers/input-cell/InputCell.js.map +1 -0
- package/esm/cell-renderers/toggle-cell/ToggleCell.css.js +4 -0
- package/esm/cell-renderers/toggle-cell/ToggleCell.css.js.map +1 -0
- package/esm/cell-renderers/toggle-cell/ToggleCell.js +66 -0
- package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +1 -0
- package/esm/column-header-pill/ColumnHeaderPill.css.js +4 -0
- package/esm/column-header-pill/ColumnHeaderPill.css.js.map +1 -0
- package/esm/column-header-pill/ColumnHeaderPill.js +51 -0
- package/esm/column-header-pill/ColumnHeaderPill.js.map +1 -0
- package/esm/column-header-pill/GroupColumnPill.css.js +4 -0
- package/esm/column-header-pill/GroupColumnPill.css.js.map +1 -0
- package/esm/column-header-pill/GroupColumnPill.js +27 -0
- package/esm/column-header-pill/GroupColumnPill.js.map +1 -0
- package/esm/column-header-pill/SortIndicator.css.js +4 -0
- package/esm/column-header-pill/SortIndicator.css.js.map +1 -0
- package/esm/column-header-pill/SortIndicator.js +25 -0
- package/esm/column-header-pill/SortIndicator.js.map +1 -0
- package/esm/column-menu/ColumnMenu.css.js +4 -0
- package/esm/column-menu/ColumnMenu.css.js.map +1 -0
- package/esm/column-menu/ColumnMenu.js +28 -0
- package/esm/column-menu/ColumnMenu.js.map +1 -0
- package/esm/column-resizing/ColumnResizer.css.js +4 -0
- package/esm/column-resizing/ColumnResizer.css.js.map +1 -0
- package/esm/column-resizing/ColumnResizer.js +70 -0
- package/esm/column-resizing/ColumnResizer.js.map +1 -0
- package/esm/column-resizing/useTableColumnResize.js +53 -0
- package/esm/column-resizing/useTableColumnResize.js.map +1 -0
- package/esm/context-menu/buildContextMenuDescriptors.js +212 -0
- package/esm/context-menu/buildContextMenuDescriptors.js.map +1 -0
- package/esm/context-menu/useHandleTableContextMenu.js +79 -0
- package/esm/context-menu/useHandleTableContextMenu.js.map +1 -0
- package/esm/header-cell/GroupHeaderCell.css.js +4 -0
- package/esm/header-cell/GroupHeaderCell.css.js.map +1 -0
- package/esm/header-cell/GroupHeaderCell.js +115 -0
- package/esm/header-cell/GroupHeaderCell.js.map +1 -0
- package/esm/header-cell/HeaderCell.css.js +4 -0
- package/esm/header-cell/HeaderCell.css.js.map +1 -0
- package/esm/header-cell/HeaderCell.js +107 -0
- package/esm/header-cell/HeaderCell.js.map +1 -0
- package/esm/index.js +14 -0
- package/esm/index.js.map +1 -0
- package/esm/moving-window.js +59 -0
- package/esm/moving-window.js.map +1 -0
- package/esm/table-cell/TableCell.css.js +4 -0
- package/esm/table-cell/TableCell.css.js.map +1 -0
- package/esm/table-cell/TableCell.js +70 -0
- package/esm/table-cell/TableCell.js.map +1 -0
- package/esm/table-cell/TableGroupCell.css.js +4 -0
- package/esm/table-cell/TableGroupCell.css.js.map +1 -0
- package/esm/table-cell/TableGroupCell.js +52 -0
- package/esm/table-cell/TableGroupCell.js.map +1 -0
- package/esm/table-config.js +23 -0
- package/esm/table-config.js.map +1 -0
- package/esm/table-dom-utils.js +51 -0
- package/esm/table-dom-utils.js.map +1 -0
- package/esm/table-header/TableHeader.js +85 -0
- package/esm/table-header/TableHeader.js.map +1 -0
- package/esm/table-header/useTableHeader.js +70 -0
- package/esm/table-header/useTableHeader.js.map +1 -0
- package/esm/useCell.js +26 -0
- package/esm/useCell.js.map +1 -0
- package/esm/useCellEditing.js +77 -0
- package/esm/useCellEditing.js.map +1 -0
- package/esm/useControlledTableNavigation.js +41 -0
- package/esm/useControlledTableNavigation.js.map +1 -0
- package/esm/useDataSource.js +101 -0
- package/esm/useDataSource.js.map +1 -0
- package/esm/useInitialValue.js +9 -0
- package/esm/useInitialValue.js.map +1 -0
- package/esm/useKeyboardNavigation.js +300 -0
- package/esm/useKeyboardNavigation.js.map +1 -0
- package/esm/useRowClassNameGenerators.js +32 -0
- package/esm/useRowClassNameGenerators.js.map +1 -0
- package/esm/useRowHeight.js +41 -0
- package/esm/useRowHeight.js.map +1 -0
- package/esm/useSelection.js +62 -0
- package/esm/useSelection.js.map +1 -0
- package/esm/useTable.js +551 -0
- package/esm/useTable.js.map +1 -0
- package/esm/useTableAndColumnSettings.js +126 -0
- package/esm/useTableAndColumnSettings.js.map +1 -0
- package/esm/useTableContextMenu.js +40 -0
- package/esm/useTableContextMenu.js.map +1 -0
- package/esm/useTableModel.js +293 -0
- package/esm/useTableModel.js.map +1 -0
- package/esm/useTableScroll.js +393 -0
- package/esm/useTableScroll.js.map +1 -0
- package/esm/useTableViewport.js +120 -0
- package/esm/useTableViewport.js.map +1 -0
- package/package.json +42 -0
- package/types/Row.d.ts +23 -0
- package/types/Table.d.ts +91 -0
- package/types/cell-renderers/checkbox-cell/CheckboxCell.d.ts +3 -0
- package/types/cell-renderers/checkbox-cell/index.d.ts +1 -0
- package/types/cell-renderers/index.d.ts +3 -0
- package/types/cell-renderers/input-cell/InputCell.d.ts +3 -0
- package/types/cell-renderers/input-cell/index.d.ts +1 -0
- package/types/cell-renderers/toggle-cell/ToggleCell.d.ts +3 -0
- package/types/cell-renderers/toggle-cell/index.d.ts +1 -0
- package/types/column-header-pill/ColumnHeaderPill.d.ts +8 -0
- package/types/column-header-pill/GroupColumnPill.d.ts +7 -0
- package/types/column-header-pill/SortIndicator.d.ts +6 -0
- package/types/column-header-pill/index.d.ts +3 -0
- package/types/column-menu/ColumnMenu.d.ts +6 -0
- package/types/column-menu/index.d.ts +1 -0
- package/types/column-resizing/ColumnResizer.d.ts +7 -0
- package/types/column-resizing/index.d.ts +2 -0
- package/types/column-resizing/useTableColumnResize.d.ts +15 -0
- package/types/context-menu/buildContextMenuDescriptors.d.ts +3 -0
- package/types/context-menu/index.d.ts +2 -0
- package/types/context-menu/useHandleTableContextMenu.d.ts +20 -0
- package/types/header-cell/GroupHeaderCell.d.ts +8 -0
- package/types/header-cell/HeaderCell.d.ts +3 -0
- package/types/header-cell/index.d.ts +2 -0
- package/types/index.d.ts +11 -0
- package/types/moving-window.d.ts +14 -0
- package/types/table-cell/TableCell.d.ts +3 -0
- package/types/table-cell/TableGroupCell.d.ts +3 -0
- package/types/table-cell/index.d.ts +2 -0
- package/types/table-config.d.ts +25 -0
- package/types/table-dom-utils.d.ts +14 -0
- package/types/table-header/TableHeader.d.ts +19 -0
- package/types/table-header/useTableHeader.d.ts +15 -0
- package/types/useCell.d.ts +6 -0
- package/types/useCellEditing.d.ts +10 -0
- package/types/useControlledTableNavigation.d.ts +7 -0
- package/types/useDataSource.d.ts +20 -0
- package/types/useInitialValue.d.ts +1 -0
- package/types/useKeyboardNavigation.d.ts +36 -0
- package/types/useResizeObserver.d.ts +15 -0
- package/types/useRowClassNameGenerators.d.ts +3 -0
- package/types/useRowHeight.d.ts +8 -0
- package/types/useSelection.d.ts +14 -0
- package/types/useTable.d.ts +71 -0
- package/types/useTableAndColumnSettings.d.ts +15 -0
- package/types/useTableContextMenu.d.ts +10 -0
- package/types/useTableModel.d.ts +103 -0
- package/types/useTableScroll.d.ts +57 -0
- package/types/useTableViewport.d.ts +41 -0
package/cjs/useTable.js
ADDED
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
4
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
var buildContextMenuDescriptors = require('./context-menu/buildContextMenuDescriptors.js');
|
|
7
|
+
var useHandleTableContextMenu = require('./context-menu/useHandleTableContextMenu.js');
|
|
8
|
+
var tableConfig = require('./table-config.js');
|
|
9
|
+
var useCellEditing = require('./useCellEditing.js');
|
|
10
|
+
var useDataSource = require('./useDataSource.js');
|
|
11
|
+
var useInitialValue = require('./useInitialValue.js');
|
|
12
|
+
var useKeyboardNavigation = require('./useKeyboardNavigation.js');
|
|
13
|
+
var useSelection = require('./useSelection.js');
|
|
14
|
+
var useTableContextMenu = require('./useTableContextMenu.js');
|
|
15
|
+
var useTableModel = require('./useTableModel.js');
|
|
16
|
+
var useTableScroll = require('./useTableScroll.js');
|
|
17
|
+
var useTableViewport = require('./useTableViewport.js');
|
|
18
|
+
var useTableAndColumnSettings = require('./useTableAndColumnSettings.js');
|
|
19
|
+
var useRowClassNameGenerators = require('./useRowClassNameGenerators.js');
|
|
20
|
+
|
|
21
|
+
const stripInternalProperties = (tableConfig) => {
|
|
22
|
+
return tableConfig;
|
|
23
|
+
};
|
|
24
|
+
const { KEY, IS_EXPANDED, IS_LEAF } = vuuUtils.metadataKeys;
|
|
25
|
+
const NULL_DRAG_DROP = {
|
|
26
|
+
draggable: void 0,
|
|
27
|
+
onMouseDown: void 0
|
|
28
|
+
};
|
|
29
|
+
const useNullDragDrop = () => NULL_DRAG_DROP;
|
|
30
|
+
const addColumn = (tableConfig, column) => ({
|
|
31
|
+
...tableConfig,
|
|
32
|
+
columns: tableConfig.columns.concat(column)
|
|
33
|
+
});
|
|
34
|
+
const useTable = ({
|
|
35
|
+
allowDragDrop = false,
|
|
36
|
+
availableColumns,
|
|
37
|
+
config,
|
|
38
|
+
containerRef,
|
|
39
|
+
dataSource,
|
|
40
|
+
disableFocus,
|
|
41
|
+
headerHeight = 25,
|
|
42
|
+
highlightedIndex: highlightedIndexProp,
|
|
43
|
+
id,
|
|
44
|
+
navigationStyle = "cell",
|
|
45
|
+
onAvailableColumnsChange,
|
|
46
|
+
onConfigChange,
|
|
47
|
+
onDragStart,
|
|
48
|
+
onDrop,
|
|
49
|
+
onFeatureInvocation,
|
|
50
|
+
onHighlight,
|
|
51
|
+
onRowClick: onRowClickProp,
|
|
52
|
+
onSelect,
|
|
53
|
+
onSelectionChange,
|
|
54
|
+
renderBufferSize = 0,
|
|
55
|
+
rowHeight = 20,
|
|
56
|
+
scrollingApiRef,
|
|
57
|
+
selectionModel,
|
|
58
|
+
size
|
|
59
|
+
}) => {
|
|
60
|
+
const [rowCount, setRowCount] = react.useState(dataSource.size);
|
|
61
|
+
if (dataSource === void 0) {
|
|
62
|
+
throw Error("no data source provided to Vuu Table");
|
|
63
|
+
}
|
|
64
|
+
const rowClassNameGenerator = useRowClassNameGenerators.useRowClassNameGenerators(config);
|
|
65
|
+
const useRowDragDrop = allowDragDrop ? vuuUiControls.useDragDrop : useNullDragDrop;
|
|
66
|
+
const menuBuilder = react.useMemo(
|
|
67
|
+
() => buildContextMenuDescriptors.buildContextMenuDescriptors(dataSource),
|
|
68
|
+
[dataSource]
|
|
69
|
+
);
|
|
70
|
+
const onDataRowcountChange = react.useCallback((size2) => {
|
|
71
|
+
setRowCount(size2);
|
|
72
|
+
}, []);
|
|
73
|
+
const {
|
|
74
|
+
columns,
|
|
75
|
+
dispatchTableModelAction,
|
|
76
|
+
headings,
|
|
77
|
+
tableAttributes,
|
|
78
|
+
tableConfig: tableConfig$1
|
|
79
|
+
} = useTableModel.useTableModel(config, dataSource);
|
|
80
|
+
vuuUtils.useLayoutEffectSkipFirst(() => {
|
|
81
|
+
dispatchTableModelAction({
|
|
82
|
+
type: "init",
|
|
83
|
+
tableConfig: config,
|
|
84
|
+
dataSource
|
|
85
|
+
});
|
|
86
|
+
}, [config, dataSource, dispatchTableModelAction]);
|
|
87
|
+
const applyTableConfigChange = react.useCallback(
|
|
88
|
+
(config2) => {
|
|
89
|
+
dispatchTableModelAction({
|
|
90
|
+
type: "init",
|
|
91
|
+
tableConfig: config2,
|
|
92
|
+
dataSource
|
|
93
|
+
});
|
|
94
|
+
onConfigChange?.(stripInternalProperties(config2));
|
|
95
|
+
},
|
|
96
|
+
[dataSource, dispatchTableModelAction, onConfigChange]
|
|
97
|
+
);
|
|
98
|
+
const columnMap = react.useMemo(
|
|
99
|
+
() => vuuUtils.buildColumnMap(dataSource.columns),
|
|
100
|
+
[dataSource.columns]
|
|
101
|
+
);
|
|
102
|
+
const onSubscribed = react.useCallback(
|
|
103
|
+
({ tableSchema }) => {
|
|
104
|
+
if (tableSchema) {
|
|
105
|
+
dispatchTableModelAction({
|
|
106
|
+
type: "setTableSchema",
|
|
107
|
+
tableSchema
|
|
108
|
+
});
|
|
109
|
+
} else {
|
|
110
|
+
console.log("subscription message with no schema");
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
[dispatchTableModelAction]
|
|
114
|
+
);
|
|
115
|
+
const {
|
|
116
|
+
getRowAtPosition,
|
|
117
|
+
getRowOffset,
|
|
118
|
+
setInSituRowOffset: viewportHookSetInSituRowOffset,
|
|
119
|
+
setScrollTop: viewportHookSetScrollTop,
|
|
120
|
+
...viewportMeasurements
|
|
121
|
+
} = useTableViewport.useTableViewport({
|
|
122
|
+
columns,
|
|
123
|
+
headerHeight,
|
|
124
|
+
headings,
|
|
125
|
+
rowCount,
|
|
126
|
+
rowHeight,
|
|
127
|
+
size
|
|
128
|
+
});
|
|
129
|
+
const initialRange = useInitialValue.useInitialValue({
|
|
130
|
+
from: 0,
|
|
131
|
+
to: viewportMeasurements.rowCount
|
|
132
|
+
});
|
|
133
|
+
const { data, dataRef, getSelectedRows, range, setRange } = useDataSource.useDataSource({
|
|
134
|
+
dataSource,
|
|
135
|
+
// We need to factor this out of Table
|
|
136
|
+
onFeatureInvocation,
|
|
137
|
+
renderBufferSize,
|
|
138
|
+
onSizeChange: onDataRowcountChange,
|
|
139
|
+
onSubscribed,
|
|
140
|
+
range: initialRange
|
|
141
|
+
});
|
|
142
|
+
const { requestScroll, ...scrollProps } = useTableScroll.useTableScroll({
|
|
143
|
+
columns,
|
|
144
|
+
getRowAtPosition,
|
|
145
|
+
rowHeight,
|
|
146
|
+
scrollingApiRef,
|
|
147
|
+
setRange,
|
|
148
|
+
onVerticalScroll: viewportHookSetScrollTop,
|
|
149
|
+
onVerticalScrollInSitu: viewportHookSetInSituRowOffset,
|
|
150
|
+
viewportMeasurements
|
|
151
|
+
});
|
|
152
|
+
const handleConfigEditedInSettingsPanel = react.useCallback(
|
|
153
|
+
(tableConfig2) => {
|
|
154
|
+
dispatchTableModelAction({
|
|
155
|
+
type: "init",
|
|
156
|
+
tableConfig: tableConfig2,
|
|
157
|
+
dataSource
|
|
158
|
+
});
|
|
159
|
+
onConfigChange?.(stripInternalProperties(tableConfig2));
|
|
160
|
+
},
|
|
161
|
+
[dataSource, dispatchTableModelAction, onConfigChange]
|
|
162
|
+
);
|
|
163
|
+
const handleDataSourceConfigChanged = react.useCallback(
|
|
164
|
+
(dataSourceConfig) => {
|
|
165
|
+
dataSource.config = {
|
|
166
|
+
...dataSource.config,
|
|
167
|
+
...dataSourceConfig
|
|
168
|
+
};
|
|
169
|
+
},
|
|
170
|
+
[dataSource]
|
|
171
|
+
);
|
|
172
|
+
react.useEffect(() => {
|
|
173
|
+
dataSource.on("config", (config2, confirmed, changes) => {
|
|
174
|
+
const scrollSensitiveChanges = changes?.filterChanged || changes?.groupByChanged;
|
|
175
|
+
if (scrollSensitiveChanges && dataSource.range.from > 0) {
|
|
176
|
+
requestScroll({
|
|
177
|
+
type: "scroll-end",
|
|
178
|
+
direction: "home"
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
dispatchTableModelAction({
|
|
182
|
+
type: "tableConfig",
|
|
183
|
+
...config2,
|
|
184
|
+
confirmed
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
}, [dataSource, dispatchTableModelAction, requestScroll]);
|
|
188
|
+
const handleCreateCalculatedColumn = react.useCallback(
|
|
189
|
+
(column) => {
|
|
190
|
+
dataSource.columns = dataSource.columns.concat(column.name);
|
|
191
|
+
applyTableConfigChange(addColumn(tableConfig$1, column));
|
|
192
|
+
},
|
|
193
|
+
[dataSource, tableConfig$1, applyTableConfigChange]
|
|
194
|
+
);
|
|
195
|
+
const hideColumns = react.useCallback(
|
|
196
|
+
(action) => {
|
|
197
|
+
const { columns: columns2 } = action;
|
|
198
|
+
const hiddenColumns = columns2.map((c) => c.name);
|
|
199
|
+
const newTableConfig = {
|
|
200
|
+
...tableConfig$1,
|
|
201
|
+
columns: tableConfig$1.columns.map(
|
|
202
|
+
(col) => hiddenColumns.includes(col.name) ? { ...col, hidden: true } : col
|
|
203
|
+
)
|
|
204
|
+
};
|
|
205
|
+
applyTableConfigChange(newTableConfig);
|
|
206
|
+
},
|
|
207
|
+
[tableConfig$1, applyTableConfigChange]
|
|
208
|
+
);
|
|
209
|
+
const pinColumn = react.useCallback(
|
|
210
|
+
(action) => {
|
|
211
|
+
applyTableConfigChange({
|
|
212
|
+
...tableConfig$1,
|
|
213
|
+
columns: vuuUtils.updateColumn(tableConfig$1.columns, {
|
|
214
|
+
...action.column,
|
|
215
|
+
pin: action.pin
|
|
216
|
+
})
|
|
217
|
+
});
|
|
218
|
+
},
|
|
219
|
+
[tableConfig$1, applyTableConfigChange]
|
|
220
|
+
);
|
|
221
|
+
const { showColumnSettingsPanel, showTableSettingsPanel } = useTableAndColumnSettings.useTableAndColumnSettings({
|
|
222
|
+
availableColumns: availableColumns ?? tableConfig$1.columns.map(({ name, serverDataType = "string" }) => ({
|
|
223
|
+
name,
|
|
224
|
+
serverDataType
|
|
225
|
+
})),
|
|
226
|
+
onAvailableColumnsChange,
|
|
227
|
+
onConfigChange: handleConfigEditedInSettingsPanel,
|
|
228
|
+
onCreateCalculatedColumn: handleCreateCalculatedColumn,
|
|
229
|
+
onDataSourceConfigChange: handleDataSourceConfigChanged,
|
|
230
|
+
tableConfig: tableConfig$1
|
|
231
|
+
});
|
|
232
|
+
const onPersistentColumnOperation = react.useCallback(
|
|
233
|
+
(action) => {
|
|
234
|
+
if (useTableModel.isShowColumnSettings(action)) {
|
|
235
|
+
showColumnSettingsPanel(action);
|
|
236
|
+
} else if (useTableModel.isShowTableSettings(action)) {
|
|
237
|
+
showTableSettingsPanel();
|
|
238
|
+
} else {
|
|
239
|
+
switch (action.type) {
|
|
240
|
+
case "hideColumns":
|
|
241
|
+
return hideColumns(action);
|
|
242
|
+
case "pinColumn":
|
|
243
|
+
return pinColumn(action);
|
|
244
|
+
default:
|
|
245
|
+
dispatchTableModelAction(action);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
[
|
|
250
|
+
dispatchTableModelAction,
|
|
251
|
+
hideColumns,
|
|
252
|
+
pinColumn,
|
|
253
|
+
showColumnSettingsPanel,
|
|
254
|
+
showTableSettingsPanel
|
|
255
|
+
]
|
|
256
|
+
);
|
|
257
|
+
const handleContextMenuAction = useHandleTableContextMenu.useHandleTableContextMenu({
|
|
258
|
+
dataSource,
|
|
259
|
+
onPersistentColumnOperation
|
|
260
|
+
});
|
|
261
|
+
const handleSort = react.useCallback(
|
|
262
|
+
(column, extendSort = false, sortType) => {
|
|
263
|
+
if (dataSource) {
|
|
264
|
+
dataSource.sort = vuuUtils.toggleOrApplySort(
|
|
265
|
+
dataSource.sort,
|
|
266
|
+
column,
|
|
267
|
+
extendSort,
|
|
268
|
+
sortType
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
[dataSource]
|
|
273
|
+
);
|
|
274
|
+
const resizeCells = react.useRef();
|
|
275
|
+
const onResizeColumn = react.useCallback(
|
|
276
|
+
(phase, columnName, width) => {
|
|
277
|
+
const column = columns.find((column2) => column2.name === columnName);
|
|
278
|
+
if (column) {
|
|
279
|
+
if (phase === "resize") {
|
|
280
|
+
resizeCells.current?.forEach((cell) => {
|
|
281
|
+
cell.style.width = `${width}px`;
|
|
282
|
+
});
|
|
283
|
+
} else if (phase === "end") {
|
|
284
|
+
resizeCells.current = void 0;
|
|
285
|
+
if (vuuUtils.isValidNumber(width)) {
|
|
286
|
+
dispatchTableModelAction({
|
|
287
|
+
type: "resizeColumn",
|
|
288
|
+
phase,
|
|
289
|
+
column,
|
|
290
|
+
width
|
|
291
|
+
});
|
|
292
|
+
onConfigChange?.(
|
|
293
|
+
stripInternalProperties(
|
|
294
|
+
tableConfig.updateTableConfig(tableConfig$1, {
|
|
295
|
+
type: "col-size",
|
|
296
|
+
column,
|
|
297
|
+
width
|
|
298
|
+
})
|
|
299
|
+
)
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
} else {
|
|
303
|
+
const byColIndex = `[aria-colindex='${column.index}']`;
|
|
304
|
+
resizeCells.current = Array.from(
|
|
305
|
+
containerRef.current?.querySelectorAll(
|
|
306
|
+
`.vuuTableCell${byColIndex},.vuuTableHeaderCell${byColIndex}`
|
|
307
|
+
) ?? []
|
|
308
|
+
);
|
|
309
|
+
dispatchTableModelAction({
|
|
310
|
+
type: "resizeColumn",
|
|
311
|
+
phase,
|
|
312
|
+
column,
|
|
313
|
+
width
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
} else {
|
|
317
|
+
throw Error(
|
|
318
|
+
`useDataTable.handleColumnResize, column ${columnName} not found`
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
[
|
|
323
|
+
columns,
|
|
324
|
+
dispatchTableModelAction,
|
|
325
|
+
onConfigChange,
|
|
326
|
+
tableConfig$1,
|
|
327
|
+
containerRef
|
|
328
|
+
]
|
|
329
|
+
);
|
|
330
|
+
const onToggleGroup = react.useCallback(
|
|
331
|
+
(row, column) => {
|
|
332
|
+
const isJson = vuuUtils.isJsonGroup(column, row, columnMap);
|
|
333
|
+
const key = row[KEY];
|
|
334
|
+
if (row[IS_EXPANDED]) {
|
|
335
|
+
dataSource.closeTreeNode(key, true);
|
|
336
|
+
if (isJson) {
|
|
337
|
+
const idx = columns.indexOf(column);
|
|
338
|
+
const rows = dataSource.getRowsAtDepth?.(idx + 1);
|
|
339
|
+
if (rows && !rows.some((row2) => row2[IS_EXPANDED] || row2[IS_LEAF])) {
|
|
340
|
+
dispatchTableModelAction({
|
|
341
|
+
type: "hideColumns",
|
|
342
|
+
columns: columns.slice(idx + 2)
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
} else {
|
|
347
|
+
dataSource.openTreeNode(key);
|
|
348
|
+
if (isJson) {
|
|
349
|
+
const childRows = dataSource.getChildRows?.(key);
|
|
350
|
+
const idx = columns.indexOf(column) + 1;
|
|
351
|
+
const columnsToShow = [columns[idx]];
|
|
352
|
+
if (childRows && childRows.some((row2) => row2[IS_LEAF])) {
|
|
353
|
+
columnsToShow.push(columns[idx + 1]);
|
|
354
|
+
}
|
|
355
|
+
if (columnsToShow.some((col) => col.hidden)) {
|
|
356
|
+
dispatchTableModelAction({
|
|
357
|
+
type: "showColumns",
|
|
358
|
+
columns: columnsToShow
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
[columnMap, columns, dataSource, dispatchTableModelAction]
|
|
365
|
+
);
|
|
366
|
+
const {
|
|
367
|
+
highlightedIndexRef,
|
|
368
|
+
navigate,
|
|
369
|
+
onFocus: navigationFocus,
|
|
370
|
+
onKeyDown: navigationKeyDown,
|
|
371
|
+
...containerProps
|
|
372
|
+
} = useKeyboardNavigation.useKeyboardNavigation({
|
|
373
|
+
columnCount: columns.filter((c) => c.hidden !== true).length,
|
|
374
|
+
containerRef,
|
|
375
|
+
disableFocus,
|
|
376
|
+
highlightedIndex: highlightedIndexProp,
|
|
377
|
+
navigationStyle,
|
|
378
|
+
requestScroll,
|
|
379
|
+
rowCount: dataSource?.size,
|
|
380
|
+
onHighlight,
|
|
381
|
+
viewportRange: range,
|
|
382
|
+
viewportRowCount: viewportMeasurements.rowCount
|
|
383
|
+
});
|
|
384
|
+
const {
|
|
385
|
+
onBlur: editingBlur,
|
|
386
|
+
onDoubleClick: editingDoubleClick,
|
|
387
|
+
onKeyDown: editingKeyDown,
|
|
388
|
+
onFocus: editingFocus
|
|
389
|
+
} = useCellEditing.useCellEditing({
|
|
390
|
+
navigate
|
|
391
|
+
});
|
|
392
|
+
const handleFocus = react.useCallback(
|
|
393
|
+
(e) => {
|
|
394
|
+
navigationFocus();
|
|
395
|
+
if (!e.defaultPrevented) {
|
|
396
|
+
editingFocus(e);
|
|
397
|
+
}
|
|
398
|
+
},
|
|
399
|
+
[editingFocus, navigationFocus]
|
|
400
|
+
);
|
|
401
|
+
const onContextMenu = useTableContextMenu.useTableContextMenu({
|
|
402
|
+
columns,
|
|
403
|
+
data,
|
|
404
|
+
dataSource,
|
|
405
|
+
getSelectedRows
|
|
406
|
+
});
|
|
407
|
+
const onMoveGroupColumn = react.useCallback(
|
|
408
|
+
(columns2) => {
|
|
409
|
+
dataSource.groupBy = columns2.map((col) => col.name);
|
|
410
|
+
},
|
|
411
|
+
[dataSource]
|
|
412
|
+
);
|
|
413
|
+
const onRemoveGroupColumn = react.useCallback(
|
|
414
|
+
(column) => {
|
|
415
|
+
if (vuuUtils.isGroupColumn(column)) {
|
|
416
|
+
dataSource.groupBy = [];
|
|
417
|
+
} else {
|
|
418
|
+
if (dataSource && dataSource.groupBy.includes(column.name)) {
|
|
419
|
+
dataSource.groupBy = dataSource.groupBy.filter(
|
|
420
|
+
(columnName) => columnName !== column.name
|
|
421
|
+
);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
},
|
|
425
|
+
[dataSource]
|
|
426
|
+
);
|
|
427
|
+
const handleSelectionChange = react.useCallback(
|
|
428
|
+
(selected) => {
|
|
429
|
+
dataSource.select(selected);
|
|
430
|
+
onSelectionChange?.(selected);
|
|
431
|
+
},
|
|
432
|
+
[dataSource, onSelectionChange]
|
|
433
|
+
);
|
|
434
|
+
const handleSelect = react.useCallback(
|
|
435
|
+
(row) => {
|
|
436
|
+
if (onSelect) {
|
|
437
|
+
onSelect(row === null ? null : vuuUtils.asDataSourceRowObject(row, columnMap));
|
|
438
|
+
}
|
|
439
|
+
},
|
|
440
|
+
[columnMap, onSelect]
|
|
441
|
+
);
|
|
442
|
+
const {
|
|
443
|
+
onKeyDown: selectionHookKeyDown,
|
|
444
|
+
onRowClick: selectionHookOnRowClick
|
|
445
|
+
} = useSelection.useSelection({
|
|
446
|
+
highlightedIndexRef,
|
|
447
|
+
onSelect: handleSelect,
|
|
448
|
+
onSelectionChange: handleSelectionChange,
|
|
449
|
+
selectionModel
|
|
450
|
+
});
|
|
451
|
+
const handleRowClick = react.useCallback(
|
|
452
|
+
(evt, row, rangeSelect, keepExistingSelection) => {
|
|
453
|
+
selectionHookOnRowClick(evt, row, rangeSelect, keepExistingSelection);
|
|
454
|
+
onRowClickProp?.(evt, vuuUtils.asDataSourceRowObject(row, columnMap));
|
|
455
|
+
},
|
|
456
|
+
[columnMap, onRowClickProp, selectionHookOnRowClick]
|
|
457
|
+
);
|
|
458
|
+
const handleKeyDown = react.useCallback(
|
|
459
|
+
(e) => {
|
|
460
|
+
navigationKeyDown(e);
|
|
461
|
+
if (!e.defaultPrevented) {
|
|
462
|
+
editingKeyDown(e);
|
|
463
|
+
}
|
|
464
|
+
if (!e.defaultPrevented) {
|
|
465
|
+
selectionHookKeyDown(e);
|
|
466
|
+
}
|
|
467
|
+
},
|
|
468
|
+
[navigationKeyDown, editingKeyDown, selectionHookKeyDown]
|
|
469
|
+
);
|
|
470
|
+
const onMoveColumn = react.useCallback(
|
|
471
|
+
(columns2) => {
|
|
472
|
+
const newTableConfig = {
|
|
473
|
+
...tableConfig$1,
|
|
474
|
+
columns: columns2
|
|
475
|
+
};
|
|
476
|
+
dispatchTableModelAction({
|
|
477
|
+
type: "init",
|
|
478
|
+
tableConfig: newTableConfig,
|
|
479
|
+
dataSource
|
|
480
|
+
});
|
|
481
|
+
onConfigChange?.(stripInternalProperties(newTableConfig));
|
|
482
|
+
},
|
|
483
|
+
[dataSource, dispatchTableModelAction, onConfigChange, tableConfig$1]
|
|
484
|
+
);
|
|
485
|
+
const handleDropRow = react.useCallback(
|
|
486
|
+
(dragDropState) => {
|
|
487
|
+
onDrop?.(dragDropState);
|
|
488
|
+
},
|
|
489
|
+
[onDrop]
|
|
490
|
+
);
|
|
491
|
+
const handleDataEdited = react.useCallback(
|
|
492
|
+
async (row, columnName, value) => dataSource.applyEdit(row, columnName, value),
|
|
493
|
+
[dataSource]
|
|
494
|
+
);
|
|
495
|
+
const handleDragStartRow = react.useCallback(
|
|
496
|
+
(dragDropState) => {
|
|
497
|
+
const { initialDragElement } = dragDropState;
|
|
498
|
+
const rowIndex = vuuUtils.getIndexFromRowElement(initialDragElement);
|
|
499
|
+
const row = dataRef.current.find((row2) => row2[0] === rowIndex);
|
|
500
|
+
if (row) {
|
|
501
|
+
dragDropState.setPayload(row);
|
|
502
|
+
}
|
|
503
|
+
onDragStart?.(dragDropState);
|
|
504
|
+
},
|
|
505
|
+
[dataRef, onDragStart]
|
|
506
|
+
);
|
|
507
|
+
const { onMouseDown: rowDragMouseDown, draggable: draggableRow } = useRowDragDrop({
|
|
508
|
+
allowDragDrop,
|
|
509
|
+
containerRef,
|
|
510
|
+
draggableClassName: `vuuTable`,
|
|
511
|
+
id,
|
|
512
|
+
onDragStart: handleDragStartRow,
|
|
513
|
+
onDrop: handleDropRow,
|
|
514
|
+
orientation: "vertical",
|
|
515
|
+
itemQuery: ".vuuTableRow"
|
|
516
|
+
});
|
|
517
|
+
return {
|
|
518
|
+
...containerProps,
|
|
519
|
+
"aria-rowcount": dataSource.size,
|
|
520
|
+
rowClassNameGenerator,
|
|
521
|
+
draggableRow,
|
|
522
|
+
onBlur: editingBlur,
|
|
523
|
+
onDoubleClick: editingDoubleClick,
|
|
524
|
+
onFocus: handleFocus,
|
|
525
|
+
onKeyDown: handleKeyDown,
|
|
526
|
+
onMouseDown: rowDragMouseDown,
|
|
527
|
+
columnMap,
|
|
528
|
+
columns,
|
|
529
|
+
data,
|
|
530
|
+
getRowOffset,
|
|
531
|
+
handleContextMenuAction,
|
|
532
|
+
headings,
|
|
533
|
+
highlightedIndex: highlightedIndexRef.current,
|
|
534
|
+
menuBuilder,
|
|
535
|
+
onContextMenu,
|
|
536
|
+
onDataEdited: handleDataEdited,
|
|
537
|
+
onMoveColumn,
|
|
538
|
+
onMoveGroupColumn,
|
|
539
|
+
onRemoveGroupColumn,
|
|
540
|
+
onRowClick: handleRowClick,
|
|
541
|
+
onSortColumn: handleSort,
|
|
542
|
+
onResizeColumn,
|
|
543
|
+
onToggleGroup,
|
|
544
|
+
scrollProps,
|
|
545
|
+
// TODO don't think we need these ...
|
|
546
|
+
tableAttributes,
|
|
547
|
+
tableConfig: tableConfig$1,
|
|
548
|
+
viewportMeasurements
|
|
549
|
+
};
|
|
550
|
+
};
|
|
551
|
+
|
|
552
|
+
exports.useTable = useTable;
|
|
553
|
+
//# sourceMappingURL=useTable.js.map
|
|
@@ -0,0 +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 {\n ColumnDescriptor,\n DataCellEditHandler,\n TableRowClickHandlerInternal,\n RuntimeColumnDescriptor,\n TableColumnResizeHandler,\n TableConfig,\n TableSelectionModel,\n TableRowSelectHandlerInternal,\n} from \"@vuu-ui/vuu-table-types\";\nimport { VuuRange, VuuSortType } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n DragStartHandler,\n MeasuredProps,\n MeasuredSize,\n useDragDrop,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport {\n toggleOrApplySort,\n asDataSourceRowObject,\n buildColumnMap,\n getIndexFromRowElement,\n isGroupColumn,\n isJsonGroup,\n isValidNumber,\n metadataKeys,\n updateColumn,\n useLayoutEffectSkipFirst,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n FocusEvent,\n KeyboardEvent,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n buildContextMenuDescriptors,\n useHandleTableContextMenu,\n} from \"./context-menu\";\nimport { TableProps } from \"./Table\";\nimport { updateTableConfig } from \"./table-config\";\nimport { useCellEditing } from \"./useCellEditing\";\nimport { useDataSource } from \"./useDataSource\";\nimport { useInitialValue } from \"./useInitialValue\";\nimport { useKeyboardNavigation } from \"./useKeyboardNavigation\";\nimport { useSelection } from \"./useSelection\";\nimport { useTableContextMenu } from \"./useTableContextMenu\";\nimport {\n ColumnActionHide,\n ColumnActionPin,\n isShowColumnSettings,\n isShowTableSettings,\n PersistentColumnAction,\n useTableModel,\n} from \"./useTableModel\";\nimport { useTableScroll } from \"./useTableScroll\";\nimport { useTableViewport } from \"./useTableViewport\";\nimport { useTableAndColumnSettings } from \"./useTableAndColumnSettings\";\nimport { useRowClassNameGenerators } from \"./useRowClassNameGenerators\";\n\nconst stripInternalProperties = (tableConfig: TableConfig): TableConfig => {\n return tableConfig;\n};\n\nexport interface TableHookProps\n extends MeasuredProps,\n Pick<\n TableProps,\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 | \"onFeatureInvocation\"\n | \"onHighlight\"\n | \"onSelect\"\n | \"onSelectionChange\"\n | \"onRowClick\"\n | \"renderBufferSize\"\n | \"scrollingApiRef\"\n > {\n containerRef: RefObject<HTMLDivElement>;\n headerHeight: number;\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 allowDragDrop = false,\n availableColumns,\n config,\n containerRef,\n dataSource,\n disableFocus,\n headerHeight = 25,\n highlightedIndex: highlightedIndexProp,\n id,\n navigationStyle = \"cell\",\n onAvailableColumnsChange,\n onConfigChange,\n onDragStart,\n onDrop,\n onFeatureInvocation,\n onHighlight,\n onRowClick: onRowClickProp,\n onSelect,\n onSelectionChange,\n renderBufferSize = 0,\n rowHeight = 20,\n scrollingApiRef,\n selectionModel,\n size,\n}: TableHookProps) => {\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 rowClassNameGenerator = useRowClassNameGenerators(config);\n\n const useRowDragDrop = allowDragDrop ? useDragDrop : useNullDragDrop;\n\n const menuBuilder = useMemo(\n () => buildContextMenuDescriptors(dataSource),\n [dataSource]\n );\n\n const onDataRowcountChange = useCallback((size: number) => {\n setRowCount(size);\n }, []);\n\n const {\n columns,\n dispatchTableModelAction,\n headings,\n tableAttributes,\n tableConfig,\n } = useTableModel(config, dataSource);\n\n useLayoutEffectSkipFirst(() => {\n dispatchTableModelAction({\n type: \"init\",\n tableConfig: config,\n dataSource,\n });\n }, [config, dataSource, dispatchTableModelAction]);\n\n const applyTableConfigChange = useCallback(\n (config: TableConfig) => {\n dispatchTableModelAction({\n type: \"init\",\n tableConfig: config,\n dataSource,\n });\n onConfigChange?.(stripInternalProperties(config));\n },\n [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 headings,\n rowCount,\n rowHeight,\n size: size,\n });\n\n const initialRange = useInitialValue<VuuRange>({\n from: 0,\n to: viewportMeasurements.rowCount,\n });\n\n const { data, dataRef, getSelectedRows, range, setRange } = useDataSource({\n dataSource,\n // We need to factor this out of Table\n onFeatureInvocation,\n renderBufferSize,\n onSizeChange: onDataRowcountChange,\n onSubscribed,\n range: initialRange,\n });\n\n const { requestScroll, ...scrollProps } = useTableScroll({\n columns,\n getRowAtPosition,\n rowHeight,\n scrollingApiRef,\n setRange,\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 type: \"init\",\n tableConfig,\n dataSource,\n });\n onConfigChange?.(stripInternalProperties(tableConfig));\n },\n [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 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 highlightedIndexRef,\n navigate,\n onFocus: navigationFocus,\n onKeyDown: navigationKeyDown,\n ...containerProps\n } = useKeyboardNavigation({\n columnCount: columns.filter((c) => c.hidden !== true).length,\n containerRef,\n disableFocus,\n highlightedIndex: highlightedIndexProp,\n navigationStyle,\n requestScroll,\n rowCount: dataSource?.size,\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 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 navigationKeyDown(e);\n if (!e.defaultPrevented) {\n editingKeyDown(e);\n }\n if (!e.defaultPrevented) {\n selectionHookKeyDown(e);\n }\n },\n [navigationKeyDown, editingKeyDown, selectionHookKeyDown]\n );\n\n const onMoveColumn = useCallback(\n (columns: ColumnDescriptor[]) => {\n const newTableConfig = {\n ...tableConfig,\n columns,\n };\n\n dispatchTableModelAction({\n type: \"init\",\n tableConfig: newTableConfig,\n dataSource,\n });\n onConfigChange?.(stripInternalProperties(newTableConfig));\n },\n [dataSource, dispatchTableModelAction, onConfigChange, tableConfig]\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 dataSource.applyEdit(row, columnName, value),\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 // 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 return {\n ...containerProps,\n \"aria-rowcount\": dataSource.size,\n rowClassNameGenerator,\n draggableRow,\n onBlur: editingBlur,\n onDoubleClick: editingDoubleClick,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n onMouseDown: rowDragMouseDown,\n columnMap,\n columns,\n data,\n getRowOffset,\n handleContextMenuAction,\n headings,\n highlightedIndex: highlightedIndexRef.current,\n menuBuilder,\n onContextMenu,\n onDataEdited: handleDataEdited,\n onMoveColumn,\n onMoveGroupColumn,\n onRemoveGroupColumn,\n onRowClick: handleRowClick,\n onSortColumn: handleSort,\n onResizeColumn,\n onToggleGroup,\n scrollProps,\n // TODO don't think we need these ...\n tableAttributes,\n tableConfig,\n viewportMeasurements,\n };\n};\n"],"names":["metadataKeys","useState","useRowClassNameGenerators","useDragDrop","useMemo","buildContextMenuDescriptors","useCallback","size","tableConfig","useTableModel","useLayoutEffectSkipFirst","config","buildColumnMap","useTableViewport","useInitialValue","useDataSource","useTableScroll","useEffect","columns","updateColumn","useTableAndColumnSettings","isShowColumnSettings","isShowTableSettings","useHandleTableContextMenu","toggleOrApplySort","useRef","column","isValidNumber","updateTableConfig","isJsonGroup","row","useKeyboardNavigation","useCellEditing","useTableContextMenu","isGroupColumn","asDataSourceRowObject","useSelection","getIndexFromRowElement"],"mappings":"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"}
|