@deephaven/iris-grid 1.10.3 → 1.12.0
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/FilterInputField.d.ts +2 -0
- package/dist/FilterInputField.d.ts.map +1 -1
- package/dist/FilterInputField.js +3 -1
- package/dist/FilterInputField.js.map +1 -1
- package/dist/IrisGrid.d.ts +10 -0
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +166 -162
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridMetricCalculator.d.ts +33 -1
- package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
- package/dist/IrisGridMetricCalculator.js +96 -0
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridUtils.d.ts +5 -7
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +5 -3
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisibilityOrderingBuilder.js","names":["React","memo","PureComponent","useCallback","useEffect","useRef","classNames","GridUtils","TextUtils","assertNotNull","DbNameValidator","FontAwesomeIcon","dhEye","dhEyeSlash","dhSortAlphaDown","dhSortAlphaUp","dhArrowToTop","dhArrowToBottom","vsChevronUp","vsChevronDown","vsSymbolStructure","vsRefresh","vsCircleLargeFilled","vsAdd","vsBlank","vsCheck","vsKebabVertical","memoize","ActionButton","Button","GLOBAL_SHORTCUTS","Icon","Item","Keyboard","MenuTrigger","Section","SpectrumMenu","Text","clamp","throttle","useUndoRedo","Log","ColumnHeaderGroup","VisibilityOrderingItem","flattenTree","getTreeItems","SortableTree","moveItemsFromDrop","moveToGroup","IrisGridUtils","SearchWithModal","SortableTreeDndContext","jsx","_jsx","jsxs","_jsxs","log","module","VisibilityOrderingBuilderInner","shouldRenderColumn","column","isProxy","constructor","props","_defineProperty","createRef","group","color","columnHeaderGroups","onColumnHeaderGroupChanged","newGroups","newGroup","_objectSpread","splice","findIndex","_ref","name","model","columns","movedColumns","i","length","modelIndex","getModelIndex","isColumnMovable","max","hiddenColumns","selectedColumns","showHiddenColumns","values","treeItems","isDraggable","elements","firstMovableIndex","getFirstMovableIndex","lastMovableIndex","getLastMovableIndex","firstMovableTreeIndex","_ref2","data","Array","isArray","visibleIndex","lastMovableTreeIndex","findLastIndex","_ref3","movableItems","slice","filter","item","isVisible","push","renderImmovableItem","items","renderItem","virtualizerRef","columnName","className","children","handleItemClick","bind","handleDragEnd","handleGroupDelete","handleGroupNameChange","handleGroupCreate","validateGroupName","addColumnToSelected","handleDragStart","handleOverflowAction","handleKeyboardShortcut","handleSearchModalOpenChange","handleSearchSelect","handleSearchItemClicked","state","Set","lastSelectedColumn","isSearchModalOpen","list","componentDidMount","wrapperRef","current","addEventListener","e","target","HTMLElement","treeItem","closest","lastFocusedItemIndex","dataset","index","parseInt","componentDidUpdate","prevProps","setState","scrollAndFocusColumnOnUpdate","_this$virtualizerRef$","itemIndex","itemName","scrollToIndex","window","requestAnimationFrame","_this$list","itemElement","querySelector","concat","focus","warn","document","activeElement","body","documentElement","_this$list2","itemToFocus","componentWillUnmount","filteredGroups","isNew","resetVisibilityOrdering","onReset","onMovedColumnsChanged","initialColumnHeaderGroups","initialMovedColumns","resetSelection","moveSelectedColumns","option","getFlattenedTree","selectedItems","getSelectedParentItems","isMovingUpward","MOVE_OPTIONS","UP","TOP","reverse","newMoves","updatedGroups","_loop","id","parentId","depth","moveItemOrRange","size","BOTTOM","prevItemIndex","map","idx","has","lastIndexOf","prevItem","Math","abs","newParentItemIndex","newParentItem","toIndex","DOWN","nextItem","find","_parentItem$parentId","parentItem","groups","handleMoveColumns","scrollListAfterMove","_this$virtualizerRef$2","scrollToOffset","_this$virtualizerRef$3","scrollBy","getTotalSize","getSortMoves","itemsParam","isAscending","SORTING_OPTIONS","ASC","sort","a","b","aName","toUpperCase","bName","moveToIndex","min","flatMap","getVisibleIndexes","getVisibleIndex","moveRange","moveItem","handleSortColumns","_this$getFirstMovable","_this$getLastMovableI","tree","firstIndex","lastIndex","moveableTree","initialAndFrozenMovedColumns","frozenColumns","_model$getColumnIndex","frozenColumn","newFrozenIndex","getColumnIndexByName","from","to","event","_event$currentTarget","arguments","undefined","stopPropagation","tagName","currentTarget","isModifierKeyDown","isShiftKeyDown","shiftKey","isSelected","columnsToBeAdded","removeColumnFromSelected","selectedItem","_ref4","childCount","selectedIndex","lastSelectedIndex","columnsToAdd","onColumnVisibilityChanged","modelIndexesToShow","getSelectedItemModelIndexes","flat","addToExisting","newSelectedColumns","flattenedItems","forEach","_ref5","child","add","_ref6","_ref7","delete","_loop2","newParentId","_ref8","dragEvent","activatorEvent","isAddingToSelection","selectedParentItems","groupsAfterDrop","parseColumnHeaderGroups","newName","_this$list3","endUndoGroup","oldName","groupIndex","_ref9","oldGroup","parentIndex","_ref0","parent","newParent","removeChildren","addChildren","oldElement","indexAttr","getAttribute","g","startUndoGroup","childIndexes","NEW_GROUP_PREFIX","Date","now","_ref1","_this$virtualizerRef$4","scrollElement","scrollTo","top","groupName","isValidColumnName","some","_ref10","_ref11","_ref12","value","clone","ref","handleProps","displayString","selectedItemNames","_ref13","join","onVisibilityChange","visibilityClickAndDrag","onClick","onGroupDelete","onGroupColorChange","handleGroupColorChange","onGroupNameChange","getMemoizedFirstMovableIndex","getMemoizedLastMovableIndex","showHiddenColumnsState","memoizedGetTreeItems","memoizedGetFlattenedTree","columnNames","_ref14","key","undo","redo","prev","canUndo","canRedo","UNDO","matchesEvent","preventDefault","REDO","isOpen","render","hasSelection","hiddenColumnsSet","columnsToToggle","_","areSomeVisible","allToggleText","selectedToggleText","visibilityOrderingList","makeVisibilityOrderingList","onDragStart","onDragEnd","role","tabIndex","onKeyUp","kind","icon","tooltip","onModalOpenChange","setSelection","closeOnSelect","isQuiet","onAction","disabledKeys","k","textValue","getDisplayText","DSC","disabled","mask","transform","VisibilityOrderingBuilder","onFrozenColumnsChanged","__testRef","set","setUndoState","isUndoRedoAction","isBatched","col","handleColumnHeaderGroupChanged","handleUndo","handleRedo","displayName"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.tsx"],"sourcesContent":["import React, {\n memo,\n PureComponent,\n useCallback,\n useEffect,\n useRef,\n type ReactElement,\n} from 'react';\nimport classNames from 'classnames';\nimport {\n GridUtils,\n type ModelIndex,\n type MoveOperation,\n} from '@deephaven/grid';\nimport { TextUtils, assertNotNull, DbNameValidator } from '@deephaven/utils';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhEye,\n dhEyeSlash,\n dhSortAlphaDown,\n dhSortAlphaUp,\n dhArrowToTop,\n dhArrowToBottom,\n vsChevronUp,\n vsChevronDown,\n vsSymbolStructure,\n vsRefresh,\n vsCircleLargeFilled,\n vsAdd,\n vsBlank,\n vsCheck,\n vsKebabVertical,\n} from '@deephaven/icons';\nimport type { dh } from '@deephaven/jsapi-types';\nimport memoize from 'memoizee';\nimport { type DragStartEvent } from '@dnd-kit/core';\nimport type { Key } from '@react-types/shared';\nimport { type Virtualizer } from '@tanstack/react-virtual';\nimport {\n ActionButton,\n Button,\n GLOBAL_SHORTCUTS,\n Icon,\n Item,\n Keyboard,\n MenuTrigger,\n Section,\n SpectrumMenu,\n Text,\n} from '@deephaven/components';\nimport clamp from 'lodash.clamp';\nimport throttle from 'lodash.throttle';\nimport { useUndoRedo } from '@deephaven/react-hooks';\nimport Log from '@deephaven/log';\nimport './VisibilityOrderingBuilder.scss';\nimport { type DisplayColumn } from '../../IrisGridModel';\nimport type IrisGridModel from '../../IrisGridModel';\nimport { type ColumnName } from '../../CommonTypes';\nimport ColumnHeaderGroup from '../../ColumnHeaderGroup';\nimport VisibilityOrderingItem from './VisibilityOrderingItem';\nimport {\n type FlattenedIrisGridTreeItem,\n flattenTree,\n getTreeItems,\n type IrisGridTreeItem,\n type IrisGridTreeItemData,\n} from './sortable-tree/utilities';\nimport SortableTree from './sortable-tree/SortableTree';\nimport { type TreeItemRenderFnProps } from './sortable-tree/TreeItem';\nimport {\n moveItemsFromDrop,\n moveToGroup,\n} from './VisibilityOrderingBuilderUtils';\nimport IrisGridUtils from '../../IrisGridUtils';\nimport SearchWithModal from './SearchWithModal';\nimport SortableTreeDndContext from './sortable-tree/SortableTreeDndContext';\n\nconst log = Log.module('VisibilityOrderingBuilder');\n\nexport interface VisibilityOrderingBuilderProps {\n model: IrisGridModel;\n movedColumns: readonly MoveOperation[];\n hiddenColumns: readonly ModelIndex[];\n columnHeaderGroups: readonly ColumnHeaderGroup[];\n onColumnVisibilityChanged: (\n columns: readonly ModelIndex[],\n isVisible: boolean\n ) => void;\n onReset: () => void;\n onMovedColumnsChanged: (\n operations: readonly MoveOperation[],\n cb?: () => void\n ) => void;\n onColumnHeaderGroupChanged: (groups: readonly ColumnHeaderGroup[]) => void;\n onFrozenColumnsChanged: (columns: readonly ColumnName[]) => void;\n __testRef?: React.Ref<VisibilityOrderingBuilderInner>;\n}\n\ninterface VisibilityOrderingBuilderInnerProps\n extends Omit<\n VisibilityOrderingBuilderProps,\n 'onFrozenColumnsChanged' | '__testRef'\n > {\n undo: () => void;\n redo: () => void;\n canUndo: boolean;\n canRedo: boolean;\n startUndoGroup: () => void;\n endUndoGroup: () => void;\n}\n\ninterface VisibilityOrderingBuilderInnerState {\n selectedColumns: Set<string>;\n lastSelectedColumn: string;\n isSearchModalOpen: boolean;\n showHiddenColumns: boolean;\n /**\n * This is used only for drag end. In React 18, it seems our rendering is causing\n * 1 render with just the children of this component, then updating to render with the\n * updated movedColumns prop. That is causing the drop animation to animate back to\n * the original position of the element.\n */\n movedColumns: readonly MoveOperation[];\n /**\n * This is used for the same reason as movedColumns above, but for dragging in/out of groups.\n */\n columnHeaderGroups: readonly ColumnHeaderGroup[];\n}\n\nclass VisibilityOrderingBuilderInner extends PureComponent<\n VisibilityOrderingBuilderInnerProps,\n VisibilityOrderingBuilderInnerState\n> {\n static SORTING_OPTIONS = { DSC: 'DSC', ASC: 'ASC' } as const;\n\n static MOVE_OPTIONS = {\n TOP: 'TOP',\n BOTTOM: 'BOTTOM',\n UP: 'UP',\n DOWN: 'DOWN',\n } as const;\n\n static shouldRenderColumn(column: DisplayColumn): boolean {\n // We don't want to render the proxy column in the visibility ordering list\n return column.isProxy !== true;\n }\n\n constructor(props: VisibilityOrderingBuilderInnerProps) {\n super(props);\n\n this.handleItemClick = this.handleItemClick.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleGroupDelete = this.handleGroupDelete.bind(this);\n this.handleGroupNameChange = this.handleGroupNameChange.bind(this);\n this.handleGroupCreate = this.handleGroupCreate.bind(this);\n this.validateGroupName = this.validateGroupName.bind(this);\n this.addColumnToSelected = this.addColumnToSelected.bind(this);\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleOverflowAction = this.handleOverflowAction.bind(this);\n this.handleKeyboardShortcut = this.handleKeyboardShortcut.bind(this);\n this.handleSearchModalOpenChange =\n this.handleSearchModalOpenChange.bind(this);\n this.handleSearchSelect = this.handleSearchSelect.bind(this);\n this.handleSearchItemClicked = this.handleSearchItemClicked.bind(this);\n this.renderItem = this.renderItem.bind(this);\n\n this.state = {\n selectedColumns: new Set(),\n lastSelectedColumn: '',\n showHiddenColumns: true,\n isSearchModalOpen: false,\n movedColumns: props.movedColumns,\n columnHeaderGroups: props.columnHeaderGroups,\n };\n\n this.list = null;\n }\n\n componentDidMount(): void {\n assertNotNull(this.wrapperRef.current);\n // This fixes focus loss when editing a group because we use the name as the key for rendering.\n // When the name is changed or group deleted, we lose focus entirely which is indicated by\n // the focusout relatedTarget being null.\n this.wrapperRef.current.addEventListener('focusin', (e: FocusEvent) => {\n if (e.target instanceof HTMLElement) {\n const treeItem = e.target.closest('.tree-item') as HTMLElement | null;\n if (treeItem != null) {\n this.lastFocusedItemIndex =\n typeof treeItem.dataset.index === 'string'\n ? parseInt(treeItem.dataset.index, 10)\n : null;\n }\n }\n });\n }\n\n componentDidUpdate(prevProps: VisibilityOrderingBuilderInnerProps): void {\n // If we change because of undo/redo or reorders in the grid, update internal state\n const { movedColumns, columnHeaderGroups } = this.props;\n if (prevProps.movedColumns !== movedColumns) {\n this.setState({ movedColumns });\n }\n if (prevProps.columnHeaderGroups !== columnHeaderGroups) {\n this.setState({ columnHeaderGroups });\n }\n\n // Scroll to the item when it's available\n if (this.scrollAndFocusColumnOnUpdate != null) {\n const [itemIndex, itemName] = this.scrollAndFocusColumnOnUpdate;\n this.virtualizerRef.current?.scrollToIndex(itemIndex);\n\n // Need to wait for the paint after the scroll so the item exists in the DOM\n window.requestAnimationFrame(() => {\n if (this.scrollAndFocusColumnOnUpdate == null) {\n return;\n }\n const itemElement = this.list?.querySelector(\n `.item-wrapper[data-id=\"${itemName}\"] .tree-item`\n );\n if (itemElement instanceof HTMLElement) {\n itemElement.focus();\n } else {\n log.warn(`Could not focus item ${itemName} after scroll`);\n }\n this.scrollAndFocusColumnOnUpdate = null;\n });\n }\n\n // document.activeElement is either body or html when nothing is focused.\n // If there is no focused element, then we probably deleted or renamed a group\n // resulting in focus loss. Try to re-establish focus.\n // Cannot rely on focusout event for this because it doesn't fire when the focused element is deleted\n // (except in Chrome which is against the spec here).\n if (\n (document.activeElement === document.body ||\n document.activeElement === document.documentElement) &&\n this.lastFocusedItemIndex !== null\n ) {\n const itemToFocus = this.list?.querySelector(\n `.item-wrapper[data-index=\"${this.lastFocusedItemIndex}\"] .tree-item`\n );\n\n if (itemToFocus != null && itemToFocus instanceof HTMLElement) {\n itemToFocus.focus();\n } else {\n log.warn('Could not maintain focus');\n this.lastFocusedItemIndex = null;\n }\n }\n }\n\n componentWillUnmount(): void {\n const { columnHeaderGroups, onColumnHeaderGroupChanged } = this.props;\n // Clean up unnamed groups on unmount\n const filteredGroups = columnHeaderGroups.filter(group => !group.isNew);\n if (filteredGroups.length !== columnHeaderGroups.length) {\n onColumnHeaderGroupChanged(filteredGroups);\n }\n }\n\n wrapperRef = React.createRef<HTMLDivElement>();\n\n /**\n * Used to track the last focused item index to maintain focus on updates.\n * Cannot use name because it may change or be deleted when undoing or redoing.\n */\n lastFocusedItemIndex: number | null = null;\n\n list: HTMLDivElement | null;\n\n virtualizerRef: React.RefObject<Virtualizer<HTMLElement, Element>> =\n React.createRef();\n\n /**\n * This is set by the search modal handlers since a column could be hidden\n * and not displayed in the list. We need to wait until the update to scroll to it.\n */\n scrollAndFocusColumnOnUpdate: [number, string] | null = null;\n\n resetVisibilityOrdering(): void {\n const {\n model,\n onReset,\n onMovedColumnsChanged,\n onColumnHeaderGroupChanged,\n } = this.props;\n\n this.setState({\n selectedColumns: new Set(),\n lastSelectedColumn: '',\n });\n\n onReset();\n onColumnHeaderGroupChanged(model.initialColumnHeaderGroups);\n onMovedColumnsChanged(model.initialMovedColumns);\n }\n\n resetSelection(): void {\n this.setState({\n selectedColumns: new Set(),\n lastSelectedColumn: '',\n });\n }\n\n /**\n * Moves the currently selected columns in the direction specified.\n * Does not commit any changes to any state, just gets the required modifications.\n *\n * Items that are part of a selected group should not be moved separate from the group.\n *\n * Items moved to top or bottom should be removed from any groups they are within,\n * unless part of a group that is also selected. The highest level selected group will\n * be moved to the root level of the tree.\n *\n * Items moved up or down should move into and out of groups when applicable.\n * They should never move more than 1 depth level at a time.\n *\n * Multiple selected items should move to the top or bottom in their existing order,\n * but become one block of continuous columns.\n *\n * Multiple selected items moving up or down should move independently,\n * unless they are at the same depth and contiguous. In that case, they should\n * move in and out of groups together. I.e. if the 2 items above a group are selected,\n * and the move down button is pressed, then both items should be moved into the group.\n *\n * @param option The movement option\n * @returns A new copy of the movedColumns including moves required to perform the operation.\n *\n */\n moveSelectedColumns(\n option: keyof typeof VisibilityOrderingBuilderInner.MOVE_OPTIONS\n ): { newMoves: MoveOperation[]; groups: readonly ColumnHeaderGroup[] } {\n const { columnHeaderGroups } = this.props;\n const { selectedColumns } = this.state;\n\n const treeItems = this.getFlattenedTree();\n let firstMovableIndex = this.getFirstMovableIndex();\n let lastMovableIndex = this.getLastMovableIndex();\n assertNotNull(firstMovableIndex);\n assertNotNull(lastMovableIndex);\n\n const selectedItems = this.getSelectedParentItems();\n\n const isMovingUpward =\n option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.UP ||\n option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP;\n\n // for moving up and to the top, move column(s) in visibility index order\n // for moving down and to the bottom, move column(s) in reverse visibility index order\n if (!isMovingUpward) {\n selectedItems.reverse();\n }\n\n let newMoves = [] as MoveOperation[];\n let updatedGroups = columnHeaderGroups;\n\n for (let i = 0; i < selectedItems.length; i += 1) {\n const {\n id,\n parentId,\n depth,\n data: { visibleIndex },\n } = selectedItems[i];\n\n switch (option) {\n case VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP: {\n newMoves = GridUtils.moveItemOrRange(\n visibleIndex,\n firstMovableIndex,\n newMoves,\n true\n );\n const size = Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n firstMovableIndex += size;\n // Moving items to top should move out of any groups\n updatedGroups = moveToGroup(selectedItems[i], null, updatedGroups);\n break;\n }\n case VisibilityOrderingBuilderInner.MOVE_OPTIONS.BOTTOM: {\n newMoves = GridUtils.moveItemOrRange(\n visibleIndex,\n lastMovableIndex,\n newMoves,\n true\n );\n const size = Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n lastMovableIndex -= size;\n // Moving items to bottom should move out of any groups\n updatedGroups = moveToGroup(selectedItems[i], null, updatedGroups);\n break;\n }\n case VisibilityOrderingBuilderInner.MOVE_OPTIONS.UP: {\n const itemIndex = treeItems.findIndex(item => item.id === id);\n // Array.findLast would be better here, but it's too new for our browser support\n const prevItemIndex = treeItems\n .map(\n (item, idx) => idx < itemIndex && !selectedColumns.has(item.id)\n )\n .lastIndexOf(true);\n const prevItem = treeItems[prevItemIndex];\n\n if (prevItem != null && prevItem.parentId !== parentId) {\n // Moving into a different parent\n if (Math.abs(prevItem.depth - depth) > 1) {\n // Prev item is more than 1 level away\n // Find prev parent at same depth as current\n // This way we only ever move 1 depth level per event\n const newParentItemIndex = treeItems\n .map((item, idx) => idx < prevItemIndex && item.depth === depth)\n .lastIndexOf(true);\n const newParentItem = treeItems[newParentItemIndex];\n updatedGroups = moveToGroup(\n selectedItems[i],\n newParentItem.id,\n updatedGroups\n );\n } else {\n updatedGroups = moveToGroup(\n selectedItems[i],\n prevItem.parentId,\n updatedGroups\n );\n }\n } else {\n const toIndex = clamp(\n Array.isArray(visibleIndex)\n ? visibleIndex[0] - 1\n : visibleIndex - 1,\n firstMovableIndex,\n lastMovableIndex\n );\n newMoves = GridUtils.moveItemOrRange(\n visibleIndex,\n toIndex,\n newMoves,\n false\n );\n const size = Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n firstMovableIndex += size;\n }\n break;\n }\n case VisibilityOrderingBuilderInner.MOVE_OPTIONS.DOWN: {\n const itemIndex = treeItems.findIndex(item => item.id === id);\n const nextItem = treeItems.find(\n (item, idx) => idx > itemIndex && !selectedColumns.has(item.id)\n );\n\n if (nextItem?.parentId !== parentId) {\n // Moving out of our group\n // Move to the parent of our parent\n // That way we only ever move 1 level at a time\n const parentItem = treeItems.find(item => item.id === parentId);\n updatedGroups = moveToGroup(\n selectedItems[i],\n parentItem?.parentId ?? null,\n updatedGroups\n );\n break;\n } else if (nextItem?.children.length > 0) {\n // Moving into a group as 1st item\n updatedGroups = moveToGroup(\n selectedItems[i],\n nextItem.id,\n updatedGroups\n );\n break;\n }\n\n const toIndex = clamp(\n Array.isArray(visibleIndex)\n ? visibleIndex[0] + 1\n : visibleIndex + 1,\n firstMovableIndex,\n lastMovableIndex\n );\n newMoves = GridUtils.moveItemOrRange(\n visibleIndex,\n toIndex,\n newMoves,\n false\n );\n const size = Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n lastMovableIndex -= size;\n\n break;\n }\n }\n }\n\n return { newMoves, groups: updatedGroups };\n }\n\n /**\n * Moves the selected columns according to the option.\n * Commits changes to state and scrolls the list if moving to top or bottom.\n *\n * @param option The move operation\n */\n handleMoveColumns(\n option: keyof typeof VisibilityOrderingBuilderInner.MOVE_OPTIONS\n ): void {\n const { onMovedColumnsChanged, movedColumns, onColumnHeaderGroupChanged } =\n this.props;\n\n const { newMoves, groups } = this.moveSelectedColumns(option);\n let scrollListAfterMove: (() => void) | undefined;\n\n if (option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP) {\n scrollListAfterMove = () => {\n this.virtualizerRef.current?.scrollToOffset(0);\n };\n }\n if (option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.BOTTOM) {\n scrollListAfterMove = () => {\n this.virtualizerRef.current?.scrollBy(\n this.virtualizerRef.current.getTotalSize()\n );\n };\n }\n\n onColumnHeaderGroupChanged(groups);\n\n if (newMoves.length > 0) {\n onMovedColumnsChanged(movedColumns.concat(newMoves), scrollListAfterMove);\n }\n }\n\n /**\n * Get the move operations required to recursively sort the grid\n * Column header groups are sorted using their name\n * Children of column header groups are then sorted within each group\n *\n * @param items The tree items to sort\n * @param option Direction of the sort\n * @param movedColumns The existing moved columns for the sort\n * Grids may use an initial move list from the model (e.g. column header groups)\n * Also used to recursively sort header groups\n * @returns The moves required to sort the grid. Includes the starting movedColumns in the array\n */\n getSortMoves(\n itemsParam: readonly IrisGridTreeItem[],\n option: keyof typeof VisibilityOrderingBuilderInner.SORTING_OPTIONS,\n movedColumns: readonly MoveOperation[]\n ): MoveOperation[] {\n const items = [...itemsParam];\n // Sort all the movable columns\n const isAscending =\n option === VisibilityOrderingBuilderInner.SORTING_OPTIONS.ASC;\n items.sort((a, b) => {\n const aName = a.id.toUpperCase();\n const bName = b.id.toUpperCase();\n return TextUtils.sort(aName, bName, isAscending);\n });\n\n let newMoves = [...movedColumns]; // Start with the base state moves by the model\n let moveToIndex = Math.min(\n ...items.flatMap(item => {\n const { modelIndex } = item.data;\n return Array.isArray(modelIndex)\n ? GridUtils.getVisibleIndexes(modelIndex, newMoves)\n : GridUtils.getVisibleIndex(modelIndex, newMoves);\n })\n );\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { modelIndex } = item.data;\n const visibleIndex = Array.isArray(modelIndex)\n ? GridUtils.getVisibleIndexes(modelIndex, newMoves)\n : GridUtils.getVisibleIndex(modelIndex, newMoves);\n newMoves = Array.isArray(visibleIndex)\n ? GridUtils.moveRange(\n [Math.min(...visibleIndex), Math.max(...visibleIndex)],\n moveToIndex,\n newMoves,\n true\n )\n : GridUtils.moveItem(visibleIndex, moveToIndex, newMoves);\n\n if (Array.isArray(visibleIndex)) {\n // Recursively sort groups\n newMoves = this.getSortMoves(item.children, option, newMoves);\n }\n\n moveToIndex += Array.isArray(modelIndex) ? modelIndex.length : 1;\n }\n\n return newMoves;\n }\n\n handleSortColumns(\n option: keyof typeof VisibilityOrderingBuilderInner.SORTING_OPTIONS\n ): void {\n const { model, onMovedColumnsChanged } = this.props;\n const tree = this.getTreeItems();\n const firstIndex = this.getFirstMovableIndex() ?? 0;\n const lastIndex = this.getLastMovableIndex() ?? tree.length - 1;\n const moveableTree = tree.slice(firstIndex, lastIndex + 1);\n\n // add frozen moves\n const initialAndFrozenMovedColumns = [...model.initialMovedColumns];\n for (let i = 0; i < model.frozenColumns.length; i += 1) {\n const frozenColumn = model.frozenColumns[i];\n const newFrozenIndex = GridUtils.getVisibleIndex(\n model.getColumnIndexByName(frozenColumn) ?? 0,\n initialAndFrozenMovedColumns\n );\n if (newFrozenIndex !== i) {\n initialAndFrozenMovedColumns.push({\n from: newFrozenIndex,\n to: i,\n });\n }\n }\n\n const newMoves = this.getSortMoves(\n moveableTree,\n option,\n initialAndFrozenMovedColumns\n );\n\n onMovedColumnsChanged(newMoves);\n }\n\n /**\n * Handles clicking on an item in the visibility ordering list.\n * Adds and removes to selection as necessary based on modifier and shift keys.\n * Returns the columns to be added to the selection, if any.\n *\n * @param name The name of the column clicked\n * @param event The click event\n * @param showHiddenColumns If hidden columns should be included in the selection\n * @returns The columns to be added to the selection, if any`\n */\n handleItemClick(\n name: string,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n showHiddenColumns = false\n ): string[] {\n event.stopPropagation();\n\n // Click was triggered by an interactive element. Ignore select\n if (\n event.target instanceof HTMLElement &&\n (event.target.tagName === 'BUTTON' || event.target.tagName === 'INPUT')\n ) {\n return [];\n }\n\n event.currentTarget?.focus();\n\n const { selectedColumns, lastSelectedColumn } = this.state;\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n const isSelected = selectedColumns.has(name);\n const columnsToBeAdded = [name];\n\n if (isSelected && isModifierKeyDown) {\n this.removeColumnFromSelected(name);\n return [];\n }\n\n const movableItems = this.getFlattenedTree(showHiddenColumns);\n\n if (isSelected && !isShiftKeyDown && lastSelectedColumn === name) {\n const selectedItem = movableItems.find(({ id }) => id === name);\n assertNotNull(selectedItem);\n const childCount = flattenTree(selectedItem.children).length;\n // If clicking on an item and it's the only thing selected, deselect it\n if (childCount + 1 === selectedColumns.size) {\n this.resetSelection();\n return [];\n }\n }\n\n if (isShiftKeyDown) {\n const selectedIndex = movableItems.findIndex(item => item.id === name);\n const lastSelectedIndex = movableItems.findIndex(\n item => item.id === lastSelectedColumn\n );\n\n columnsToBeAdded.push(\n ...movableItems\n .slice(\n Math.min(lastSelectedIndex, selectedIndex),\n Math.max(lastSelectedIndex, selectedIndex) + 1\n )\n .map(item => item.id)\n );\n }\n\n this.addColumnToSelected(\n columnsToBeAdded,\n isModifierKeyDown || isShiftKeyDown\n );\n\n this.setState({\n lastSelectedColumn: name,\n });\n\n return columnsToBeAdded;\n }\n\n handleSearchItemClicked(\n item: FlattenedIrisGridTreeItem,\n event: React.MouseEvent<HTMLElement>\n ): void {\n const columnsToAdd = this.handleItemClick(item.id, event, true);\n const { showHiddenColumns } = this.state;\n const { onColumnVisibilityChanged } = this.props;\n\n if (columnsToAdd.length === 0) {\n return;\n }\n\n const modelIndexesToShow = this.getSelectedItemModelIndexes(\n new Set(columnsToAdd)\n );\n\n if (!showHiddenColumns) {\n onColumnVisibilityChanged(modelIndexesToShow, true);\n }\n\n if (event.shiftKey || GridUtils.isModifierKeyDown(event)) {\n return;\n }\n\n this.scrollAndFocusColumnOnUpdate = [item.index, item.id];\n }\n\n handleSearchSelect(items: readonly FlattenedIrisGridTreeItem[]): void {\n if (items.length === 0) {\n return;\n }\n const { showHiddenColumns } = this.state;\n const { onColumnVisibilityChanged } = this.props;\n\n if (!showHiddenColumns) {\n const modelIndexesToShow = [\n ...new Set(items.map(item => item.data.modelIndex).flat()),\n ];\n onColumnVisibilityChanged(modelIndexesToShow, true);\n }\n\n this.scrollAndFocusColumnOnUpdate = [items[0].index, items[0].id];\n this.addColumnToSelected(\n items.map(item => item.id),\n false\n );\n }\n\n /**\n * Adds columns or groups to the selected column set\n * Groups being added will add all of their children to the selection as well\n *\n * @param columnsToBeAdded Array of column or group names to add\n * @param addToExisting If these should be added to the existing selection or overwrite it\n */\n addColumnToSelected(\n columnsToBeAdded: string[],\n addToExisting: boolean\n ): void {\n const { selectedColumns } = this.state;\n const newSelectedColumns = new Set(\n addToExisting\n ? [...selectedColumns.values()].concat(columnsToBeAdded)\n : columnsToBeAdded\n );\n\n const flattenedItems = this.getFlattenedTree();\n\n // Add all children of selected groups to the selected columns\n // The treeItems array will always be parent -> child in the order\n // We don't need to recursively iterate because of this\n // The parent will always be added before any children for nested selections\n flattenedItems.forEach(({ id, children }) => {\n if (newSelectedColumns.has(id)) {\n children.forEach(child => newSelectedColumns.add(child.id));\n }\n });\n\n this.setState({\n selectedColumns: newSelectedColumns,\n });\n }\n\n /**\n * Removes a column or group from selected columns set.\n *\n * Removing a group will deselect all of its children.\n *\n * Removing a child will deselect all parent groups.\n * Other children in those parents will stay selected, just not the group item.\n *\n * @param name Name of the column to remove\n */\n removeColumnFromSelected(name: string): void {\n const { selectedColumns } = this.state;\n const flattenedItems = this.getFlattenedTree();\n\n const item = flattenedItems.find(({ id }) => id === name);\n assertNotNull(item);\n let parentItem = flattenedItems.find(({ id }) => id === item.parentId);\n\n // Remove all children of deselected groups\n flattenTree(item?.children).forEach(child =>\n selectedColumns.delete(child.id)\n );\n\n // Remove all parents of the removed group since it is no longer fully selected\n while (parentItem != null) {\n selectedColumns.delete(parentItem.id);\n const newParentId = parentItem.parentId;\n parentItem = flattenedItems.find(({ id }) => id === newParentId);\n }\n\n selectedColumns.delete(name);\n\n this.setState({\n selectedColumns: new Set(selectedColumns),\n });\n }\n\n handleDragStart(id: string, event: DragStartEvent): void {\n const { selectedColumns } = this.state;\n if (selectedColumns.has(id)) {\n return;\n }\n\n const dragEvent =\n event.activatorEvent as unknown as React.MouseEvent<HTMLElement>;\n const isAddingToSelection =\n GridUtils.isModifierKeyDown(dragEvent) || dragEvent.shiftKey;\n this.handleItemClick(\n id,\n event.activatorEvent as unknown as React.MouseEvent<HTMLElement>,\n true\n );\n // Always add the dragged item back to selected in case the user ctrl+dragged on an already\n // selected item. The handleItemClick would deselect it, but we want to keep it selected.\n this.addColumnToSelected([id], isAddingToSelection);\n }\n\n handleDragEnd(\n from: FlattenedIrisGridTreeItem,\n to: FlattenedIrisGridTreeItem\n ): void {\n const {\n model,\n movedColumns,\n onMovedColumnsChanged,\n columnHeaderGroups,\n onColumnHeaderGroupChanged,\n } = this.props;\n\n const selectedParentItems = this.getSelectedParentItems();\n const firstMovableIndex = this.getFirstMovableIndex();\n const lastMovableIndex = this.getLastMovableIndex();\n\n assertNotNull(firstMovableIndex);\n assertNotNull(lastMovableIndex);\n\n const { groups: groupsAfterDrop, movedColumns: newMoves } =\n moveItemsFromDrop(\n from,\n to,\n movedColumns,\n columnHeaderGroups,\n selectedParentItems,\n firstMovableIndex,\n lastMovableIndex\n );\n\n // Need to parse so the internal state is correct to prevent weird drop animations\n // when adding/removing from groups. But don't parse if nothing changed to prevent\n // unnecessary undo/redo states.\n const newGroups =\n groupsAfterDrop !== columnHeaderGroups\n ? IrisGridUtils.parseColumnHeaderGroups(model, groupsAfterDrop).groups\n : columnHeaderGroups;\n\n onColumnHeaderGroupChanged(newGroups);\n onMovedColumnsChanged(newMoves);\n // Without tracking the state here, React 18 is rendering the child separately from\n // the render which changes the prop. As a result, the drop animations go to the\n // original location because of that render with stale items. I could not find any\n // other way to fix this (removing memoization, removing keys, etc.)\n this.setState({\n movedColumns: newMoves,\n columnHeaderGroups: newGroups,\n });\n // Focus the dragged item after the move. Should not scroll since it's already in view\n this.scrollAndFocusColumnOnUpdate = [to.index, from.id];\n }\n\n handleGroupNameChange(group: ColumnHeaderGroup, newName: string): void {\n const { columnHeaderGroups, onColumnHeaderGroupChanged, endUndoGroup } =\n this.props;\n const newGroups = [...columnHeaderGroups];\n\n const oldName = group.name;\n const groupIndex = newGroups.findIndex(({ name }) => name === oldName);\n const oldGroup = newGroups[groupIndex];\n assertNotNull(oldGroup); // Also means groupIndex >= 0\n\n const newGroup = new ColumnHeaderGroup(oldGroup);\n newGroup.name = newName;\n newGroups.splice(groupIndex, 1, newGroup);\n\n const parentIndex = newGroups.findIndex(\n ({ name }) => name === newGroup.parent\n );\n\n if (parentIndex >= 0) {\n const newParent = new ColumnHeaderGroup(newGroups[parentIndex]);\n newParent.removeChildren([oldName]);\n newParent.addChildren([newName]);\n newGroups.splice(parentIndex, 1, newParent);\n }\n\n const oldElement = this.list?.querySelector(\n `.item-wrapper[data-id=\"${oldName}\"]`\n );\n if (oldElement != null) {\n // The group will be a new item, so focus it after the update\n // otherwise we may lose focus entirely\n const indexAttr = oldElement.getAttribute('data-index');\n this.scrollAndFocusColumnOnUpdate =\n indexAttr != null ? [parseInt(indexAttr, 10), newName] : null;\n }\n\n onColumnHeaderGroupChanged(newGroups);\n endUndoGroup();\n }\n\n handleGroupColorChange = throttle(\n (group: ColumnHeaderGroup, color: string | undefined): void => {\n const { columnHeaderGroups, onColumnHeaderGroupChanged } = this.props;\n const newGroups = [...columnHeaderGroups];\n const newGroup = new ColumnHeaderGroup({ ...group, color });\n\n newGroups.splice(\n newGroups.findIndex(({ name }) => name === group.name),\n 1,\n newGroup\n );\n\n onColumnHeaderGroupChanged(newGroups);\n },\n 250\n );\n\n handleGroupDelete(group: ColumnHeaderGroup): void {\n const { columnHeaderGroups, endUndoGroup, onColumnHeaderGroupChanged } =\n this.props;\n const newGroups = columnHeaderGroups.filter(g => g.name !== group.name);\n const parentIndex = newGroups.findIndex(g => g.name === group.parent);\n if (parentIndex >= 0) {\n const newParent = new ColumnHeaderGroup(newGroups[parentIndex]);\n newParent.addChildren(group.children);\n newParent.removeChildren([group.name]);\n newGroups.splice(parentIndex, 1, newParent);\n }\n onColumnHeaderGroupChanged(newGroups);\n // Could be started from editing a new group which is deleted without saving\n endUndoGroup();\n }\n\n handleGroupCreate(): void {\n const {\n movedColumns,\n onMovedColumnsChanged,\n onColumnHeaderGroupChanged,\n startUndoGroup,\n } = this.props;\n\n const { newMoves, groups } = this.moveSelectedColumns(\n VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP\n );\n\n const newGroups = groups.filter(group => !group.isNew);\n\n const selectedItems = this.getSelectedParentItems();\n\n const childIndexes = selectedItems\n .map(item => item.data.modelIndex)\n .flat()\n .filter(index => index >= 0);\n\n // We don't care about this name really as long as it's unique\n // The user must change it and we display a placeholder instead\n const name = `${ColumnHeaderGroup.NEW_GROUP_PREFIX}-${Date.now()}`;\n\n const newGroup = new ColumnHeaderGroup({\n name,\n children: selectedItems.map(({ id }) => id),\n depth: 0,\n childIndexes: [...new Set(childIndexes)], // Remove any duplicates\n });\n\n startUndoGroup();\n\n onMovedColumnsChanged(movedColumns.concat(newMoves), () => {\n this.virtualizerRef.current?.scrollElement?.scrollTo({ top: 0 });\n });\n onColumnHeaderGroupChanged(newGroups.concat([newGroup]));\n this.resetSelection();\n }\n\n /**\n * Validates if a header group name is valid and not in use by any header groups or columns\n * @param groupName The name to validate\n * @returns Error message if invalid\n */\n validateGroupName(groupName: string): string {\n const { model, columnHeaderGroups } = this.props;\n const { columns } = model;\n\n if (!DbNameValidator.isValidColumnName(groupName)) {\n return 'Invalid name';\n }\n\n if (\n columns.some(({ name }) => name === groupName) ||\n columnHeaderGroups.some(({ name }) => name === groupName)\n ) {\n return 'Duplicate name';\n }\n\n return '';\n }\n\n renderItem({\n value,\n clone,\n item,\n ref,\n handleProps,\n }: TreeItemRenderFnProps<IrisGridTreeItemData>): JSX.Element {\n const { onColumnVisibilityChanged } = this.props;\n const { selectedColumns, showHiddenColumns } = this.state;\n\n let displayString = value;\n\n // The cloned drag overlay we want to show the items being dragged\n if (clone) {\n const selectedItemNames = this.getSelectedParentItems().map(\n ({ id }) => id\n );\n displayString = selectedItemNames.join(', ');\n }\n\n return (\n <VisibilityOrderingItem\n key={item.id}\n ref={ref}\n value={displayString}\n clone={clone}\n item={item}\n childCount={selectedColumns.size}\n onVisibilityChange={onColumnVisibilityChanged}\n visibilityClickAndDrag={showHiddenColumns}\n onClick={this.handleItemClick}\n onGroupDelete={this.handleGroupDelete}\n onGroupColorChange={this.handleGroupColorChange}\n onGroupNameChange={this.handleGroupNameChange}\n validateGroupName={this.validateGroupName}\n handleProps={handleProps}\n />\n );\n }\n\n getMemoizedFirstMovableIndex = memoize(\n (\n model: IrisGridModel,\n columns: readonly dh.Column[],\n movedColumns: readonly MoveOperation[]\n ) => {\n for (let i = 0; i < columns.length; i += 1) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n\n if (model.isColumnMovable(modelIndex)) {\n return i;\n }\n }\n\n return null;\n },\n { max: 10 }\n );\n\n /**\n * Gets the first movable visible index\n */\n getFirstMovableIndex(): number | null {\n const { model, movedColumns } = this.props;\n return this.getMemoizedFirstMovableIndex(\n model,\n model.columns,\n movedColumns\n );\n }\n\n getMemoizedLastMovableIndex = memoize(\n (\n model: IrisGridModel,\n columns: readonly dh.Column[],\n movedColumns: readonly MoveOperation[]\n ) => {\n for (let i = columns.length - 1; i >= 0; i -= 1) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n\n if (model.isColumnMovable(modelIndex)) {\n return i;\n }\n }\n\n return null;\n },\n { max: 10 }\n );\n\n /**\n * Gets the last movable visible index\n */\n getLastMovableIndex(): number | null {\n const { model, movedColumns } = this.props;\n return this.getMemoizedLastMovableIndex(model, model.columns, movedColumns);\n }\n\n memoizedGetTreeItems = memoize(\n (\n columns: readonly dh.Column[],\n movedColumns: readonly MoveOperation[],\n columnHeaderGroups: readonly ColumnHeaderGroup[],\n hiddenColumns: readonly ModelIndex[],\n selectedColumns: ReadonlySet<string>,\n showHiddenColumns: boolean\n ): readonly IrisGridTreeItem[] =>\n getTreeItems(\n columns,\n movedColumns,\n columnHeaderGroups,\n hiddenColumns,\n [...selectedColumns.values()],\n showHiddenColumns\n ),\n { max: 2 }\n );\n\n /**\n * Gets the tree items in order. Memoized for efficiency\n * Use this.getFlattenedTree() if a flat list is needed\n * @param showHiddenColumns Whether to show hidden columns in the tree. Defaults to the current state value.\n * @returns The tree items in order\n */\n getTreeItems(showHiddenColumns?: boolean): readonly IrisGridTreeItem[] {\n const { model, hiddenColumns } = this.props;\n const {\n movedColumns,\n columnHeaderGroups,\n selectedColumns,\n showHiddenColumns: showHiddenColumnsState,\n } = this.state;\n\n return this.memoizedGetTreeItems(\n model.columns,\n movedColumns,\n columnHeaderGroups,\n hiddenColumns,\n selectedColumns,\n showHiddenColumns ?? showHiddenColumnsState\n );\n }\n\n memoizedGetFlattenedTree = memoize(\n (\n treeItems: readonly IrisGridTreeItem[]\n ): readonly FlattenedIrisGridTreeItem[] => flattenTree(treeItems),\n { max: 2 }\n );\n\n /**\n * Gets the flattened tree items in order. Memoized for efficiency\n * @param showHiddenColumns Whether to show hidden columns in the tree. Defaults to the current state value.\n * @returns The flattened tree items in order\n */\n getFlattenedTree(\n showHiddenColumns?: boolean\n ): readonly FlattenedIrisGridTreeItem[] {\n return this.memoizedGetFlattenedTree(this.getTreeItems(showHiddenColumns));\n }\n\n getSelectedItemModelIndexes(columnNames: Set<string>): ModelIndex[] {\n const { model } = this.props;\n return [...columnNames.values()]\n .map(name => model.getColumnIndexByName(name))\n .filter(i => i != null)\n .flat();\n }\n\n /**\n * Gets the selected items that are movable.\n * This is any item whose parent is not also selected.\n *\n * @returns The array of items whose parents are not selected\n */\n getSelectedParentItems(): FlattenedIrisGridTreeItem[] {\n const { selectedColumns } = this.state;\n const treeItems = this.getFlattenedTree();\n\n return treeItems.filter(\n ({ id, parentId }) =>\n // All items whose parents are not selected\n selectedColumns.has(id) && !selectedColumns.has(parentId ?? '')\n );\n }\n\n makeVisibilityOrderingList = memoize(\n (\n columns: readonly DisplayColumn[],\n treeItems: readonly FlattenedIrisGridTreeItem[],\n showHiddenColumns: boolean,\n isDraggable: boolean\n ) => {\n const { movedColumns } = this.props;\n\n const elements = [];\n const firstMovableIndex = this.getFirstMovableIndex();\n const lastMovableIndex = this.getLastMovableIndex();\n\n const firstMovableTreeIndex = treeItems.findIndex(({ data }) =>\n Array.isArray(data.visibleIndex)\n ? data.visibleIndex[0] === firstMovableIndex\n : data.visibleIndex === firstMovableIndex\n );\n\n // Searches from the end so it's faster than findIndex\n const lastMovableTreeIndex = treeItems.findLastIndex(({ data }) =>\n Array.isArray(data.visibleIndex)\n ? data.visibleIndex[1] === lastMovableIndex\n : data.visibleIndex === lastMovableIndex\n );\n\n let movableItems = treeItems.slice(\n firstMovableTreeIndex,\n lastMovableTreeIndex + 1\n );\n\n if (!showHiddenColumns) {\n movableItems = movableItems.filter(item => item.data.isVisible);\n }\n\n // No movable items. Render all as immovable\n if (firstMovableIndex == null || lastMovableIndex === null) {\n for (\n let visibleIndex = 0;\n visibleIndex < columns.length;\n visibleIndex += 1\n ) {\n const modelIndex = GridUtils.getModelIndex(\n visibleIndex,\n movedColumns\n );\n const column = columns[modelIndex];\n if (VisibilityOrderingBuilderInner.shouldRenderColumn(column)) {\n elements.push(this.renderImmovableItem(column.name));\n }\n }\n\n return elements;\n }\n\n // Currently immovable groups are not supported\n for (\n let visibleIndex = 0;\n visibleIndex < firstMovableIndex;\n visibleIndex += 1\n ) {\n const modelIndex = GridUtils.getModelIndex(visibleIndex, movedColumns);\n const column = columns[modelIndex];\n if (VisibilityOrderingBuilderInner.shouldRenderColumn(column)) {\n elements.push(this.renderImmovableItem(column.name));\n }\n }\n\n if (firstMovableIndex !== null && firstMovableIndex > 0) {\n elements.push(<hr key=\"top-horizontal-divider\" />);\n }\n\n elements.push(\n <SortableTree\n key=\"movable-items\"\n items={movableItems}\n renderItem={this.renderItem}\n isDraggable={isDraggable}\n virtualizerRef={this.virtualizerRef}\n />\n );\n\n if (lastMovableIndex != null && lastMovableIndex < columns.length - 1) {\n elements.push(<hr key=\"bottom-horizontal-divider\" />);\n }\n\n for (\n let visibleIndex = lastMovableIndex + 1;\n visibleIndex < columns.length;\n visibleIndex += 1\n ) {\n const modelIndex = GridUtils.getModelIndex(visibleIndex, movedColumns);\n const column = columns[modelIndex];\n if (VisibilityOrderingBuilderInner.shouldRenderColumn(column)) {\n elements.push(this.renderImmovableItem(column.name));\n }\n }\n\n return elements;\n },\n { max: 10 }\n );\n\n renderImmovableItem = memoize(\n (columnName: ColumnName): ReactElement => (\n <div className=\"visibility-ordering-list-item immovable\" key={columnName}>\n <div className=\"column-item\">\n <span className=\"column-name\">{columnName}</span>\n </div>\n </div>\n ),\n { max: 100 }\n );\n\n handleOverflowAction(key: Key): void {\n const { undo, redo } = this.props;\n switch (key) {\n case 'undo':\n undo();\n break;\n case 'redo':\n redo();\n break;\n case 'showHidden':\n this.setState(prev => ({\n showHiddenColumns: !prev.showHiddenColumns,\n selectedColumns: new Set(),\n }));\n break;\n }\n }\n\n handleKeyboardShortcut(event: React.KeyboardEvent): void {\n const { canUndo, canRedo, undo, redo } = this.props;\n if (GLOBAL_SHORTCUTS.UNDO.matchesEvent(event) && canUndo) {\n event.preventDefault();\n undo();\n } else if (GLOBAL_SHORTCUTS.REDO.matchesEvent(event) && canRedo) {\n event.preventDefault();\n redo();\n }\n }\n\n handleSearchModalOpenChange(isOpen: boolean): void {\n if (isOpen) {\n this.resetSelection();\n } else {\n const { showHiddenColumns, selectedColumns } = this.state;\n const { onColumnVisibilityChanged } = this.props;\n // Make sure all selected columns are visible when closing the search modal\n if (!showHiddenColumns) {\n const modelIndexesToShow =\n this.getSelectedItemModelIndexes(selectedColumns);\n onColumnVisibilityChanged(modelIndexesToShow, true);\n }\n }\n this.setState({ isSearchModalOpen: isOpen });\n }\n\n render(): ReactElement {\n const {\n model,\n hiddenColumns,\n onColumnVisibilityChanged,\n canUndo,\n canRedo,\n } = this.props;\n const { selectedColumns, showHiddenColumns, isSearchModalOpen } =\n this.state;\n const hasSelection = selectedColumns.size > 0;\n const flattenedItems = this.getFlattenedTree();\n const hiddenColumnsSet = new Set(hiddenColumns);\n\n const columnsToToggle = hasSelection\n ? this.getSelectedItemModelIndexes(selectedColumns)\n : model.columns.map((_, i) => i);\n\n const areSomeVisible = hasSelection\n ? columnsToToggle.some(column => !hiddenColumnsSet.has(column))\n : hiddenColumnsSet.size < model.columns.length;\n\n const allToggleText = areSomeVisible ? 'Hide All' : 'Show All';\n\n const selectedToggleText = areSomeVisible\n ? 'Hide Selected'\n : 'Show Selected';\n\n const visibilityOrderingList = this.makeVisibilityOrderingList(\n model.columns,\n flattenedItems,\n showHiddenColumns,\n !isSearchModalOpen\n );\n\n return (\n <SortableTreeDndContext\n items={flattenedItems}\n onDragStart={this.handleDragStart}\n onDragEnd={this.handleDragEnd}\n renderItem={this.renderItem}\n >\n <div\n role=\"menu\"\n ref={this.wrapperRef}\n className=\"visibility-ordering-builder\"\n tabIndex={0}\n onKeyUp={this.handleKeyboardShortcut}\n >\n <div className=\"top-menu\">\n <Button\n kind=\"ghost\"\n className=\"toggle-visibility-btn\"\n onClick={() => {\n onColumnVisibilityChanged(columnsToToggle, !areSomeVisible);\n }}\n icon={areSomeVisible ? dhEye : dhEyeSlash}\n tooltip=\"Toggle column visibility\"\n >\n {!hasSelection ? allToggleText : selectedToggleText}\n </Button>\n\n <SearchWithModal\n items={flattenedItems}\n onModalOpenChange={this.handleSearchModalOpenChange}\n onClick={this.handleSearchItemClicked}\n setSelection={this.handleSearchSelect}\n />\n\n <MenuTrigger closeOnSelect={false}>\n <ActionButton isQuiet aria-label=\"More options\">\n <FontAwesomeIcon icon={vsKebabVertical} />\n </ActionButton>\n <SpectrumMenu\n onAction={this.handleOverflowAction}\n disabledKeys={[!canUndo && 'undo', !canRedo && 'redo'].filter(\n k => typeof k === 'string'\n )}\n >\n <Section aria-label=\"Undo and Redo\">\n <Item key=\"undo\" textValue=\"Undo\">\n <Icon>\n <FontAwesomeIcon icon={vsBlank} />\n </Icon>\n <Text>Undo</Text>\n <Keyboard>\n {GLOBAL_SHORTCUTS.UNDO.getDisplayText()}\n </Keyboard>\n </Item>\n <Item key=\"redo\" textValue=\"Redo\">\n <Icon>\n <FontAwesomeIcon icon={vsBlank} />\n </Icon>\n <Text>Redo</Text>\n <Keyboard>\n {GLOBAL_SHORTCUTS.REDO.getDisplayText()}\n </Keyboard>\n </Item>\n </Section>\n <Section aria-label=\"More actions\">\n <Item key=\"showHidden\" textValue=\"Show hidden columns\">\n <Icon>\n <FontAwesomeIcon\n icon={showHiddenColumns ? vsCheck : vsBlank}\n />\n </Icon>\n <Text>Show hidden columns</Text>\n </Item>\n </Section>\n </SpectrumMenu>\n </MenuTrigger>\n </div>\n <div className=\"top-menu\">\n <Button\n kind=\"ghost\"\n icon={vsRefresh}\n className=\"px-1\"\n tooltip=\"Reset to default\"\n onClick={() => {\n this.resetVisibilityOrdering();\n }}\n >\n Reset\n </Button>\n <span className=\"vertical-divider\" />\n <Button\n kind=\"ghost\"\n icon={dhSortAlphaDown}\n className=\"px-1\"\n tooltip=\"Sort ascending\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilderInner.SORTING_OPTIONS.ASC\n );\n }}\n />\n <Button\n kind=\"ghost\"\n icon={dhSortAlphaUp}\n className=\"px-1\"\n tooltip=\"Sort descending\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilderInner.SORTING_OPTIONS.DSC\n );\n }}\n />\n <span className=\"vertical-divider\" />\n <Button\n kind=\"ghost\"\n className=\"px-1\"\n tooltip=\"Create group from selection\"\n disabled={!hasSelection}\n onClick={this.handleGroupCreate}\n >\n <span className=\"fa-layers\">\n <FontAwesomeIcon\n mask={vsSymbolStructure}\n icon={vsCircleLargeFilled}\n transform=\"right-7 down-5 shrink-6\"\n />\n <FontAwesomeIcon\n icon={vsAdd}\n transform=\"right-8 down-6 shrink-8\"\n />\n </span>\n Group\n </Button>\n <span className=\"vertical-divider\" />\n <Button\n kind=\"ghost\"\n icon={vsChevronUp}\n className=\"px-1\"\n tooltip=\"Move selection up\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilderInner.MOVE_OPTIONS.UP\n );\n }}\n disabled={!hasSelection}\n />\n <Button\n kind=\"ghost\"\n icon={vsChevronDown}\n className=\"px-1\"\n tooltip=\"Move selection down\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilderInner.MOVE_OPTIONS.DOWN\n );\n }}\n disabled={!hasSelection}\n />\n <Button\n kind=\"ghost\"\n icon={dhArrowToTop}\n className=\"px-1\"\n tooltip=\"Move selection to top\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP\n );\n }}\n disabled={!hasSelection}\n />\n <Button\n kind=\"ghost\"\n icon={dhArrowToBottom}\n className=\"px-1\"\n tooltip=\"Move selection to bottom\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilderInner.MOVE_OPTIONS.BOTTOM\n );\n }}\n disabled={!hasSelection}\n />\n </div>\n\n <div\n role=\"menu\"\n ref={list => {\n this.list = list;\n }}\n className={classNames('visibility-ordering-list')}\n >\n {visibilityOrderingList}\n </div>\n </div>\n </SortableTreeDndContext>\n );\n }\n}\n\n// drag and drop display\nconst VisibilityOrderingBuilder = memo(\n (props: VisibilityOrderingBuilderProps) => {\n const {\n movedColumns,\n hiddenColumns,\n columnHeaderGroups,\n onMovedColumnsChanged,\n onColumnVisibilityChanged,\n onColumnHeaderGroupChanged,\n onFrozenColumnsChanged,\n // Used for unit tests only\n __testRef,\n } = props;\n\n const {\n set: setUndoState,\n undo,\n canUndo,\n redo,\n canRedo,\n state,\n } = useUndoRedo({\n movedColumns,\n hiddenColumns,\n columnHeaderGroups,\n frozenColumns: props.model.frozenColumns,\n });\n\n // On undo/redo, we need to ignore the prop change\n // because we are the ones updating the props\n const isUndoRedoAction = useRef(false);\n const isBatched = useRef(false);\n const startUndoGroup = useCallback(() => {\n isBatched.current = true;\n }, []);\n const endUndoGroup = useCallback(() => {\n isBatched.current = false;\n }, []);\n\n useEffect(() => {\n if (isUndoRedoAction.current) {\n onMovedColumnsChanged(state.movedColumns);\n onColumnVisibilityChanged(hiddenColumns, true);\n onColumnVisibilityChanged(state.hiddenColumns, false);\n onColumnHeaderGroupChanged(state.columnHeaderGroups);\n onFrozenColumnsChanged(state.frozenColumns);\n isUndoRedoAction.current = false;\n } else if (\n // If the parent props changed and it's not an undo/redo action, update the undo state\n !isBatched.current &&\n (movedColumns !== state.movedColumns ||\n columnHeaderGroups !== state.columnHeaderGroups ||\n hiddenColumns.length !== state.hiddenColumns.length ||\n hiddenColumns.some(\n (col, index) => col !== state.hiddenColumns[index]\n ))\n ) {\n setUndoState({\n movedColumns,\n hiddenColumns,\n columnHeaderGroups,\n frozenColumns: props.model.frozenColumns,\n });\n }\n }, [\n columnHeaderGroups,\n hiddenColumns,\n isBatched,\n movedColumns,\n onColumnHeaderGroupChanged,\n onColumnVisibilityChanged,\n onFrozenColumnsChanged,\n onMovedColumnsChanged,\n props.model.frozenColumns,\n setUndoState,\n state.columnHeaderGroups,\n state.frozenColumns,\n state.hiddenColumns,\n state.movedColumns,\n ]);\n\n const handleColumnHeaderGroupChanged = useCallback(\n (groups: readonly (dh.ColumnGroup | ColumnHeaderGroup)[]) => {\n if (groups !== columnHeaderGroups) {\n onColumnHeaderGroupChanged(\n // Updates which model indexes are in the groups if items were added/removed\n IrisGridUtils.parseColumnHeaderGroups(props.model, groups).groups\n );\n }\n },\n [columnHeaderGroups, onColumnHeaderGroupChanged, props.model]\n );\n\n const handleUndo = useCallback(() => {\n isUndoRedoAction.current = true;\n undo();\n }, [undo]);\n\n const handleRedo = useCallback(() => {\n isUndoRedoAction.current = true;\n redo();\n }, [redo]);\n\n return (\n <VisibilityOrderingBuilderInner\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n ref={__testRef}\n movedColumns={movedColumns}\n hiddenColumns={hiddenColumns}\n columnHeaderGroups={columnHeaderGroups}\n onMovedColumnsChanged={onMovedColumnsChanged}\n onColumnVisibilityChanged={onColumnVisibilityChanged}\n onColumnHeaderGroupChanged={handleColumnHeaderGroupChanged}\n undo={handleUndo}\n canUndo={canUndo}\n redo={handleRedo}\n canRedo={canRedo}\n startUndoGroup={startUndoGroup}\n endUndoGroup={endUndoGroup}\n />\n );\n }\n);\n\nVisibilityOrderingBuilder.displayName = 'VisibilityOrderingBuilder';\n\nexport default VisibilityOrderingBuilder;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"VisibilityOrderingBuilder.js","names":["React","memo","PureComponent","useCallback","useEffect","useRef","classNames","GridUtils","TextUtils","assertNotNull","DbNameValidator","FontAwesomeIcon","dhEye","dhEyeSlash","dhSortAlphaDown","dhSortAlphaUp","dhArrowToTop","dhArrowToBottom","vsChevronUp","vsChevronDown","vsSymbolStructure","vsRefresh","vsCircleLargeFilled","vsAdd","vsBlank","vsCheck","vsKebabVertical","memoize","ActionButton","Button","GLOBAL_SHORTCUTS","Icon","Item","Keyboard","MenuTrigger","Section","SpectrumMenu","Text","clamp","throttle","useUndoRedo","Log","ColumnHeaderGroup","VisibilityOrderingItem","flattenTree","getTreeItems","SortableTree","moveItemsFromDrop","moveToGroup","IrisGridUtils","SearchWithModal","SortableTreeDndContext","jsx","_jsx","jsxs","_jsxs","log","module","VisibilityOrderingBuilderInner","shouldRenderColumn","column","isProxy","constructor","props","_defineProperty","createRef","group","color","columnHeaderGroups","onColumnHeaderGroupChanged","newGroups","newGroup","_objectSpread","splice","findIndex","_ref","name","model","columns","movedColumns","i","length","modelIndex","getModelIndex","isColumnMovable","max","hiddenColumns","selectedColumns","showHiddenColumns","values","treeItems","isDraggable","elements","firstMovableIndex","getFirstMovableIndex","lastMovableIndex","getLastMovableIndex","firstMovableTreeIndex","_ref2","data","Array","isArray","visibleIndex","lastMovableTreeIndex","findLastIndex","_ref3","movableItems","slice","filter","item","isVisible","push","renderImmovableItem","items","renderItem","virtualizerRef","columnName","className","children","handleItemClick","bind","handleDragEnd","handleGroupDelete","handleGroupNameChange","handleGroupCreate","validateGroupName","addColumnToSelected","handleDragStart","handleOverflowAction","handleKeyboardShortcut","handleSearchModalOpenChange","handleSearchSelect","handleSearchItemClicked","state","Set","lastSelectedColumn","isSearchModalOpen","list","componentDidMount","wrapperRef","current","addEventListener","e","target","HTMLElement","treeItem","closest","lastFocusedItemIndex","dataset","index","parseInt","componentDidUpdate","prevProps","setState","scrollAndFocusColumnOnUpdate","_this$virtualizerRef$","itemIndex","itemName","scrollToIndex","window","requestAnimationFrame","_this$list","itemElement","querySelector","concat","focus","warn","document","activeElement","body","documentElement","_this$list2","itemToFocus","componentWillUnmount","filteredGroups","isNew","resetVisibilityOrdering","onReset","onMovedColumnsChanged","initialColumnHeaderGroups","initialMovedColumns","resetSelection","moveSelectedColumns","option","getFlattenedTree","selectedItems","getSelectedParentItems","isMovingUpward","MOVE_OPTIONS","UP","TOP","reverse","newMoves","updatedGroups","_loop","id","parentId","depth","moveItemOrRange","size","BOTTOM","prevItemIndex","map","idx","has","lastIndexOf","prevItem","Math","abs","newParentItemIndex","newParentItem","toIndex","DOWN","nextItem","find","_parentItem$parentId","parentItem","groups","handleMoveColumns","scrollListAfterMove","_this$virtualizerRef$2","scrollToOffset","_this$virtualizerRef$3","scrollBy","getTotalSize","getSortMoves","itemsParam","isAscending","SORTING_OPTIONS","ASC","sort","a","b","aName","toUpperCase","bName","moveToIndex","min","flatMap","getVisibleIndexes","getVisibleIndex","moveRange","moveItem","handleSortColumns","_this$getFirstMovable","_this$getLastMovableI","tree","firstIndex","lastIndex","moveableTree","initialAndFrozenMovedColumns","frozenColumns","_model$getColumnIndex","frozenColumn","newFrozenIndex","getColumnIndexByName","from","to","event","_event$currentTarget","arguments","undefined","stopPropagation","tagName","currentTarget","isModifierKeyDown","isShiftKeyDown","shiftKey","isSelected","columnsToBeAdded","removeColumnFromSelected","selectedItem","_ref4","childCount","selectedIndex","lastSelectedIndex","columnsToAdd","onColumnVisibilityChanged","modelIndexesToShow","getSelectedItemModelIndexes","flat","addToExisting","newSelectedColumns","flattenedItems","forEach","_ref5","child","add","_ref6","_ref7","delete","_loop2","newParentId","_ref8","dragEvent","activatorEvent","isAddingToSelection","selectedParentItems","groupsAfterDrop","parseColumnHeaderGroups","newName","_this$list3","endUndoGroup","oldName","groupIndex","_ref9","oldGroup","parentIndex","_ref0","parent","newParent","removeChildren","addChildren","oldElement","indexAttr","getAttribute","g","startUndoGroup","childIndexes","NEW_GROUP_PREFIX","Date","now","_ref1","_this$virtualizerRef$4","scrollElement","scrollTo","top","groupName","isValidColumnName","some","_ref10","_ref11","_ref12","value","clone","ref","handleProps","displayString","selectedItemNames","_ref13","join","onVisibilityChange","visibilityClickAndDrag","onClick","onGroupDelete","onGroupColorChange","handleGroupColorChange","onGroupNameChange","getMemoizedFirstMovableIndex","getMemoizedLastMovableIndex","showHiddenColumnsState","memoizedGetTreeItems","memoizedGetFlattenedTree","columnNames","_ref14","key","undo","redo","prev","canUndo","canRedo","UNDO","matchesEvent","preventDefault","REDO","isOpen","render","hasSelection","hiddenColumnsSet","columnsToToggle","_","areSomeVisible","allToggleText","selectedToggleText","visibilityOrderingList","makeVisibilityOrderingList","onDragStart","onDragEnd","role","tabIndex","onKeyUp","kind","icon","tooltip","onModalOpenChange","setSelection","closeOnSelect","isQuiet","onAction","disabledKeys","k","textValue","getDisplayText","DSC","disabled","mask","transform","VisibilityOrderingBuilder","onFrozenColumnsChanged","__testRef","set","setUndoState","isUndoRedoAction","isBatched","col","handleColumnHeaderGroupChanged","handleUndo","handleRedo","displayName"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.tsx"],"sourcesContent":["import React, {\n memo,\n PureComponent,\n useCallback,\n useEffect,\n useRef,\n type ReactElement,\n} from 'react';\nimport classNames from 'classnames';\nimport {\n GridUtils,\n type ModelIndex,\n type MoveOperation,\n} from '@deephaven/grid';\nimport { TextUtils, assertNotNull, DbNameValidator } from '@deephaven/utils';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhEye,\n dhEyeSlash,\n dhSortAlphaDown,\n dhSortAlphaUp,\n dhArrowToTop,\n dhArrowToBottom,\n vsChevronUp,\n vsChevronDown,\n vsSymbolStructure,\n vsRefresh,\n vsCircleLargeFilled,\n vsAdd,\n vsBlank,\n vsCheck,\n vsKebabVertical,\n} from '@deephaven/icons';\nimport type { dh } from '@deephaven/jsapi-types';\nimport memoize from 'memoizee';\nimport { type DragStartEvent } from '@dnd-kit/core';\nimport type { Key } from '@react-types/shared';\nimport { type Virtualizer } from '@tanstack/react-virtual';\nimport {\n ActionButton,\n Button,\n GLOBAL_SHORTCUTS,\n Icon,\n Item,\n Keyboard,\n MenuTrigger,\n Section,\n SpectrumMenu,\n Text,\n} from '@deephaven/components';\nimport clamp from 'lodash.clamp';\nimport throttle from 'lodash.throttle';\nimport { useUndoRedo } from '@deephaven/react-hooks';\nimport Log from '@deephaven/log';\nimport './VisibilityOrderingBuilder.scss';\nimport { type DisplayColumn } from '../../IrisGridModel';\nimport type IrisGridModel from '../../IrisGridModel';\nimport { type ColumnName } from '../../CommonTypes';\nimport ColumnHeaderGroup from '../../ColumnHeaderGroup';\nimport VisibilityOrderingItem from './VisibilityOrderingItem';\nimport {\n type FlattenedIrisGridTreeItem,\n flattenTree,\n getTreeItems,\n type IrisGridTreeItem,\n type IrisGridTreeItemData,\n} from './sortable-tree/utilities';\nimport SortableTree from './sortable-tree/SortableTree';\nimport { type TreeItemRenderFnProps } from './sortable-tree/TreeItem';\nimport {\n moveItemsFromDrop,\n moveToGroup,\n} from './VisibilityOrderingBuilderUtils';\nimport IrisGridUtils from '../../IrisGridUtils';\nimport SearchWithModal from './SearchWithModal';\nimport SortableTreeDndContext from './sortable-tree/SortableTreeDndContext';\n\nconst log = Log.module('VisibilityOrderingBuilder');\n\nexport interface VisibilityOrderingBuilderProps {\n model: IrisGridModel;\n movedColumns: readonly MoveOperation[];\n hiddenColumns: readonly ModelIndex[];\n columnHeaderGroups: readonly ColumnHeaderGroup[];\n onColumnVisibilityChanged: (\n columns: readonly ModelIndex[],\n isVisible: boolean\n ) => void;\n onReset: () => void;\n onMovedColumnsChanged: (\n operations: readonly MoveOperation[],\n cb?: () => void\n ) => void;\n onColumnHeaderGroupChanged: (groups: readonly ColumnHeaderGroup[]) => void;\n onFrozenColumnsChanged: (columns: readonly ColumnName[]) => void;\n __testRef?: React.Ref<VisibilityOrderingBuilderInner>;\n}\n\ninterface VisibilityOrderingBuilderInnerProps\n extends Omit<\n VisibilityOrderingBuilderProps,\n 'onFrozenColumnsChanged' | '__testRef'\n > {\n undo: () => void;\n redo: () => void;\n canUndo: boolean;\n canRedo: boolean;\n startUndoGroup: () => void;\n endUndoGroup: () => void;\n}\n\ninterface VisibilityOrderingBuilderInnerState {\n selectedColumns: Set<string>;\n lastSelectedColumn: string;\n isSearchModalOpen: boolean;\n showHiddenColumns: boolean;\n /**\n * This is used only for drag end. In React 18, it seems our rendering is causing\n * 1 render with just the children of this component, then updating to render with the\n * updated movedColumns prop. That is causing the drop animation to animate back to\n * the original position of the element.\n */\n movedColumns: readonly MoveOperation[];\n /**\n * This is used for the same reason as movedColumns above, but for dragging in/out of groups.\n */\n columnHeaderGroups: readonly ColumnHeaderGroup[];\n}\n\nclass VisibilityOrderingBuilderInner extends PureComponent<\n VisibilityOrderingBuilderInnerProps,\n VisibilityOrderingBuilderInnerState\n> {\n static SORTING_OPTIONS = { DSC: 'DSC', ASC: 'ASC' } as const;\n\n static MOVE_OPTIONS = {\n TOP: 'TOP',\n BOTTOM: 'BOTTOM',\n UP: 'UP',\n DOWN: 'DOWN',\n } as const;\n\n static shouldRenderColumn(column: DisplayColumn): boolean {\n // We don't want to render the proxy column in the visibility ordering list\n return column.isProxy !== true;\n }\n\n constructor(props: VisibilityOrderingBuilderInnerProps) {\n super(props);\n\n this.handleItemClick = this.handleItemClick.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleGroupDelete = this.handleGroupDelete.bind(this);\n this.handleGroupNameChange = this.handleGroupNameChange.bind(this);\n this.handleGroupCreate = this.handleGroupCreate.bind(this);\n this.validateGroupName = this.validateGroupName.bind(this);\n this.addColumnToSelected = this.addColumnToSelected.bind(this);\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleOverflowAction = this.handleOverflowAction.bind(this);\n this.handleKeyboardShortcut = this.handleKeyboardShortcut.bind(this);\n this.handleSearchModalOpenChange =\n this.handleSearchModalOpenChange.bind(this);\n this.handleSearchSelect = this.handleSearchSelect.bind(this);\n this.handleSearchItemClicked = this.handleSearchItemClicked.bind(this);\n this.renderItem = this.renderItem.bind(this);\n\n this.state = {\n selectedColumns: new Set(),\n lastSelectedColumn: '',\n showHiddenColumns: true,\n isSearchModalOpen: false,\n movedColumns: props.movedColumns,\n columnHeaderGroups: props.columnHeaderGroups,\n };\n\n this.list = null;\n }\n\n componentDidMount(): void {\n assertNotNull(this.wrapperRef.current);\n // This fixes focus loss when editing a group because we use the name as the key for rendering.\n // When the name is changed or group deleted, we lose focus entirely which is indicated by\n // the focusout relatedTarget being null.\n this.wrapperRef.current.addEventListener('focusin', (e: FocusEvent) => {\n if (e.target instanceof HTMLElement) {\n const treeItem = e.target.closest('.tree-item') as HTMLElement | null;\n if (treeItem != null) {\n this.lastFocusedItemIndex =\n typeof treeItem.dataset.index === 'string'\n ? parseInt(treeItem.dataset.index, 10)\n : null;\n }\n }\n });\n }\n\n componentDidUpdate(prevProps: VisibilityOrderingBuilderInnerProps): void {\n // If we change because of undo/redo or reorders in the grid, update internal state\n const { movedColumns, columnHeaderGroups } = this.props;\n if (prevProps.movedColumns !== movedColumns) {\n this.setState({ movedColumns });\n }\n if (prevProps.columnHeaderGroups !== columnHeaderGroups) {\n this.setState({ columnHeaderGroups });\n }\n\n // Scroll to the item when it's available\n if (this.scrollAndFocusColumnOnUpdate != null) {\n const [itemIndex, itemName] = this.scrollAndFocusColumnOnUpdate;\n this.virtualizerRef.current?.scrollToIndex(itemIndex);\n\n // Need to wait for the paint after the scroll so the item exists in the DOM\n window.requestAnimationFrame(() => {\n if (this.scrollAndFocusColumnOnUpdate == null) {\n return;\n }\n const itemElement = this.list?.querySelector(\n `.item-wrapper[data-id=\"${itemName}\"] .tree-item`\n );\n if (itemElement instanceof HTMLElement) {\n itemElement.focus();\n } else {\n log.warn(`Could not focus item ${itemName} after scroll`);\n }\n this.scrollAndFocusColumnOnUpdate = null;\n });\n }\n\n // document.activeElement is either body or html when nothing is focused.\n // If there is no focused element, then we probably deleted or renamed a group\n // resulting in focus loss. Try to re-establish focus.\n // Cannot rely on focusout event for this because it doesn't fire when the focused element is deleted\n // (except in Chrome which is against the spec here).\n if (\n (document.activeElement === document.body ||\n document.activeElement === document.documentElement) &&\n this.lastFocusedItemIndex !== null\n ) {\n const itemToFocus = this.list?.querySelector(\n `.item-wrapper[data-index=\"${this.lastFocusedItemIndex}\"] .tree-item`\n );\n\n if (itemToFocus != null && itemToFocus instanceof HTMLElement) {\n itemToFocus.focus();\n } else {\n log.warn('Could not maintain focus');\n this.lastFocusedItemIndex = null;\n }\n }\n }\n\n componentWillUnmount(): void {\n const { columnHeaderGroups, onColumnHeaderGroupChanged } = this.props;\n // Clean up unnamed groups on unmount\n const filteredGroups = columnHeaderGroups.filter(group => !group.isNew);\n if (filteredGroups.length !== columnHeaderGroups.length) {\n onColumnHeaderGroupChanged(filteredGroups);\n }\n }\n\n wrapperRef = React.createRef<HTMLDivElement>();\n\n /**\n * Used to track the last focused item index to maintain focus on updates.\n * Cannot use name because it may change or be deleted when undoing or redoing.\n */\n lastFocusedItemIndex: number | null = null;\n\n list: HTMLDivElement | null;\n\n virtualizerRef: React.RefObject<Virtualizer<HTMLElement, Element>> =\n React.createRef();\n\n /**\n * This is set by the search modal handlers since a column could be hidden\n * and not displayed in the list. We need to wait until the update to scroll to it.\n */\n scrollAndFocusColumnOnUpdate: [number, string] | null = null;\n\n resetVisibilityOrdering(): void {\n const {\n model,\n onReset,\n onMovedColumnsChanged,\n onColumnHeaderGroupChanged,\n } = this.props;\n\n this.setState({\n selectedColumns: new Set(),\n lastSelectedColumn: '',\n });\n\n onReset();\n onColumnHeaderGroupChanged(model.initialColumnHeaderGroups);\n onMovedColumnsChanged(model.initialMovedColumns);\n }\n\n resetSelection(): void {\n this.setState({\n selectedColumns: new Set(),\n lastSelectedColumn: '',\n });\n }\n\n /**\n * Moves the currently selected columns in the direction specified.\n * Does not commit any changes to any state, just gets the required modifications.\n *\n * Items that are part of a selected group should not be moved separate from the group.\n *\n * Items moved to top or bottom should be removed from any groups they are within,\n * unless part of a group that is also selected. The highest level selected group will\n * be moved to the root level of the tree.\n *\n * Items moved up or down should move into and out of groups when applicable.\n * They should never move more than 1 depth level at a time.\n *\n * Multiple selected items should move to the top or bottom in their existing order,\n * but become one block of continuous columns.\n *\n * Multiple selected items moving up or down should move independently,\n * unless they are at the same depth and contiguous. In that case, they should\n * move in and out of groups together. I.e. if the 2 items above a group are selected,\n * and the move down button is pressed, then both items should be moved into the group.\n *\n * @param option The movement option\n * @returns A new copy of the movedColumns including moves required to perform the operation.\n *\n */\n moveSelectedColumns(\n option: keyof typeof VisibilityOrderingBuilderInner.MOVE_OPTIONS\n ): { newMoves: MoveOperation[]; groups: readonly ColumnHeaderGroup[] } {\n const { columnHeaderGroups } = this.props;\n const { selectedColumns } = this.state;\n\n const treeItems = this.getFlattenedTree();\n let firstMovableIndex = this.getFirstMovableIndex();\n let lastMovableIndex = this.getLastMovableIndex();\n assertNotNull(firstMovableIndex);\n assertNotNull(lastMovableIndex);\n\n const selectedItems = this.getSelectedParentItems();\n\n const isMovingUpward =\n option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.UP ||\n option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP;\n\n // for moving up and to the top, move column(s) in visibility index order\n // for moving down and to the bottom, move column(s) in reverse visibility index order\n if (!isMovingUpward) {\n selectedItems.reverse();\n }\n\n let newMoves = [] as MoveOperation[];\n let updatedGroups = columnHeaderGroups;\n\n for (let i = 0; i < selectedItems.length; i += 1) {\n const {\n id,\n parentId,\n depth,\n data: { visibleIndex },\n } = selectedItems[i];\n\n switch (option) {\n case VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP: {\n newMoves = GridUtils.moveItemOrRange(\n visibleIndex,\n firstMovableIndex,\n newMoves,\n true\n );\n const size = Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n firstMovableIndex += size;\n // Moving items to top should move out of any groups\n updatedGroups = moveToGroup(selectedItems[i], null, updatedGroups);\n break;\n }\n case VisibilityOrderingBuilderInner.MOVE_OPTIONS.BOTTOM: {\n newMoves = GridUtils.moveItemOrRange(\n visibleIndex,\n lastMovableIndex,\n newMoves,\n true\n );\n const size = Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n lastMovableIndex -= size;\n // Moving items to bottom should move out of any groups\n updatedGroups = moveToGroup(selectedItems[i], null, updatedGroups);\n break;\n }\n case VisibilityOrderingBuilderInner.MOVE_OPTIONS.UP: {\n const itemIndex = treeItems.findIndex(item => item.id === id);\n // Array.findLast would be better here, but it's too new for our browser support\n const prevItemIndex = treeItems\n .map(\n (item, idx) => idx < itemIndex && !selectedColumns.has(item.id)\n )\n .lastIndexOf(true);\n const prevItem = treeItems[prevItemIndex];\n\n if (prevItem != null && prevItem.parentId !== parentId) {\n // Moving into a different parent\n if (Math.abs(prevItem.depth - depth) > 1) {\n // Prev item is more than 1 level away\n // Find prev parent at same depth as current\n // This way we only ever move 1 depth level per event\n const newParentItemIndex = treeItems\n .map((item, idx) => idx < prevItemIndex && item.depth === depth)\n .lastIndexOf(true);\n const newParentItem = treeItems[newParentItemIndex];\n updatedGroups = moveToGroup(\n selectedItems[i],\n newParentItem.id,\n updatedGroups\n );\n } else {\n updatedGroups = moveToGroup(\n selectedItems[i],\n prevItem.parentId,\n updatedGroups\n );\n }\n } else {\n const toIndex = clamp(\n Array.isArray(visibleIndex)\n ? visibleIndex[0] - 1\n : visibleIndex - 1,\n firstMovableIndex,\n lastMovableIndex\n );\n newMoves = GridUtils.moveItemOrRange(\n visibleIndex,\n toIndex,\n newMoves,\n false\n );\n const size = Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n firstMovableIndex += size;\n }\n break;\n }\n case VisibilityOrderingBuilderInner.MOVE_OPTIONS.DOWN: {\n const itemIndex = treeItems.findIndex(item => item.id === id);\n const nextItem = treeItems.find(\n (item, idx) => idx > itemIndex && !selectedColumns.has(item.id)\n );\n\n if (nextItem?.parentId !== parentId) {\n // Moving out of our group\n // Move to the parent of our parent\n // That way we only ever move 1 level at a time\n const parentItem = treeItems.find(item => item.id === parentId);\n updatedGroups = moveToGroup(\n selectedItems[i],\n parentItem?.parentId ?? null,\n updatedGroups\n );\n break;\n } else if (nextItem?.children.length > 0) {\n // Moving into a group as 1st item\n updatedGroups = moveToGroup(\n selectedItems[i],\n nextItem.id,\n updatedGroups\n );\n break;\n }\n\n const toIndex = clamp(\n Array.isArray(visibleIndex)\n ? visibleIndex[0] + 1\n : visibleIndex + 1,\n firstMovableIndex,\n lastMovableIndex\n );\n newMoves = GridUtils.moveItemOrRange(\n visibleIndex,\n toIndex,\n newMoves,\n false\n );\n const size = Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n lastMovableIndex -= size;\n\n break;\n }\n }\n }\n\n return { newMoves, groups: updatedGroups };\n }\n\n /**\n * Moves the selected columns according to the option.\n * Commits changes to state and scrolls the list if moving to top or bottom.\n *\n * @param option The move operation\n */\n handleMoveColumns(\n option: keyof typeof VisibilityOrderingBuilderInner.MOVE_OPTIONS\n ): void {\n const { onMovedColumnsChanged, movedColumns, onColumnHeaderGroupChanged } =\n this.props;\n\n const { newMoves, groups } = this.moveSelectedColumns(option);\n let scrollListAfterMove: (() => void) | undefined;\n\n if (option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP) {\n scrollListAfterMove = () => {\n this.virtualizerRef.current?.scrollToOffset(0);\n };\n }\n if (option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.BOTTOM) {\n scrollListAfterMove = () => {\n this.virtualizerRef.current?.scrollBy(\n this.virtualizerRef.current.getTotalSize()\n );\n };\n }\n\n onColumnHeaderGroupChanged(groups);\n\n if (newMoves.length > 0) {\n onMovedColumnsChanged(movedColumns.concat(newMoves), scrollListAfterMove);\n }\n }\n\n /**\n * Get the move operations required to recursively sort the grid\n * Column header groups are sorted using their name\n * Children of column header groups are then sorted within each group\n *\n * @param items The tree items to sort\n * @param option Direction of the sort\n * @param movedColumns The existing moved columns for the sort\n * Grids may use an initial move list from the model (e.g. column header groups)\n * Also used to recursively sort header groups\n * @returns The moves required to sort the grid. Includes the starting movedColumns in the array\n */\n getSortMoves(\n itemsParam: readonly IrisGridTreeItem[],\n option: keyof typeof VisibilityOrderingBuilderInner.SORTING_OPTIONS,\n movedColumns: readonly MoveOperation[]\n ): MoveOperation[] {\n const items = [...itemsParam];\n // Sort all the movable columns\n const isAscending =\n option === VisibilityOrderingBuilderInner.SORTING_OPTIONS.ASC;\n items.sort((a, b) => {\n const aName = a.id.toUpperCase();\n const bName = b.id.toUpperCase();\n return TextUtils.sort(aName, bName, isAscending);\n });\n\n let newMoves = [...movedColumns]; // Start with the base state moves by the model\n let moveToIndex = Math.min(\n ...items.flatMap(item => {\n const { modelIndex } = item.data;\n return Array.isArray(modelIndex)\n ? GridUtils.getVisibleIndexes(modelIndex, newMoves)\n : GridUtils.getVisibleIndex(modelIndex, newMoves);\n })\n );\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { modelIndex } = item.data;\n const visibleIndex = Array.isArray(modelIndex)\n ? GridUtils.getVisibleIndexes(modelIndex, newMoves)\n : GridUtils.getVisibleIndex(modelIndex, newMoves);\n newMoves = Array.isArray(visibleIndex)\n ? GridUtils.moveRange(\n [Math.min(...visibleIndex), Math.max(...visibleIndex)],\n moveToIndex,\n newMoves,\n true\n )\n : GridUtils.moveItem(visibleIndex, moveToIndex, newMoves);\n\n if (Array.isArray(visibleIndex)) {\n // Recursively sort groups\n newMoves = this.getSortMoves(item.children, option, newMoves);\n }\n\n moveToIndex += Array.isArray(modelIndex) ? modelIndex.length : 1;\n }\n\n return newMoves;\n }\n\n handleSortColumns(\n option: keyof typeof VisibilityOrderingBuilderInner.SORTING_OPTIONS\n ): void {\n const { model, onMovedColumnsChanged } = this.props;\n const tree = this.getTreeItems();\n const firstIndex = this.getFirstMovableIndex() ?? 0;\n const lastIndex = this.getLastMovableIndex() ?? tree.length - 1;\n const moveableTree = tree.slice(firstIndex, lastIndex + 1);\n\n // add frozen moves\n const initialAndFrozenMovedColumns = [...model.initialMovedColumns];\n for (let i = 0; i < model.frozenColumns.length; i += 1) {\n const frozenColumn = model.frozenColumns[i];\n const newFrozenIndex = GridUtils.getVisibleIndex(\n model.getColumnIndexByName(frozenColumn) ?? 0,\n initialAndFrozenMovedColumns\n );\n if (newFrozenIndex !== i) {\n initialAndFrozenMovedColumns.push({\n from: newFrozenIndex,\n to: i,\n });\n }\n }\n\n const newMoves = this.getSortMoves(\n moveableTree,\n option,\n initialAndFrozenMovedColumns\n );\n\n onMovedColumnsChanged(newMoves);\n }\n\n /**\n * Handles clicking on an item in the visibility ordering list.\n * Adds and removes to selection as necessary based on modifier and shift keys.\n * Returns the columns to be added to the selection, if any.\n *\n * @param name The name of the column clicked\n * @param event The click event\n * @param showHiddenColumns If hidden columns should be included in the selection\n * @returns The columns to be added to the selection, if any`\n */\n handleItemClick(\n name: string,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n showHiddenColumns = false\n ): string[] {\n event.stopPropagation();\n\n // Click was triggered by an interactive element. Ignore select\n if (\n event.target instanceof HTMLElement &&\n (event.target.tagName === 'BUTTON' || event.target.tagName === 'INPUT')\n ) {\n return [];\n }\n\n event.currentTarget?.focus();\n\n const { selectedColumns, lastSelectedColumn } = this.state;\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n const isSelected = selectedColumns.has(name);\n const columnsToBeAdded = [name];\n\n if (isSelected && isModifierKeyDown) {\n this.removeColumnFromSelected(name);\n return [];\n }\n\n const movableItems = this.getFlattenedTree(showHiddenColumns);\n\n if (isSelected && !isShiftKeyDown && lastSelectedColumn === name) {\n const selectedItem = movableItems.find(({ id }) => id === name);\n assertNotNull(selectedItem);\n const childCount = flattenTree(selectedItem.children).length;\n // If clicking on an item and it's the only thing selected, deselect it\n if (childCount + 1 === selectedColumns.size) {\n this.resetSelection();\n return [];\n }\n }\n\n if (isShiftKeyDown) {\n const selectedIndex = movableItems.findIndex(item => item.id === name);\n const lastSelectedIndex = movableItems.findIndex(\n item => item.id === lastSelectedColumn\n );\n\n columnsToBeAdded.push(\n ...movableItems\n .slice(\n Math.min(lastSelectedIndex, selectedIndex),\n Math.max(lastSelectedIndex, selectedIndex) + 1\n )\n .map(item => item.id)\n );\n }\n\n this.addColumnToSelected(\n columnsToBeAdded,\n isModifierKeyDown || isShiftKeyDown\n );\n\n this.setState({\n lastSelectedColumn: name,\n });\n\n return columnsToBeAdded;\n }\n\n handleSearchItemClicked(\n item: FlattenedIrisGridTreeItem,\n event: React.MouseEvent<HTMLElement>\n ): void {\n const columnsToAdd = this.handleItemClick(item.id, event, true);\n const { showHiddenColumns } = this.state;\n const { onColumnVisibilityChanged } = this.props;\n\n if (columnsToAdd.length === 0) {\n return;\n }\n\n const modelIndexesToShow = this.getSelectedItemModelIndexes(\n new Set(columnsToAdd)\n );\n\n if (!showHiddenColumns) {\n onColumnVisibilityChanged(modelIndexesToShow, true);\n }\n\n if (event.shiftKey || GridUtils.isModifierKeyDown(event)) {\n return;\n }\n\n this.scrollAndFocusColumnOnUpdate = [item.index, item.id];\n }\n\n handleSearchSelect(items: readonly FlattenedIrisGridTreeItem[]): void {\n if (items.length === 0) {\n return;\n }\n const { showHiddenColumns } = this.state;\n const { onColumnVisibilityChanged } = this.props;\n\n if (!showHiddenColumns) {\n const modelIndexesToShow = [\n ...new Set(items.map(item => item.data.modelIndex).flat()),\n ];\n onColumnVisibilityChanged(modelIndexesToShow, true);\n }\n\n this.scrollAndFocusColumnOnUpdate = [items[0].index, items[0].id];\n this.addColumnToSelected(\n items.map(item => item.id),\n false\n );\n }\n\n /**\n * Adds columns or groups to the selected column set\n * Groups being added will add all of their children to the selection as well\n *\n * @param columnsToBeAdded Array of column or group names to add\n * @param addToExisting If these should be added to the existing selection or overwrite it\n */\n addColumnToSelected(\n columnsToBeAdded: string[],\n addToExisting: boolean\n ): void {\n const { selectedColumns } = this.state;\n const newSelectedColumns = new Set(\n addToExisting\n ? [...selectedColumns.values()].concat(columnsToBeAdded)\n : columnsToBeAdded\n );\n\n const flattenedItems = this.getFlattenedTree();\n\n // Add all children of selected groups to the selected columns\n // The treeItems array will always be parent -> child in the order\n // We don't need to recursively iterate because of this\n // The parent will always be added before any children for nested selections\n flattenedItems.forEach(({ id, children }) => {\n if (newSelectedColumns.has(id)) {\n children.forEach(child => newSelectedColumns.add(child.id));\n }\n });\n\n this.setState({\n selectedColumns: newSelectedColumns,\n });\n }\n\n /**\n * Removes a column or group from selected columns set.\n *\n * Removing a group will deselect all of its children.\n *\n * Removing a child will deselect all parent groups.\n * Other children in those parents will stay selected, just not the group item.\n *\n * @param name Name of the column to remove\n */\n removeColumnFromSelected(name: string): void {\n const { selectedColumns } = this.state;\n const flattenedItems = this.getFlattenedTree();\n\n const item = flattenedItems.find(({ id }) => id === name);\n assertNotNull(item);\n let parentItem = flattenedItems.find(({ id }) => id === item.parentId);\n\n // Remove all children of deselected groups\n flattenTree(item?.children).forEach(child =>\n selectedColumns.delete(child.id)\n );\n\n // Remove all parents of the removed group since it is no longer fully selected\n while (parentItem != null) {\n selectedColumns.delete(parentItem.id);\n const newParentId = parentItem.parentId;\n parentItem = flattenedItems.find(({ id }) => id === newParentId);\n }\n\n selectedColumns.delete(name);\n\n this.setState({\n selectedColumns: new Set(selectedColumns),\n });\n }\n\n handleDragStart(id: string, event: DragStartEvent): void {\n const { selectedColumns } = this.state;\n if (selectedColumns.has(id)) {\n return;\n }\n\n const dragEvent =\n event.activatorEvent as unknown as React.MouseEvent<HTMLElement>;\n const isAddingToSelection =\n GridUtils.isModifierKeyDown(dragEvent) || dragEvent.shiftKey;\n this.handleItemClick(\n id,\n event.activatorEvent as unknown as React.MouseEvent<HTMLElement>,\n true\n );\n // Always add the dragged item back to selected in case the user ctrl+dragged on an already\n // selected item. The handleItemClick would deselect it, but we want to keep it selected.\n this.addColumnToSelected([id], isAddingToSelection);\n }\n\n handleDragEnd(\n from: FlattenedIrisGridTreeItem,\n to: FlattenedIrisGridTreeItem\n ): void {\n const {\n model,\n movedColumns,\n onMovedColumnsChanged,\n columnHeaderGroups,\n onColumnHeaderGroupChanged,\n } = this.props;\n\n const selectedParentItems = this.getSelectedParentItems();\n const firstMovableIndex = this.getFirstMovableIndex();\n const lastMovableIndex = this.getLastMovableIndex();\n\n assertNotNull(firstMovableIndex);\n assertNotNull(lastMovableIndex);\n\n const { groups: groupsAfterDrop, movedColumns: newMoves } =\n moveItemsFromDrop(\n from,\n to,\n movedColumns,\n columnHeaderGroups,\n selectedParentItems,\n firstMovableIndex,\n lastMovableIndex\n );\n\n // Need to parse so the internal state is correct to prevent weird drop animations\n // when adding/removing from groups. But don't parse if nothing changed to prevent\n // unnecessary undo/redo states.\n const newGroups =\n groupsAfterDrop !== columnHeaderGroups\n ? IrisGridUtils.parseColumnHeaderGroups(model, groupsAfterDrop).groups\n : columnHeaderGroups;\n\n onColumnHeaderGroupChanged(newGroups);\n onMovedColumnsChanged(newMoves);\n // Without tracking the state here, React 18 is rendering the child separately from\n // the render which changes the prop. As a result, the drop animations go to the\n // original location because of that render with stale items. I could not find any\n // other way to fix this (removing memoization, removing keys, etc.)\n this.setState({\n movedColumns: newMoves,\n columnHeaderGroups: newGroups,\n });\n // Focus the dragged item after the move. Should not scroll since it's already in view\n this.scrollAndFocusColumnOnUpdate = [to.index, from.id];\n }\n\n handleGroupNameChange(group: ColumnHeaderGroup, newName: string): void {\n const { columnHeaderGroups, onColumnHeaderGroupChanged, endUndoGroup } =\n this.props;\n const newGroups = [...columnHeaderGroups];\n\n const oldName = group.name;\n const groupIndex = newGroups.findIndex(({ name }) => name === oldName);\n const oldGroup = newGroups[groupIndex];\n assertNotNull(oldGroup); // Also means groupIndex >= 0\n\n const newGroup = new ColumnHeaderGroup(oldGroup);\n newGroup.name = newName;\n newGroups.splice(groupIndex, 1, newGroup);\n\n const parentIndex = newGroups.findIndex(\n ({ name }) => name === newGroup.parent\n );\n\n if (parentIndex >= 0) {\n const newParent = new ColumnHeaderGroup(newGroups[parentIndex]);\n newParent.removeChildren([oldName]);\n newParent.addChildren([newName]);\n newGroups.splice(parentIndex, 1, newParent);\n }\n\n const oldElement = this.list?.querySelector(\n `.item-wrapper[data-id=\"${oldName}\"]`\n );\n if (oldElement != null) {\n // The group will be a new item, so focus it after the update\n // otherwise we may lose focus entirely\n const indexAttr = oldElement.getAttribute('data-index');\n this.scrollAndFocusColumnOnUpdate =\n indexAttr != null ? [parseInt(indexAttr, 10), newName] : null;\n }\n\n onColumnHeaderGroupChanged(newGroups);\n endUndoGroup();\n }\n\n handleGroupColorChange = throttle(\n (group: ColumnHeaderGroup, color: string | undefined): void => {\n const { columnHeaderGroups, onColumnHeaderGroupChanged } = this.props;\n const newGroups = [...columnHeaderGroups];\n const newGroup = new ColumnHeaderGroup({ ...group, color });\n\n newGroups.splice(\n newGroups.findIndex(({ name }) => name === group.name),\n 1,\n newGroup\n );\n\n onColumnHeaderGroupChanged(newGroups);\n },\n 250\n );\n\n handleGroupDelete(group: ColumnHeaderGroup): void {\n const { columnHeaderGroups, endUndoGroup, onColumnHeaderGroupChanged } =\n this.props;\n const newGroups = columnHeaderGroups.filter(g => g.name !== group.name);\n const parentIndex = newGroups.findIndex(g => g.name === group.parent);\n if (parentIndex >= 0) {\n const newParent = new ColumnHeaderGroup(newGroups[parentIndex]);\n newParent.addChildren(group.children);\n newParent.removeChildren([group.name]);\n newGroups.splice(parentIndex, 1, newParent);\n }\n onColumnHeaderGroupChanged(newGroups);\n // Could be started from editing a new group which is deleted without saving\n endUndoGroup();\n }\n\n handleGroupCreate(): void {\n const {\n movedColumns,\n onMovedColumnsChanged,\n onColumnHeaderGroupChanged,\n startUndoGroup,\n } = this.props;\n\n const { newMoves, groups } = this.moveSelectedColumns(\n VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP\n );\n\n const newGroups = groups.filter(group => !group.isNew);\n\n const selectedItems = this.getSelectedParentItems();\n\n const childIndexes = selectedItems\n .map(item => item.data.modelIndex)\n .flat()\n .filter(index => index >= 0);\n\n // We don't care about this name really as long as it's unique\n // The user must change it and we display a placeholder instead\n const name = `${ColumnHeaderGroup.NEW_GROUP_PREFIX}-${Date.now()}`;\n\n const newGroup = new ColumnHeaderGroup({\n name,\n children: selectedItems.map(({ id }) => id),\n depth: 0,\n childIndexes: [...new Set(childIndexes)], // Remove any duplicates\n });\n\n startUndoGroup();\n\n onMovedColumnsChanged(movedColumns.concat(newMoves), () => {\n this.virtualizerRef.current?.scrollElement?.scrollTo({ top: 0 });\n });\n onColumnHeaderGroupChanged(newGroups.concat([newGroup]));\n this.resetSelection();\n }\n\n /**\n * Validates if a header group name is valid and not in use by any header groups or columns\n * @param groupName The name to validate\n * @returns Error message if invalid\n */\n validateGroupName(groupName: string): string {\n const { model, columnHeaderGroups } = this.props;\n const { columns } = model;\n\n if (!DbNameValidator.isValidColumnName(groupName)) {\n return 'Invalid name';\n }\n\n if (\n columns.some(({ name }) => name === groupName) ||\n columnHeaderGroups.some(({ name }) => name === groupName)\n ) {\n return 'Duplicate name';\n }\n\n return '';\n }\n\n renderItem({\n value,\n clone,\n item,\n ref,\n handleProps,\n }: TreeItemRenderFnProps<IrisGridTreeItemData>): JSX.Element {\n const { onColumnVisibilityChanged } = this.props;\n const { selectedColumns, showHiddenColumns } = this.state;\n\n let displayString = value;\n\n // The cloned drag overlay we want to show the items being dragged\n if (clone) {\n const selectedItemNames = this.getSelectedParentItems().map(\n ({ id }) => id\n );\n displayString = selectedItemNames.join(', ');\n }\n\n return (\n <VisibilityOrderingItem\n key={item.id}\n ref={ref}\n value={displayString}\n clone={clone}\n item={item}\n childCount={selectedColumns.size}\n onVisibilityChange={onColumnVisibilityChanged}\n visibilityClickAndDrag={showHiddenColumns}\n onClick={this.handleItemClick}\n onGroupDelete={this.handleGroupDelete}\n onGroupColorChange={this.handleGroupColorChange}\n onGroupNameChange={this.handleGroupNameChange}\n validateGroupName={this.validateGroupName}\n handleProps={handleProps}\n />\n );\n }\n\n getMemoizedFirstMovableIndex = memoize(\n (\n model: IrisGridModel,\n columns: readonly dh.Column[],\n movedColumns: readonly MoveOperation[]\n ) => {\n for (let i = 0; i < columns.length; i += 1) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n\n if (model.isColumnMovable(modelIndex)) {\n return i;\n }\n }\n\n return null;\n },\n { max: 10 }\n );\n\n /**\n * Gets the first movable visible index\n */\n getFirstMovableIndex(): number | null {\n const { model, movedColumns } = this.props;\n return this.getMemoizedFirstMovableIndex(\n model,\n model.columns,\n movedColumns\n );\n }\n\n getMemoizedLastMovableIndex = memoize(\n (\n model: IrisGridModel,\n columns: readonly dh.Column[],\n movedColumns: readonly MoveOperation[]\n ) => {\n for (let i = columns.length - 1; i >= 0; i -= 1) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n\n if (model.isColumnMovable(modelIndex)) {\n return i;\n }\n }\n\n return null;\n },\n { max: 10 }\n );\n\n /**\n * Gets the last movable visible index\n */\n getLastMovableIndex(): number | null {\n const { model, movedColumns } = this.props;\n return this.getMemoizedLastMovableIndex(model, model.columns, movedColumns);\n }\n\n memoizedGetTreeItems = memoize(\n (\n columns: readonly dh.Column[],\n movedColumns: readonly MoveOperation[],\n columnHeaderGroups: readonly ColumnHeaderGroup[],\n hiddenColumns: readonly ModelIndex[],\n selectedColumns: ReadonlySet<string>,\n showHiddenColumns: boolean\n ): readonly IrisGridTreeItem[] =>\n getTreeItems(\n columns,\n movedColumns,\n columnHeaderGroups,\n hiddenColumns,\n [...selectedColumns.values()],\n showHiddenColumns\n ),\n { max: 2 }\n );\n\n /**\n * Gets the tree items in order. Memoized for efficiency\n * Use this.getFlattenedTree() if a flat list is needed\n * @param showHiddenColumns Whether to show hidden columns in the tree. Defaults to the current state value.\n * @returns The tree items in order\n */\n getTreeItems(showHiddenColumns?: boolean): readonly IrisGridTreeItem[] {\n const { model, hiddenColumns } = this.props;\n const {\n movedColumns,\n columnHeaderGroups,\n selectedColumns,\n showHiddenColumns: showHiddenColumnsState,\n } = this.state;\n\n return this.memoizedGetTreeItems(\n model.columns,\n movedColumns,\n columnHeaderGroups,\n hiddenColumns,\n selectedColumns,\n showHiddenColumns ?? showHiddenColumnsState\n );\n }\n\n memoizedGetFlattenedTree = memoize(\n (\n treeItems: readonly IrisGridTreeItem[]\n ): readonly FlattenedIrisGridTreeItem[] => flattenTree(treeItems),\n { max: 2 }\n );\n\n /**\n * Gets the flattened tree items in order. Memoized for efficiency\n * @param showHiddenColumns Whether to show hidden columns in the tree. Defaults to the current state value.\n * @returns The flattened tree items in order\n */\n getFlattenedTree(\n showHiddenColumns?: boolean\n ): readonly FlattenedIrisGridTreeItem[] {\n return this.memoizedGetFlattenedTree(this.getTreeItems(showHiddenColumns));\n }\n\n getSelectedItemModelIndexes(columnNames: Set<string>): ModelIndex[] {\n const { model } = this.props;\n return [...columnNames.values()]\n .map(name => model.getColumnIndexByName(name))\n .filter(i => i != null)\n .flat();\n }\n\n /**\n * Gets the selected items that are movable.\n * This is any item whose parent is not also selected.\n *\n * @returns The array of items whose parents are not selected\n */\n getSelectedParentItems(): FlattenedIrisGridTreeItem[] {\n const { selectedColumns } = this.state;\n const treeItems = this.getFlattenedTree();\n\n return treeItems.filter(\n ({ id, parentId }) =>\n // All items whose parents are not selected\n selectedColumns.has(id) && !selectedColumns.has(parentId ?? '')\n );\n }\n\n makeVisibilityOrderingList = memoize(\n (\n columns: readonly DisplayColumn[],\n treeItems: readonly FlattenedIrisGridTreeItem[],\n showHiddenColumns: boolean,\n isDraggable: boolean\n ) => {\n const { movedColumns } = this.props;\n\n const elements = [];\n const firstMovableIndex = this.getFirstMovableIndex();\n const lastMovableIndex = this.getLastMovableIndex();\n\n const firstMovableTreeIndex = treeItems.findIndex(({ data }) =>\n Array.isArray(data.visibleIndex)\n ? data.visibleIndex[0] === firstMovableIndex\n : data.visibleIndex === firstMovableIndex\n );\n\n // Searches from the end so it's faster than findIndex\n const lastMovableTreeIndex = treeItems.findLastIndex(({ data }) =>\n Array.isArray(data.visibleIndex)\n ? data.visibleIndex[1] === lastMovableIndex\n : data.visibleIndex === lastMovableIndex\n );\n\n let movableItems = treeItems.slice(\n firstMovableTreeIndex,\n lastMovableTreeIndex + 1\n );\n\n if (!showHiddenColumns) {\n movableItems = movableItems.filter(item => item.data.isVisible);\n }\n\n // No movable items. Render all as immovable\n if (firstMovableIndex == null || lastMovableIndex === null) {\n for (\n let visibleIndex = 0;\n visibleIndex < columns.length;\n visibleIndex += 1\n ) {\n const modelIndex = GridUtils.getModelIndex(\n visibleIndex,\n movedColumns\n );\n const column = columns[modelIndex];\n if (VisibilityOrderingBuilderInner.shouldRenderColumn(column)) {\n elements.push(this.renderImmovableItem(column.name));\n }\n }\n\n return elements;\n }\n\n // Currently immovable groups are not supported\n for (\n let visibleIndex = 0;\n visibleIndex < firstMovableIndex;\n visibleIndex += 1\n ) {\n const modelIndex = GridUtils.getModelIndex(visibleIndex, movedColumns);\n const column = columns[modelIndex];\n if (VisibilityOrderingBuilderInner.shouldRenderColumn(column)) {\n elements.push(this.renderImmovableItem(column.name));\n }\n }\n\n if (firstMovableIndex !== null && firstMovableIndex > 0) {\n elements.push(<hr key=\"top-horizontal-divider\" />);\n }\n\n elements.push(\n <SortableTree\n key=\"movable-items\"\n items={movableItems}\n renderItem={this.renderItem}\n isDraggable={isDraggable}\n virtualizerRef={this.virtualizerRef}\n />\n );\n\n if (lastMovableIndex != null && lastMovableIndex < columns.length - 1) {\n elements.push(<hr key=\"bottom-horizontal-divider\" />);\n }\n\n for (\n let visibleIndex = lastMovableIndex + 1;\n visibleIndex < columns.length;\n visibleIndex += 1\n ) {\n const modelIndex = GridUtils.getModelIndex(visibleIndex, movedColumns);\n const column = columns[modelIndex];\n if (VisibilityOrderingBuilderInner.shouldRenderColumn(column)) {\n elements.push(this.renderImmovableItem(column.name));\n }\n }\n\n return elements;\n },\n { max: 10 }\n );\n\n renderImmovableItem = memoize(\n (columnName: ColumnName): ReactElement => (\n <div className=\"visibility-ordering-list-item immovable\" key={columnName}>\n <div className=\"column-item\">\n <span className=\"column-name\">{columnName}</span>\n </div>\n </div>\n ),\n { max: 100 }\n );\n\n handleOverflowAction(key: Key): void {\n const { undo, redo } = this.props;\n switch (key) {\n case 'undo':\n undo();\n break;\n case 'redo':\n redo();\n break;\n case 'showHidden':\n this.setState(prev => ({\n showHiddenColumns: !prev.showHiddenColumns,\n selectedColumns: new Set(),\n }));\n break;\n }\n }\n\n handleKeyboardShortcut(event: React.KeyboardEvent): void {\n const { canUndo, canRedo, undo, redo } = this.props;\n if (GLOBAL_SHORTCUTS.UNDO.matchesEvent(event) && canUndo) {\n event.preventDefault();\n undo();\n } else if (GLOBAL_SHORTCUTS.REDO.matchesEvent(event) && canRedo) {\n event.preventDefault();\n redo();\n }\n }\n\n handleSearchModalOpenChange(isOpen: boolean): void {\n if (isOpen) {\n this.resetSelection();\n } else {\n const { showHiddenColumns, selectedColumns } = this.state;\n const { onColumnVisibilityChanged } = this.props;\n // Make sure all selected columns are visible when closing the search modal\n if (!showHiddenColumns) {\n const modelIndexesToShow =\n this.getSelectedItemModelIndexes(selectedColumns);\n onColumnVisibilityChanged(modelIndexesToShow, true);\n }\n }\n this.setState({ isSearchModalOpen: isOpen });\n }\n\n render(): ReactElement {\n const {\n model,\n hiddenColumns,\n onColumnVisibilityChanged,\n canUndo,\n canRedo,\n } = this.props;\n const { selectedColumns, showHiddenColumns, isSearchModalOpen } =\n this.state;\n const hasSelection = selectedColumns.size > 0;\n const flattenedItems = this.getFlattenedTree();\n const hiddenColumnsSet = new Set(hiddenColumns);\n\n const columnsToToggle = hasSelection\n ? this.getSelectedItemModelIndexes(selectedColumns)\n : model.columns.map((_, i) => i);\n\n const areSomeVisible = hasSelection\n ? columnsToToggle.some(column => !hiddenColumnsSet.has(column))\n : hiddenColumnsSet.size < model.columns.length;\n\n const allToggleText = areSomeVisible ? 'Hide All' : 'Show All';\n\n const selectedToggleText = areSomeVisible\n ? 'Hide Selected'\n : 'Show Selected';\n\n const visibilityOrderingList = this.makeVisibilityOrderingList(\n model.columns,\n flattenedItems,\n showHiddenColumns,\n !isSearchModalOpen\n );\n\n return (\n <SortableTreeDndContext\n items={flattenedItems}\n onDragStart={this.handleDragStart}\n onDragEnd={this.handleDragEnd}\n renderItem={this.renderItem}\n >\n <div\n role=\"menu\"\n ref={this.wrapperRef}\n className=\"visibility-ordering-builder\"\n tabIndex={0}\n onKeyUp={this.handleKeyboardShortcut}\n >\n <div className=\"top-menu\">\n <Button\n kind=\"ghost\"\n className=\"toggle-visibility-btn\"\n onClick={() => {\n onColumnVisibilityChanged(columnsToToggle, !areSomeVisible);\n }}\n icon={areSomeVisible ? dhEye : dhEyeSlash}\n tooltip=\"Toggle column visibility\"\n >\n {!hasSelection ? allToggleText : selectedToggleText}\n </Button>\n\n <SearchWithModal\n items={flattenedItems}\n onModalOpenChange={this.handleSearchModalOpenChange}\n onClick={this.handleSearchItemClicked}\n setSelection={this.handleSearchSelect}\n />\n\n <MenuTrigger closeOnSelect>\n <ActionButton isQuiet aria-label=\"More options\">\n <FontAwesomeIcon icon={vsKebabVertical} />\n </ActionButton>\n <SpectrumMenu\n onAction={this.handleOverflowAction}\n disabledKeys={[!canUndo && 'undo', !canRedo && 'redo'].filter(\n k => typeof k === 'string'\n )}\n >\n <Section aria-label=\"Undo and Redo\">\n <Item key=\"undo\" textValue=\"Undo\">\n <Icon>\n <FontAwesomeIcon icon={vsBlank} />\n </Icon>\n <Text>Undo</Text>\n <Keyboard>\n {GLOBAL_SHORTCUTS.UNDO.getDisplayText()}\n </Keyboard>\n </Item>\n <Item key=\"redo\" textValue=\"Redo\">\n <Icon>\n <FontAwesomeIcon icon={vsBlank} />\n </Icon>\n <Text>Redo</Text>\n <Keyboard>\n {GLOBAL_SHORTCUTS.REDO.getDisplayText()}\n </Keyboard>\n </Item>\n </Section>\n <Section aria-label=\"More actions\">\n <Item key=\"showHidden\" textValue=\"Show hidden columns\">\n <Icon>\n <FontAwesomeIcon\n icon={showHiddenColumns ? vsCheck : vsBlank}\n />\n </Icon>\n <Text>Show hidden columns</Text>\n </Item>\n </Section>\n </SpectrumMenu>\n </MenuTrigger>\n </div>\n <div className=\"top-menu\">\n <Button\n kind=\"ghost\"\n icon={vsRefresh}\n className=\"px-1\"\n tooltip=\"Reset to default\"\n onClick={() => {\n this.resetVisibilityOrdering();\n }}\n >\n Reset\n </Button>\n <span className=\"vertical-divider\" />\n <Button\n kind=\"ghost\"\n icon={dhSortAlphaDown}\n className=\"px-1\"\n tooltip=\"Sort ascending\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilderInner.SORTING_OPTIONS.ASC\n );\n }}\n />\n <Button\n kind=\"ghost\"\n icon={dhSortAlphaUp}\n className=\"px-1\"\n tooltip=\"Sort descending\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilderInner.SORTING_OPTIONS.DSC\n );\n }}\n />\n <span className=\"vertical-divider\" />\n <Button\n kind=\"ghost\"\n className=\"px-1\"\n tooltip=\"Create group from selection\"\n disabled={!hasSelection}\n onClick={this.handleGroupCreate}\n >\n <span className=\"fa-layers\">\n <FontAwesomeIcon\n mask={vsSymbolStructure}\n icon={vsCircleLargeFilled}\n transform=\"right-7 down-5 shrink-6\"\n />\n <FontAwesomeIcon\n icon={vsAdd}\n transform=\"right-8 down-6 shrink-8\"\n />\n </span>\n Group\n </Button>\n <span className=\"vertical-divider\" />\n <Button\n kind=\"ghost\"\n icon={vsChevronUp}\n className=\"px-1\"\n tooltip=\"Move selection up\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilderInner.MOVE_OPTIONS.UP\n );\n }}\n disabled={!hasSelection}\n />\n <Button\n kind=\"ghost\"\n icon={vsChevronDown}\n className=\"px-1\"\n tooltip=\"Move selection down\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilderInner.MOVE_OPTIONS.DOWN\n );\n }}\n disabled={!hasSelection}\n />\n <Button\n kind=\"ghost\"\n icon={dhArrowToTop}\n className=\"px-1\"\n tooltip=\"Move selection to top\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP\n );\n }}\n disabled={!hasSelection}\n />\n <Button\n kind=\"ghost\"\n icon={dhArrowToBottom}\n className=\"px-1\"\n tooltip=\"Move selection to bottom\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilderInner.MOVE_OPTIONS.BOTTOM\n );\n }}\n disabled={!hasSelection}\n />\n </div>\n\n <div\n role=\"menu\"\n ref={list => {\n this.list = list;\n }}\n className={classNames('visibility-ordering-list')}\n >\n {visibilityOrderingList}\n </div>\n </div>\n </SortableTreeDndContext>\n );\n }\n}\n\n// drag and drop display\nconst VisibilityOrderingBuilder = memo(\n (props: VisibilityOrderingBuilderProps) => {\n const {\n movedColumns,\n hiddenColumns,\n columnHeaderGroups,\n onMovedColumnsChanged,\n onColumnVisibilityChanged,\n onColumnHeaderGroupChanged,\n onFrozenColumnsChanged,\n // Used for unit tests only\n __testRef,\n } = props;\n\n const {\n set: setUndoState,\n undo,\n canUndo,\n redo,\n canRedo,\n state,\n } = useUndoRedo({\n movedColumns,\n hiddenColumns,\n columnHeaderGroups,\n frozenColumns: props.model.frozenColumns,\n });\n\n // On undo/redo, we need to ignore the prop change\n // because we are the ones updating the props\n const isUndoRedoAction = useRef(false);\n const isBatched = useRef(false);\n const startUndoGroup = useCallback(() => {\n isBatched.current = true;\n }, []);\n const endUndoGroup = useCallback(() => {\n isBatched.current = false;\n }, []);\n\n useEffect(() => {\n if (isUndoRedoAction.current) {\n onMovedColumnsChanged(state.movedColumns);\n onColumnVisibilityChanged(hiddenColumns, true);\n onColumnVisibilityChanged(state.hiddenColumns, false);\n onColumnHeaderGroupChanged(state.columnHeaderGroups);\n onFrozenColumnsChanged(state.frozenColumns);\n isUndoRedoAction.current = false;\n } else if (\n // If the parent props changed and it's not an undo/redo action, update the undo state\n !isBatched.current &&\n (movedColumns !== state.movedColumns ||\n columnHeaderGroups !== state.columnHeaderGroups ||\n hiddenColumns.length !== state.hiddenColumns.length ||\n hiddenColumns.some(\n (col, index) => col !== state.hiddenColumns[index]\n ))\n ) {\n setUndoState({\n movedColumns,\n hiddenColumns,\n columnHeaderGroups,\n frozenColumns: props.model.frozenColumns,\n });\n }\n }, [\n columnHeaderGroups,\n hiddenColumns,\n isBatched,\n movedColumns,\n onColumnHeaderGroupChanged,\n onColumnVisibilityChanged,\n onFrozenColumnsChanged,\n onMovedColumnsChanged,\n props.model.frozenColumns,\n setUndoState,\n state.columnHeaderGroups,\n state.frozenColumns,\n state.hiddenColumns,\n state.movedColumns,\n ]);\n\n const handleColumnHeaderGroupChanged = useCallback(\n (groups: readonly (dh.ColumnGroup | ColumnHeaderGroup)[]) => {\n if (groups !== columnHeaderGroups) {\n onColumnHeaderGroupChanged(\n // Updates which model indexes are in the groups if items were added/removed\n IrisGridUtils.parseColumnHeaderGroups(props.model, groups).groups\n );\n }\n },\n [columnHeaderGroups, onColumnHeaderGroupChanged, props.model]\n );\n\n const handleUndo = useCallback(() => {\n isUndoRedoAction.current = true;\n undo();\n }, [undo]);\n\n const handleRedo = useCallback(() => {\n isUndoRedoAction.current = true;\n redo();\n }, [redo]);\n\n return (\n <VisibilityOrderingBuilderInner\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n ref={__testRef}\n movedColumns={movedColumns}\n hiddenColumns={hiddenColumns}\n columnHeaderGroups={columnHeaderGroups}\n onMovedColumnsChanged={onMovedColumnsChanged}\n onColumnVisibilityChanged={onColumnVisibilityChanged}\n onColumnHeaderGroupChanged={handleColumnHeaderGroupChanged}\n undo={handleUndo}\n canUndo={canUndo}\n redo={handleRedo}\n canRedo={canRedo}\n startUndoGroup={startUndoGroup}\n endUndoGroup={endUndoGroup}\n />\n );\n }\n);\n\nVisibilityOrderingBuilder.displayName = 'VisibilityOrderingBuilder';\n\nexport default VisibilityOrderingBuilder;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/iris-grid",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"description": "Deephaven Iris Grid",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@deephaven/components": "^1.
|
|
35
|
-
"@deephaven/console": "^1.
|
|
34
|
+
"@deephaven/components": "^1.12.0",
|
|
35
|
+
"@deephaven/console": "^1.12.0",
|
|
36
36
|
"@deephaven/filters": "^1.1.0",
|
|
37
|
-
"@deephaven/grid": "^1.
|
|
37
|
+
"@deephaven/grid": "^1.12.0",
|
|
38
38
|
"@deephaven/icons": "^1.2.0",
|
|
39
|
-
"@deephaven/jsapi-components": "^1.
|
|
39
|
+
"@deephaven/jsapi-components": "^1.12.0",
|
|
40
40
|
"@deephaven/jsapi-types": "^1.0.0-dev0.40.4",
|
|
41
41
|
"@deephaven/jsapi-utils": "^1.10.1",
|
|
42
42
|
"@deephaven/log": "^1.8.0",
|
|
@@ -81,5 +81,5 @@
|
|
|
81
81
|
"publishConfig": {
|
|
82
82
|
"access": "public"
|
|
83
83
|
},
|
|
84
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "f6807a8587d3b6dd0948ba3a632cd6af5cee919d"
|
|
85
85
|
}
|