@deephaven/iris-grid 1.9.1-beta.0 → 1.9.1-beta.2
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/sidebar/RollupRows.css +14 -1
- package/dist/sidebar/RollupRows.css.map +1 -1
- package/dist/sidebar/RollupRows.d.ts.map +1 -1
- package/dist/sidebar/RollupRows.js +4 -5
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchItem.d.ts +2 -2
- package/dist/sidebar/visibility-ordering-builder/SearchItem.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js +4 -4
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.css +7 -2
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.css.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.d.ts +3 -3
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +13 -11
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css +1 -3
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +20 -7
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +101 -76
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.d.ts +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +5 -23
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +7 -5
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts +6 -3
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +69 -23
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.d.ts +2 -2
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +52 -47
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts +8 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +12 -5
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +1 -0
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts +1 -2
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +9 -4
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.d.ts +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +46 -20
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
- package/package.json +17 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisibilityOrderingBuilderUtils.js","names":["GridUtils","clamp","ColumnHeaderGroup","moveItemsFromDrop","from","to","movedColumns","columnHeaderGroups","flattenedItems","selectedParentItems","firstMovableIndex","lastMovableIndex","treeItems","map","item","i","_objectSpread","index","newMoves","newGroups","firstVisibleIndex","data","visibleIndex","fromItemIndex","findIndex","_ref","id","toItemIndex","_ref2","toIndex","Array","isArray","moveToGroup","parentId","length","moveItemOrRange","selectedRange","originalDropIndex","dropIndex","getVisibleIndex","children","groups","concat","toName","columnGroups","group","newGroupMap","Map","name","fromGroup","find","g","toGroup","movedGroup","filter","_parent","deleteNames","Set","parent","parentName","get","removeChildren","_parent$parent","_parent2","add","nextParentName","nextParent","_ref3","has","addChildren","setParent","undefined"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.ts"],"sourcesContent":["import { GridUtils, type MoveOperation } from '@deephaven/grid';\nimport clamp from 'lodash.clamp';\nimport ColumnHeaderGroup from '../../ColumnHeaderGroup';\nimport { type FlattenedItem } from './sortable-tree/types';\nimport { type FlattenedIrisGridTreeItem } from './sortable-tree/utilities';\n\n/**\n * Moves an item as the result of drag and drop in the visibility ordering builder\n * This is extracted from the component mostly for testing purposes\n * Drag and drop interactions are not easily testable\n *\n * @param from The item being dragged\n * @param to The item being dropped on\n * @param movedColumns The existing moved columns\n * @param columnHeaderGroups The column header groups pre-drag\n * @param flattenedItems Flattened tree items representing the list\n * @param selectedParentItems The user selected items in tree order. Should not include items if their parent item is selected\n * @param firstMovableIndex The first visible index that can be moved\n * @param lastMovableIndex The last visible index that can be moved\n * @returns Object containing the updated column header groups and updated movedColumns array\n * The movedColumns returned is complete and does not need to be combined with the existing movedColumns\n */\nexport function moveItemsFromDrop(\n from: FlattenedIrisGridTreeItem,\n to: FlattenedIrisGridTreeItem,\n movedColumns: readonly MoveOperation[],\n columnHeaderGroups: readonly ColumnHeaderGroup[],\n flattenedItems: readonly FlattenedIrisGridTreeItem[],\n selectedParentItems: readonly FlattenedIrisGridTreeItem[],\n firstMovableIndex: number,\n lastMovableIndex: number\n): {\n groups: readonly ColumnHeaderGroup[];\n movedColumns: readonly MoveOperation[];\n} {\n const treeItems = flattenedItems.map((item, i) => ({\n ...item,\n index: i,\n }));\n\n let newMoves = [] as MoveOperation[];\n let newGroups = columnHeaderGroups;\n\n const firstVisibleIndex = selectedParentItems[0].data.visibleIndex;\n\n const fromItemIndex = treeItems.findIndex(({ id }) => id === from.id);\n const toItemIndex = treeItems.findIndex(({ id }) => id === to.id);\n\n let toIndex = Array.isArray(firstVisibleIndex)\n ? firstVisibleIndex[1] + 1\n : firstVisibleIndex + 1;\n\n newGroups = moveToGroup(selectedParentItems[0], to.parentId, newGroups);\n\n // Move the items after to all after the first selected item\n for (let i = 1; i < selectedParentItems.length; i += 1) {\n const {\n data: { visibleIndex },\n } = selectedParentItems[i];\n\n newMoves = GridUtils.moveItemOrRange(visibleIndex, toIndex, newMoves, true);\n\n toIndex += Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n\n newGroups = moveToGroup(selectedParentItems[i], to.parentId, newGroups);\n }\n\n const selectedRange = [\n Array.isArray(firstVisibleIndex) ? firstVisibleIndex[0] : firstVisibleIndex,\n toIndex - 1,\n ] as [number, number];\n\n const originalDropIndex = Array.isArray(to.data.visibleIndex)\n ? to.data.visibleIndex[0]\n : to.data.visibleIndex;\n let dropIndex = GridUtils.getVisibleIndex(originalDropIndex, newMoves);\n\n // When moving up from multi-select\n // And the items caused the drop index to shift (disjoint multi-select)\n // The drop index will be off by 1\n if (fromItemIndex > toItemIndex && dropIndex > originalDropIndex) {\n dropIndex -= 1;\n }\n // Dropping as first item in a group\n // Need to adjust visible index if dragging from before this group or it is off by 1\n if (\n to.children.length > 0 &&\n (Array.isArray(firstVisibleIndex)\n ? firstVisibleIndex[0]\n : firstVisibleIndex) < dropIndex\n ) {\n dropIndex -= 1;\n }\n\n if (selectedRange[0] < dropIndex) {\n dropIndex -= selectedRange[1] - selectedRange[0];\n }\n\n newMoves = GridUtils.moveItemOrRange(\n selectedRange,\n clamp(dropIndex, firstMovableIndex, lastMovableIndex),\n newMoves\n );\n\n return {\n groups: newGroups,\n movedColumns:\n newMoves.length > 0 ? movedColumns.concat(newMoves) : movedColumns,\n };\n}\n\nexport function moveToGroup<T>(\n item: FlattenedItem<T>,\n toName: string | null,\n columnGroups: readonly ColumnHeaderGroup[]\n): readonly ColumnHeaderGroup[] {\n if (item.parentId === toName) {\n // Don't need to move an item if it is already in the group\n return columnGroups;\n }\n\n let newGroups = columnGroups.map(group => new ColumnHeaderGroup(group));\n const newGroupMap = new Map(newGroups.map(group => [group.name, group]));\n const fromGroup = newGroups.find(g => g.name === item.parentId);\n const toGroup = newGroups.find(g => g.name === toName);\n const movedGroup = newGroups.find(g => g.name === item.id);\n\n if (fromGroup != null) {\n // Moved out of a group\n fromGroup.children = fromGroup.children.filter(name => name !== item.id);\n\n // Moved all children out of a group\n if (fromGroup.children.length === 0) {\n const deleteNames = new Set([fromGroup.name]);\n const { parent: parentName = '' } = fromGroup;\n let parent = newGroupMap.get(parentName);\n parent?.removeChildren([fromGroup.name]);\n\n // Might need to delete parents if their only child is the now empty group\n while (parent && parent.children.length === 0) {\n deleteNames.add(parent.name);\n const nextParentName = parent?.parent ?? '';\n const nextParent = newGroupMap.get(nextParentName);\n nextParent?.removeChildren([parent.name]);\n parent = nextParent;\n }\n\n // Delete all groups that are now empty\n newGroups = newGroups.filter(({ name }) => !deleteNames.has(name));\n }\n }\n\n if (toGroup != null) {\n // Moved into a group\n toGroup.addChildren([item.id]);\n }\n\n movedGroup?.setParent(toName ?? undefined);\n\n return newGroups;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"VisibilityOrderingBuilderUtils.js","names":["GridUtils","clamp","ColumnHeaderGroup","moveItemsFromDrop","from","to","movedColumns","columnHeaderGroups","selectedParentItems","firstMovableIndex","lastMovableIndex","newMoves","newGroups","firstVisibleIndex","data","visibleIndex","fromItemIndex","index","toItemIndex","toIndex","Array","isArray","moveToGroup","parentId","i","length","moveItemOrRange","selectedRange","originalDropIndex","dropIndex","getVisibleIndex","children","groups","concat","item","toName","columnGroups","map","group","newGroupMap","Map","name","fromGroup","find","g","toGroup","movedGroup","id","filter","_parent","deleteNames","Set","parent","parentName","get","removeChildren","_parent$parent","_parent2","add","nextParentName","nextParent","_ref","has","addChildren","setParent","undefined"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.ts"],"sourcesContent":["import { GridUtils, type MoveOperation } from '@deephaven/grid';\nimport clamp from 'lodash.clamp';\nimport ColumnHeaderGroup from '../../ColumnHeaderGroup';\nimport { type FlattenedItem } from './sortable-tree/types';\nimport { type FlattenedIrisGridTreeItem } from './sortable-tree/utilities';\n\n/**\n * Moves an item as the result of drag and drop in the visibility ordering builder\n * This is extracted from the component mostly for testing purposes\n * Drag and drop interactions are not easily testable\n *\n * @param from The item being dragged\n * @param to The item being dropped on\n * @param movedColumns The existing moved columns\n * @param columnHeaderGroups The column header groups pre-drag\n * @param flattenedItems Flattened tree items representing the list\n * @param selectedParentItems The user selected items in tree order. Should not include items if their parent item is selected\n * @param firstMovableIndex The first visible index that can be moved\n * @param lastMovableIndex The last visible index that can be moved\n * @returns Object containing the updated column header groups and updated movedColumns array\n * The movedColumns returned is complete and does not need to be combined with the existing movedColumns\n */\nexport function moveItemsFromDrop(\n from: FlattenedIrisGridTreeItem,\n to: FlattenedIrisGridTreeItem,\n movedColumns: readonly MoveOperation[],\n columnHeaderGroups: readonly ColumnHeaderGroup[],\n selectedParentItems: readonly FlattenedIrisGridTreeItem[],\n firstMovableIndex: number,\n lastMovableIndex: number\n): {\n groups: readonly ColumnHeaderGroup[];\n movedColumns: readonly MoveOperation[];\n} {\n let newMoves = [] as MoveOperation[];\n let newGroups = columnHeaderGroups;\n\n const firstVisibleIndex = selectedParentItems[0].data.visibleIndex;\n\n const fromItemIndex = from.index;\n const toItemIndex = to.index;\n\n let toIndex = Array.isArray(firstVisibleIndex)\n ? firstVisibleIndex[1] + 1\n : firstVisibleIndex + 1;\n\n newGroups = moveToGroup(selectedParentItems[0], to.parentId, newGroups);\n\n // Move the items after to all after the first selected item\n for (let i = 1; i < selectedParentItems.length; i += 1) {\n const {\n data: { visibleIndex },\n } = selectedParentItems[i];\n\n newMoves = GridUtils.moveItemOrRange(visibleIndex, toIndex, newMoves, true);\n\n toIndex += Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n\n newGroups = moveToGroup(selectedParentItems[i], to.parentId, newGroups);\n }\n\n const selectedRange = [\n Array.isArray(firstVisibleIndex) ? firstVisibleIndex[0] : firstVisibleIndex,\n toIndex - 1,\n ] as [number, number];\n\n const originalDropIndex = Array.isArray(to.data.visibleIndex)\n ? to.data.visibleIndex[0]\n : to.data.visibleIndex;\n let dropIndex = GridUtils.getVisibleIndex(originalDropIndex, newMoves);\n\n // When moving up from multi-select\n // And the items caused the drop index to shift (disjoint multi-select)\n // The drop index will be off by 1\n if (fromItemIndex > toItemIndex && dropIndex > originalDropIndex) {\n dropIndex -= 1;\n }\n // Dropping as first item in a group\n // Need to adjust visible index if dragging from before this group or it is off by 1\n if (\n to.children.length > 0 &&\n (Array.isArray(firstVisibleIndex)\n ? firstVisibleIndex[0]\n : firstVisibleIndex) < dropIndex\n ) {\n dropIndex -= 1;\n }\n\n if (selectedRange[0] < dropIndex) {\n dropIndex -= selectedRange[1] - selectedRange[0];\n }\n\n newMoves = GridUtils.moveItemOrRange(\n selectedRange,\n clamp(dropIndex, firstMovableIndex, lastMovableIndex),\n newMoves\n );\n\n return {\n groups: newGroups,\n movedColumns:\n newMoves.length > 0 ? movedColumns.concat(newMoves) : movedColumns,\n };\n}\n\nexport function moveToGroup<T>(\n item: FlattenedItem<T>,\n toName: string | null,\n columnGroups: readonly ColumnHeaderGroup[]\n): readonly ColumnHeaderGroup[] {\n if (item.parentId === toName) {\n // Don't need to move an item if it is already in the group\n return columnGroups;\n }\n\n let newGroups = columnGroups.map(group => new ColumnHeaderGroup(group));\n const newGroupMap = new Map(newGroups.map(group => [group.name, group]));\n const fromGroup = newGroups.find(g => g.name === item.parentId);\n const toGroup = newGroups.find(g => g.name === toName);\n const movedGroup = newGroups.find(g => g.name === item.id);\n\n if (fromGroup != null) {\n // Moved out of a group\n fromGroup.children = fromGroup.children.filter(name => name !== item.id);\n\n // Moved all children out of a group\n if (fromGroup.children.length === 0) {\n const deleteNames = new Set([fromGroup.name]);\n const { parent: parentName = '' } = fromGroup;\n let parent = newGroupMap.get(parentName);\n parent?.removeChildren([fromGroup.name]);\n\n // Might need to delete parents if their only child is the now empty group\n while (parent && parent.children.length === 0) {\n deleteNames.add(parent.name);\n const nextParentName = parent?.parent ?? '';\n const nextParent = newGroupMap.get(nextParentName);\n nextParent?.removeChildren([parent.name]);\n parent = nextParent;\n }\n\n // Delete all groups that are now empty\n newGroups = newGroups.filter(({ name }) => !deleteNames.has(name));\n }\n }\n\n if (toGroup != null) {\n // Moved into a group\n toGroup.addChildren([item.id]);\n }\n\n movedGroup?.setParent(toName ?? undefined);\n\n return newGroups;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisibilityOrderingItem.d.ts","sourceRoot":"","sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgD,MAAM,OAAO,CAAC;AAMrE,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAE7D,KAAK,2BAA2B,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,yBAAyB,CAAC;IAChC,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACzE;;;OAGG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACtE,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,kBAAkB,EAAE,CAClB,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,MAAM,GAAG,SAAS,KACtB,IAAI,CAAC;IACV,iBAAiB,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,CAAC;
|
|
1
|
+
{"version":3,"file":"VisibilityOrderingItem.d.ts","sourceRoot":"","sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgD,MAAM,OAAO,CAAC;AAMrE,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAE7D,KAAK,2BAA2B,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,yBAAyB,CAAC;IAChC,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACzE;;;OAGG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACtE,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,kBAAkB,EAAE,CAClB,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,MAAM,GAAG,SAAS,KACtB,IAAI,CAAC;IACV,iBAAiB,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,CAAC;AAyGF,QAAA,MAAM,8BAA8B,+HAA+B,CAAC;AAEpE,eAAe,8BAA8B,CAAC"}
|
|
@@ -9,7 +9,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
|
9
9
|
import { dhEye, dhEyeSlash, vsGripper } from '@deephaven/icons';
|
|
10
10
|
import { Button, Tooltip } from '@deephaven/components';
|
|
11
11
|
import VisibilityOrderingGroup from "./VisibilityOrderingGroup.js";
|
|
12
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
13
|
function emptyOnClick() {
|
|
14
14
|
// no-op
|
|
15
15
|
}
|
|
@@ -83,10 +83,12 @@ var VisibilityOrderingItem = /*#__PURE__*/forwardRef(function VisibilityOrdering
|
|
|
83
83
|
children: [clone && childCount > 1 && /*#__PURE__*/_jsx("span", {
|
|
84
84
|
className: "item-count",
|
|
85
85
|
children: childCount
|
|
86
|
-
}), /*#__PURE__*/
|
|
87
|
-
children:
|
|
88
|
-
|
|
89
|
-
|
|
86
|
+
}), !clone && /*#__PURE__*/_jsxs(_Fragment, {
|
|
87
|
+
children: [/*#__PURE__*/_jsx(Tooltip, {
|
|
88
|
+
children: "Drag to re-order"
|
|
89
|
+
}), /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
90
|
+
icon: vsGripper
|
|
91
|
+
})]
|
|
90
92
|
})]
|
|
91
93
|
})]
|
|
92
94
|
}))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisibilityOrderingItem.js","names":["React","forwardRef","memo","useCallback","useRef","classNames","FontAwesomeIcon","dhEye","dhEyeSlash","vsGripper","Button","Tooltip","VisibilityOrderingGroup","jsx","_jsx","jsxs","_jsxs","emptyOnClick","VisibilityOrderingItem","props","ref","value","clone","childCount","item","onVisibilityChange","visibilityClickAndDrag","onClick","onGroupDelete","onGroupColorChange","onGroupNameChange","validateGroupName","handleProps","group","modelIndex","isVisible","data","buttonRef","handleVisibilityChange","e","buttons","_buttonRef$current","flat","current","focus","handleClick","event","_objectSpread","className","isSelected","selected","index","children","kind","onMouseDown","onMouseEnter","undefined","icon","tooltip","title","onDelete","onColorChange","onNameChange","validateName","MemoizedVisibilityOrderingItem"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingItem.tsx"],"sourcesContent":["import React, { forwardRef, memo, useCallback, useRef } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhEye, dhEyeSlash, vsGripper } from '@deephaven/icons';\nimport { Button, Tooltip } from '@deephaven/components';\nimport VisibilityOrderingGroup from './VisibilityOrderingGroup';\nimport { type FlattenedIrisGridTreeItem } from './sortable-tree/utilities';\nimport type ColumnHeaderGroup from '../../ColumnHeaderGroup';\n\ntype VisibilityOrderingItemProps = {\n value: string;\n clone: boolean;\n childCount: number;\n item: FlattenedIrisGridTreeItem;\n onVisibilityChange: (modelIndexes: number[], isVisible: boolean) => void;\n /**\n * If true, allows changing visibility by clicking and dragging over multiple item\n * visibility buttons.\n */\n visibilityClickAndDrag: boolean;\n onClick: (name: string, event: React.MouseEvent<HTMLElement>) => void;\n onGroupDelete: (group: ColumnHeaderGroup) => void;\n onGroupColorChange: (\n group: ColumnHeaderGroup,\n color: string | undefined\n ) => void;\n onGroupNameChange: (group: ColumnHeaderGroup, name: string) => void;\n validateGroupName: (name: string) => string;\n handleProps?: Record<string, unknown>;\n};\n\nfunction emptyOnClick(): void {\n // no-op\n}\n\nconst VisibilityOrderingItem = forwardRef<\n HTMLDivElement,\n VisibilityOrderingItemProps\n>(function VisibilityOrderingItem(props, ref) {\n const {\n value,\n clone,\n childCount,\n item,\n onVisibilityChange,\n visibilityClickAndDrag,\n onClick,\n onGroupDelete,\n onGroupColorChange,\n onGroupNameChange,\n validateGroupName,\n handleProps,\n } = props;\n const { group, modelIndex, isVisible } = item.data;\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const handleVisibilityChange = useCallback(\n (e: React.MouseEvent) => {\n if (e.buttons === 1) {\n onVisibilityChange([modelIndex].flat(), !isVisible);\n buttonRef.current?.focus();\n }\n },\n [onVisibilityChange, modelIndex, isVisible]\n );\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n onClick(value, event);\n },\n [onClick, value]\n );\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n ref={ref}\n className={classNames('tree-item', {\n isSelected: item.selected,\n 'two-dragged': childCount === 2,\n 'multiple-dragged': childCount > 2,\n })}\n onClick={handleClick}\n data-index={item.index}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...handleProps}\n >\n {!clone && (\n <Button\n ref={buttonRef}\n kind=\"ghost\"\n className=\"px-1\"\n // We PropType validate onClick for Button\n onClick={emptyOnClick}\n onMouseDown={handleVisibilityChange}\n onMouseEnter={\n visibilityClickAndDrag ? handleVisibilityChange : undefined\n }\n icon={isVisible ? dhEye : dhEyeSlash}\n tooltip=\"Toggle visibility\"\n />\n )}\n <span\n title={value}\n className={classNames('column-name', group && 'column-group')}\n >\n {/* Display a normal item if this is the drag overlay clone, even if it's a group */}\n {group && !clone ? (\n <VisibilityOrderingGroup\n group={group}\n onDelete={onGroupDelete}\n onColorChange={onGroupColorChange}\n onNameChange={onGroupNameChange}\n validateName={validateGroupName}\n />\n ) : (\n value\n )}\n </span>\n <div>\n {clone && childCount > 1 && (\n <span className=\"item-count\">{childCount}</span>\n )}\n <Tooltip>Drag to re-order</Tooltip>\n
|
|
1
|
+
{"version":3,"file":"VisibilityOrderingItem.js","names":["React","forwardRef","memo","useCallback","useRef","classNames","FontAwesomeIcon","dhEye","dhEyeSlash","vsGripper","Button","Tooltip","VisibilityOrderingGroup","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","emptyOnClick","VisibilityOrderingItem","props","ref","value","clone","childCount","item","onVisibilityChange","visibilityClickAndDrag","onClick","onGroupDelete","onGroupColorChange","onGroupNameChange","validateGroupName","handleProps","group","modelIndex","isVisible","data","buttonRef","handleVisibilityChange","e","buttons","_buttonRef$current","flat","current","focus","handleClick","event","_objectSpread","className","isSelected","selected","index","children","kind","onMouseDown","onMouseEnter","undefined","icon","tooltip","title","onDelete","onColorChange","onNameChange","validateName","MemoizedVisibilityOrderingItem"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingItem.tsx"],"sourcesContent":["import React, { forwardRef, memo, useCallback, useRef } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhEye, dhEyeSlash, vsGripper } from '@deephaven/icons';\nimport { Button, Tooltip } from '@deephaven/components';\nimport VisibilityOrderingGroup from './VisibilityOrderingGroup';\nimport { type FlattenedIrisGridTreeItem } from './sortable-tree/utilities';\nimport type ColumnHeaderGroup from '../../ColumnHeaderGroup';\n\ntype VisibilityOrderingItemProps = {\n value: string;\n clone: boolean;\n childCount: number;\n item: FlattenedIrisGridTreeItem;\n onVisibilityChange: (modelIndexes: number[], isVisible: boolean) => void;\n /**\n * If true, allows changing visibility by clicking and dragging over multiple item\n * visibility buttons.\n */\n visibilityClickAndDrag: boolean;\n onClick: (name: string, event: React.MouseEvent<HTMLElement>) => void;\n onGroupDelete: (group: ColumnHeaderGroup) => void;\n onGroupColorChange: (\n group: ColumnHeaderGroup,\n color: string | undefined\n ) => void;\n onGroupNameChange: (group: ColumnHeaderGroup, name: string) => void;\n validateGroupName: (name: string) => string;\n handleProps?: Record<string, unknown>;\n};\n\nfunction emptyOnClick(): void {\n // no-op\n}\n\nconst VisibilityOrderingItem = forwardRef<\n HTMLDivElement,\n VisibilityOrderingItemProps\n>(function VisibilityOrderingItem(props, ref) {\n const {\n value,\n clone,\n childCount,\n item,\n onVisibilityChange,\n visibilityClickAndDrag,\n onClick,\n onGroupDelete,\n onGroupColorChange,\n onGroupNameChange,\n validateGroupName,\n handleProps,\n } = props;\n const { group, modelIndex, isVisible } = item.data;\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const handleVisibilityChange = useCallback(\n (e: React.MouseEvent) => {\n if (e.buttons === 1) {\n onVisibilityChange([modelIndex].flat(), !isVisible);\n buttonRef.current?.focus();\n }\n },\n [onVisibilityChange, modelIndex, isVisible]\n );\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n onClick(value, event);\n },\n [onClick, value]\n );\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n ref={ref}\n className={classNames('tree-item', {\n isSelected: item.selected,\n 'two-dragged': childCount === 2,\n 'multiple-dragged': childCount > 2,\n })}\n onClick={handleClick}\n data-index={item.index}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...handleProps}\n >\n {!clone && (\n <Button\n ref={buttonRef}\n kind=\"ghost\"\n className=\"px-1\"\n // We PropType validate onClick for Button\n onClick={emptyOnClick}\n onMouseDown={handleVisibilityChange}\n onMouseEnter={\n visibilityClickAndDrag ? handleVisibilityChange : undefined\n }\n icon={isVisible ? dhEye : dhEyeSlash}\n tooltip=\"Toggle visibility\"\n />\n )}\n <span\n title={value}\n className={classNames('column-name', group && 'column-group')}\n >\n {/* Display a normal item if this is the drag overlay clone, even if it's a group */}\n {group && !clone ? (\n <VisibilityOrderingGroup\n group={group}\n onDelete={onGroupDelete}\n onColorChange={onGroupColorChange}\n onNameChange={onGroupNameChange}\n validateName={validateGroupName}\n />\n ) : (\n value\n )}\n </span>\n <div>\n {clone && childCount > 1 && (\n <span className=\"item-count\">{childCount}</span>\n )}\n {!clone && (\n <>\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </>\n )}\n </div>\n </div>\n );\n});\n\nconst MemoizedVisibilityOrderingItem = memo(VisibilityOrderingItem);\n\nexport default MemoizedVisibilityOrderingItem;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type Virtualizer } from '@tanstack/react-virtual';
|
|
1
3
|
import { type TreeItemRenderFn } from './TreeItem';
|
|
2
|
-
import type {
|
|
4
|
+
import type { FlattenedItem } from './types';
|
|
3
5
|
interface Props<T> {
|
|
4
|
-
items:
|
|
6
|
+
items: readonly FlattenedItem<T>[];
|
|
5
7
|
indentationWidth?: number;
|
|
6
8
|
renderItem: TreeItemRenderFn<T>;
|
|
7
9
|
isDraggable?: boolean;
|
|
8
10
|
withDepthMarkers?: boolean;
|
|
11
|
+
virtualizerRef?: React.Ref<Virtualizer<HTMLElement, Element>>;
|
|
9
12
|
}
|
|
10
|
-
export default function SortableTree<T>({ items, indentationWidth, renderItem, isDraggable, withDepthMarkers, }: Props<T>): JSX.Element;
|
|
13
|
+
export default function SortableTree<T>({ items, indentationWidth, renderItem, isDraggable, withDepthMarkers, virtualizerRef, }: Props<T>): JSX.Element;
|
|
11
14
|
export {};
|
|
12
15
|
//# sourceMappingURL=SortableTree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SortableTree.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SortableTree.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAGf,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAY,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,UAAU,KAAK,CAAC,CAAC;IACf,KAAK,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;CAC/D;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,CAAC,EAAE,EACtC,KAAK,EACL,gBAAqB,EACrB,UAAU,EACV,WAAkB,EAClB,gBAAuB,EACvB,cAAc,GACf,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CA+HxB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { useEffect, useMemo, useRef } from 'react';
|
|
1
|
+
import React, { useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
import { useDndContext } from '@dnd-kit/core';
|
|
4
|
-
import {
|
|
4
|
+
import { defaultRangeExtractor, useVirtualizer } from '@tanstack/react-virtual';
|
|
5
|
+
import { getProjection } from "./utilities.js";
|
|
5
6
|
import { SortableTreeItem } from "./SortableTreeItem.js";
|
|
6
7
|
import { TreeItem } from "./TreeItem.js";
|
|
7
8
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -12,16 +13,16 @@ export default function SortableTree(_ref) {
|
|
|
12
13
|
indentationWidth = 30,
|
|
13
14
|
renderItem,
|
|
14
15
|
isDraggable = true,
|
|
15
|
-
withDepthMarkers = true
|
|
16
|
+
withDepthMarkers = true,
|
|
17
|
+
virtualizerRef
|
|
16
18
|
} = _ref;
|
|
17
19
|
var dndContext = useDndContext();
|
|
18
20
|
var activeId = (_ref2 = (_dndContext$active = dndContext.active) === null || _dndContext$active === void 0 ? void 0 : _dndContext$active.id) !== null && _ref2 !== void 0 ? _ref2 : null;
|
|
19
21
|
var overId = (_ref3 = (_dndContext$over = dndContext.over) === null || _dndContext$over === void 0 ? void 0 : _dndContext$over.id) !== null && _ref3 !== void 0 ? _ref3 : null;
|
|
20
22
|
var offsetLeft = dndContext.active ? ((_dndContext$active$re = (_dndContext$active$re2 = dndContext.active.rect.current.translated) === null || _dndContext$active$re2 === void 0 ? void 0 : _dndContext$active$re2.left) !== null && _dndContext$active$re !== void 0 ? _dndContext$active$re : 0) - ((_dndContext$active$re3 = (_dndContext$active$re4 = dndContext.active.rect.current.initial) === null || _dndContext$active$re4 === void 0 ? void 0 : _dndContext$active$re4.left) !== null && _dndContext$active$re3 !== void 0 ? _dndContext$active$re3 : 0) : 0;
|
|
21
|
-
var
|
|
22
|
-
var flattenedTree = flattenTree(items);
|
|
23
|
+
var filteredItems = useMemo(() => {
|
|
23
24
|
if (activeId != null) {
|
|
24
|
-
return
|
|
25
|
+
return items.filter(_ref4 => {
|
|
25
26
|
var {
|
|
26
27
|
id,
|
|
27
28
|
selected
|
|
@@ -29,30 +30,69 @@ export default function SortableTree(_ref) {
|
|
|
29
30
|
return id === activeId || !selected;
|
|
30
31
|
});
|
|
31
32
|
}
|
|
32
|
-
return
|
|
33
|
+
return items;
|
|
33
34
|
}, [activeId, items]);
|
|
34
|
-
var
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
var activeIndex = useMemo(() => filteredItems.findIndex(_ref5 => {
|
|
36
|
+
var {
|
|
37
|
+
id
|
|
38
|
+
} = _ref5;
|
|
39
|
+
return id === activeId;
|
|
40
|
+
}), [activeId, filteredItems]);
|
|
41
|
+
|
|
42
|
+
// Add the active index to the range so it is always rendered
|
|
43
|
+
var rangeExtractor = useCallback(range => {
|
|
44
|
+
var extractedRange = defaultRangeExtractor(range);
|
|
45
|
+
if (activeIndex >= 0 && (activeIndex < extractedRange[0] || activeIndex > extractedRange[extractedRange.length - 1])) {
|
|
46
|
+
extractedRange.push(activeIndex);
|
|
47
|
+
}
|
|
48
|
+
return extractedRange;
|
|
49
|
+
}, [activeIndex]);
|
|
50
|
+
var getScrollElement = useCallback(() => {
|
|
51
|
+
var _containerRef$current, _containerRef$current2;
|
|
52
|
+
return (_containerRef$current = (_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0 ? void 0 : _containerRef$current2.parentElement) !== null && _containerRef$current !== void 0 ? _containerRef$current : null;
|
|
53
|
+
}, []);
|
|
54
|
+
var estimateSize = useCallback(() => 30, []);
|
|
55
|
+
var containerRef = useRef(null);
|
|
56
|
+
var virtualizer = useVirtualizer({
|
|
57
|
+
count: filteredItems.length,
|
|
58
|
+
getScrollElement,
|
|
59
|
+
estimateSize,
|
|
60
|
+
rangeExtractor,
|
|
61
|
+
overscan: 10,
|
|
62
|
+
gap: 1 // We set a 1px bottom margin before we virtualized this list
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// Expose the virtualizer via ref
|
|
66
|
+
useImperativeHandle(virtualizerRef, () => virtualizer, [virtualizer]);
|
|
67
|
+
var virtualizedItems = virtualizer.getVirtualItems();
|
|
68
|
+
var {
|
|
69
|
+
measureDroppableContainers
|
|
70
|
+
} = useDndContext();
|
|
39
71
|
|
|
40
72
|
// Without this, animations are funky when using the move/sort buttons
|
|
41
73
|
// dnd-kit only remeasures on drag/drop by default
|
|
42
|
-
// The context object changes while dragging (items don't)
|
|
43
|
-
// Using the context ref allows this to trigger properly on only items changes
|
|
44
74
|
useEffect(function remeasureContainers() {
|
|
45
|
-
|
|
75
|
+
measureDroppableContainers(virtualizedItems.map(_ref6 => {
|
|
46
76
|
var {
|
|
47
|
-
|
|
48
|
-
} =
|
|
49
|
-
return id;
|
|
77
|
+
index
|
|
78
|
+
} = _ref6;
|
|
79
|
+
return filteredItems[index].id;
|
|
50
80
|
}));
|
|
51
|
-
}, [
|
|
52
|
-
var projected = isDraggable && activeId != null && overId != null ? getProjection(
|
|
81
|
+
}, [filteredItems, measureDroppableContainers, virtualizedItems]);
|
|
82
|
+
var projected = isDraggable && activeId != null && overId != null ? getProjection(filteredItems, activeId, overId, offsetLeft, indentationWidth) : null;
|
|
53
83
|
return /*#__PURE__*/_jsx("div", {
|
|
54
84
|
className: classNames('tree-container', activeId != null && 'marching-ants'),
|
|
55
|
-
|
|
85
|
+
style: {
|
|
86
|
+
height: "".concat(virtualizer.getTotalSize(), "px"),
|
|
87
|
+
position: 'relative'
|
|
88
|
+
},
|
|
89
|
+
ref: containerRef,
|
|
90
|
+
children: virtualizer.getVirtualItems().map(_ref7 => {
|
|
91
|
+
var {
|
|
92
|
+
index,
|
|
93
|
+
start
|
|
94
|
+
} = _ref7;
|
|
95
|
+
var item = filteredItems[index];
|
|
56
96
|
var {
|
|
57
97
|
id,
|
|
58
98
|
depth
|
|
@@ -63,13 +103,19 @@ export default function SortableTree(_ref) {
|
|
|
63
103
|
depth: id === activeId && projected ? projected.depth : depth,
|
|
64
104
|
item: item,
|
|
65
105
|
renderItem: renderItem,
|
|
66
|
-
withDepthMarkers: withDepthMarkers
|
|
106
|
+
withDepthMarkers: withDepthMarkers,
|
|
107
|
+
top: start
|
|
108
|
+
// This allows the group items to expand when editing the name and shift the list correctly
|
|
109
|
+
,
|
|
110
|
+
measureElement: virtualizer.measureElement
|
|
67
111
|
}, id) : /*#__PURE__*/_jsx(TreeItem, {
|
|
68
112
|
value: id,
|
|
69
113
|
depth: depth,
|
|
70
114
|
item: item,
|
|
71
115
|
renderItem: renderItem,
|
|
72
|
-
withDepthMarkers: withDepthMarkers
|
|
116
|
+
withDepthMarkers: withDepthMarkers,
|
|
117
|
+
top: start,
|
|
118
|
+
wrapperRef: virtualizer.measureElement
|
|
73
119
|
}, id);
|
|
74
120
|
})
|
|
75
121
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SortableTree.js","names":["useEffect","useMemo","useRef","classNames","useDndContext","flattenTree","getProjection","SortableTreeItem","TreeItem","jsx","_jsx","SortableTree","_ref","_ref2","_dndContext$active","_ref3","_dndContext$over","_dndContext$active$re","_dndContext$active$re2","_dndContext$active$re3","_dndContext$active$re4","items","indentationWidth","renderItem","isDraggable","withDepthMarkers","dndContext","activeId","active","id","overId","over","offsetLeft","rect","current","translated","left","initial","flattenedItems","flattenedTree","filter","_ref4","selected","context","contextRef","updateContextRef","remeasureContainers","measureDroppableContainers","map","_ref5","projected","className","children","item","depth","value"],"sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef } from 'react';\nimport classNames from 'classnames';\nimport { useDndContext } from '@dnd-kit/core';\nimport { flattenTree, getProjection } from './utilities';\nimport { SortableTreeItem } from './SortableTreeItem';\nimport { TreeItem, type TreeItemRenderFn } from './TreeItem';\nimport type { TreeItem as TreeItemType } from './types';\n\ninterface Props<T> {\n items: TreeItemType<T>[];\n indentationWidth?: number;\n renderItem: TreeItemRenderFn<T>;\n isDraggable?: boolean;\n withDepthMarkers?: boolean;\n}\n\nexport default function SortableTree<T>({\n items,\n indentationWidth = 30,\n renderItem,\n isDraggable = true,\n withDepthMarkers = true,\n}: Props<T>): JSX.Element {\n const dndContext = useDndContext();\n const activeId = (dndContext.active?.id as string) ?? null;\n const overId = (dndContext.over?.id as string) ?? null;\n const offsetLeft = dndContext.active\n ? (dndContext.active.rect.current.translated?.left ?? 0) -\n (dndContext.active.rect.current.initial?.left ?? 0)\n : 0;\n\n const flattenedItems = useMemo(() => {\n const flattenedTree = flattenTree(items);\n\n if (activeId != null) {\n return flattenedTree.filter(\n ({ id, selected }) => id === activeId || !selected\n );\n }\n\n return flattenedTree;\n }, [activeId, items]);\n\n const context = useDndContext();\n const contextRef = useRef(context);\n\n useEffect(\n function updateContextRef() {\n contextRef.current = context;\n },\n [context]\n );\n\n // Without this, animations are funky when using the move/sort buttons\n // dnd-kit only remeasures on drag/drop by default\n // The context object changes while dragging (items don't)\n // Using the context ref allows this to trigger properly on only items changes\n useEffect(\n function remeasureContainers() {\n contextRef.current.measureDroppableContainers(items.map(({ id }) => id));\n },\n [items]\n );\n\n const projected =\n isDraggable && activeId != null && overId != null\n ? getProjection(\n flattenedItems,\n activeId,\n overId,\n offsetLeft,\n indentationWidth\n )\n : null;\n\n return (\n <div\n className={classNames(\n 'tree-container',\n activeId != null && 'marching-ants'\n )}\n >\n {flattenedItems.map(item => {\n const { id, depth } = item;\n return isDraggable ? (\n <SortableTreeItem\n key={id}\n id={id}\n value={id}\n depth={id === activeId && projected ? projected.depth : depth}\n item={item}\n renderItem={renderItem}\n withDepthMarkers={withDepthMarkers}\n />\n ) : (\n <TreeItem\n key={id}\n value={id}\n depth={depth}\n item={item}\n renderItem={renderItem}\n withDepthMarkers={withDepthMarkers}\n />\n );\n })}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SortableTree.js","names":["React","useCallback","useEffect","useImperativeHandle","useMemo","useRef","classNames","useDndContext","defaultRangeExtractor","useVirtualizer","getProjection","SortableTreeItem","TreeItem","jsx","_jsx","SortableTree","_ref","_ref2","_dndContext$active","_ref3","_dndContext$over","_dndContext$active$re","_dndContext$active$re2","_dndContext$active$re3","_dndContext$active$re4","items","indentationWidth","renderItem","isDraggable","withDepthMarkers","virtualizerRef","dndContext","activeId","active","id","overId","over","offsetLeft","rect","current","translated","left","initial","filteredItems","filter","_ref4","selected","activeIndex","findIndex","_ref5","rangeExtractor","range","extractedRange","length","push","getScrollElement","_containerRef$current","_containerRef$current2","containerRef","parentElement","estimateSize","virtualizer","count","overscan","gap","virtualizedItems","getVirtualItems","measureDroppableContainers","remeasureContainers","map","_ref6","index","projected","className","style","height","concat","getTotalSize","position","ref","children","_ref7","start","item","depth","value","top","measureElement","wrapperRef"],"sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\nimport classNames from 'classnames';\nimport { useDndContext } from '@dnd-kit/core';\nimport {\n defaultRangeExtractor,\n type Range,\n useVirtualizer,\n type Virtualizer,\n} from '@tanstack/react-virtual';\nimport { getProjection } from './utilities';\nimport { SortableTreeItem } from './SortableTreeItem';\nimport { TreeItem, type TreeItemRenderFn } from './TreeItem';\nimport type { FlattenedItem } from './types';\n\ninterface Props<T> {\n items: readonly FlattenedItem<T>[];\n indentationWidth?: number;\n renderItem: TreeItemRenderFn<T>;\n isDraggable?: boolean;\n withDepthMarkers?: boolean;\n virtualizerRef?: React.Ref<Virtualizer<HTMLElement, Element>>;\n}\n\nexport default function SortableTree<T>({\n items,\n indentationWidth = 30,\n renderItem,\n isDraggable = true,\n withDepthMarkers = true,\n virtualizerRef,\n}: Props<T>): JSX.Element {\n const dndContext = useDndContext();\n const activeId = (dndContext.active?.id as string) ?? null;\n const overId = (dndContext.over?.id as string) ?? null;\n const offsetLeft = dndContext.active\n ? (dndContext.active.rect.current.translated?.left ?? 0) -\n (dndContext.active.rect.current.initial?.left ?? 0)\n : 0;\n\n const filteredItems = useMemo(() => {\n if (activeId != null) {\n return items.filter(({ id, selected }) => id === activeId || !selected);\n }\n\n return items;\n }, [activeId, items]);\n\n const activeIndex = useMemo(\n () => filteredItems.findIndex(({ id }) => id === activeId),\n [activeId, filteredItems]\n );\n\n // Add the active index to the range so it is always rendered\n const rangeExtractor = useCallback(\n (range: Range) => {\n const extractedRange = defaultRangeExtractor(range);\n if (\n activeIndex >= 0 &&\n (activeIndex < extractedRange[0] ||\n activeIndex > extractedRange[extractedRange.length - 1])\n ) {\n extractedRange.push(activeIndex);\n }\n return extractedRange;\n },\n [activeIndex]\n );\n\n const getScrollElement = useCallback(\n () => containerRef.current?.parentElement ?? null,\n []\n );\n\n const estimateSize = useCallback(() => 30, []);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const virtualizer = useVirtualizer({\n count: filteredItems.length,\n getScrollElement,\n estimateSize,\n rangeExtractor,\n overscan: 10,\n gap: 1, // We set a 1px bottom margin before we virtualized this list\n });\n\n // Expose the virtualizer via ref\n useImperativeHandle(virtualizerRef, () => virtualizer, [virtualizer]);\n\n const virtualizedItems = virtualizer.getVirtualItems();\n\n const { measureDroppableContainers } = useDndContext();\n\n // Without this, animations are funky when using the move/sort buttons\n // dnd-kit only remeasures on drag/drop by default\n useEffect(\n function remeasureContainers() {\n measureDroppableContainers(\n virtualizedItems.map(({ index }) => filteredItems[index].id)\n );\n },\n [filteredItems, measureDroppableContainers, virtualizedItems]\n );\n\n const projected =\n isDraggable && activeId != null && overId != null\n ? getProjection(\n filteredItems,\n activeId,\n overId,\n offsetLeft,\n indentationWidth\n )\n : null;\n\n return (\n <div\n className={classNames(\n 'tree-container',\n activeId != null && 'marching-ants'\n )}\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n position: 'relative',\n }}\n ref={containerRef}\n >\n {virtualizer.getVirtualItems().map(({ index, start }) => {\n const item = filteredItems[index];\n const { id, depth } = item;\n return isDraggable ? (\n <SortableTreeItem\n key={id}\n id={id}\n value={id}\n depth={id === activeId && projected ? projected.depth : depth}\n item={item}\n renderItem={renderItem}\n withDepthMarkers={withDepthMarkers}\n top={start}\n // This allows the group items to expand when editing the name and shift the list correctly\n measureElement={virtualizer.measureElement}\n />\n ) : (\n <TreeItem\n key={id}\n value={id}\n depth={depth}\n item={item}\n renderItem={renderItem}\n withDepthMarkers={withDepthMarkers}\n top={start}\n wrapperRef={virtualizer.measureElement}\n />\n );\n })}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { type DragStartEvent } from '@dnd-kit/core';
|
|
3
|
-
import type { FlattenedItem
|
|
3
|
+
import type { FlattenedItem } from './types';
|
|
4
4
|
import { type TreeItemRenderFn } from './TreeItem';
|
|
5
5
|
type Props<T> = React.PropsWithChildren<{
|
|
6
|
-
items:
|
|
6
|
+
items: readonly FlattenedItem<T>[];
|
|
7
7
|
indentationWidth?: number;
|
|
8
8
|
onDragStart?: (id: string, event: DragStartEvent) => void;
|
|
9
9
|
onDragEnd?: (from: FlattenedItem<T>, to: FlattenedItem<T>) => void;
|
package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SortableTreeDndContext.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAEf,OAAO,EAOL,KAAK,cAAc,EASpB,MAAM,eAAe,CAAC;AAOvB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"SortableTreeDndContext.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAEf,OAAO,EAOL,KAAK,cAAc,EASpB,MAAM,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,SAAS,CAAC;AAG5D,OAAO,EAAY,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAuG7D,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC;IACtC,KAAK,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1D,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACnE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,CAAC,EAAE,EAChD,KAAK,EACL,gBAAqB,EACrB,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,GACX,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CA4IxB"}
|
|
@@ -8,7 +8,7 @@ import { createPortal } from 'react-dom';
|
|
|
8
8
|
import { DndContext, closestCenter, KeyboardSensor, useSensor, useSensors, MeasuringStrategy, DragOverlay, defaultDropAnimation } from '@dnd-kit/core';
|
|
9
9
|
import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';
|
|
10
10
|
import { CSS } from '@dnd-kit/utilities';
|
|
11
|
-
import {
|
|
11
|
+
import { getProjection } from "./utilities.js";
|
|
12
12
|
import { sortableTreeKeyboardCoordinates } from "./keyboardCoordinates.js";
|
|
13
13
|
import PointerSensorWithInteraction from "./PointerSensorWithInteraction.js";
|
|
14
14
|
import { TreeItem } from "./TreeItem.js";
|
|
@@ -87,6 +87,35 @@ function adjustToCursor(args) {
|
|
|
87
87
|
// but avoids a singleton state or needing hooks to maintain this.
|
|
88
88
|
// The logic came from the dnd-kit example.
|
|
89
89
|
adjustToCursor.offsetY = null;
|
|
90
|
+
|
|
91
|
+
// From https://github.com/clauderic/dnd-kit/pull/334
|
|
92
|
+
var fixCursorSnapOffset = args => {
|
|
93
|
+
// Bail out if keyboard activated
|
|
94
|
+
if (!args.pointerCoordinates) {
|
|
95
|
+
return closestCenter(args);
|
|
96
|
+
}
|
|
97
|
+
var {
|
|
98
|
+
x,
|
|
99
|
+
y
|
|
100
|
+
} = args.pointerCoordinates;
|
|
101
|
+
var {
|
|
102
|
+
width,
|
|
103
|
+
height
|
|
104
|
+
} = args.collisionRect;
|
|
105
|
+
var updated = _objectSpread(_objectSpread({}, args), {}, {
|
|
106
|
+
// The collision rectangle is broken when using adjustToCursor. Reset
|
|
107
|
+
// the collision rectangle based on pointer location and overlay size.
|
|
108
|
+
collisionRect: {
|
|
109
|
+
width,
|
|
110
|
+
height,
|
|
111
|
+
bottom: y + height / 2,
|
|
112
|
+
left: x - width / 2,
|
|
113
|
+
right: x + width / 2,
|
|
114
|
+
top: y - height / 2
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
return closestCenter(updated);
|
|
118
|
+
};
|
|
90
119
|
export default function SortableTreeDndContext(_ref3) {
|
|
91
120
|
var {
|
|
92
121
|
items,
|
|
@@ -97,30 +126,15 @@ export default function SortableTreeDndContext(_ref3) {
|
|
|
97
126
|
renderItem
|
|
98
127
|
} = _ref3;
|
|
99
128
|
var [activeId, setActiveId] = useState(null);
|
|
100
|
-
var [overId, setOverId] = useState(null);
|
|
101
129
|
var [offsetLeft, setOffsetLeft] = useState(0);
|
|
102
|
-
var
|
|
103
|
-
var flattenedTree = flattenTree(items);
|
|
104
|
-
if (activeId != null) {
|
|
105
|
-
return flattenedTree.filter(_ref4 => {
|
|
106
|
-
var {
|
|
107
|
-
id,
|
|
108
|
-
selected
|
|
109
|
-
} = _ref4;
|
|
110
|
-
return id === activeId || !selected;
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
return flattenedTree;
|
|
114
|
-
}, [activeId, items]);
|
|
115
|
-
var activeItem = activeId != null ? flattenedItems.find(_ref5 => {
|
|
130
|
+
var activeItem = activeId != null ? items.find(_ref4 => {
|
|
116
131
|
var {
|
|
117
132
|
id
|
|
118
|
-
} =
|
|
133
|
+
} = _ref4;
|
|
119
134
|
return id === activeId;
|
|
120
135
|
}) : null;
|
|
121
|
-
var projected = activeId != null && overId != null ? getProjection(flattenedItems, activeId, overId, offsetLeft, indentationWidth) : null;
|
|
122
136
|
var sensorContext = useRef({
|
|
123
|
-
items
|
|
137
|
+
items,
|
|
124
138
|
offset: offsetLeft
|
|
125
139
|
});
|
|
126
140
|
var keyboardOptions = useMemo(() => ({
|
|
@@ -134,18 +148,18 @@ export default function SortableTreeDndContext(_ref3) {
|
|
|
134
148
|
}
|
|
135
149
|
}), [indentationWidth]);
|
|
136
150
|
var sensors = useSensors(useSensor(PointerSensorWithInteraction, CONSTRAINT), useSensor(KeyboardSensor, keyboardOptions));
|
|
137
|
-
var sortedIds = useMemo(() =>
|
|
151
|
+
var sortedIds = useMemo(() => items.map(_ref5 => {
|
|
138
152
|
var {
|
|
139
153
|
id
|
|
140
|
-
} =
|
|
154
|
+
} = _ref5;
|
|
141
155
|
return id;
|
|
142
|
-
}), [
|
|
156
|
+
}), [items]);
|
|
143
157
|
useEffect(() => {
|
|
144
158
|
sensorContext.current = {
|
|
145
|
-
items
|
|
159
|
+
items,
|
|
146
160
|
offset: offsetLeft
|
|
147
161
|
};
|
|
148
|
-
}, [
|
|
162
|
+
}, [items, offsetLeft]);
|
|
149
163
|
var handleDragStart = useCallback(event => {
|
|
150
164
|
var {
|
|
151
165
|
active: {
|
|
@@ -153,50 +167,43 @@ export default function SortableTreeDndContext(_ref3) {
|
|
|
153
167
|
}
|
|
154
168
|
} = event;
|
|
155
169
|
setActiveId(newActiveId);
|
|
156
|
-
setOverId(newActiveId);
|
|
157
170
|
onDragStart === null || onDragStart === void 0 || onDragStart(newActiveId, event);
|
|
158
171
|
document.body.style.setProperty('cursor', 'grabbing');
|
|
159
172
|
}, [onDragStart]);
|
|
160
|
-
var handleDragMove = useCallback(
|
|
173
|
+
var handleDragMove = useCallback(_ref6 => {
|
|
161
174
|
var {
|
|
162
175
|
delta
|
|
163
|
-
} =
|
|
176
|
+
} = _ref6;
|
|
164
177
|
setOffsetLeft(delta.x);
|
|
165
178
|
}, []);
|
|
166
|
-
var handleDragOver = useCallback(_ref8 => {
|
|
167
|
-
var _ref9;
|
|
168
|
-
var {
|
|
169
|
-
over
|
|
170
|
-
} = _ref8;
|
|
171
|
-
setOverId((_ref9 = over === null || over === void 0 ? void 0 : over.id) !== null && _ref9 !== void 0 ? _ref9 : null);
|
|
172
|
-
}, []);
|
|
173
179
|
var resetState = useCallback(() => {
|
|
174
|
-
setOverId(null);
|
|
175
180
|
setActiveId(null);
|
|
176
181
|
setOffsetLeft(0);
|
|
177
182
|
document.body.style.setProperty('cursor', '');
|
|
178
183
|
}, []);
|
|
179
|
-
var handleDragEnd = useCallback(
|
|
184
|
+
var handleDragEnd = useCallback(_ref7 => {
|
|
185
|
+
var _active$rect$current$, _active$rect$current$2, _active$rect$current$3, _active$rect$current$4;
|
|
180
186
|
var {
|
|
181
187
|
active,
|
|
182
188
|
over
|
|
183
|
-
} =
|
|
189
|
+
} = _ref7;
|
|
190
|
+
var projected = active.id != null && (over === null || over === void 0 ? void 0 : over.id) != null ? getProjection(items, active.id, over.id, ((_active$rect$current$ = (_active$rect$current$2 = active.rect.current.translated) === null || _active$rect$current$2 === void 0 ? void 0 : _active$rect$current$2.left) !== null && _active$rect$current$ !== void 0 ? _active$rect$current$ : 0) - ((_active$rect$current$3 = (_active$rect$current$4 = active.rect.current.initial) === null || _active$rect$current$4 === void 0 ? void 0 : _active$rect$current$4.left) !== null && _active$rect$current$3 !== void 0 ? _active$rect$current$3 : 0), indentationWidth) : null;
|
|
184
191
|
if (projected && over) {
|
|
185
192
|
var {
|
|
186
193
|
depth,
|
|
187
194
|
parentId
|
|
188
195
|
} = projected;
|
|
189
|
-
var clonedItems = JSON.parse(JSON.stringify(
|
|
190
|
-
var overIndex = clonedItems.findIndex(
|
|
196
|
+
var clonedItems = JSON.parse(JSON.stringify(items));
|
|
197
|
+
var overIndex = clonedItems.findIndex(_ref8 => {
|
|
191
198
|
var {
|
|
192
199
|
id
|
|
193
|
-
} =
|
|
200
|
+
} = _ref8;
|
|
194
201
|
return id === over.id;
|
|
195
202
|
});
|
|
196
|
-
var activeIndex = clonedItems.findIndex(
|
|
203
|
+
var activeIndex = clonedItems.findIndex(_ref9 => {
|
|
197
204
|
var {
|
|
198
205
|
id
|
|
199
|
-
} =
|
|
206
|
+
} = _ref9;
|
|
200
207
|
return id === active.id;
|
|
201
208
|
});
|
|
202
209
|
var activeTreeItem = clonedItems[activeIndex];
|
|
@@ -209,17 +216,16 @@ export default function SortableTreeDndContext(_ref3) {
|
|
|
209
216
|
}));
|
|
210
217
|
}
|
|
211
218
|
resetState();
|
|
212
|
-
}, [items,
|
|
219
|
+
}, [items, indentationWidth, onDragEnd, resetState]);
|
|
213
220
|
var handleDragCancel = useCallback(() => {
|
|
214
221
|
resetState();
|
|
215
222
|
}, [resetState]);
|
|
216
223
|
return /*#__PURE__*/_jsx(DndContext, {
|
|
217
224
|
sensors: sensors,
|
|
218
|
-
collisionDetection:
|
|
225
|
+
collisionDetection: fixCursorSnapOffset,
|
|
219
226
|
measuring: MEASURING,
|
|
220
227
|
onDragStart: handleDragStart,
|
|
221
228
|
onDragMove: handleDragMove,
|
|
222
|
-
onDragOver: handleDragOver,
|
|
223
229
|
onDragEnd: handleDragEnd,
|
|
224
230
|
onDragCancel: handleDragCancel,
|
|
225
231
|
children: /*#__PURE__*/_jsxs(SortableContext, {
|
|
@@ -233,8 +239,7 @@ export default function SortableTreeDndContext(_ref3) {
|
|
|
233
239
|
children: activeId != null && activeItem ? /*#__PURE__*/_jsx(TreeItem, {
|
|
234
240
|
depth: activeItem.depth,
|
|
235
241
|
clone: true,
|
|
236
|
-
|
|
237
|
-
value: activeId.toString(),
|
|
242
|
+
value: activeId,
|
|
238
243
|
renderItem: renderItem,
|
|
239
244
|
item: activeItem
|
|
240
245
|
}) : null
|