@vuu-ui/vuu-table 0.8.35 → 0.8.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -0
- package/cjs/Row.css.js +6 -0
- package/cjs/Row.css.js.map +1 -0
- package/cjs/Row.js +124 -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.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 +121 -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 +12 -8
- package/types/Row.d.ts +0 -1
- package/types/Table.d.ts +0 -1
- package/types/cell-renderers/checkbox-cell/CheckboxCell.d.ts +0 -1
- package/types/cell-renderers/input-cell/InputCell.d.ts +0 -1
- package/types/cell-renderers/toggle-cell/ToggleCell.d.ts +0 -1
- package/types/column-header-pill/ColumnHeaderPill.d.ts +0 -1
- package/types/column-header-pill/GroupColumnPill.d.ts +0 -1
- package/types/column-header-pill/SortIndicator.d.ts +0 -1
- package/types/column-menu/ColumnMenu.d.ts +0 -1
- package/types/column-resizing/ColumnResizer.d.ts +0 -1
- package/types/header-cell/GroupHeaderCell.d.ts +0 -1
- package/types/header-cell/HeaderCell.d.ts +0 -1
- package/types/table-cell/TableCell.d.ts +0 -1
- package/types/table-cell/TableGroupCell.d.ts +0 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
|
|
6
|
+
const createClassNameGenerator = (ids) => {
|
|
7
|
+
const functions = [];
|
|
8
|
+
ids?.forEach((id) => {
|
|
9
|
+
const fn = vuuUtils.getRowClassNameGenerator(id);
|
|
10
|
+
if (fn) {
|
|
11
|
+
functions.push(fn.fn);
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
return (row, columnMap) => {
|
|
15
|
+
const classNames = [];
|
|
16
|
+
functions?.forEach((fn) => {
|
|
17
|
+
const className = fn(row, columnMap);
|
|
18
|
+
if (className) {
|
|
19
|
+
classNames.push(className);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
return classNames.join(" ");
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
const useRowClassNameGenerators = ({
|
|
26
|
+
rowClassNameGenerators
|
|
27
|
+
}) => {
|
|
28
|
+
return react.useMemo(() => {
|
|
29
|
+
return createClassNameGenerator(rowClassNameGenerators);
|
|
30
|
+
}, [rowClassNameGenerators]);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
exports.useRowClassNameGenerators = useRowClassNameGenerators;
|
|
34
|
+
//# sourceMappingURL=useRowClassNameGenerators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRowClassNameGenerators.js","sources":["../src/useRowClassNameGenerators.ts"],"sourcesContent":["import { TableConfig } from \"@vuu-ui/vuu-table-types\";\nimport {\n getRowClassNameGenerator,\n RowClassNameGenerator,\n} from \"@vuu-ui/vuu-utils\";\nimport { useMemo } from \"react\";\n\nconst createClassNameGenerator = (\n ids?: string[]\n): RowClassNameGenerator | undefined => {\n const functions: RowClassNameGenerator[] = [];\n ids?.forEach((id) => {\n const fn = getRowClassNameGenerator(id);\n if (fn) {\n functions.push(fn.fn);\n }\n });\n return (row, columnMap) => {\n const classNames: string[] = [];\n functions?.forEach((fn) => {\n const className = fn(row, columnMap);\n if (className) {\n classNames.push(className);\n }\n });\n return classNames.join(\" \");\n };\n};\n\nexport const useRowClassNameGenerators = ({\n rowClassNameGenerators,\n}: TableConfig) => {\n return useMemo<RowClassNameGenerator | undefined>(() => {\n return createClassNameGenerator(rowClassNameGenerators);\n }, [rowClassNameGenerators]);\n};\n"],"names":["getRowClassNameGenerator","useMemo"],"mappings":";;;;;AAOA,MAAM,wBAAA,GAA2B,CAC/B,GACsC,KAAA;AACtC,EAAA,MAAM,YAAqC,EAAC,CAAA;AAC5C,EAAK,GAAA,EAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;AACnB,IAAM,MAAA,EAAA,GAAKA,kCAAyB,EAAE,CAAA,CAAA;AACtC,IAAA,IAAI,EAAI,EAAA;AACN,MAAU,SAAA,CAAA,IAAA,CAAK,GAAG,EAAE,CAAA,CAAA;AAAA,KACtB;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA,CAAC,KAAK,SAAc,KAAA;AACzB,IAAA,MAAM,aAAuB,EAAC,CAAA;AAC9B,IAAW,SAAA,EAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;AACzB,MAAM,MAAA,SAAA,GAAY,EAAG,CAAA,GAAA,EAAK,SAAS,CAAA,CAAA;AACnC,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,UAAA,CAAW,KAAK,SAAS,CAAA,CAAA;AAAA,OAC3B;AAAA,KACD,CAAA,CAAA;AACD,IAAO,OAAA,UAAA,CAAW,KAAK,GAAG,CAAA,CAAA;AAAA,GAC5B,CAAA;AACF,CAAA,CAAA;AAEO,MAAM,4BAA4B,CAAC;AAAA,EACxC,sBAAA;AACF,CAAmB,KAAA;AACjB,EAAA,OAAOC,cAA2C,MAAM;AACtD,IAAA,OAAO,yBAAyB,sBAAsB,CAAA,CAAA;AAAA,GACxD,EAAG,CAAC,sBAAsB,CAAC,CAAA,CAAA;AAC7B;;;;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
|
|
6
|
+
const useRowHeight = ({
|
|
7
|
+
rowHeight: rowHeightProp = 0
|
|
8
|
+
}) => {
|
|
9
|
+
const [rowHeight, setRowHeight] = react.useState(rowHeightProp);
|
|
10
|
+
const heightRef = react.useRef(rowHeight);
|
|
11
|
+
const resizeObserver = react.useMemo(() => {
|
|
12
|
+
return new ResizeObserver((entries) => {
|
|
13
|
+
for (const entry of entries) {
|
|
14
|
+
const [{ blockSize: measuredSize }] = entry.borderBoxSize;
|
|
15
|
+
const newHeight = Math.round(measuredSize);
|
|
16
|
+
if (vuuUtils.isValidNumber(newHeight) && heightRef.current !== newHeight) {
|
|
17
|
+
heightRef.current = newHeight;
|
|
18
|
+
setRowHeight(newHeight);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}, []);
|
|
23
|
+
const rowRef = react.useCallback(
|
|
24
|
+
(el) => {
|
|
25
|
+
if (el) {
|
|
26
|
+
if (rowHeightProp === 0) {
|
|
27
|
+
const { height } = el.getBoundingClientRect();
|
|
28
|
+
console.log({ boundingClientHeight: height });
|
|
29
|
+
console.log(`measured rowHeight = ${height} (${rowHeightProp})`);
|
|
30
|
+
resizeObserver.observe(el);
|
|
31
|
+
setRowHeight(height);
|
|
32
|
+
}
|
|
33
|
+
} else {
|
|
34
|
+
resizeObserver.disconnect();
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
[resizeObserver, rowHeightProp]
|
|
38
|
+
);
|
|
39
|
+
return { rowHeight, rowRef };
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
exports.useRowHeight = useRowHeight;
|
|
43
|
+
//# sourceMappingURL=useRowHeight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRowHeight.js","sources":["../src/useRowHeight.ts"],"sourcesContent":["import { isValidNumber } from \"@vuu-ui/vuu-utils\";\nimport { RefCallback, useCallback, useMemo, useRef, useState } from \"react\";\n\ninterface RowHeightHookProps {\n rowHeight?: number;\n}\n\nexport const useRowHeight = ({\n rowHeight: rowHeightProp = 0,\n}: RowHeightHookProps) => {\n const [rowHeight, setRowHeight] = useState(rowHeightProp);\n const heightRef = useRef(rowHeight);\n\n const resizeObserver = useMemo(() => {\n return new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const [{ blockSize: measuredSize }] = entry.borderBoxSize;\n const newHeight = Math.round(measuredSize);\n if (isValidNumber(newHeight) && heightRef.current !== newHeight) {\n heightRef.current = newHeight;\n setRowHeight(newHeight);\n }\n }\n });\n }, []);\n\n const rowRef = useCallback<RefCallback<HTMLDivElement>>(\n (el) => {\n if (el) {\n if (rowHeightProp === 0) {\n const { height } = el.getBoundingClientRect();\n console.log({ boundingClientHeight: height });\n console.log(`measured rowHeight = ${height} (${rowHeightProp})`);\n resizeObserver.observe(el);\n setRowHeight(height);\n }\n } else {\n resizeObserver.disconnect();\n }\n },\n [resizeObserver, rowHeightProp]\n );\n\n return { rowHeight, rowRef };\n};\n"],"names":["useState","useRef","useMemo","isValidNumber","useCallback"],"mappings":";;;;;AAOO,MAAM,eAAe,CAAC;AAAA,EAC3B,WAAW,aAAgB,GAAA,CAAA;AAC7B,CAA0B,KAAA;AACxB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,aAAa,CAAA,CAAA;AACxD,EAAM,MAAA,SAAA,GAAYC,aAAO,SAAS,CAAA,CAAA;AAElC,EAAM,MAAA,cAAA,GAAiBC,cAAQ,MAAM;AACnC,IAAO,OAAA,IAAI,cAAe,CAAA,CAAC,OAAmC,KAAA;AAC5D,MAAA,KAAA,MAAW,SAAS,OAAS,EAAA;AAC3B,QAAA,MAAM,CAAC,EAAE,SAAA,EAAW,YAAa,EAAC,IAAI,KAAM,CAAA,aAAA,CAAA;AAC5C,QAAM,MAAA,SAAA,GAAY,IAAK,CAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AACzC,QAAA,IAAIC,sBAAc,CAAA,SAAS,CAAK,IAAA,SAAA,CAAU,YAAY,SAAW,EAAA;AAC/D,UAAA,SAAA,CAAU,OAAU,GAAA,SAAA,CAAA;AACpB,UAAA,YAAA,CAAa,SAAS,CAAA,CAAA;AAAA,SACxB;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH,EAAG,EAAE,CAAA,CAAA;AAEL,EAAA,MAAM,MAAS,GAAAC,iBAAA;AAAA,IACb,CAAC,EAAO,KAAA;AACN,MAAA,IAAI,EAAI,EAAA;AACN,QAAA,IAAI,kBAAkB,CAAG,EAAA;AACvB,UAAA,MAAM,EAAE,MAAA,EAAW,GAAA,EAAA,CAAG,qBAAsB,EAAA,CAAA;AAC5C,UAAA,OAAA,CAAQ,GAAI,CAAA,EAAE,oBAAsB,EAAA,MAAA,EAAQ,CAAA,CAAA;AAC5C,UAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,qBAAA,EAAwB,MAAM,CAAA,EAAA,EAAK,aAAa,CAAG,CAAA,CAAA,CAAA,CAAA;AAC/D,UAAA,cAAA,CAAe,QAAQ,EAAE,CAAA,CAAA;AACzB,UAAA,YAAA,CAAa,MAAM,CAAA,CAAA;AAAA,SACrB;AAAA,OACK,MAAA;AACL,QAAA,cAAA,CAAe,UAAW,EAAA,CAAA;AAAA,OAC5B;AAAA,KACF;AAAA,IACA,CAAC,gBAAgB,aAAa,CAAA;AAAA,GAChC,CAAA;AAEA,EAAO,OAAA,EAAE,WAAW,MAAO,EAAA,CAAA;AAC7B;;;;"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
|
|
6
|
+
const { IDX } = vuuUtils.metadataKeys;
|
|
7
|
+
const NO_SELECTION = [];
|
|
8
|
+
const defaultSelectionKeys = ["Enter", " "];
|
|
9
|
+
const useSelection = ({
|
|
10
|
+
highlightedIndexRef,
|
|
11
|
+
selectionKeys = defaultSelectionKeys,
|
|
12
|
+
selectionModel,
|
|
13
|
+
onSelect,
|
|
14
|
+
onSelectionChange
|
|
15
|
+
}) => {
|
|
16
|
+
const lastActiveRef = react.useRef(-1);
|
|
17
|
+
const selectedRef = react.useRef(NO_SELECTION);
|
|
18
|
+
const isSelectionEvent = react.useCallback(
|
|
19
|
+
(evt) => selectionKeys.includes(evt.key),
|
|
20
|
+
[selectionKeys]
|
|
21
|
+
);
|
|
22
|
+
const handleRowClick = react.useCallback(
|
|
23
|
+
(evt, row, rangeSelect, keepExistingSelection) => {
|
|
24
|
+
const { [IDX]: idx } = row;
|
|
25
|
+
const { current: active } = lastActiveRef;
|
|
26
|
+
const { current: selected } = selectedRef;
|
|
27
|
+
const selectOperation = vuuUtils.isRowSelected(row) ? vuuUtils.deselectItem : vuuUtils.selectItem;
|
|
28
|
+
const newSelected = selectOperation(
|
|
29
|
+
selectionModel,
|
|
30
|
+
selected,
|
|
31
|
+
idx,
|
|
32
|
+
rangeSelect,
|
|
33
|
+
keepExistingSelection,
|
|
34
|
+
active
|
|
35
|
+
);
|
|
36
|
+
selectedRef.current = newSelected;
|
|
37
|
+
lastActiveRef.current = idx;
|
|
38
|
+
onSelect?.(selectOperation === vuuUtils.selectItem ? row : null);
|
|
39
|
+
onSelectionChange?.(newSelected);
|
|
40
|
+
},
|
|
41
|
+
[onSelect, onSelectionChange, selectionModel]
|
|
42
|
+
);
|
|
43
|
+
const handleKeyDown = react.useCallback(
|
|
44
|
+
(e) => {
|
|
45
|
+
if (isSelectionEvent(e)) {
|
|
46
|
+
const { current: rowIndex } = highlightedIndexRef;
|
|
47
|
+
if (rowIndex !== void 0 && rowIndex !== -1) {
|
|
48
|
+
const rowEl = vuuUtils.getRowElementAtIndex(e.target, rowIndex);
|
|
49
|
+
if (rowEl) {
|
|
50
|
+
vuuUtils.dispatchMouseEvent(rowEl, "click");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
[highlightedIndexRef, isSelectionEvent]
|
|
56
|
+
);
|
|
57
|
+
return {
|
|
58
|
+
onKeyDown: handleKeyDown,
|
|
59
|
+
onRowClick: handleRowClick
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
exports.useSelection = useSelection;
|
|
64
|
+
//# sourceMappingURL=useSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSelection.js","sources":["../src/useSelection.ts"],"sourcesContent":["import {\n TableRowClickHandlerInternal,\n TableRowSelectHandlerInternal,\n TableSelectionModel,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n deselectItem,\n dispatchMouseEvent,\n getRowElementAtIndex,\n isRowSelected,\n metadataKeys,\n selectItem,\n} from \"@vuu-ui/vuu-utils\";\nimport { Selection, SelectionChangeHandler } from \"@vuu-ui/vuu-data-types\";\nimport {\n KeyboardEvent,\n KeyboardEventHandler,\n MutableRefObject,\n useCallback,\n useRef,\n} from \"react\";\n\nconst { IDX } = metadataKeys;\n\nconst NO_SELECTION: Selection = [];\n\nconst defaultSelectionKeys = [\"Enter\", \" \"];\n\nexport interface SelectionHookProps {\n highlightedIndexRef: MutableRefObject<number | undefined>;\n selectionKeys?: string[];\n selectionModel: TableSelectionModel;\n onSelect?: TableRowSelectHandlerInternal;\n onSelectionChange: SelectionChangeHandler;\n}\n\nexport const useSelection = ({\n highlightedIndexRef,\n selectionKeys = defaultSelectionKeys,\n selectionModel,\n onSelect,\n onSelectionChange,\n}: SelectionHookProps) => {\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const lastActiveRef = useRef(-1);\n const selectedRef = useRef<Selection>(NO_SELECTION);\n\n const isSelectionEvent = useCallback(\n (evt: KeyboardEvent<HTMLElement>) => selectionKeys.includes(evt.key),\n [selectionKeys]\n );\n\n const handleRowClick = useCallback<TableRowClickHandlerInternal>(\n (evt, row, rangeSelect, keepExistingSelection) => {\n const { [IDX]: idx } = row;\n const { current: active } = lastActiveRef;\n const { current: selected } = selectedRef;\n\n const selectOperation = isRowSelected(row) ? deselectItem : selectItem;\n\n const newSelected = selectOperation(\n selectionModel,\n selected,\n idx,\n rangeSelect,\n keepExistingSelection,\n active\n );\n\n selectedRef.current = newSelected;\n lastActiveRef.current = idx;\n\n onSelect?.(selectOperation === selectItem ? row : null);\n onSelectionChange?.(newSelected);\n },\n [onSelect, onSelectionChange, selectionModel]\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLElement>>(\n (e) => {\n if (isSelectionEvent(e)) {\n const { current: rowIndex } = highlightedIndexRef;\n if (rowIndex !== undefined && rowIndex !== -1) {\n const rowEl = getRowElementAtIndex(e.target, rowIndex);\n // const rowEl = (e.target as HTMLElement).querySelector(\n // `[aria-rowindex=\"${rowIndex + 1}\"]`\n // ) as HTMLElement;\n if (rowEl) {\n dispatchMouseEvent(rowEl, \"click\");\n }\n }\n }\n },\n [highlightedIndexRef, isSelectionEvent]\n );\n\n return {\n onKeyDown: handleKeyDown,\n onRowClick: handleRowClick,\n };\n};\n"],"names":["metadataKeys","useRef","useCallback","isRowSelected","deselectItem","selectItem","getRowElementAtIndex","dispatchMouseEvent"],"mappings":";;;;;AAsBA,MAAM,EAAE,KAAQ,GAAAA,qBAAA,CAAA;AAEhB,MAAM,eAA0B,EAAC,CAAA;AAEjC,MAAM,oBAAA,GAAuB,CAAC,OAAA,EAAS,GAAG,CAAA,CAAA;AAUnC,MAAM,eAAe,CAAC;AAAA,EAC3B,mBAAA;AAAA,EACA,aAAgB,GAAA,oBAAA;AAAA,EAChB,cAAA;AAAA,EACA,QAAA;AAAA,EACA,iBAAA;AACF,CAA0B,KAAA;AAExB,EAAM,MAAA,aAAA,GAAgBC,aAAO,CAAE,CAAA,CAAA,CAAA;AAC/B,EAAM,MAAA,WAAA,GAAcA,aAAkB,YAAY,CAAA,CAAA;AAElD,EAAA,MAAM,gBAAmB,GAAAC,iBAAA;AAAA,IACvB,CAAC,GAAA,KAAoC,aAAc,CAAA,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,IACnE,CAAC,aAAa,CAAA;AAAA,GAChB,CAAA;AAEA,EAAA,MAAM,cAAiB,GAAAA,iBAAA;AAAA,IACrB,CAAC,GAAA,EAAK,GAAK,EAAA,WAAA,EAAa,qBAA0B,KAAA;AAChD,MAAA,MAAM,EAAE,CAAC,GAAG,GAAG,KAAQ,GAAA,GAAA,CAAA;AACvB,MAAM,MAAA,EAAE,OAAS,EAAA,MAAA,EAAW,GAAA,aAAA,CAAA;AAC5B,MAAM,MAAA,EAAE,OAAS,EAAA,QAAA,EAAa,GAAA,WAAA,CAAA;AAE9B,MAAA,MAAM,eAAkB,GAAAC,sBAAA,CAAc,GAAG,CAAA,GAAIC,qBAAe,GAAAC,mBAAA,CAAA;AAE5D,MAAA,MAAM,WAAc,GAAA,eAAA;AAAA,QAClB,cAAA;AAAA,QACA,QAAA;AAAA,QACA,GAAA;AAAA,QACA,WAAA;AAAA,QACA,qBAAA;AAAA,QACA,MAAA;AAAA,OACF,CAAA;AAEA,MAAA,WAAA,CAAY,OAAU,GAAA,WAAA,CAAA;AACtB,MAAA,aAAA,CAAc,OAAU,GAAA,GAAA,CAAA;AAExB,MAAW,QAAA,GAAA,eAAA,KAAoBA,mBAAa,GAAA,GAAA,GAAM,IAAI,CAAA,CAAA;AACtD,MAAA,iBAAA,GAAoB,WAAW,CAAA,CAAA;AAAA,KACjC;AAAA,IACA,CAAC,QAAU,EAAA,iBAAA,EAAmB,cAAc,CAAA;AAAA,GAC9C,CAAA;AAEA,EAAA,MAAM,aAAgB,GAAAH,iBAAA;AAAA,IACpB,CAAC,CAAM,KAAA;AACL,MAAI,IAAA,gBAAA,CAAiB,CAAC,CAAG,EAAA;AACvB,QAAM,MAAA,EAAE,OAAS,EAAA,QAAA,EAAa,GAAA,mBAAA,CAAA;AAC9B,QAAI,IAAA,QAAA,KAAa,KAAa,CAAA,IAAA,QAAA,KAAa,CAAI,CAAA,EAAA;AAC7C,UAAA,MAAM,KAAQ,GAAAI,6BAAA,CAAqB,CAAE,CAAA,MAAA,EAAQ,QAAQ,CAAA,CAAA;AAIrD,UAAA,IAAI,KAAO,EAAA;AACT,YAAAC,2BAAA,CAAmB,OAAO,OAAO,CAAA,CAAA;AAAA,WACnC;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,IACA,CAAC,qBAAqB,gBAAgB,CAAA;AAAA,GACxC,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,SAAW,EAAA,aAAA;AAAA,IACX,UAAY,EAAA,cAAA;AAAA,GACd,CAAA;AACF;;;;"}
|