@salt-ds/data-grid 0.0.0-snapshot-20230920133053 → 0.0.0-snapshot-20240719143459
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/dist-cjs/BaseCell.js +8 -8
- package/dist-cjs/BaseCell.js.map +1 -1
- package/dist-cjs/CellEditor.js.map +1 -1
- package/dist-cjs/{internal/Cell.css.js → CellFrame.css.js} +1 -1
- package/dist-cjs/CellFrame.css.js.map +1 -0
- package/dist-cjs/{internal/Cell.js → CellFrame.js} +9 -9
- package/dist-cjs/CellFrame.js.map +1 -0
- package/dist-cjs/ColumnDataContext.js +1 -1
- package/dist-cjs/ColumnDataContext.js.map +1 -1
- package/dist-cjs/ColumnDragContext.js +1 -1
- package/dist-cjs/ColumnDragContext.js.map +1 -1
- package/dist-cjs/ColumnGroup.js +1 -1
- package/dist-cjs/ColumnGroup.js.map +1 -1
- package/dist-cjs/ColumnSortContext.js +1 -1
- package/dist-cjs/ColumnSortContext.js.map +1 -1
- package/dist-cjs/CornerTag.js +1 -1
- package/dist-cjs/CornerTag.js.map +1 -1
- package/dist-cjs/CursorContext.js +1 -1
- package/dist-cjs/CursorContext.js.map +1 -1
- package/dist-cjs/DropdownCellEditor.js +5 -21
- package/dist-cjs/DropdownCellEditor.js.map +1 -1
- package/dist-cjs/EditorContext.js +1 -1
- package/dist-cjs/EditorContext.js.map +1 -1
- package/dist-cjs/Grid.css.js +1 -1
- package/dist-cjs/Grid.js +36 -42
- package/dist-cjs/Grid.js.map +1 -1
- package/dist-cjs/GridColumn.js.map +1 -1
- package/dist-cjs/GridContext.js +1 -1
- package/dist-cjs/GridContext.js.map +1 -1
- package/dist-cjs/GroupHeaderCell.js +2 -2
- package/dist-cjs/GroupHeaderCell.js.map +1 -1
- package/dist-cjs/GroupHeaderCellValue.js.map +1 -1
- package/dist-cjs/HeaderCell.css.js +1 -1
- package/dist-cjs/HeaderCell.js +10 -10
- package/dist-cjs/HeaderCell.js.map +1 -1
- package/dist-cjs/HeaderCellValue.js.map +1 -1
- package/dist-cjs/LayoutContext.js.map +1 -1
- package/dist-cjs/NumericColumn.js +6 -23
- package/dist-cjs/NumericColumn.js.map +1 -1
- package/dist-cjs/RowSelectionCheckboxCellValue.js +2 -2
- package/dist-cjs/RowSelectionCheckboxCellValue.js.map +1 -1
- package/dist-cjs/RowSelectionCheckboxColumn.js +3 -3
- package/dist-cjs/RowSelectionCheckboxColumn.js.map +1 -1
- package/dist-cjs/RowSelectionCheckboxHeaderCellValue.js +2 -2
- package/dist-cjs/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
- package/dist-cjs/RowSelectionRadioCellValue.js +1 -1
- package/dist-cjs/RowSelectionRadioCellValue.js.map +1 -1
- package/dist-cjs/RowSelectionRadioColumn.js +2 -2
- package/dist-cjs/RowSelectionRadioColumn.js.map +1 -1
- package/dist-cjs/RowSelectionRadioHeaderCell.js +1 -1
- package/dist-cjs/RowSelectionRadioHeaderCell.js.map +1 -1
- package/dist-cjs/RowValidationStatus.js.map +1 -1
- package/dist-cjs/SelectionContext.js +1 -1
- package/dist-cjs/SelectionContext.js.map +1 -1
- package/dist-cjs/SizingContext.js +1 -1
- package/dist-cjs/SizingContext.js.map +1 -1
- package/dist-cjs/TextCellEditor.js +5 -21
- package/dist-cjs/TextCellEditor.js.map +1 -1
- package/dist-cjs/index.js +5 -0
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/internal/CellMeasure.js +2 -2
- package/dist-cjs/internal/CellMeasure.js.map +1 -1
- package/dist-cjs/internal/ColumnDropTarget.js +2 -2
- package/dist-cjs/internal/ColumnDropTarget.js.map +1 -1
- package/dist-cjs/internal/ColumnGhost.js +3 -3
- package/dist-cjs/internal/ColumnGhost.js.map +1 -1
- package/dist-cjs/internal/Cursor.js +2 -2
- package/dist-cjs/internal/Cursor.js.map +1 -1
- package/dist-cjs/internal/DefaultCellValue.js +2 -2
- package/dist-cjs/internal/DefaultCellValue.js.map +1 -1
- package/dist-cjs/internal/FakeCell.js +3 -3
- package/dist-cjs/internal/FakeCell.js.map +1 -1
- package/dist-cjs/internal/GroupHeaderRow.js +1 -1
- package/dist-cjs/internal/GroupHeaderRow.js.map +1 -1
- package/dist-cjs/internal/HeaderRow.js +2 -2
- package/dist-cjs/internal/HeaderRow.js.map +1 -1
- package/dist-cjs/internal/LeftPart.js +4 -4
- package/dist-cjs/internal/LeftPart.js.map +1 -1
- package/dist-cjs/internal/MiddlePart.js +3 -3
- package/dist-cjs/internal/MiddlePart.js.map +1 -1
- package/dist-cjs/internal/RightPart.js +3 -3
- package/dist-cjs/internal/RightPart.js.map +1 -1
- package/dist-cjs/internal/Scrollable.js +2 -2
- package/dist-cjs/internal/Scrollable.js.map +1 -1
- package/dist-cjs/internal/TableBody.js +6 -6
- package/dist-cjs/internal/TableBody.js.map +1 -1
- package/dist-cjs/internal/TableColGroup.js.map +1 -1
- package/dist-cjs/internal/TableRow.js +9 -9
- package/dist-cjs/internal/TableRow.js.map +1 -1
- package/dist-cjs/internal/TopLeftPart.js +3 -3
- package/dist-cjs/internal/TopLeftPart.js.map +1 -1
- package/dist-cjs/internal/TopPart.js +3 -3
- package/dist-cjs/internal/TopPart.js.map +1 -1
- package/dist-cjs/internal/TopRightPart.js +3 -3
- package/dist-cjs/internal/TopRightPart.js.map +1 -1
- package/dist-cjs/internal/gridHooks.js +23 -23
- package/dist-cjs/internal/gridHooks.js.map +1 -1
- package/dist-cjs/internal/utils.js +5 -5
- package/dist-cjs/internal/utils.js.map +1 -1
- package/dist-es/BaseCell.js +8 -8
- package/dist-es/BaseCell.js.map +1 -1
- package/dist-es/CellEditor.js.map +1 -1
- package/dist-es/{internal/Cell.css.js → CellFrame.css.js} +1 -1
- package/dist-es/CellFrame.css.js.map +1 -0
- package/dist-es/{internal/Cell.js → CellFrame.js} +8 -8
- package/dist-es/CellFrame.js.map +1 -0
- package/dist-es/ColumnDataContext.js +1 -1
- package/dist-es/ColumnDataContext.js.map +1 -1
- package/dist-es/ColumnDragContext.js +1 -1
- package/dist-es/ColumnDragContext.js.map +1 -1
- package/dist-es/ColumnGroup.js +1 -1
- package/dist-es/ColumnGroup.js.map +1 -1
- package/dist-es/ColumnSortContext.js +1 -1
- package/dist-es/ColumnSortContext.js.map +1 -1
- package/dist-es/CornerTag.js +1 -1
- package/dist-es/CornerTag.js.map +1 -1
- package/dist-es/CursorContext.js +1 -1
- package/dist-es/CursorContext.js.map +1 -1
- package/dist-es/DropdownCellEditor.js +5 -21
- package/dist-es/DropdownCellEditor.js.map +1 -1
- package/dist-es/EditorContext.js +1 -1
- package/dist-es/EditorContext.js.map +1 -1
- package/dist-es/Grid.css.js +1 -1
- package/dist-es/Grid.js +36 -42
- package/dist-es/Grid.js.map +1 -1
- package/dist-es/GridColumn.js.map +1 -1
- package/dist-es/GridContext.js +1 -1
- package/dist-es/GridContext.js.map +1 -1
- package/dist-es/GroupHeaderCell.js +2 -2
- package/dist-es/GroupHeaderCell.js.map +1 -1
- package/dist-es/GroupHeaderCellValue.js.map +1 -1
- package/dist-es/HeaderCell.css.js +1 -1
- package/dist-es/HeaderCell.js +10 -10
- package/dist-es/HeaderCell.js.map +1 -1
- package/dist-es/HeaderCellValue.js.map +1 -1
- package/dist-es/LayoutContext.js.map +1 -1
- package/dist-es/NumericColumn.js +6 -23
- package/dist-es/NumericColumn.js.map +1 -1
- package/dist-es/RowSelectionCheckboxCellValue.js +2 -2
- package/dist-es/RowSelectionCheckboxCellValue.js.map +1 -1
- package/dist-es/RowSelectionCheckboxColumn.js +3 -3
- package/dist-es/RowSelectionCheckboxColumn.js.map +1 -1
- package/dist-es/RowSelectionCheckboxHeaderCellValue.js +2 -2
- package/dist-es/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
- package/dist-es/RowSelectionRadioCellValue.js +1 -1
- package/dist-es/RowSelectionRadioCellValue.js.map +1 -1
- package/dist-es/RowSelectionRadioColumn.js +2 -2
- package/dist-es/RowSelectionRadioColumn.js.map +1 -1
- package/dist-es/RowSelectionRadioHeaderCell.js +1 -1
- package/dist-es/RowSelectionRadioHeaderCell.js.map +1 -1
- package/dist-es/RowValidationStatus.js.map +1 -1
- package/dist-es/SelectionContext.js +1 -1
- package/dist-es/SelectionContext.js.map +1 -1
- package/dist-es/SizingContext.js +1 -1
- package/dist-es/SizingContext.js.map +1 -1
- package/dist-es/TextCellEditor.js +5 -21
- package/dist-es/TextCellEditor.js.map +1 -1
- package/dist-es/index.js +2 -0
- package/dist-es/index.js.map +1 -1
- package/dist-es/internal/CellMeasure.js +2 -2
- package/dist-es/internal/CellMeasure.js.map +1 -1
- package/dist-es/internal/ColumnDropTarget.js +2 -2
- package/dist-es/internal/ColumnDropTarget.js.map +1 -1
- package/dist-es/internal/ColumnGhost.js +3 -3
- package/dist-es/internal/ColumnGhost.js.map +1 -1
- package/dist-es/internal/Cursor.js +2 -2
- package/dist-es/internal/Cursor.js.map +1 -1
- package/dist-es/internal/DefaultCellValue.js +2 -2
- package/dist-es/internal/DefaultCellValue.js.map +1 -1
- package/dist-es/internal/FakeCell.js +3 -3
- package/dist-es/internal/FakeCell.js.map +1 -1
- package/dist-es/internal/GroupHeaderRow.js +1 -1
- package/dist-es/internal/GroupHeaderRow.js.map +1 -1
- package/dist-es/internal/HeaderRow.js +2 -2
- package/dist-es/internal/HeaderRow.js.map +1 -1
- package/dist-es/internal/LeftPart.js +4 -4
- package/dist-es/internal/LeftPart.js.map +1 -1
- package/dist-es/internal/MiddlePart.js +3 -3
- package/dist-es/internal/MiddlePart.js.map +1 -1
- package/dist-es/internal/RightPart.js +3 -3
- package/dist-es/internal/RightPart.js.map +1 -1
- package/dist-es/internal/Scrollable.js +2 -2
- package/dist-es/internal/Scrollable.js.map +1 -1
- package/dist-es/internal/TableBody.js +6 -6
- package/dist-es/internal/TableBody.js.map +1 -1
- package/dist-es/internal/TableColGroup.js.map +1 -1
- package/dist-es/internal/TableRow.js +9 -9
- package/dist-es/internal/TableRow.js.map +1 -1
- package/dist-es/internal/TopLeftPart.js +3 -3
- package/dist-es/internal/TopLeftPart.js.map +1 -1
- package/dist-es/internal/TopPart.js +3 -3
- package/dist-es/internal/TopPart.js.map +1 -1
- package/dist-es/internal/TopRightPart.js +3 -3
- package/dist-es/internal/TopRightPart.js.map +1 -1
- package/dist-es/internal/gridHooks.js +23 -23
- package/dist-es/internal/gridHooks.js.map +1 -1
- package/dist-es/internal/utils.js +5 -5
- package/dist-es/internal/utils.js.map +1 -1
- package/dist-types/BaseCell.d.ts +3 -4
- package/dist-types/CellEditor.d.ts +1 -1
- package/dist-types/CellFrame.d.ts +9 -0
- package/dist-types/ColumnDataContext.d.ts +0 -1
- package/dist-types/ColumnDragContext.d.ts +1 -1
- package/dist-types/ColumnGroup.d.ts +4 -4
- package/dist-types/ColumnSortContext.d.ts +5 -5
- package/dist-types/CornerTag.d.ts +1 -2
- package/dist-types/CursorContext.d.ts +0 -1
- package/dist-types/DropdownCellEditor.d.ts +2 -3
- package/dist-types/EditorContext.d.ts +0 -1
- package/dist-types/Grid.d.ts +4 -4
- package/dist-types/GridColumn.d.ts +3 -3
- package/dist-types/GridContext.d.ts +2 -3
- package/dist-types/GroupHeaderCell.d.ts +3 -3
- package/dist-types/GroupHeaderCellValue.d.ts +2 -3
- package/dist-types/HeaderCell.d.ts +5 -6
- package/dist-types/HeaderCellValue.d.ts +2 -3
- package/dist-types/LayoutContext.d.ts +0 -1
- package/dist-types/NumericColumn.d.ts +6 -6
- package/dist-types/RowSelectionCheckboxCellValue.d.ts +2 -3
- package/dist-types/RowSelectionCheckboxColumn.d.ts +2 -3
- package/dist-types/RowSelectionCheckboxHeaderCellValue.d.ts +2 -3
- package/dist-types/RowSelectionRadioCellValue.d.ts +2 -3
- package/dist-types/RowSelectionRadioColumn.d.ts +2 -3
- package/dist-types/RowSelectionRadioHeaderCell.d.ts +2 -3
- package/dist-types/RowValidationStatus.d.ts +2 -3
- package/dist-types/SelectionContext.d.ts +1 -2
- package/dist-types/SizingContext.d.ts +3 -3
- package/dist-types/TextCellEditor.d.ts +2 -3
- package/dist-types/index.d.ts +2 -0
- package/dist-types/internal/CellMeasure.d.ts +1 -2
- package/dist-types/internal/CellStatusIcons.d.ts +3 -4
- package/dist-types/internal/ColumnDropTarget.d.ts +1 -2
- package/dist-types/internal/ColumnGhost.d.ts +3 -4
- package/dist-types/internal/Cursor.d.ts +1 -4
- package/dist-types/internal/DefaultCellValue.d.ts +2 -3
- package/dist-types/internal/FakeCell.d.ts +2 -3
- package/dist-types/internal/FakeGroupCell.d.ts +1 -2
- package/dist-types/internal/FakeHeaderCell.d.ts +1 -2
- package/dist-types/internal/GroupHeaderRow.d.ts +2 -3
- package/dist-types/internal/HeaderRow.d.ts +2 -3
- package/dist-types/internal/LeftPart.d.ts +4 -4
- package/dist-types/internal/MiddlePart.d.ts +4 -4
- package/dist-types/internal/RightPart.d.ts +4 -4
- package/dist-types/internal/Scrollable.d.ts +2 -2
- package/dist-types/internal/TableBody.d.ts +3 -4
- package/dist-types/internal/TableColGroup.d.ts +3 -4
- package/dist-types/internal/TableRow.d.ts +4 -4
- package/dist-types/internal/TopLeftPart.d.ts +2 -3
- package/dist-types/internal/TopPart.d.ts +3 -3
- package/dist-types/internal/TopRightPart.d.ts +2 -3
- package/dist-types/internal/gridHooks.d.ts +13 -13
- package/dist-types/internal/index.d.ts +0 -1
- package/dist-types/internal/utils.d.ts +1 -1
- package/package.json +5 -6
- package/dist-cjs/internal/Cell.css.js.map +0 -1
- package/dist-cjs/internal/Cell.js.map +0 -1
- package/dist-es/internal/Cell.css.js.map +0 -1
- package/dist-es/internal/Cell.js.map +0 -1
- package/dist-types/internal/Cell.d.ts +0 -8
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var core = require('@salt-ds/core');
|
|
5
6
|
var react = require('react');
|
|
6
7
|
var NumberRange = require('../NumberRange.js');
|
|
7
8
|
var utils = require('./utils.js');
|
|
8
|
-
var core = require('@salt-ds/core');
|
|
9
9
|
|
|
10
10
|
function useActiveOnWheel(onWheel) {
|
|
11
11
|
const tableRef = react.useRef(null);
|
|
@@ -280,7 +280,7 @@ function useColumnResize(cols, resizeColumn) {
|
|
|
280
280
|
const x = event.screenX;
|
|
281
281
|
const { startX, columnIndex, initialColumnWidth, minWidth } = columnResizeDataRef.current;
|
|
282
282
|
const shift = x - startX;
|
|
283
|
-
|
|
283
|
+
const width = Math.max(minWidth, initialColumnWidth + shift);
|
|
284
284
|
columnResizeDataRef.current.resizeColumn(columnIndex, Math.round(width));
|
|
285
285
|
}, []);
|
|
286
286
|
return react.useCallback(
|
|
@@ -290,7 +290,7 @@ function useColumnResize(cols, resizeColumn) {
|
|
|
290
290
|
targetElement,
|
|
291
291
|
"data-column-index"
|
|
292
292
|
);
|
|
293
|
-
const columnIndex = parseInt(columnIndexAttribute, 10);
|
|
293
|
+
const columnIndex = Number.parseInt(columnIndexAttribute, 10);
|
|
294
294
|
document.addEventListener("mouseup", onMouseUp);
|
|
295
295
|
document.addEventListener("mousemove", onMouseMove);
|
|
296
296
|
const initialColumnWidth = thElement.getBoundingClientRect().width;
|
|
@@ -313,7 +313,7 @@ function useColumnResize(cols, resizeColumn) {
|
|
|
313
313
|
}
|
|
314
314
|
function useFlatten(map) {
|
|
315
315
|
return react.useMemo(() => {
|
|
316
|
-
const entries = [...map.entries()].filter(([
|
|
316
|
+
const entries = [...map.entries()].filter(([, value]) => !!value);
|
|
317
317
|
entries.sort((a, b) => a[0] - b[0]);
|
|
318
318
|
return entries.map((x) => x[1]);
|
|
319
319
|
}, [map]);
|
|
@@ -408,7 +408,7 @@ function useColumnRegistry(children) {
|
|
|
408
408
|
}, []);
|
|
409
409
|
const onColumnRemoved = react.useCallback(
|
|
410
410
|
(index, columnInfo) => {
|
|
411
|
-
const {
|
|
411
|
+
const { pinned } = columnInfo.props;
|
|
412
412
|
getColMapSet(pinned)(utils.makeMapDeleter(index));
|
|
413
413
|
},
|
|
414
414
|
[]
|
|
@@ -420,7 +420,7 @@ function useColumnRegistry(children) {
|
|
|
420
420
|
}, []);
|
|
421
421
|
const onColumnGroupRemoved = react.useCallback(
|
|
422
422
|
(index, colGroupProps) => {
|
|
423
|
-
const {
|
|
423
|
+
const { pinned } = colGroupProps;
|
|
424
424
|
getGrpMapSet(pinned)(utils.makeMapDeleter(index));
|
|
425
425
|
},
|
|
426
426
|
[]
|
|
@@ -471,13 +471,13 @@ function useColumnRegistry(children) {
|
|
|
471
471
|
}
|
|
472
472
|
function useRowSelection(rowKeyGetter, rowData, defaultSelectedRowIdxs, selectedRowIdxs, rowSelectionMode, onRowSelected) {
|
|
473
473
|
const selectedRowIdxsProp = react.useMemo(() => {
|
|
474
|
-
if (selectedRowIdxs
|
|
474
|
+
if (selectedRowIdxs === void 0) {
|
|
475
475
|
return void 0;
|
|
476
476
|
}
|
|
477
477
|
return new Set(selectedRowIdxs);
|
|
478
478
|
}, [selectedRowIdxs]);
|
|
479
479
|
const defaultSelectedRowIdxsProp = react.useMemo(() => {
|
|
480
|
-
if (defaultSelectedRowIdxs
|
|
480
|
+
if (defaultSelectedRowIdxs === void 0) {
|
|
481
481
|
return /* @__PURE__ */ new Set([]);
|
|
482
482
|
}
|
|
483
483
|
return new Set(defaultSelectedRowIdxs);
|
|
@@ -616,16 +616,13 @@ function useColumnMove(columnMove, rootRef, leftCols, midCols, rightCols, cols,
|
|
|
616
616
|
(columnIndex, x, y) => {
|
|
617
617
|
setDragState({ columnIndex, x, y });
|
|
618
618
|
},
|
|
619
|
-
[
|
|
620
|
-
);
|
|
621
|
-
const columnDrag = react.useCallback(
|
|
622
|
-
(x, y) => {
|
|
623
|
-
setDragState((old) => {
|
|
624
|
-
return { ...old, x, y };
|
|
625
|
-
});
|
|
626
|
-
},
|
|
627
|
-
[setDragState]
|
|
619
|
+
[]
|
|
628
620
|
);
|
|
621
|
+
const columnDrag = react.useCallback((x, y) => {
|
|
622
|
+
setDragState((old) => {
|
|
623
|
+
return { ...old, x, y };
|
|
624
|
+
});
|
|
625
|
+
}, []);
|
|
629
626
|
const columnDrop = react.useCallback(() => {
|
|
630
627
|
var _a, _b, _c, _d;
|
|
631
628
|
const toIndex = (_a = activeTargetRef.current) == null ? void 0 : _a.columnIndex;
|
|
@@ -677,9 +674,12 @@ function useColumnMove(columnMove, rootRef, leftCols, midCols, rightCols, cols,
|
|
|
677
674
|
"data-column-index"
|
|
678
675
|
);
|
|
679
676
|
const rootElement = rootRef.current;
|
|
677
|
+
if (!rootElement) {
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
680
|
document.addEventListener("mouseup", onMouseUp);
|
|
681
681
|
document.addEventListener("mousemove", onMouseMove);
|
|
682
|
-
const columnIndex = parseInt(columnIndexAttribute, 10);
|
|
682
|
+
const columnIndex = Number.parseInt(columnIndexAttribute, 10);
|
|
683
683
|
const columnId = cols[columnIndex].info.props.id;
|
|
684
684
|
const thRect = thElement.getBoundingClientRect();
|
|
685
685
|
const rootRect = rootElement.getBoundingClientRect();
|
|
@@ -708,14 +708,14 @@ function useColumnMove(columnMove, rootRef, leftCols, midCols, rightCols, cols,
|
|
|
708
708
|
setDragState(void 0);
|
|
709
709
|
(_a = moveRef.current) == null ? void 0 : _a.unsubscribe();
|
|
710
710
|
moveRef.current = void 0;
|
|
711
|
-
}, [
|
|
711
|
+
}, []);
|
|
712
712
|
const targets = react.useMemo(() => {
|
|
713
713
|
if (!dragState) {
|
|
714
714
|
return void 0;
|
|
715
715
|
}
|
|
716
|
-
|
|
716
|
+
const ts = [];
|
|
717
717
|
let x = 0;
|
|
718
|
-
leftCols.forEach((c
|
|
718
|
+
leftCols.forEach((c) => {
|
|
719
719
|
ts.push({ columnIndex: c.index, x });
|
|
720
720
|
x += c.info.width;
|
|
721
721
|
});
|
|
@@ -736,7 +736,7 @@ function useColumnMove(columnMove, rootRef, leftCols, midCols, rightCols, cols,
|
|
|
736
736
|
}
|
|
737
737
|
if (rightCols.length > 0) {
|
|
738
738
|
x += w;
|
|
739
|
-
rightCols.forEach((c
|
|
739
|
+
rightCols.forEach((c) => {
|
|
740
740
|
ts.push({ columnIndex: c.index, x });
|
|
741
741
|
x += c.info.width;
|
|
742
742
|
});
|
|
@@ -809,7 +809,7 @@ function useRangeSelection(cellSelectionMode) {
|
|
|
809
809
|
}, []);
|
|
810
810
|
const onMouseUp = react.useCallback((event) => {
|
|
811
811
|
if (!mouseSelectionRef.current) {
|
|
812
|
-
throw new Error(
|
|
812
|
+
throw new Error("useRangeSelection state is not initialized");
|
|
813
813
|
}
|
|
814
814
|
mouseSelectionRef.current.unsubscribe();
|
|
815
815
|
mouseSelectionRef.current = void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridHooks.js","sources":["../src/internal/gridHooks.tsx"],"sourcesContent":["import React, {\n Children,\n FocusEventHandler,\n isValidElement,\n MouseEventHandler,\n ReactNode,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n GridCellSelectionMode,\n GridColumnGroupModel,\n GridColumnModel,\n GridColumnMoveHandler,\n GridRowModel,\n GridRowSelectionMode,\n RowKeyGetter,\n} from \"../Grid\";\nimport { ColumnGroupProps } from \"../ColumnGroup\";\nimport { NumberRange } from \"../NumberRange\";\nimport { GridColumnInfo, GridColumnPin } from \"../GridColumn\";\nimport {\n getAttribute,\n getCellPosition,\n makeMapAdder,\n makeMapDeleter,\n} from \"./utils\";\nimport { GridContext } from \"../GridContext\";\nimport { CellEditorInfo } from \"../CellEditor\";\nimport { useControlled } from \"@salt-ds/core\";\nimport { FocusedPart } from \"../CursorContext\";\n\n// Attaches active onWheel event to a table element\n// Grid needs to prevent default onWheel event handling for situations when a\n// scrollable grid is on a scrollable page. Page should not scroll when the grid\n// is being scrolled, unless reached top or bottom of scrollable grid.\nexport function useActiveOnWheel(onWheel: EventListener) {\n const tableRef = useRef<HTMLTableElement>(null);\n\n useEffect(() => {\n const table = tableRef.current;\n if (table && onWheel) {\n table.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => {\n table.removeEventListener(\"wheel\", onWheel);\n };\n }\n }, [tableRef.current]);\n\n return tableRef;\n}\n\n// Total width of the given columns.\nfunction sumWidth<T>(columns: GridColumnModel<T>[]) {\n return columns.reduce((p, x) => p + x.info.width, 0);\n}\n\n// Returns total width of the given columns wrapped in useMemo.\nexport function useSumWidth<T>(columns: GridColumnModel<T>[]) {\n return useMemo(() => sumWidth(columns), [columns]);\n}\n\n// Memoized sum of the given numbers.\nexport function useSum(source: number[]) {\n return useMemo(() => source.reduce((p, x) => p + x, 0), source);\n}\n\n// Sum width of the given range of columns.\nfunction sumRangeWidth<T>(columns: GridColumnModel<T>[], range: NumberRange) {\n let w = 0;\n range.forEach((i) => {\n w += columns[i].info.width;\n });\n return w;\n}\n\n// Sum width of the given range of columns wrapped in useMemo.\nexport function useSumRangeWidth<T>(\n columns: GridColumnModel<T>[],\n range: NumberRange\n) {\n return useMemo(() => sumRangeWidth(columns, range), [columns, range]);\n}\n\n// Range memoization using Rng.equals comparator.\nfunction useMemoRng(fn: () => NumberRange, deps: any[]) {\n const prevRef = useRef<NumberRange>(NumberRange.empty);\n const range = useMemo(fn, deps);\n if (!NumberRange.equals(prevRef.current, range)) {\n prevRef.current = range;\n }\n return prevRef.current;\n}\n\n// Visible range of columns within the body.\nexport function useBodyVisibleColumnRange<T>(\n midColumns: GridColumnModel<T>[],\n scrollLeft: number,\n clientMidWidth: number\n): NumberRange {\n return useMemoRng(() => {\n if (clientMidWidth === 0 || midColumns.length === 0) {\n return NumberRange.empty;\n }\n let width = scrollLeft;\n let start = 0;\n for (let i = 0; i < midColumns.length; ++i) {\n const colWidth = midColumns[i].info.width;\n if (width > colWidth) {\n width -= colWidth;\n } else {\n start = i;\n width += clientMidWidth;\n break;\n }\n }\n let end = start + 1;\n for (let i = start; i < midColumns.length; ++i) {\n const colWidth = midColumns[i].info.width;\n width -= colWidth;\n end = i + 1;\n if (width <= 0) {\n break;\n }\n }\n if (end > midColumns.length) {\n end = midColumns.length;\n }\n return new NumberRange(start, end);\n }, [midColumns, scrollLeft, clientMidWidth]);\n}\n\n// Client width of the middle (scrollable) part of the grid.\nexport function useClientMidWidth(\n clientWidth: number,\n leftWidth: number,\n rightWidth: number\n) {\n return useMemo(\n () => clientWidth - leftWidth - rightWidth,\n [clientWidth, leftWidth, rightWidth]\n );\n}\n\n// Client height of the middle part of the grid.\nexport function useClientMidHeight(\n clientHeight: number,\n topHeight: number,\n botHeight: number\n) {\n return useMemo(\n () => clientHeight - topHeight - botHeight,\n [clientHeight, topHeight, botHeight]\n );\n}\n\n// Y coordinate of the visible area within the virtual space.\nexport function useBodyVisibleAreaTop<T>(\n rowHeight: number,\n visibleRowRange: NumberRange,\n topHeight: number\n) {\n return useMemo(() => {\n let top = topHeight + visibleRowRange.start * rowHeight;\n if (visibleRowRange.start > 0) {\n top += 1; // First row (row #0) has an extra border\n }\n return top;\n }, [rowHeight, visibleRowRange, topHeight]);\n}\n\n// Visible range of rows.\nexport function useVisibleRowRange(\n scrollTop: number,\n clientMidHeight: number,\n rowHeight: number,\n rowCount: number\n) {\n return useMemoRng(() => {\n if (rowHeight < 1) {\n return NumberRange.empty;\n }\n const firstRowHeight = rowHeight + 1; // First row has an extra 1px\n\n const start =\n scrollTop > firstRowHeight\n ? 1 + Math.floor((scrollTop - firstRowHeight) / rowHeight)\n : 0;\n let endPos = scrollTop + clientMidHeight;\n\n if (start === 0) {\n endPos -= 1;\n }\n const end = Math.min(\n rowCount,\n Math.max(start, Math.ceil(endPos / rowHeight))\n );\n\n // Scroll Top not returning to 0 after pagination. Guard to ensure issues with ScrollTop throw error\n if (start > end) {\n return NumberRange.empty;\n }\n\n return new NumberRange(start, end);\n }, [scrollTop, clientMidHeight, rowHeight, rowCount]);\n}\n\nexport function useColumnRange<T>(\n columns: GridColumnModel<T>[],\n range: NumberRange\n): GridColumnModel<T>[] {\n return useMemo(() => columns.slice(range.start, range.end), [columns, range]);\n}\n\n// Total width of the columns scrolled out to the left of the visible area.\nexport function useLeftScrolledOutWidth<T>(\n midColumns: GridColumnModel<T>[],\n bodyVisibleColumnRange: NumberRange\n) {\n return useMemo(() => {\n let w = 0;\n for (let i = 0; i < bodyVisibleColumnRange.start; ++i) {\n w += midColumns[i].info.width;\n }\n return w;\n }, [midColumns, bodyVisibleColumnRange]);\n}\n\n// Row positions by row keys.\nexport function useRowIdxByKey<T>(rowKeyGetter: RowKeyGetter<T>, rowData: T[]) {\n return useMemo(() => {\n return new Map<string, number>(\n rowData.map((r, i) => [rowKeyGetter(r, i), i])\n );\n }, [rowData, rowKeyGetter]);\n}\n\nexport type SetState<T> = (v: T | ((p: T) => T)) => void;\n\n// Row models for the visible rows.\nexport function useRowModels<T>(\n getKey: RowKeyGetter<T>,\n rowData: T[],\n visibleRowRange: NumberRange\n) {\n return useMemo(() => {\n const rows: GridRowModel<T>[] = [];\n visibleRowRange.forEach((i) => {\n const key = getKey(rowData[i], i);\n rows.push({ data: rowData[i], key, index: i });\n });\n return rows;\n }, [getKey, rowData, visibleRowRange]);\n}\n\n// Creates column group models.\nexport const useColumnGroups = (\n grpPs: ColumnGroupProps[],\n startIdx: number\n): GridColumnGroupModel[] =>\n useMemo(\n () =>\n grpPs.map((data, i) => {\n const childrenIds = Children.toArray(data.children)\n .map((child) => {\n if (!isValidElement(child)) {\n return undefined;\n }\n return child.props.id;\n })\n .filter((x) => x !== undefined) as string[];\n const colSpan = childrenIds.length;\n\n return {\n data,\n index: i + startIdx,\n childrenIds,\n colSpan,\n columnSeparator: \"regular\",\n rowSeparator: \"regular\",\n };\n }),\n [grpPs, startIdx]\n );\n\n// Visible range of column groups.\nexport function useVisibleColumnGroupRange<T>(\n bodyVisColRng: NumberRange,\n midCols: GridColumnModel<T>[],\n midGrpByColId: Map<string, GridColumnGroupModel>,\n leftGrpCount: number\n): NumberRange {\n return useMemoRng(() => {\n if (bodyVisColRng.length === 0) {\n return NumberRange.empty;\n }\n const firstVisibleCol = midCols[bodyVisColRng.start];\n const lastVisibleCol = midCols[bodyVisColRng.end - 1];\n const firstVisibleGroup = midGrpByColId.get(firstVisibleCol.info.props.id);\n const lastVisibleGroup = midGrpByColId.get(lastVisibleCol.info.props.id);\n if (!firstVisibleGroup || !lastVisibleGroup) {\n return NumberRange.empty;\n }\n return new NumberRange(\n firstVisibleGroup.index - leftGrpCount,\n lastVisibleGroup.index + 1 - leftGrpCount\n );\n }, [bodyVisColRng, midCols, midGrpByColId, leftGrpCount]);\n}\n\nexport function last<T>(source: T[]): T {\n return source[source.length - 1];\n}\n\n// Range of columns visible in the header.\nexport function useHeadVisibleColumnRange<T>(\n bodyVisColRng: NumberRange,\n visColGrps: GridColumnGroupModel[],\n midColsById: Map<string, GridColumnModel<T>>,\n leftColCount: number\n) {\n return useMemoRng(() => {\n if (visColGrps.length === 0) {\n return bodyVisColRng;\n }\n const firstVisibleGroup = visColGrps[0];\n const lastVisibleGroup = last(visColGrps);\n const firstColId = firstVisibleGroup.childrenIds[0];\n const lastColId = last(lastVisibleGroup.childrenIds);\n const firstColIdx = midColsById.get(firstColId)?.index;\n const lastColIdx = midColsById.get(lastColId)?.index;\n if (firstColIdx === undefined || lastColIdx === undefined) {\n return NumberRange.empty;\n }\n return new NumberRange(\n firstColIdx - leftColCount,\n lastColIdx + 1 - leftColCount\n );\n }, [bodyVisColRng, visColGrps, midColsById, leftColCount]);\n}\n\n// Creates column models.\nexport function useCols<T>(\n colInfos: GridColumnInfo<T>[],\n startIdx: number,\n groups: GridColumnGroupModel[]\n): GridColumnModel<T>[] {\n return useMemo(() => {\n const edgeColIds = new Set<string>();\n groups.forEach((g) => {\n edgeColIds.add(last(g.childrenIds));\n });\n const columnModels: GridColumnModel<T>[] = colInfos.map((info, i) => ({\n info,\n index: i + startIdx,\n separator: edgeColIds.has(info.props.id) ? \"groupEdge\" : \"regular\",\n }));\n return columnModels;\n }, [colInfos, startIdx, groups]);\n}\n\n// Returns a function that scrolls the grid to the given cell.\nexport function useScrollToCell<T>(\n visRowRng: NumberRange,\n rowHeight: number,\n clientMidHeight: number,\n midCols: GridColumnModel<T>[],\n bodyVisColRng: NumberRange,\n clientMidWidth: number,\n scroll: (left?: number, top?: number, source?: \"user\" | \"table\") => void\n) {\n return useCallback(\n (part: FocusedPart, rowIdx: number, colIdx: number) => {\n if (part !== \"body\") {\n return; // TODO\n }\n let x: number | undefined = undefined;\n let y: number | undefined = undefined;\n if (rowIdx <= visRowRng.start) {\n // First row is 1px wider than other rows (additional top border)\n y = rowIdx === 0 ? 0 : 1 + rowHeight * rowIdx;\n } else if (rowIdx >= visRowRng.end - 1) {\n const extraBorder = rowIdx > 0 ? 1 : 0;\n y = Math.max(\n 0,\n rowHeight * rowIdx + extraBorder - clientMidHeight + rowHeight\n );\n }\n const isMidCol =\n midCols.length > 0 &&\n colIdx >= midCols[0].index &&\n colIdx <= last(midCols).index;\n if (isMidCol) {\n const midColIdx = colIdx - midCols[0].index;\n if (midColIdx <= bodyVisColRng.start) {\n let w = 0;\n for (let i = 0; i < midColIdx; ++i) {\n w += midCols[i].info.width;\n }\n x = w;\n } else if (midColIdx >= bodyVisColRng.end - 1) {\n let w = 0;\n for (let i = 0; i <= midColIdx; ++i) {\n w += midCols[i].info.width;\n }\n x = Math.max(0, w - clientMidWidth);\n }\n }\n if (x !== undefined || y !== undefined) {\n scroll(x, y, \"table\");\n }\n },\n [\n visRowRng,\n rowHeight,\n clientMidHeight,\n midCols,\n bodyVisColRng,\n clientMidWidth,\n scroll,\n ]\n );\n}\n\nconst MIN_COLUMN_WIDTH = 10;\n\n// Returns onMouseDown handler to be attached to column resize handlers.\n// TODO There might be some problems if column is removed while it is being resized\nexport function useColumnResize<T>(\n cols: GridColumnModel<T>[],\n resizeColumn: (columnIndex: number, width: number) => void\n) {\n const columnResizeDataRef = useRef<{\n startX: number;\n startY: number;\n eventsUnsubscription: () => void;\n columnIndex: number;\n initialColumnWidth: number;\n minWidth: number;\n resizeColumn: (columnIndex: number, width: number) => void;\n }>();\n\n const onMouseUp = useCallback(() => {\n columnResizeDataRef.current?.eventsUnsubscription();\n columnResizeDataRef.current = undefined;\n }, []);\n\n const onMouseMove = useCallback((event: MouseEvent) => {\n const x = event.screenX;\n const { startX, columnIndex, initialColumnWidth, minWidth } =\n columnResizeDataRef.current!;\n const shift = x - startX;\n let width = Math.max(minWidth, initialColumnWidth + shift);\n columnResizeDataRef.current!.resizeColumn(columnIndex, Math.round(width));\n }, []);\n\n return useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n const targetElement = event.target as HTMLElement;\n const [columnIndexAttribute, thElement] = getAttribute(\n targetElement,\n \"data-column-index\"\n );\n\n const columnIndex = parseInt(columnIndexAttribute, 10);\n\n document.addEventListener(\"mouseup\", onMouseUp);\n document.addEventListener(\"mousemove\", onMouseMove);\n\n const initialColumnWidth = thElement.getBoundingClientRect().width;\n\n columnResizeDataRef.current = {\n startX: event.screenX,\n startY: event.screenY,\n eventsUnsubscription: () => {\n document.removeEventListener(\"mouseup\", onMouseUp);\n document.removeEventListener(\"mousemove\", onMouseMove);\n },\n columnIndex,\n initialColumnWidth,\n resizeColumn,\n minWidth: cols[columnIndex].info.props.minWidth || MIN_COLUMN_WIDTH,\n };\n\n event.preventDefault();\n },\n [resizeColumn]\n );\n}\n\n// Map values to array.\nexport function useFlatten<T>(map: Map<number, T>): T[] {\n return useMemo(() => {\n const entries = [...map.entries()].filter(([index, value]) => !!value);\n entries.sort((a, b) => a[0] - b[0]);\n return entries.map((x) => x[1]);\n }, [map]);\n}\n\nfunction useColMap<T>() {\n return useState<Map<number, GridColumnInfo<T>>>(new Map());\n}\n\nfunction useGrpMap() {\n return useState<Map<number, ColumnGroupProps>>(new Map());\n}\n\n// Instances of TableColumn and TableColumnGroup register/unregister themselves\n// using onColumnAdded, onColumnRemoved, onColumnGroupAdded, onColumnGroupRemoved\n// taken from context\n// The order of columns/groups is based on the order of \"children\" (Grid.props children)\nexport function useColumnRegistry<T>(children: ReactNode) {\n const [leftColMap, setLeftColMap] = useColMap<T>();\n const [rightColMap, setRightColMap] = useColMap<T>();\n const [midColMap, setMidColMap] = useColMap<T>();\n\n const [leftGrpMap, setLeftGrpMap] = useGrpMap();\n const [rightGrpMap, setRightGrpMap] = useGrpMap();\n const [midGrpMap, setMidGrpMap] = useGrpMap();\n\n const [editorMap, setEditorMap] = useState<Map<string, CellEditorInfo<T>>>(\n new Map()\n );\n\n const leftColInfos = useFlatten(leftColMap);\n const rightColInfos = useFlatten(rightColMap);\n const midColInfos = useFlatten(midColMap);\n\n const leftGrpPs = useFlatten(leftGrpMap);\n const rightGrpPs = useFlatten(rightGrpMap);\n const midGrpPs = useFlatten(midGrpMap);\n\n const leftGroups = useColumnGroups(leftGrpPs, 0);\n const midGroups = useColumnGroups(midGrpPs, leftGroups.length);\n const rightGroups = useColumnGroups(\n rightGrpPs,\n leftGroups.length + midGroups.length\n );\n if (leftGroups.length > 0) {\n last(leftGroups).columnSeparator = \"pinned\";\n }\n if (rightGroups.length > 0 && midGroups.length > 0) {\n last(midGroups).columnSeparator = \"pinned\";\n }\n\n const leftCols: GridColumnModel<T>[] = useCols(leftColInfos, 0, leftGroups);\n const midCols: GridColumnModel<T>[] = useCols(\n midColInfos,\n leftCols.length,\n midGroups\n );\n const rightCols: GridColumnModel<T>[] = useCols(\n rightColInfos,\n leftCols.length + midCols.length,\n rightGroups\n );\n if (leftCols.length > 0) {\n last(leftCols).separator = \"pinned\";\n }\n if (rightCols.length > 0 && midCols.length > 0) {\n last(midCols).separator = \"pinned\";\n }\n\n const chPosById = useRef<Map<string, number>>(new Map());\n\n const indexChildren = () => {\n const m = new Map<string, number>();\n let i = 0;\n const indexChildrenRec = (c: ReactNode) => {\n if (!c) {\n return;\n }\n Children.forEach(c, (x) => {\n if (isValidElement(x) && x.props.id !== undefined) {\n m.set(x.props.id, i);\n i++;\n indexChildrenRec(x.props.children);\n }\n });\n };\n indexChildrenRec(children);\n return m;\n };\n chPosById.current = indexChildren();\n\n const getChildIndex = useCallback((id: string): number => {\n const idx = chPosById.current.get(id);\n if (idx === undefined) {\n console.log(`Unknown child id \"${id}\"`);\n console.log(\n `Known ids: ${Array.from(chPosById.current.keys())\n .map((x) => `\"${x}\"`)\n .join(\", \")}`\n );\n throw new Error(`Unknown child id: \"${id}\"`);\n }\n return idx;\n }, []);\n\n const getColMapSet = (pinned?: GridColumnPin) =>\n pinned === \"left\"\n ? setLeftColMap\n : pinned === \"right\"\n ? setRightColMap\n : setMidColMap;\n\n const onColumnAdded = useCallback((columnInfo: GridColumnInfo<T>) => {\n // console.log(\n // `Column added: \"${columnInfo.props.id}\"; pinned: ${columnInfo.props.pinned}`\n // );\n const { id, pinned } = columnInfo.props;\n const index = getChildIndex(id);\n getColMapSet(pinned)(makeMapAdder(index, columnInfo));\n }, []);\n\n const onColumnRemoved = useCallback(\n (index: number, columnInfo: GridColumnInfo<T>) => {\n const { id, pinned } = columnInfo.props;\n getColMapSet(pinned)(makeMapDeleter(index));\n // console.log(`Column removed: \"${columnInfo.props.id}\"`);\n },\n []\n );\n\n const getGrpMapSet = (pinned?: GridColumnPin) =>\n pinned === \"left\"\n ? setLeftGrpMap\n : pinned === \"right\"\n ? setRightGrpMap\n : setMidGrpMap;\n\n const onColumnGroupAdded = useCallback((colGroupProps: ColumnGroupProps) => {\n const { id, pinned } = colGroupProps;\n getGrpMapSet(pinned)(makeMapAdder(getChildIndex(id), colGroupProps));\n // console.log(`Group added: \"${colGroupProps.name}\"`);\n }, []);\n\n const onColumnGroupRemoved = useCallback(\n (index: number, colGroupProps: ColumnGroupProps) => {\n const { id, pinned } = colGroupProps;\n getGrpMapSet(pinned)(makeMapDeleter(index));\n // console.log(`Group removed: \"${colGroupProps.name}\"`);\n },\n []\n );\n\n const onEditorAdded = useCallback((info: CellEditorInfo<T>) => {\n const { columnId } = info;\n setEditorMap(makeMapAdder(columnId, info));\n // console.log(`Editor added for column ${columnId}`);\n }, []);\n\n const onEditorRemoved = useCallback((info: CellEditorInfo<T>) => {\n const { columnId } = info;\n setEditorMap(makeMapDeleter(columnId));\n // console.log(`Editor removed for column ${columnId}`);\n }, []);\n\n const getEditor = useCallback(\n (columnId: string) => editorMap.get(columnId),\n [editorMap]\n );\n\n const contextValue: GridContext<T> = useMemo(\n () => ({\n getChildIndex,\n onColumnAdded,\n onColumnRemoved,\n onColumnGroupAdded,\n onColumnGroupRemoved,\n onEditorAdded,\n onEditorRemoved,\n getEditor,\n }),\n [\n getChildIndex,\n onColumnAdded,\n onColumnRemoved,\n onColumnGroupAdded,\n onColumnGroupRemoved,\n onEditorAdded,\n onEditorRemoved,\n getEditor,\n ]\n );\n\n return {\n leftCols,\n midCols,\n rightCols,\n leftGroups,\n midGroups,\n rightGroups,\n contextValue,\n };\n}\n\nexport type SelectRowsOptions = {\n rowIndex: number;\n isRange?: boolean;\n // Update selection incrementally based on previous state.\n // If rowIndex is selected then unselect it, otherwise select it.\n // This is what happens when the user clicks a row selection checkbox.\n // Shift + Space is another case when this behaviour is used.\n incremental?: boolean;\n // Unusual behaviour, applied on space keypress on a non-checkbox cell\n // The row is toggled, other rows unselected.\n unselectOtherRows?: boolean;\n};\n\n// Returns functions related to row selection.\n// TODO test use case when selection mode changes\nexport function useRowSelection<T>(\n rowKeyGetter: RowKeyGetter<T>,\n rowData: T[],\n defaultSelectedRowIdxs?: number[],\n selectedRowIdxs?: number[],\n rowSelectionMode?: GridRowSelectionMode,\n onRowSelected?: (selectedRowIdxs: number[]) => void\n) {\n const selectedRowIdxsProp = useMemo(() => {\n if (selectedRowIdxs == undefined) {\n return undefined;\n }\n return new Set(selectedRowIdxs);\n }, [selectedRowIdxs]);\n\n const defaultSelectedRowIdxsProp = useMemo(() => {\n if (defaultSelectedRowIdxs == undefined) {\n return new Set([]);\n }\n return new Set(defaultSelectedRowIdxs);\n }, [defaultSelectedRowIdxs]);\n\n const [selRowIdxs, setSelRowIdxs] = useControlled({\n controlled: selectedRowIdxsProp,\n default: defaultSelectedRowIdxsProp,\n name: \"useRowSelection\",\n state: \"selRowIdxs\",\n });\n\n const [lastSelRowIdx, setLastSelRowIdx] = useState<number | undefined>(\n undefined\n );\n\n useEffect(() => {\n if (\n (rowSelectionMode === \"none\" && selRowIdxs.size > 0) ||\n (rowSelectionMode === \"single\" && selRowIdxs.size > 1)\n ) {\n setSelRowIdxs(new Set());\n }\n }, [rowSelectionMode, selRowIdxs, setSelRowIdxs]);\n\n const selectRows = useCallback(\n ({\n rowIndex,\n isRange = false,\n incremental = false,\n unselectOtherRows = false,\n }: SelectRowsOptions) => {\n const idxFrom =\n rowSelectionMode === \"multi\" && lastSelRowIdx !== undefined && isRange\n ? lastSelRowIdx\n : undefined;\n\n let nextSelRowIdxs: Set<number> | undefined = undefined;\n let nextLastSelRowIdx: number | undefined = undefined;\n\n if (idxFrom === undefined) {\n if (unselectOtherRows) {\n if (incremental && selRowIdxs.has(rowIndex)) {\n nextSelRowIdxs = new Set<number>([]);\n nextLastSelRowIdx = undefined;\n } else {\n nextSelRowIdxs = new Set<number>([rowIndex]);\n nextLastSelRowIdx = rowIndex;\n }\n } else {\n if (incremental && rowSelectionMode === \"multi\") {\n nextSelRowIdxs = new Set<number>(selRowIdxs);\n if (nextSelRowIdxs.has(rowIndex)) {\n nextSelRowIdxs.delete(rowIndex);\n nextLastSelRowIdx = undefined;\n } else {\n nextSelRowIdxs.add(rowIndex);\n nextLastSelRowIdx = rowIndex;\n }\n } else {\n nextSelRowIdxs = new Set([rowIndex]);\n nextLastSelRowIdx = rowIndex;\n }\n }\n } else {\n const s = incremental ? new Set<number>(selRowIdxs) : new Set<number>();\n const idxs = [rowIndex, idxFrom];\n idxs.sort((a, b) => a - b);\n const rowIdxs: number[] = [];\n for (let i = idxs[0]; i <= idxs[1]; ++i) {\n rowIdxs.push(i);\n }\n if (selRowIdxs.has(rowIndex)) {\n rowIdxs.forEach((k) => s.delete(k));\n } else {\n rowIdxs.forEach((k) => s.add(k));\n }\n nextSelRowIdxs = s;\n nextLastSelRowIdx = rowIndex;\n }\n\n setSelRowIdxs(nextSelRowIdxs);\n setLastSelRowIdx(nextLastSelRowIdx);\n if (onRowSelected) {\n onRowSelected(Array.from(nextSelRowIdxs.keys()));\n }\n },\n [\n selRowIdxs,\n lastSelRowIdx,\n setSelRowIdxs,\n setLastSelRowIdx,\n rowData,\n rowKeyGetter,\n onRowSelected,\n ]\n );\n\n const isAllSelected = selRowIdxs.size === rowData.length;\n const isAnySelected = selRowIdxs.size > 0;\n\n const selectAll = useCallback(() => {\n const allRowIdxs = [...new Array(rowData.length).keys()].map((_, i) => i);\n setSelRowIdxs(new Set(allRowIdxs));\n if (onRowSelected) {\n onRowSelected(allRowIdxs);\n }\n }, [rowData, setSelRowIdxs]);\n\n const unselectAll = useCallback(() => {\n setSelRowIdxs(new Set());\n if (onRowSelected) {\n onRowSelected([]);\n }\n }, [setSelRowIdxs]);\n\n const onMouseDown = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (rowSelectionMode === \"none\") {\n return;\n }\n const target = event.target as HTMLElement;\n try {\n const [rowIndex] = getCellPosition(target);\n selectRows({\n rowIndex,\n isRange: event.shiftKey,\n incremental: event.metaKey || event.ctrlKey,\n });\n } catch (e) {}\n },\n [selectRows, rowSelectionMode]\n );\n\n return {\n onMouseDown,\n selRowIdxs,\n isAllSelected,\n isAnySelected,\n selectRows,\n selectAll,\n unselectAll,\n };\n}\n\nexport interface ColumnDragState {\n columnIndex: number;\n x: number;\n y: number;\n}\n\nconst COLUMN_DRAG_TOLERANCE = 10;\n\nexport interface Target {\n columnIndex: number;\n x: number;\n}\n\n// Returns onMouseDown handler to be attached to column headers (or any element\n// working as a drag-and-drop handle for moving columns)\n// Also returns dragState and active target (the drop target nearest to current\n// mouse positions.\nexport function useColumnMove<T = any>(\n columnMove: boolean | undefined,\n rootRef: RefObject<HTMLDivElement>,\n leftCols: GridColumnModel<T>[],\n midCols: GridColumnModel<T>[],\n rightCols: GridColumnModel<T>[],\n cols: GridColumnModel<T>[],\n scrollLeft: number,\n clientMidWidth: number,\n onColumnMove: GridColumnMoveHandler\n) {\n const moveRef = useRef<{\n unsubscribe: () => void;\n startScreenX: number;\n startScreenY: number;\n startHeaderX: number;\n startHeaderY: number;\n\n columnIndex: number;\n columnId: string;\n dragTriggered: boolean;\n onColumnMove: GridColumnMoveHandler;\n }>();\n\n const activeTargetRef = useRef<Target | undefined>(undefined);\n\n const [dragState, setDragState] = useState<ColumnDragState | undefined>(\n undefined\n );\n\n const columnDragStart = useCallback(\n (columnIndex: number, x: number, y: number) => {\n setDragState({ columnIndex, x, y });\n },\n [setDragState]\n );\n\n const columnDrag = useCallback(\n (x: number, y: number) => {\n setDragState((old) => {\n return { ...old!, x, y };\n });\n },\n [setDragState]\n );\n\n const columnDrop = useCallback(() => {\n const toIndex = activeTargetRef.current?.columnIndex;\n const fromIndex = moveRef.current?.columnIndex;\n const columnId = moveRef.current?.columnId;\n const handler = moveRef.current?.onColumnMove;\n if (\n toIndex !== undefined &&\n fromIndex !== undefined &&\n handler !== undefined &&\n columnId !== undefined\n ) {\n handler(columnId, fromIndex, toIndex);\n }\n setDragState(undefined);\n }, [setDragState]);\n\n const onMouseUp = useCallback(() => {\n if (moveRef.current?.dragTriggered) {\n columnDrop();\n }\n moveRef.current?.unsubscribe();\n moveRef.current = undefined;\n }, [columnDrop]);\n\n const onMouseMove = useCallback(\n (event: MouseEvent) => {\n const {\n columnIndex,\n startHeaderX,\n startHeaderY,\n startScreenX,\n startScreenY,\n dragTriggered,\n } = moveRef.current!;\n\n const shiftX = event.screenX - startScreenX;\n const shiftY = event.screenY - startScreenY;\n const x = startHeaderX + shiftX;\n const y = startHeaderY + shiftY;\n\n if (!dragTriggered) {\n if (\n Math.sqrt(shiftX * shiftX + shiftY * shiftY) > COLUMN_DRAG_TOLERANCE\n ) {\n moveRef.current!.dragTriggered = true;\n columnDragStart(columnIndex, x, y);\n }\n } else {\n columnDrag(x, y);\n }\n },\n [columnDrag]\n );\n\n const onColumnMoveHandleMouseDown: MouseEventHandler<HTMLDivElement> =\n useCallback(\n (event) => {\n const [columnIndexAttribute, thElement] = getAttribute(\n event.target as HTMLElement,\n \"data-column-index\"\n );\n const rootElement = rootRef.current!;\n\n document.addEventListener(\"mouseup\", onMouseUp);\n document.addEventListener(\"mousemove\", onMouseMove);\n\n const columnIndex = parseInt(columnIndexAttribute, 10);\n const columnId = cols[columnIndex].info.props.id;\n\n const thRect = thElement.getBoundingClientRect();\n const rootRect = rootElement!.getBoundingClientRect();\n\n const x = thRect.x - rootRect.x;\n const y = thRect.y - rootRect.y;\n\n moveRef.current = {\n unsubscribe: () => {\n document.removeEventListener(\"mouseup\", onMouseUp);\n document.removeEventListener(\"mousemove\", onMouseMove);\n },\n startScreenX: event.screenX,\n startScreenY: event.screenY,\n startHeaderX: x,\n startHeaderY: y,\n columnIndex,\n columnId,\n dragTriggered: false,\n onColumnMove,\n };\n\n event.preventDefault();\n },\n [columnDragStart, cols]\n );\n\n const onColumnMoveCancel = useCallback(() => {\n setDragState(undefined);\n moveRef.current?.unsubscribe();\n moveRef.current = undefined;\n }, [setDragState]);\n\n const targets = useMemo(() => {\n if (!dragState) {\n return undefined;\n }\n let ts: Target[] = [];\n let x = 0;\n leftCols.forEach((c, i) => {\n ts.push({ columnIndex: c.index, x });\n x += c.info.width;\n });\n let w = scrollLeft;\n let i = 0;\n while (w > 0 && i < midCols.length) {\n w -= midCols[i].info.width;\n i++;\n }\n x -= w;\n w += clientMidWidth;\n while (w > 0 && i < midCols.length) {\n const c = midCols[i];\n ts.push({ columnIndex: c.index, x });\n x += c.info.width;\n w -= c.info.width;\n i++;\n }\n if (rightCols.length > 0) {\n x += w;\n rightCols.forEach((c, i) => {\n ts.push({ columnIndex: c.index, x });\n x += c.info.width;\n });\n ts.push({ columnIndex: last(rightCols).index + 1, x });\n } else {\n ts.push({ columnIndex: last(midCols).index + 1, x });\n }\n return ts;\n }, [dragState, leftCols, midCols, rightCols, scrollLeft, clientMidWidth]);\n\n const activeTargetIdx = useMemo(() => {\n const x = dragState?.x;\n if (x === undefined || targets === undefined || targets.length < 1) {\n return undefined;\n }\n let i = 0;\n while (i < targets.length && targets[i].x < x) {\n i++;\n }\n if (i === 0) {\n return 0;\n }\n if (i >= targets.length) {\n return targets.length - 1;\n }\n return targets[i].x - x < x - targets[i - 1].x ? i : i - 1;\n }, [targets, dragState?.x]);\n\n const activeTarget =\n activeTargetIdx === undefined ? undefined : targets![activeTargetIdx];\n\n activeTargetRef.current = activeTarget;\n\n return {\n onColumnMoveHandleMouseDown,\n dragState,\n activeTarget,\n onColumnMoveCancel,\n };\n}\n\nexport interface CellPosition {\n rowIdx: number;\n colIdx: number;\n}\n\nexport interface CellRange {\n start: CellPosition;\n end: CellPosition;\n}\n\nexport function cellPositionEquals(a: CellPosition, b: CellPosition) {\n return a.rowIdx === b.rowIdx && a.colIdx === b.colIdx;\n}\n\nexport function cellRangeEquals(\n a: CellRange | undefined,\n b: CellRange | undefined\n) {\n if (!a) {\n return !b;\n }\n return (\n !!b &&\n cellPositionEquals(a.start, b.start) &&\n cellPositionEquals(a.end, b.end)\n );\n}\n\n// TODO test the use case when cellSelectionMode changes during dnd.\n// Cell range selection. This is experimental.\nexport function useRangeSelection(cellSelectionMode?: GridCellSelectionMode) {\n const mouseSelectionRef = useRef<{\n unsubscribe: () => void;\n start: CellPosition;\n }>();\n\n const keyboardSelectionRef = useRef<{\n start: CellPosition;\n }>();\n\n if (cellSelectionMode !== \"range\") {\n if (mouseSelectionRef.current) {\n mouseSelectionRef.current.unsubscribe();\n mouseSelectionRef.current = undefined;\n }\n if (keyboardSelectionRef.current) {\n keyboardSelectionRef.current = undefined;\n }\n }\n\n const [selectedCellRange, setSelectedCellRange] = useState<\n CellRange | undefined\n >(undefined);\n\n const onMouseMove = useCallback((event: MouseEvent) => {\n const { clientX, clientY } = event;\n const element = document.elementFromPoint(clientX, clientY) as HTMLElement;\n try {\n const [rowIdx, colIdx] = getCellPosition(element);\n\n setSelectedCellRange((old) => {\n const { start } = mouseSelectionRef.current!;\n const p: CellRange = { start, end: { rowIdx, colIdx } };\n return cellRangeEquals(old, p) ? old : p;\n });\n } catch (exc) {}\n }, []);\n\n const onMouseUp = useCallback((event: MouseEvent) => {\n if (!mouseSelectionRef.current) {\n throw new Error(`useRangeSelection state is not initialized`);\n }\n mouseSelectionRef.current.unsubscribe();\n mouseSelectionRef.current = undefined;\n }, []);\n\n const onCellMouseDown = useCallback(\n (event: React.MouseEvent) => {\n if (cellSelectionMode !== \"range\") {\n return;\n }\n const target = event.target as HTMLElement;\n try {\n const [rowIdx, colIdx] = getCellPosition(target);\n document.addEventListener(\"mouseup\", onMouseUp);\n document.addEventListener(\"mousemove\", onMouseMove);\n const pos: CellPosition = { rowIdx, colIdx };\n mouseSelectionRef.current = {\n start: pos,\n unsubscribe: () => {\n document.removeEventListener(\"mouseup\", onMouseUp);\n document.removeEventListener(\"mousemove\", onMouseMove);\n },\n };\n setSelectedCellRange({ start: pos, end: pos });\n } catch (exc) {}\n },\n [cellSelectionMode]\n );\n\n const onKeyboardRangeSelectionStart = useCallback((pos: CellPosition) => {\n keyboardSelectionRef.current = {\n start: pos,\n };\n }, []);\n\n const onKeyboardRangeSelectionEnd = useCallback(() => {\n keyboardSelectionRef.current = undefined;\n }, []);\n\n const onCursorMove = useCallback((pos: CellPosition) => {\n if (!keyboardSelectionRef.current) {\n return;\n }\n setSelectedCellRange((old) => {\n if (!keyboardSelectionRef.current) {\n return old;\n }\n const { start } = keyboardSelectionRef.current;\n const p: CellRange = { start, end: pos };\n return cellRangeEquals(old, p) ? old : p;\n });\n }, []);\n\n const selectRange = useCallback((range: CellRange) => {\n if (cellSelectionMode !== \"range\") {\n return;\n }\n setSelectedCellRange(range);\n }, []);\n\n return {\n selectedCellRange,\n onCellMouseDown,\n onKeyboardRangeSelectionStart,\n onKeyboardRangeSelectionEnd,\n onCursorMove,\n selectRange,\n };\n}\n\nexport function useFocusableContent<T extends HTMLElement>() {\n const ref = useRef<T>(null);\n const [isFocusableContent, setFocusableContent] = useState<boolean>(false);\n\n const onFocus: FocusEventHandler<T> = (event) => {\n if (event.target === ref.current) {\n const nestedInteractive = ref.current.querySelector(`[tabindex=\"0\"]`);\n if (nestedInteractive) {\n (nestedInteractive as HTMLElement).focus();\n setFocusableContent(true);\n }\n }\n };\n\n return { ref, isFocusableContent, onFocus };\n}\n"],"names":["useRef","useEffect","useMemo","NumberRange","Children","isValidElement","useCallback","getAttribute","useState","makeMapAdder","makeMapDeleter","useControlled","getCellPosition","i"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gridHooks.js","sources":["../src/internal/gridHooks.tsx"],"sourcesContent":["import { useControlled } from \"@salt-ds/core\";\nimport {\n Children,\n type FocusEventHandler,\n type MouseEventHandler,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type RefObject,\n isValidElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { CellEditorInfo } from \"../CellEditor\";\nimport type { ColumnGroupProps } from \"../ColumnGroup\";\nimport type { FocusedPart } from \"../CursorContext\";\nimport type {\n GridCellSelectionMode,\n GridColumnGroupModel,\n GridColumnModel,\n GridColumnMoveHandler,\n GridRowModel,\n GridRowSelectionMode,\n RowKeyGetter,\n} from \"../Grid\";\nimport type { GridColumnInfo, GridColumnPin } from \"../GridColumn\";\nimport type { GridContext } from \"../GridContext\";\nimport { NumberRange } from \"../NumberRange\";\nimport {\n getAttribute,\n getCellPosition,\n makeMapAdder,\n makeMapDeleter,\n} from \"./utils\";\n\n// Attaches active onWheel event to a table element\n// Grid needs to prevent default onWheel event handling for situations when a\n// scrollable grid is on a scrollable page. Page should not scroll when the grid\n// is being scrolled, unless reached top or bottom of scrollable grid.\nexport function useActiveOnWheel(onWheel: EventListener) {\n const tableRef = useRef<HTMLTableElement>(null);\n\n useEffect(() => {\n const table = tableRef.current;\n if (table && onWheel) {\n table.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => {\n table.removeEventListener(\"wheel\", onWheel);\n };\n }\n }, [tableRef.current]);\n\n return tableRef;\n}\n\n// Total width of the given columns.\nfunction sumWidth<T>(columns: GridColumnModel<T>[]) {\n return columns.reduce((p, x) => p + x.info.width, 0);\n}\n\n// Returns total width of the given columns wrapped in useMemo.\nexport function useSumWidth<T>(columns: GridColumnModel<T>[]) {\n return useMemo(() => sumWidth(columns), [columns]);\n}\n\n// Memoized sum of the given numbers.\nexport function useSum(source: number[]) {\n return useMemo(() => source.reduce((p, x) => p + x, 0), source);\n}\n\n// Sum width of the given range of columns.\nfunction sumRangeWidth<T>(columns: GridColumnModel<T>[], range: NumberRange) {\n let w = 0;\n range.forEach((i) => {\n w += columns[i].info.width;\n });\n return w;\n}\n\n// Sum width of the given range of columns wrapped in useMemo.\nexport function useSumRangeWidth<T>(\n columns: GridColumnModel<T>[],\n range: NumberRange,\n) {\n return useMemo(() => sumRangeWidth(columns, range), [columns, range]);\n}\n\n// Range memoization using Rng.equals comparator.\nfunction useMemoRng(fn: () => NumberRange, deps: unknown[]) {\n const prevRef = useRef<NumberRange>(NumberRange.empty);\n const range = useMemo(fn, deps);\n if (!NumberRange.equals(prevRef.current, range)) {\n prevRef.current = range;\n }\n return prevRef.current;\n}\n\n// Visible range of columns within the body.\nexport function useBodyVisibleColumnRange<T>(\n midColumns: GridColumnModel<T>[],\n scrollLeft: number,\n clientMidWidth: number,\n): NumberRange {\n return useMemoRng(() => {\n if (clientMidWidth === 0 || midColumns.length === 0) {\n return NumberRange.empty;\n }\n let width = scrollLeft;\n let start = 0;\n for (let i = 0; i < midColumns.length; ++i) {\n const colWidth = midColumns[i].info.width;\n if (width > colWidth) {\n width -= colWidth;\n } else {\n start = i;\n width += clientMidWidth;\n break;\n }\n }\n let end = start + 1;\n for (let i = start; i < midColumns.length; ++i) {\n const colWidth = midColumns[i].info.width;\n width -= colWidth;\n end = i + 1;\n if (width <= 0) {\n break;\n }\n }\n if (end > midColumns.length) {\n end = midColumns.length;\n }\n return new NumberRange(start, end);\n }, [midColumns, scrollLeft, clientMidWidth]);\n}\n\n// Client width of the middle (scrollable) part of the grid.\nexport function useClientMidWidth(\n clientWidth: number,\n leftWidth: number,\n rightWidth: number,\n) {\n return useMemo(\n () => clientWidth - leftWidth - rightWidth,\n [clientWidth, leftWidth, rightWidth],\n );\n}\n\n// Client height of the middle part of the grid.\nexport function useClientMidHeight(\n clientHeight: number,\n topHeight: number,\n botHeight: number,\n) {\n return useMemo(\n () => clientHeight - topHeight - botHeight,\n [clientHeight, topHeight, botHeight],\n );\n}\n\n// Y coordinate of the visible area within the virtual space.\nexport function useBodyVisibleAreaTop<T>(\n rowHeight: number,\n visibleRowRange: NumberRange,\n topHeight: number,\n) {\n return useMemo(() => {\n let top = topHeight + visibleRowRange.start * rowHeight;\n if (visibleRowRange.start > 0) {\n top += 1; // First row (row #0) has an extra border\n }\n return top;\n }, [rowHeight, visibleRowRange, topHeight]);\n}\n\n// Visible range of rows.\nexport function useVisibleRowRange(\n scrollTop: number,\n clientMidHeight: number,\n rowHeight: number,\n rowCount: number,\n) {\n return useMemoRng(() => {\n if (rowHeight < 1) {\n return NumberRange.empty;\n }\n const firstRowHeight = rowHeight + 1; // First row has an extra 1px\n\n const start =\n scrollTop > firstRowHeight\n ? 1 + Math.floor((scrollTop - firstRowHeight) / rowHeight)\n : 0;\n let endPos = scrollTop + clientMidHeight;\n\n if (start === 0) {\n endPos -= 1;\n }\n const end = Math.min(\n rowCount,\n Math.max(start, Math.ceil(endPos / rowHeight)),\n );\n\n // Scroll Top not returning to 0 after pagination. Guard to ensure issues with ScrollTop throw error\n if (start > end) {\n return NumberRange.empty;\n }\n\n return new NumberRange(start, end);\n }, [scrollTop, clientMidHeight, rowHeight, rowCount]);\n}\n\nexport function useColumnRange<T>(\n columns: GridColumnModel<T>[],\n range: NumberRange,\n): GridColumnModel<T>[] {\n return useMemo(() => columns.slice(range.start, range.end), [columns, range]);\n}\n\n// Total width of the columns scrolled out to the left of the visible area.\nexport function useLeftScrolledOutWidth<T>(\n midColumns: GridColumnModel<T>[],\n bodyVisibleColumnRange: NumberRange,\n) {\n return useMemo(() => {\n let w = 0;\n for (let i = 0; i < bodyVisibleColumnRange.start; ++i) {\n w += midColumns[i].info.width;\n }\n return w;\n }, [midColumns, bodyVisibleColumnRange]);\n}\n\n// Row positions by row keys.\nexport function useRowIdxByKey<T>(rowKeyGetter: RowKeyGetter<T>, rowData: T[]) {\n return useMemo(() => {\n return new Map<string, number>(\n rowData.map((r, i) => [rowKeyGetter(r, i), i]),\n );\n }, [rowData, rowKeyGetter]);\n}\n\nexport type SetState<T> = (v: T | ((p: T) => T)) => void;\n\n// Row models for the visible rows.\nexport function useRowModels<T>(\n getKey: RowKeyGetter<T>,\n rowData: T[],\n visibleRowRange: NumberRange,\n) {\n return useMemo(() => {\n const rows: GridRowModel<T>[] = [];\n visibleRowRange.forEach((i) => {\n const key = getKey(rowData[i], i);\n rows.push({ data: rowData[i], key, index: i });\n });\n return rows;\n }, [getKey, rowData, visibleRowRange]);\n}\n\n// Creates column group models.\nexport const useColumnGroups = (\n grpPs: ColumnGroupProps[],\n startIdx: number,\n): GridColumnGroupModel[] =>\n useMemo(\n () =>\n grpPs.map((data, i) => {\n const childrenIds = Children.toArray(data.children)\n .map((child) => {\n if (!isValidElement(child)) {\n return undefined;\n }\n return child.props.id;\n })\n .filter((x) => x !== undefined) as string[];\n const colSpan = childrenIds.length;\n\n return {\n data,\n index: i + startIdx,\n childrenIds,\n colSpan,\n columnSeparator: \"regular\",\n rowSeparator: \"regular\",\n };\n }),\n [grpPs, startIdx],\n );\n\n// Visible range of column groups.\nexport function useVisibleColumnGroupRange<T>(\n bodyVisColRng: NumberRange,\n midCols: GridColumnModel<T>[],\n midGrpByColId: Map<string, GridColumnGroupModel>,\n leftGrpCount: number,\n): NumberRange {\n return useMemoRng(() => {\n if (bodyVisColRng.length === 0) {\n return NumberRange.empty;\n }\n const firstVisibleCol = midCols[bodyVisColRng.start];\n const lastVisibleCol = midCols[bodyVisColRng.end - 1];\n const firstVisibleGroup = midGrpByColId.get(firstVisibleCol.info.props.id);\n const lastVisibleGroup = midGrpByColId.get(lastVisibleCol.info.props.id);\n if (!firstVisibleGroup || !lastVisibleGroup) {\n return NumberRange.empty;\n }\n return new NumberRange(\n firstVisibleGroup.index - leftGrpCount,\n lastVisibleGroup.index + 1 - leftGrpCount,\n );\n }, [bodyVisColRng, midCols, midGrpByColId, leftGrpCount]);\n}\n\nexport function last<T>(source: T[]): T {\n return source[source.length - 1];\n}\n\n// Range of columns visible in the header.\nexport function useHeadVisibleColumnRange<T>(\n bodyVisColRng: NumberRange,\n visColGrps: GridColumnGroupModel[],\n midColsById: Map<string, GridColumnModel<T>>,\n leftColCount: number,\n) {\n return useMemoRng(() => {\n if (visColGrps.length === 0) {\n return bodyVisColRng;\n }\n const firstVisibleGroup = visColGrps[0];\n const lastVisibleGroup = last(visColGrps);\n const firstColId = firstVisibleGroup.childrenIds[0];\n const lastColId = last(lastVisibleGroup.childrenIds);\n const firstColIdx = midColsById.get(firstColId)?.index;\n const lastColIdx = midColsById.get(lastColId)?.index;\n if (firstColIdx === undefined || lastColIdx === undefined) {\n return NumberRange.empty;\n }\n return new NumberRange(\n firstColIdx - leftColCount,\n lastColIdx + 1 - leftColCount,\n );\n }, [bodyVisColRng, visColGrps, midColsById, leftColCount]);\n}\n\n// Creates column models.\nexport function useCols<T>(\n colInfos: GridColumnInfo<T>[],\n startIdx: number,\n groups: GridColumnGroupModel[],\n): GridColumnModel<T>[] {\n return useMemo(() => {\n const edgeColIds = new Set<string>();\n groups.forEach((g) => {\n edgeColIds.add(last(g.childrenIds));\n });\n const columnModels: GridColumnModel<T>[] = colInfos.map((info, i) => ({\n info,\n index: i + startIdx,\n separator: edgeColIds.has(info.props.id) ? \"groupEdge\" : \"regular\",\n }));\n return columnModels;\n }, [colInfos, startIdx, groups]);\n}\n\n// Returns a function that scrolls the grid to the given cell.\nexport function useScrollToCell<T>(\n visRowRng: NumberRange,\n rowHeight: number,\n clientMidHeight: number,\n midCols: GridColumnModel<T>[],\n bodyVisColRng: NumberRange,\n clientMidWidth: number,\n scroll: (left?: number, top?: number, source?: \"user\" | \"table\") => void,\n) {\n return useCallback(\n (part: FocusedPart, rowIdx: number, colIdx: number) => {\n if (part !== \"body\") {\n return; // TODO\n }\n let x: number | undefined = undefined;\n let y: number | undefined = undefined;\n if (rowIdx <= visRowRng.start) {\n // First row is 1px wider than other rows (additional top border)\n y = rowIdx === 0 ? 0 : 1 + rowHeight * rowIdx;\n } else if (rowIdx >= visRowRng.end - 1) {\n const extraBorder = rowIdx > 0 ? 1 : 0;\n y = Math.max(\n 0,\n rowHeight * rowIdx + extraBorder - clientMidHeight + rowHeight,\n );\n }\n const isMidCol =\n midCols.length > 0 &&\n colIdx >= midCols[0].index &&\n colIdx <= last(midCols).index;\n if (isMidCol) {\n const midColIdx = colIdx - midCols[0].index;\n if (midColIdx <= bodyVisColRng.start) {\n let w = 0;\n for (let i = 0; i < midColIdx; ++i) {\n w += midCols[i].info.width;\n }\n x = w;\n } else if (midColIdx >= bodyVisColRng.end - 1) {\n let w = 0;\n for (let i = 0; i <= midColIdx; ++i) {\n w += midCols[i].info.width;\n }\n x = Math.max(0, w - clientMidWidth);\n }\n }\n if (x !== undefined || y !== undefined) {\n scroll(x, y, \"table\");\n }\n },\n [\n visRowRng,\n rowHeight,\n clientMidHeight,\n midCols,\n bodyVisColRng,\n clientMidWidth,\n scroll,\n ],\n );\n}\n\nconst MIN_COLUMN_WIDTH = 10;\n\n// Returns onMouseDown handler to be attached to column resize handlers.\n// TODO There might be some problems if column is removed while it is being resized\nexport function useColumnResize<T>(\n cols: GridColumnModel<T>[],\n resizeColumn: (columnIndex: number, width: number) => void,\n) {\n const columnResizeDataRef = useRef<{\n startX: number;\n startY: number;\n eventsUnsubscription: () => void;\n columnIndex: number;\n initialColumnWidth: number;\n minWidth: number;\n resizeColumn: (columnIndex: number, width: number) => void;\n }>();\n\n const onMouseUp = useCallback(() => {\n columnResizeDataRef.current?.eventsUnsubscription();\n columnResizeDataRef.current = undefined;\n }, []);\n\n const onMouseMove = useCallback((event: MouseEvent) => {\n const x = event.screenX;\n const { startX, columnIndex, initialColumnWidth, minWidth } =\n columnResizeDataRef.current!;\n const shift = x - startX;\n const width = Math.max(minWidth, initialColumnWidth + shift);\n columnResizeDataRef.current!.resizeColumn(columnIndex, Math.round(width));\n }, []);\n\n return useCallback(\n (event: ReactMouseEvent<HTMLDivElement>) => {\n const targetElement = event.target as HTMLElement;\n const [columnIndexAttribute, thElement] = getAttribute(\n targetElement,\n \"data-column-index\",\n );\n\n const columnIndex = Number.parseInt(columnIndexAttribute, 10);\n\n document.addEventListener(\"mouseup\", onMouseUp);\n document.addEventListener(\"mousemove\", onMouseMove);\n\n const initialColumnWidth = thElement.getBoundingClientRect().width;\n\n columnResizeDataRef.current = {\n startX: event.screenX,\n startY: event.screenY,\n eventsUnsubscription: () => {\n document.removeEventListener(\"mouseup\", onMouseUp);\n document.removeEventListener(\"mousemove\", onMouseMove);\n },\n columnIndex,\n initialColumnWidth,\n resizeColumn,\n minWidth: cols[columnIndex].info.props.minWidth || MIN_COLUMN_WIDTH,\n };\n\n event.preventDefault();\n },\n [resizeColumn],\n );\n}\n\n// Map values to array.\nexport function useFlatten<T>(map: Map<number, T>): T[] {\n return useMemo(() => {\n const entries = [...map.entries()].filter(([, value]) => !!value);\n entries.sort((a, b) => a[0] - b[0]);\n return entries.map((x) => x[1]);\n }, [map]);\n}\n\nfunction useColMap<T>() {\n return useState<Map<number, GridColumnInfo<T>>>(new Map());\n}\n\nfunction useGrpMap() {\n return useState<Map<number, ColumnGroupProps>>(new Map());\n}\n\n// Instances of TableColumn and TableColumnGroup register/unregister themselves\n// using onColumnAdded, onColumnRemoved, onColumnGroupAdded, onColumnGroupRemoved\n// taken from context\n// The order of columns/groups is based on the order of \"children\" (Grid.props children)\nexport function useColumnRegistry<T>(children: ReactNode) {\n const [leftColMap, setLeftColMap] = useColMap<T>();\n const [rightColMap, setRightColMap] = useColMap<T>();\n const [midColMap, setMidColMap] = useColMap<T>();\n\n const [leftGrpMap, setLeftGrpMap] = useGrpMap();\n const [rightGrpMap, setRightGrpMap] = useGrpMap();\n const [midGrpMap, setMidGrpMap] = useGrpMap();\n\n const [editorMap, setEditorMap] = useState<Map<string, CellEditorInfo<T>>>(\n new Map(),\n );\n\n const leftColInfos = useFlatten(leftColMap);\n const rightColInfos = useFlatten(rightColMap);\n const midColInfos = useFlatten(midColMap);\n\n const leftGrpPs = useFlatten(leftGrpMap);\n const rightGrpPs = useFlatten(rightGrpMap);\n const midGrpPs = useFlatten(midGrpMap);\n\n const leftGroups = useColumnGroups(leftGrpPs, 0);\n const midGroups = useColumnGroups(midGrpPs, leftGroups.length);\n const rightGroups = useColumnGroups(\n rightGrpPs,\n leftGroups.length + midGroups.length,\n );\n if (leftGroups.length > 0) {\n last(leftGroups).columnSeparator = \"pinned\";\n }\n if (rightGroups.length > 0 && midGroups.length > 0) {\n last(midGroups).columnSeparator = \"pinned\";\n }\n\n const leftCols: GridColumnModel<T>[] = useCols(leftColInfos, 0, leftGroups);\n const midCols: GridColumnModel<T>[] = useCols(\n midColInfos,\n leftCols.length,\n midGroups,\n );\n const rightCols: GridColumnModel<T>[] = useCols(\n rightColInfos,\n leftCols.length + midCols.length,\n rightGroups,\n );\n if (leftCols.length > 0) {\n last(leftCols).separator = \"pinned\";\n }\n if (rightCols.length > 0 && midCols.length > 0) {\n last(midCols).separator = \"pinned\";\n }\n\n const chPosById = useRef<Map<string, number>>(new Map());\n\n const indexChildren = () => {\n const m = new Map<string, number>();\n let i = 0;\n const indexChildrenRec = (c: ReactNode) => {\n if (!c) {\n return;\n }\n Children.forEach(c, (x) => {\n if (isValidElement(x) && x.props.id !== undefined) {\n m.set(x.props.id, i);\n i++;\n indexChildrenRec(x.props.children);\n }\n });\n };\n indexChildrenRec(children);\n return m;\n };\n chPosById.current = indexChildren();\n\n const getChildIndex = useCallback((id: string): number => {\n const idx = chPosById.current.get(id);\n if (idx === undefined) {\n console.log(`Unknown child id \"${id}\"`);\n console.log(\n `Known ids: ${Array.from(chPosById.current.keys())\n .map((x) => `\"${x}\"`)\n .join(\", \")}`,\n );\n throw new Error(`Unknown child id: \"${id}\"`);\n }\n return idx;\n }, []);\n\n const getColMapSet = (pinned?: GridColumnPin) =>\n pinned === \"left\"\n ? setLeftColMap\n : pinned === \"right\"\n ? setRightColMap\n : setMidColMap;\n\n const onColumnAdded = useCallback((columnInfo: GridColumnInfo<T>) => {\n // console.log(\n // `Column added: \"${columnInfo.props.id}\"; pinned: ${columnInfo.props.pinned}`\n // );\n const { id, pinned } = columnInfo.props;\n const index = getChildIndex(id);\n getColMapSet(pinned)(makeMapAdder(index, columnInfo));\n }, []);\n\n const onColumnRemoved = useCallback(\n (index: number, columnInfo: GridColumnInfo<T>) => {\n const { pinned } = columnInfo.props;\n getColMapSet(pinned)(makeMapDeleter(index));\n // console.log(`Column removed: \"${columnInfo.props.id}\"`);\n },\n [],\n );\n\n const getGrpMapSet = (pinned?: GridColumnPin) =>\n pinned === \"left\"\n ? setLeftGrpMap\n : pinned === \"right\"\n ? setRightGrpMap\n : setMidGrpMap;\n\n const onColumnGroupAdded = useCallback((colGroupProps: ColumnGroupProps) => {\n const { id, pinned } = colGroupProps;\n getGrpMapSet(pinned)(makeMapAdder(getChildIndex(id), colGroupProps));\n // console.log(`Group added: \"${colGroupProps.name}\"`);\n }, []);\n\n const onColumnGroupRemoved = useCallback(\n (index: number, colGroupProps: ColumnGroupProps) => {\n const { pinned } = colGroupProps;\n getGrpMapSet(pinned)(makeMapDeleter(index));\n // console.log(`Group removed: \"${colGroupProps.name}\"`);\n },\n [],\n );\n\n const onEditorAdded = useCallback((info: CellEditorInfo<T>) => {\n const { columnId } = info;\n setEditorMap(makeMapAdder(columnId, info));\n // console.log(`Editor added for column ${columnId}`);\n }, []);\n\n const onEditorRemoved = useCallback((info: CellEditorInfo<T>) => {\n const { columnId } = info;\n setEditorMap(makeMapDeleter(columnId));\n // console.log(`Editor removed for column ${columnId}`);\n }, []);\n\n const getEditor = useCallback(\n (columnId: string) => editorMap.get(columnId),\n [editorMap],\n );\n\n const contextValue: GridContext<T> = useMemo(\n () => ({\n getChildIndex,\n onColumnAdded,\n onColumnRemoved,\n onColumnGroupAdded,\n onColumnGroupRemoved,\n onEditorAdded,\n onEditorRemoved,\n getEditor,\n }),\n [\n getChildIndex,\n onColumnAdded,\n onColumnRemoved,\n onColumnGroupAdded,\n onColumnGroupRemoved,\n onEditorAdded,\n onEditorRemoved,\n getEditor,\n ],\n );\n\n return {\n leftCols,\n midCols,\n rightCols,\n leftGroups,\n midGroups,\n rightGroups,\n contextValue,\n };\n}\n\nexport type SelectRowsOptions = {\n rowIndex: number;\n isRange?: boolean;\n // Update selection incrementally based on previous state.\n // If rowIndex is selected then unselect it, otherwise select it.\n // This is what happens when the user clicks a row selection checkbox.\n // Shift + Space is another case when this behaviour is used.\n incremental?: boolean;\n // Unusual behaviour, applied on space keypress on a non-checkbox cell\n // The row is toggled, other rows unselected.\n unselectOtherRows?: boolean;\n};\n\n// Returns functions related to row selection.\n// TODO test use case when selection mode changes\nexport function useRowSelection<T>(\n rowKeyGetter: RowKeyGetter<T>,\n rowData: T[],\n defaultSelectedRowIdxs?: number[],\n selectedRowIdxs?: number[],\n rowSelectionMode?: GridRowSelectionMode,\n onRowSelected?: (selectedRowIdxs: number[]) => void,\n) {\n const selectedRowIdxsProp = useMemo(() => {\n if (selectedRowIdxs === undefined) {\n return undefined;\n }\n return new Set(selectedRowIdxs);\n }, [selectedRowIdxs]);\n\n const defaultSelectedRowIdxsProp = useMemo(() => {\n if (defaultSelectedRowIdxs === undefined) {\n return new Set([]);\n }\n return new Set(defaultSelectedRowIdxs);\n }, [defaultSelectedRowIdxs]);\n\n const [selRowIdxs, setSelRowIdxs] = useControlled({\n controlled: selectedRowIdxsProp,\n default: defaultSelectedRowIdxsProp,\n name: \"useRowSelection\",\n state: \"selRowIdxs\",\n });\n\n const [lastSelRowIdx, setLastSelRowIdx] = useState<number | undefined>(\n undefined,\n );\n\n useEffect(() => {\n if (\n (rowSelectionMode === \"none\" && selRowIdxs.size > 0) ||\n (rowSelectionMode === \"single\" && selRowIdxs.size > 1)\n ) {\n setSelRowIdxs(new Set());\n }\n }, [rowSelectionMode, selRowIdxs, setSelRowIdxs]);\n\n const selectRows = useCallback(\n ({\n rowIndex,\n isRange = false,\n incremental = false,\n unselectOtherRows = false,\n }: SelectRowsOptions) => {\n const idxFrom =\n rowSelectionMode === \"multi\" && lastSelRowIdx !== undefined && isRange\n ? lastSelRowIdx\n : undefined;\n\n let nextSelRowIdxs: Set<number> | undefined = undefined;\n let nextLastSelRowIdx: number | undefined = undefined;\n\n if (idxFrom === undefined) {\n if (unselectOtherRows) {\n if (incremental && selRowIdxs.has(rowIndex)) {\n nextSelRowIdxs = new Set<number>([]);\n nextLastSelRowIdx = undefined;\n } else {\n nextSelRowIdxs = new Set<number>([rowIndex]);\n nextLastSelRowIdx = rowIndex;\n }\n } else {\n if (incremental && rowSelectionMode === \"multi\") {\n nextSelRowIdxs = new Set<number>(selRowIdxs);\n if (nextSelRowIdxs.has(rowIndex)) {\n nextSelRowIdxs.delete(rowIndex);\n nextLastSelRowIdx = undefined;\n } else {\n nextSelRowIdxs.add(rowIndex);\n nextLastSelRowIdx = rowIndex;\n }\n } else {\n nextSelRowIdxs = new Set([rowIndex]);\n nextLastSelRowIdx = rowIndex;\n }\n }\n } else {\n const s = incremental ? new Set<number>(selRowIdxs) : new Set<number>();\n const idxs = [rowIndex, idxFrom];\n idxs.sort((a, b) => a - b);\n const rowIdxs: number[] = [];\n for (let i = idxs[0]; i <= idxs[1]; ++i) {\n rowIdxs.push(i);\n }\n if (selRowIdxs.has(rowIndex)) {\n rowIdxs.forEach((k) => s.delete(k));\n } else {\n rowIdxs.forEach((k) => s.add(k));\n }\n nextSelRowIdxs = s;\n nextLastSelRowIdx = rowIndex;\n }\n\n setSelRowIdxs(nextSelRowIdxs);\n setLastSelRowIdx(nextLastSelRowIdx);\n if (onRowSelected) {\n onRowSelected(Array.from(nextSelRowIdxs.keys()));\n }\n },\n [\n selRowIdxs,\n lastSelRowIdx,\n setSelRowIdxs,\n setLastSelRowIdx,\n rowData,\n rowKeyGetter,\n onRowSelected,\n ],\n );\n\n const isAllSelected = selRowIdxs.size === rowData.length;\n const isAnySelected = selRowIdxs.size > 0;\n\n const selectAll = useCallback(() => {\n const allRowIdxs = [...new Array(rowData.length).keys()].map((_, i) => i);\n setSelRowIdxs(new Set(allRowIdxs));\n if (onRowSelected) {\n onRowSelected(allRowIdxs);\n }\n }, [rowData, setSelRowIdxs]);\n\n const unselectAll = useCallback(() => {\n setSelRowIdxs(new Set());\n if (onRowSelected) {\n onRowSelected([]);\n }\n }, [setSelRowIdxs]);\n\n const onMouseDown = useCallback(\n (event: ReactMouseEvent<HTMLDivElement>) => {\n if (rowSelectionMode === \"none\") {\n return;\n }\n const target = event.target as HTMLElement;\n try {\n const [rowIndex] = getCellPosition(target);\n selectRows({\n rowIndex,\n isRange: event.shiftKey,\n incremental: event.metaKey || event.ctrlKey,\n });\n } catch (e) {}\n },\n [selectRows, rowSelectionMode],\n );\n\n return {\n onMouseDown,\n selRowIdxs,\n isAllSelected,\n isAnySelected,\n selectRows,\n selectAll,\n unselectAll,\n };\n}\n\nexport interface ColumnDragState {\n columnIndex: number;\n x: number;\n y: number;\n}\n\nconst COLUMN_DRAG_TOLERANCE = 10;\n\nexport interface Target {\n columnIndex: number;\n x: number;\n}\n\n// Returns onMouseDown handler to be attached to column headers (or any element\n// working as a drag-and-drop handle for moving columns)\n// Also returns dragState and active target (the drop target nearest to current\n// mouse positions.\nexport function useColumnMove<T = any>(\n columnMove: boolean | undefined,\n rootRef: RefObject<HTMLDivElement>,\n leftCols: GridColumnModel<T>[],\n midCols: GridColumnModel<T>[],\n rightCols: GridColumnModel<T>[],\n cols: GridColumnModel<T>[],\n scrollLeft: number,\n clientMidWidth: number,\n onColumnMove: GridColumnMoveHandler,\n) {\n const moveRef = useRef<{\n unsubscribe: () => void;\n startScreenX: number;\n startScreenY: number;\n startHeaderX: number;\n startHeaderY: number;\n\n columnIndex: number;\n columnId: string;\n dragTriggered: boolean;\n onColumnMove: GridColumnMoveHandler;\n }>();\n\n const activeTargetRef = useRef<Target | undefined>(undefined);\n\n const [dragState, setDragState] = useState<ColumnDragState | undefined>(\n undefined,\n );\n\n const columnDragStart = useCallback(\n (columnIndex: number, x: number, y: number) => {\n setDragState({ columnIndex, x, y });\n },\n [],\n );\n\n const columnDrag = useCallback((x: number, y: number) => {\n setDragState((old) => {\n return { ...old!, x, y };\n });\n }, []);\n\n const columnDrop = useCallback(() => {\n const toIndex = activeTargetRef.current?.columnIndex;\n const fromIndex = moveRef.current?.columnIndex;\n const columnId = moveRef.current?.columnId;\n const handler = moveRef.current?.onColumnMove;\n if (\n toIndex !== undefined &&\n fromIndex !== undefined &&\n handler !== undefined &&\n columnId !== undefined\n ) {\n handler(columnId, fromIndex, toIndex);\n }\n setDragState(undefined);\n }, [setDragState]);\n\n const onMouseUp = useCallback(() => {\n if (moveRef.current?.dragTriggered) {\n columnDrop();\n }\n moveRef.current?.unsubscribe();\n moveRef.current = undefined;\n }, [columnDrop]);\n\n const onMouseMove = useCallback(\n (event: MouseEvent) => {\n const {\n columnIndex,\n startHeaderX,\n startHeaderY,\n startScreenX,\n startScreenY,\n dragTriggered,\n } = moveRef.current!;\n\n const shiftX = event.screenX - startScreenX;\n const shiftY = event.screenY - startScreenY;\n const x = startHeaderX + shiftX;\n const y = startHeaderY + shiftY;\n\n if (!dragTriggered) {\n if (\n Math.sqrt(shiftX * shiftX + shiftY * shiftY) > COLUMN_DRAG_TOLERANCE\n ) {\n moveRef.current!.dragTriggered = true;\n columnDragStart(columnIndex, x, y);\n }\n } else {\n columnDrag(x, y);\n }\n },\n [columnDrag],\n );\n\n const onColumnMoveHandleMouseDown: MouseEventHandler<HTMLDivElement> =\n useCallback(\n (event) => {\n const [columnIndexAttribute, thElement] = getAttribute(\n event.target as HTMLElement,\n \"data-column-index\",\n );\n const rootElement = rootRef.current;\n\n if (!rootElement) {\n return;\n }\n\n document.addEventListener(\"mouseup\", onMouseUp);\n document.addEventListener(\"mousemove\", onMouseMove);\n\n const columnIndex = Number.parseInt(columnIndexAttribute, 10);\n const columnId = cols[columnIndex].info.props.id;\n\n const thRect = thElement.getBoundingClientRect();\n const rootRect = rootElement.getBoundingClientRect();\n\n const x = thRect.x - rootRect.x;\n const y = thRect.y - rootRect.y;\n\n moveRef.current = {\n unsubscribe: () => {\n document.removeEventListener(\"mouseup\", onMouseUp);\n document.removeEventListener(\"mousemove\", onMouseMove);\n },\n startScreenX: event.screenX,\n startScreenY: event.screenY,\n startHeaderX: x,\n startHeaderY: y,\n columnIndex,\n columnId,\n dragTriggered: false,\n onColumnMove,\n };\n\n event.preventDefault();\n },\n [columnDragStart, cols],\n );\n\n const onColumnMoveCancel = useCallback(() => {\n setDragState(undefined);\n moveRef.current?.unsubscribe();\n moveRef.current = undefined;\n }, []);\n\n const targets = useMemo(() => {\n if (!dragState) {\n return undefined;\n }\n const ts: Target[] = [];\n let x = 0;\n leftCols.forEach((c) => {\n ts.push({ columnIndex: c.index, x });\n x += c.info.width;\n });\n let w = scrollLeft;\n let i = 0;\n while (w > 0 && i < midCols.length) {\n w -= midCols[i].info.width;\n i++;\n }\n x -= w;\n w += clientMidWidth;\n while (w > 0 && i < midCols.length) {\n const c = midCols[i];\n ts.push({ columnIndex: c.index, x });\n x += c.info.width;\n w -= c.info.width;\n i++;\n }\n if (rightCols.length > 0) {\n x += w;\n rightCols.forEach((c) => {\n ts.push({ columnIndex: c.index, x });\n x += c.info.width;\n });\n ts.push({ columnIndex: last(rightCols).index + 1, x });\n } else {\n ts.push({ columnIndex: last(midCols).index + 1, x });\n }\n return ts;\n }, [dragState, leftCols, midCols, rightCols, scrollLeft, clientMidWidth]);\n\n const activeTargetIdx = useMemo(() => {\n const x = dragState?.x;\n if (x === undefined || targets === undefined || targets.length < 1) {\n return undefined;\n }\n let i = 0;\n while (i < targets.length && targets[i].x < x) {\n i++;\n }\n if (i === 0) {\n return 0;\n }\n if (i >= targets.length) {\n return targets.length - 1;\n }\n return targets[i].x - x < x - targets[i - 1].x ? i : i - 1;\n }, [targets, dragState?.x]);\n\n const activeTarget =\n activeTargetIdx === undefined ? undefined : targets![activeTargetIdx];\n\n activeTargetRef.current = activeTarget;\n\n return {\n onColumnMoveHandleMouseDown,\n dragState,\n activeTarget,\n onColumnMoveCancel,\n };\n}\n\nexport interface CellPosition {\n rowIdx: number;\n colIdx: number;\n}\n\nexport interface CellRange {\n start: CellPosition;\n end: CellPosition;\n}\n\nexport function cellPositionEquals(a: CellPosition, b: CellPosition) {\n return a.rowIdx === b.rowIdx && a.colIdx === b.colIdx;\n}\n\nexport function cellRangeEquals(\n a: CellRange | undefined,\n b: CellRange | undefined,\n) {\n if (!a) {\n return !b;\n }\n return (\n !!b &&\n cellPositionEquals(a.start, b.start) &&\n cellPositionEquals(a.end, b.end)\n );\n}\n\n// TODO test the use case when cellSelectionMode changes during dnd.\n// Cell range selection. This is experimental.\nexport function useRangeSelection(cellSelectionMode?: GridCellSelectionMode) {\n const mouseSelectionRef = useRef<{\n unsubscribe: () => void;\n start: CellPosition;\n }>();\n\n const keyboardSelectionRef = useRef<{\n start: CellPosition;\n }>();\n\n if (cellSelectionMode !== \"range\") {\n if (mouseSelectionRef.current) {\n mouseSelectionRef.current.unsubscribe();\n mouseSelectionRef.current = undefined;\n }\n if (keyboardSelectionRef.current) {\n keyboardSelectionRef.current = undefined;\n }\n }\n\n const [selectedCellRange, setSelectedCellRange] = useState<\n CellRange | undefined\n >(undefined);\n\n const onMouseMove = useCallback((event: MouseEvent) => {\n const { clientX, clientY } = event;\n const element = document.elementFromPoint(clientX, clientY) as HTMLElement;\n try {\n const [rowIdx, colIdx] = getCellPosition(element);\n\n setSelectedCellRange((old) => {\n const { start } = mouseSelectionRef.current!;\n const p: CellRange = { start, end: { rowIdx, colIdx } };\n return cellRangeEquals(old, p) ? old : p;\n });\n } catch (exc) {}\n }, []);\n\n const onMouseUp = useCallback((event: MouseEvent) => {\n if (!mouseSelectionRef.current) {\n throw new Error(\"useRangeSelection state is not initialized\");\n }\n mouseSelectionRef.current.unsubscribe();\n mouseSelectionRef.current = undefined;\n }, []);\n\n const onCellMouseDown = useCallback(\n (event: ReactMouseEvent) => {\n if (cellSelectionMode !== \"range\") {\n return;\n }\n const target = event.target as HTMLElement;\n try {\n const [rowIdx, colIdx] = getCellPosition(target);\n document.addEventListener(\"mouseup\", onMouseUp);\n document.addEventListener(\"mousemove\", onMouseMove);\n const pos: CellPosition = { rowIdx, colIdx };\n mouseSelectionRef.current = {\n start: pos,\n unsubscribe: () => {\n document.removeEventListener(\"mouseup\", onMouseUp);\n document.removeEventListener(\"mousemove\", onMouseMove);\n },\n };\n setSelectedCellRange({ start: pos, end: pos });\n } catch (exc) {}\n },\n [cellSelectionMode],\n );\n\n const onKeyboardRangeSelectionStart = useCallback((pos: CellPosition) => {\n keyboardSelectionRef.current = {\n start: pos,\n };\n }, []);\n\n const onKeyboardRangeSelectionEnd = useCallback(() => {\n keyboardSelectionRef.current = undefined;\n }, []);\n\n const onCursorMove = useCallback((pos: CellPosition) => {\n if (!keyboardSelectionRef.current) {\n return;\n }\n setSelectedCellRange((old) => {\n if (!keyboardSelectionRef.current) {\n return old;\n }\n const { start } = keyboardSelectionRef.current;\n const p: CellRange = { start, end: pos };\n return cellRangeEquals(old, p) ? old : p;\n });\n }, []);\n\n const selectRange = useCallback((range: CellRange) => {\n if (cellSelectionMode !== \"range\") {\n return;\n }\n setSelectedCellRange(range);\n }, []);\n\n return {\n selectedCellRange,\n onCellMouseDown,\n onKeyboardRangeSelectionStart,\n onKeyboardRangeSelectionEnd,\n onCursorMove,\n selectRange,\n };\n}\n\nexport function useFocusableContent<T extends HTMLElement>() {\n const ref = useRef<T>(null);\n const [isFocusableContent, setFocusableContent] = useState<boolean>(false);\n\n const onFocus: FocusEventHandler<T> = (event) => {\n if (event.target === ref.current) {\n const nestedInteractive = ref.current.querySelector(`[tabindex=\"0\"]`);\n if (nestedInteractive) {\n (nestedInteractive as HTMLElement).focus();\n setFocusableContent(true);\n }\n }\n };\n\n return { ref, isFocusableContent, onFocus };\n}\n"],"names":["useRef","useEffect","useMemo","NumberRange","Children","isValidElement","useCallback","getAttribute","useState","makeMapAdder","makeMapDeleter","useControlled","getCellPosition"],"mappings":"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"}
|
|
@@ -20,20 +20,20 @@ function getFocusablePosition(element) {
|
|
|
20
20
|
element,
|
|
21
21
|
"data-column-index"
|
|
22
22
|
);
|
|
23
|
-
const columnIndex = parseInt(columnIndexAttr, 10);
|
|
23
|
+
const columnIndex = Number.parseInt(columnIndexAttr, 10);
|
|
24
24
|
const role = cellElement.getAttribute("role");
|
|
25
25
|
if (role === "columnheader") {
|
|
26
26
|
return { part: "header", columnIndex, rowIndex: 0 };
|
|
27
27
|
}
|
|
28
28
|
const [rowIndexAttr] = getAttribute(element, "data-row-index");
|
|
29
|
-
const rowIndex = parseInt(rowIndexAttr, 10);
|
|
29
|
+
const rowIndex = Number.parseInt(rowIndexAttr, 10);
|
|
30
30
|
return { part: "body", rowIndex, columnIndex };
|
|
31
31
|
}
|
|
32
32
|
function getCellPosition(element) {
|
|
33
33
|
const [rowIndexAttr] = getAttribute(element, "data-row-index");
|
|
34
34
|
const [columnIndexAttr] = getAttribute(element, "data-column-index");
|
|
35
|
-
const rowIndex = parseInt(rowIndexAttr, 10);
|
|
36
|
-
const columnIndex = parseInt(columnIndexAttr, 10);
|
|
35
|
+
const rowIndex = Number.parseInt(rowIndexAttr, 10);
|
|
36
|
+
const columnIndex = Number.parseInt(columnIndexAttr, 10);
|
|
37
37
|
return [rowIndex, columnIndex];
|
|
38
38
|
}
|
|
39
39
|
const addMapItem = (old, k, v) => {
|
|
@@ -49,7 +49,7 @@ const deleteMapItem = (old, k) => {
|
|
|
49
49
|
};
|
|
50
50
|
const makeMapDeleter = (k) => (old) => deleteMapItem(old, k);
|
|
51
51
|
const clamp = (x, min, max) => {
|
|
52
|
-
if (x
|
|
52
|
+
if (x === void 0) {
|
|
53
53
|
x = 0;
|
|
54
54
|
}
|
|
55
55
|
if (x < min) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../src/internal/utils.ts"],"sourcesContent":["import { FocusedPart } from \"../CursorContext\";\n\nexport function getAttribute(\n element: HTMLElement,\n attributeName: string
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../src/internal/utils.ts"],"sourcesContent":["import type { FocusedPart } from \"../CursorContext\";\n\nexport function getAttribute(\n element: HTMLElement,\n attributeName: string,\n): [string, HTMLElement] {\n if (!element || !element.hasAttribute) {\n throw new Error(`Attribute \"${attributeName}\" not found`);\n }\n if (element.hasAttribute(attributeName)) {\n return [element.getAttribute(attributeName) as string, element];\n }\n return getAttribute(element.parentNode as HTMLElement, attributeName);\n}\n\nexport function getRowIndexAttribute(element: HTMLElement): number {\n const [attribute] = getAttribute(element, \"data-row-index\");\n return Number.parseInt(attribute, 10);\n}\n\nexport function getRowKeyAttribute(element: HTMLElement): string {\n const [rowKey] = getAttribute(element, \"data-row-key\");\n return rowKey;\n}\n\nexport function getFocusablePosition(element: HTMLElement): {\n part: FocusedPart;\n columnIndex: number;\n rowIndex: number;\n} {\n const [columnIndexAttr, cellElement] = getAttribute(\n element,\n \"data-column-index\",\n );\n const columnIndex = Number.parseInt(columnIndexAttr, 10);\n const role = cellElement.getAttribute(\"role\");\n if (role === \"columnheader\") {\n return { part: \"header\", columnIndex, rowIndex: 0 };\n }\n const [rowIndexAttr] = getAttribute(element, \"data-row-index\");\n const rowIndex = Number.parseInt(rowIndexAttr, 10);\n return { part: \"body\", rowIndex, columnIndex };\n}\n\nexport function getCellPosition(element: HTMLElement): [number, number] {\n const [rowIndexAttr] = getAttribute(element, \"data-row-index\");\n const [columnIndexAttr] = getAttribute(element, \"data-column-index\");\n const rowIndex = Number.parseInt(rowIndexAttr, 10);\n const columnIndex = Number.parseInt(columnIndexAttr, 10);\n return [rowIndex, columnIndex];\n}\n\nconst addMapItem = <K, V>(old: Map<K, V>, k: K, v: V): Map<K, V> => {\n const m = new Map(old);\n m.set(k, v);\n return m;\n};\n\nexport const makeMapAdder =\n <K, V>(k: K, v: V) =>\n (old: Map<K, V>) =>\n addMapItem(old, k, v);\n\nconst deleteMapItem = <K, V>(old: Map<K, V>, k: K): Map<K, V> => {\n const m = new Map(old);\n m.delete(k);\n return m;\n};\n\nexport const makeMapDeleter =\n <K, V>(k: K) =>\n (old: Map<K, V>) =>\n deleteMapItem(old, k);\n\nexport const clamp = (x: number | undefined, min: number, max: number) => {\n if (x === undefined) {\n x = 0;\n }\n if (x < min) {\n return min;\n }\n if (x > max) {\n return max;\n }\n return x;\n};\n"],"names":[],"mappings":"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"}
|
package/dist-es/BaseCell.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { clsx } from 'clsx';
|
|
3
2
|
import { makePrefixer } from '@salt-ds/core';
|
|
4
|
-
import { useWindow } from '@salt-ds/window';
|
|
5
3
|
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
6
|
-
import {
|
|
4
|
+
import { useWindow } from '@salt-ds/window';
|
|
5
|
+
import { clsx } from 'clsx';
|
|
6
|
+
import { CellFrame } from './CellFrame.js';
|
|
7
|
+
import { CornerTag } from './CornerTag.js';
|
|
7
8
|
import './internal/CellMeasure.js';
|
|
8
9
|
import { Cursor } from './internal/Cursor.js';
|
|
9
10
|
import './internal/GroupHeaderRow.js';
|
|
@@ -13,16 +14,15 @@ import './internal/MiddlePart.js';
|
|
|
13
14
|
import './internal/RightPart.js';
|
|
14
15
|
import './internal/Scrollable.js';
|
|
15
16
|
import 'react';
|
|
16
|
-
import './internal/TableRow.js';
|
|
17
|
-
import './SelectionContext.js';
|
|
18
|
-
import './EditorContext.js';
|
|
19
17
|
import './CursorContext.js';
|
|
18
|
+
import './EditorContext.js';
|
|
19
|
+
import './SelectionContext.js';
|
|
20
|
+
import './internal/TableRow.js';
|
|
20
21
|
import { useFocusableContent } from './internal/gridHooks.js';
|
|
21
22
|
import './internal/TopLeftPart.js';
|
|
22
23
|
import './internal/TopPart.js';
|
|
23
24
|
import './internal/TopRightPart.js';
|
|
24
25
|
import './internal/DefaultCellValue.js';
|
|
25
|
-
import { CornerTag } from './CornerTag.js';
|
|
26
26
|
import { CellWarningIcon, CellErrorIcon, CellSuccessIcon } from './internal/CellStatusIcons.js';
|
|
27
27
|
import css_248z from './BaseCell.css.js';
|
|
28
28
|
|
|
@@ -61,7 +61,7 @@ function BaseCell(props) {
|
|
|
61
61
|
const hasValidation = !!validationStatus;
|
|
62
62
|
const hasValidationMessage = !!validationMessage || hasValidation;
|
|
63
63
|
const validationMessageId = `${cellId}-statusMessage`;
|
|
64
|
-
return /* @__PURE__ */ jsxs(
|
|
64
|
+
return /* @__PURE__ */ jsxs(CellFrame, {
|
|
65
65
|
ref,
|
|
66
66
|
id: cellId,
|
|
67
67
|
"data-row-index": row.index,
|
package/dist-es/BaseCell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCell.js","sources":["../src/BaseCell.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"BaseCell.js","sources":["../src/BaseCell.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport type { GridColumnModel } from \"./Grid\";\nimport type { GridCellProps } from \"./GridColumn\";\nimport { Cursor, useFocusableContent } from \"./internal\";\nimport {\n CellErrorIcon,\n CellSuccessIcon,\n CellWarningIcon,\n} from \"./internal/CellStatusIcons\";\n\nimport baseCellCss from \"./BaseCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridBaseCell\");\n\nexport function getCellId<T>(rowKey: string, column: GridColumnModel<T>) {\n return `R${rowKey}C${column.info.props.id}`;\n}\n\nconst icons = {\n warning: CellWarningIcon,\n error: CellErrorIcon,\n success: CellSuccessIcon,\n};\n\n// Default component for grid cells. Provides selection, on-hover highlighting,\n// cursor etc.\nexport function BaseCell<T>(props: GridCellProps<T>) {\n const {\n column,\n className,\n row,\n style,\n isFocused,\n isSelected,\n isEditable,\n children,\n validationStatus,\n validationMessage,\n validationType = \"light\",\n align,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-base-cell\",\n css: baseCellCss,\n window: targetWindow,\n });\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableCellElement>();\n const cellId = getCellId(row.key, column);\n const hasValidation = !!validationStatus;\n const hasValidationMessage = !!validationMessage || hasValidation;\n const validationMessageId = `${cellId}-statusMessage`;\n return (\n <CellFrame\n ref={ref}\n id={cellId}\n data-row-index={row.index}\n data-column-index={column.index}\n data-testid={isFocused ? \"grid-cell-focused\" : undefined}\n // aria-colindex uses one-based array indexing\n aria-colindex={column.index + 1}\n role=\"gridcell\"\n separator={column.separator}\n isSelected={isSelected}\n isEditable={isEditable}\n className={clsx(className, {\n [withBaseName(\"hasValidation\")]: hasValidation,\n [withBaseName(`status-${validationStatus as string}`)]:\n validationStatus,\n })}\n style={style}\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n aria-invalid={validationStatus === \"error\" || undefined}\n aria-describedby={hasValidationMessage ? validationMessageId : undefined}\n >\n {hasValidationMessage ? (\n <div\n id={validationMessageId}\n className=\"salt-visuallyHidden\"\n aria-hidden\n role=\"status\"\n >\n {validationMessage\n ? validationMessage\n : `Cell validation state is ${validationStatus as string}`}\n </div>\n ) : null}\n <div className={clsx(withBaseName(\"valueContainer\"))}>{children}</div>\n {hasValidation && validationType === \"strong\" ? (\n <div\n className={clsx(withBaseName(\"statusContainer\"), {\n [withBaseName(`statusContainer-align-${align as string}`)]: align,\n })}\n >\n {icons[validationStatus]}\n </div>\n ) : null}\n {isFocused && isEditable && <CornerTag focusOnly={true} />}\n {isFocused && !isFocusableContent && <Cursor />}\n </CellFrame>\n );\n}\n"],"names":["baseCellCss"],"mappings":"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"}
|