@deephaven/iris-grid 1.7.2-react-18-alpha.3 → 1.8.1-beta.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.
Files changed (44) hide show
  1. package/dist/ColumnHeaderGroup.d.ts +6 -0
  2. package/dist/ColumnHeaderGroup.d.ts.map +1 -1
  3. package/dist/ColumnHeaderGroup.js +9 -0
  4. package/dist/ColumnHeaderGroup.js.map +1 -1
  5. package/dist/IrisGrid.d.ts +8 -0
  6. package/dist/IrisGrid.d.ts.map +1 -1
  7. package/dist/IrisGrid.js +30 -2
  8. package/dist/IrisGrid.js.map +1 -1
  9. package/dist/IrisGridBottomBar.d.ts.map +1 -1
  10. package/dist/IrisGridBottomBar.js +4 -1
  11. package/dist/IrisGridBottomBar.js.map +1 -1
  12. package/dist/sidebar/CustomColumnBuilder.d.ts +1 -1
  13. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  14. package/dist/sidebar/CustomColumnBuilder.js +1 -1
  15. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  16. package/dist/sidebar/CustomColumnInput.js +1 -1
  17. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  18. package/dist/sidebar/RollupRows.d.ts +1 -1
  19. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  20. package/dist/sidebar/RollupRows.js +2 -2
  21. package/dist/sidebar/RollupRows.js.map +1 -1
  22. package/dist/sidebar/aggregations/Aggregations.js +1 -1
  23. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  24. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +1 -1
  25. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  26. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +30 -12
  27. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -1
  28. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +283 -48
  29. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  30. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.d.ts +1 -1
  31. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.d.ts.map +1 -1
  32. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +2 -2
  33. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
  34. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.d.ts.map +1 -1
  35. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +4 -11
  36. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
  37. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts.map +1 -1
  38. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +2 -1
  39. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  40. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +1 -1
  41. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -1
  42. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +10 -6
  43. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  44. package/package.json +17 -17
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilityOrderingBuilder.js","names":["React","PureComponent","classNames","GridUtils","TextUtils","assertNotNull","DbNameValidator","FontAwesomeIcon","dhEye","dhEyeSlash","dhSortAlphaDown","dhSortAlphaUp","dhArrowToTop","dhArrowToBottom","vsChevronUp","vsChevronDown","vsSymbolStructure","vsRefresh","vsCircleLargeFilled","vsAdd","memoize","debounce","Button","SearchInput","clamp","throttle","ColumnHeaderGroup","VisibilityOrderingItem","flattenTree","getTreeItems","SortableTree","moveItemsFromDrop","moveToGroup","jsx","_jsx","jsxs","_jsxs","DEBOUNCE_SEARCH_COLUMN","VisibilityOrderingBuilder","shouldRenderColumn","column","isProxy","constructor","props","_defineProperty","searchColumns","group","color","columnHeaderGroups","onColumnHeaderGroupChanged","newGroups","newGroup","_objectSpread","splice","findIndex","_ref","name","_ref2","value","clone","item","ref","handleProps","onColumnVisibilityChanged","selectedColumns","state","displayString","selectedItemNames","getSelectedParentItems","map","_ref3","id","join","childCount","size","onVisibilityChange","onClick","handleItemClick","onGroupDelete","handleGroupDelete","onGroupColorChange","handleGroupColorChange","onGroupNameChange","handleGroupNameChange","validateGroupName","max","model","columns","movedColumns","i","length","modelIndex","getModelIndex","isColumnMovable","hiddenColumns","values","treeItems","elements","firstMovableIndex","getFirstMovableIndex","lastMovableIndex","getLastMovableIndex","firstMovableTreeIndex","_ref4","data","Array","isArray","visibleIndex","lastMovableTreeIndex","_ref5","movableItems","slice","push","renderImmovableItem","items","renderItem","onDragStart","handleDragStart","onDragEnd","handleDragEnd","columnName","className","children","handleSearchInputChange","bind","handleGroupCreate","addColumnToSelected","Set","queriedColumnIndex","undefined","queriedColumnRange","prevQueriedColumns","lastSelectedColumn","searchFilter","list","componentDidUpdate","prevProps","componentWillUnmount","debouncedSearchColumns","cancel","resetVisibilityOrdering","onReset","onMovedColumnsChanged","setState","initialColumnHeaderGroups","initialMovedColumns","resetSelection","event","target","updateQuery","arguments","flattenedItems","itemsMatch","filter","_ref6","_data$group$isNew","_data$group","isNew","toLowerCase","includes","columnsMatchMap","reduce","acc","_ref7","originalIndex","columnIds","_ref8","_this$list","visibleIndexToFocus","_ref9","columnItemToFocus","querySelectorAll","scrollIntoView","block","changeSelectedColumn","direction","_this$list2","newQueriedColumnIndex","queriedColumnsLength","Object","keys","nextIndex","prevIndex","actualColumnIndex","parseInt","adjustQueriedIndex","indexOf","clickedIndex","queriedColumnsIndexes","idx","index","moveSelectedColumns","option","selectedItems","isMovingUpward","MOVE_OPTIONS","UP","TOP","reverse","newMoves","updatedGroups","_loop","parentId","depth","moveItemOrRange","BOTTOM","itemIndex","prevItemIndex","has","lastIndexOf","prevItem","Math","abs","newParentItemIndex","newParentItem","toIndex","DOWN","nextItem","find","_parentItem$parentId","parentItem","groups","handleMoveColumns","scrollListAfterMove","_this$list3","parentElement","scroll","top","_this$list4","scrollHeight","concat","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","stopPropagation","HTMLElement","tagName","currentTarget","focus","isModifierKeyDown","isShiftKeyDown","shiftKey","isSelected","columnsToBeAdded","removeColumnFromSelected","selectedItem","_ref0","selectedIndex","lastSelectedIndex","addToExisting","newSelectedColumns","forEach","_ref1","child","add","_ref10","_ref11","delete","_loop2","newParentId","_ref12","selectedParentItems","newName","oldName","groupIndex","_ref13","oldGroup","parentIndex","_ref14","parent","newParent","removeChildren","addChildren","g","childIndexes","flat","NEW_GROUP_PREFIX","Date","now","_ref15","_this$list5","groupName","isValidColumnName","some","_ref16","_ref17","getMemoizedFirstMovableIndex","getMemoizedLastMovableIndex","memoizedGetTreeItems","_ref18","render","hasSelection","nameToIndexes","Map","hiddenColumnsSet","columnsToToggle","get","areSomeVisible","allToggleText","selectedToggleText","visibilityOrderingList","makeVisibilityOrderingList","cursor","next","matchCount","role","tabIndex","kind","icon","tooltip","onChange","DSC","disabled","mask","transform"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n PureComponent,\n type ReactElement,\n} from 'react';\nimport classNames from 'classnames';\nimport {\n GridUtils,\n type ModelIndex,\n type MoveOperation,\n type VisibleIndex,\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} from '@deephaven/icons';\nimport type { dh } from '@deephaven/jsapi-types';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport { Button, SearchInput } from '@deephaven/components';\nimport clamp from 'lodash.clamp';\nimport throttle from 'lodash.throttle';\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} from './sortable-tree/utilities';\nimport SortableTree from './sortable-tree/SortableTree';\nimport { type TreeItemRenderFn } from './sortable-tree/TreeItem';\nimport {\n moveItemsFromDrop,\n moveToGroup,\n} from './VisibilityOrderingBuilderUtils';\n\nconst DEBOUNCE_SEARCH_COLUMN = 150;\n\ninterface IndexRange {\n prevIndex: number;\n nextIndex: number;\n}\n\ninterface VisibilityOrderingBuilderProps {\n model: IrisGridModel;\n movedColumns: readonly MoveOperation[];\n hiddenColumns: readonly ModelIndex[];\n columnHeaderGroups: readonly ColumnHeaderGroup[];\n onColumnVisibilityChanged: (\n columns: readonly VisibleIndex[],\n isVisible: boolean\n ) => void;\n onReset: () => void;\n onMovedColumnsChanged: (\n operations: readonly MoveOperation[],\n cb?: () => void\n ) => void;\n onColumnHeaderGroupChanged: (\n groups: readonly (dh.ColumnGroup | ColumnHeaderGroup)[]\n ) => void;\n}\n\ninterface VisibilityOrderingBuilderState {\n selectedColumns: Set<string>;\n queriedColumnIndex: number | undefined;\n queriedColumnRange: IndexRange | undefined;\n prevQueriedColumns: Record<number, string> | undefined;\n lastSelectedColumn: string;\n searchFilter: string;\n}\n\nclass VisibilityOrderingBuilder extends PureComponent<\n VisibilityOrderingBuilderProps,\n VisibilityOrderingBuilderState\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: VisibilityOrderingBuilderProps) {\n super(props);\n\n this.handleSearchInputChange = this.handleSearchInputChange.bind(this);\n this.searchColumns = this.searchColumns.bind(this);\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\n this.state = {\n selectedColumns: new Set(),\n queriedColumnIndex: undefined,\n queriedColumnRange: undefined,\n prevQueriedColumns: undefined,\n lastSelectedColumn: '',\n searchFilter: '',\n };\n\n this.list = null;\n }\n\n componentDidUpdate(prevProps: VisibilityOrderingBuilderProps): void {\n const { movedColumns } = this.props;\n if (movedColumns !== prevProps.movedColumns) {\n const { searchFilter } = this.state;\n this.searchColumns(searchFilter, false);\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSearchColumns.cancel();\n }\n\n list: HTMLDivElement | null;\n\n debouncedSearchColumns = debounce(this.searchColumns, DEBOUNCE_SEARCH_COLUMN);\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 queriedColumnIndex: undefined,\n queriedColumnRange: undefined,\n prevQueriedColumns: undefined,\n lastSelectedColumn: '',\n searchFilter: '',\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 handleSearchInputChange(event: ChangeEvent<HTMLInputElement>): void {\n const searchFilter = event.target.value;\n this.setState({ searchFilter });\n if (!searchFilter) {\n this.debouncedSearchColumns.cancel();\n this.resetSelection();\n return;\n }\n this.debouncedSearchColumns(searchFilter);\n }\n\n searchColumns(searchFilter: string, updateQuery = true): void {\n const flattenedItems = flattenTree(this.getTreeItems());\n const itemsMatch = flattenedItems.filter(\n ({ id, data }) =>\n !(data.group?.isNew ?? false) &&\n id.toLowerCase().includes(searchFilter.toLowerCase())\n );\n\n const columnsMatchMap: Record<number, string> = itemsMatch.reduce(\n (acc, { id }) => {\n const originalIndex = flattenedItems.findIndex(item => item.id === id);\n return { ...acc, [originalIndex]: id };\n },\n {}\n );\n\n if (!updateQuery) {\n this.setState({\n prevQueriedColumns: columnsMatchMap,\n });\n return;\n }\n\n const columnIds: string[] = itemsMatch.map(({ id }) => id);\n this.addColumnToSelected(columnIds, false);\n\n if (columnIds.length > 0) {\n const visibleIndexToFocus = flattenedItems.findIndex(({ id }) =>\n id.toLowerCase().includes(searchFilter.toLowerCase())\n );\n const columnItemToFocus =\n this.list?.querySelectorAll('.item-wrapper')[visibleIndexToFocus];\n columnItemToFocus?.scrollIntoView({ block: 'center' });\n }\n\n this.setState({\n prevQueriedColumns: columnsMatchMap,\n queriedColumnIndex: undefined,\n });\n }\n\n /**\n * Change the selected column to the next or previous column that matches the search criteria.\n *\n * queriedColumnRange stores the closes options in the case that the user clicks on an option that didn't fulfill the search criteria.\n * On click of the forward/back button, queriedColumnIndex is updated to either the upper or lower index in queriedColumnRange\n *\n * queriedColumnIndex is the current index within prevQueriedColumns. Not their actual index in the tree.\n *\n * @param direction The direction to move the selection\n */\n\n changeSelectedColumn(direction: 'forward' | 'back'): void {\n const { queriedColumnIndex, queriedColumnRange, prevQueriedColumns } =\n this.state;\n let newQueriedColumnIndex = queriedColumnIndex;\n\n if (prevQueriedColumns === undefined) return;\n\n const queriedColumnsLength = Object.keys(prevQueriedColumns).length;\n\n if (direction === 'forward') {\n if (queriedColumnRange !== undefined) {\n newQueriedColumnIndex = queriedColumnRange.nextIndex;\n } else if (\n newQueriedColumnIndex === undefined ||\n newQueriedColumnIndex >= queriedColumnsLength - 1\n ) {\n newQueriedColumnIndex = 0;\n } else {\n newQueriedColumnIndex += 1;\n }\n } else if (direction === 'back') {\n if (queriedColumnRange !== undefined) {\n newQueriedColumnIndex = queriedColumnRange.prevIndex;\n } else if (\n newQueriedColumnIndex === undefined ||\n newQueriedColumnIndex <= 0\n ) {\n newQueriedColumnIndex = queriedColumnsLength - 1;\n } else {\n newQueriedColumnIndex -= 1;\n }\n }\n\n this.addColumnToSelected(\n [Object.values(prevQueriedColumns)[newQueriedColumnIndex as number]],\n false\n );\n\n const actualColumnIndex: number = parseInt(\n Object.keys(prevQueriedColumns)[newQueriedColumnIndex as number],\n 10\n );\n\n const columnItemToFocus =\n this.list?.querySelectorAll('.item-wrapper')[actualColumnIndex];\n columnItemToFocus?.scrollIntoView({ block: 'center' });\n\n this.setState({\n queriedColumnIndex: newQueriedColumnIndex,\n queriedColumnRange: undefined,\n });\n }\n\n /**\n * Handles changing the queriedColumnIndex on user click.\n *\n * If the option clicked matches the search criteria the index is updated immediately.\n *\n * If the option clicked doesn't meet the search criteria, the two closest options that fulfill the criteria are stored.\n * On click of the forward/back button the selection will change to one of those options. (Think of VS Code search functionality)\n *\n * @param name the name of the clicked column\n */\n adjustQueriedIndex(name: string): void {\n const { prevQueriedColumns } = this.state;\n\n if (prevQueriedColumns === undefined) return;\n\n if (name in Object.values(prevQueriedColumns)) {\n const newQueriedColumnIndex =\n Object.values(prevQueriedColumns).indexOf(name);\n\n this.setState({\n queriedColumnIndex: newQueriedColumnIndex,\n queriedColumnRange: undefined,\n });\n return;\n }\n\n const flattenedItems = flattenTree(this.getTreeItems());\n const clickedIndex = flattenedItems.findIndex(item => item.id === name);\n\n const queriedColumnsIndexes = Object.keys(prevQueriedColumns).map(idx =>\n parseInt(idx, 10)\n );\n\n let prevIndex = queriedColumnsIndexes.length - 1;\n let nextIndex = 0;\n\n for (let i = 0; i < queriedColumnsIndexes.length; i += 1) {\n const index = queriedColumnsIndexes[i];\n\n if (index < clickedIndex) {\n prevIndex = i;\n } else if (index > clickedIndex) {\n nextIndex = i;\n break;\n }\n }\n\n this.setState({\n queriedColumnRange: { prevIndex, nextIndex },\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 VisibilityOrderingBuilder.MOVE_OPTIONS\n ): { newMoves: MoveOperation[]; groups: readonly ColumnHeaderGroup[] } {\n const { columnHeaderGroups } = this.props;\n const { selectedColumns } = this.state;\n\n const treeItems = flattenTree(this.getTreeItems());\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 === VisibilityOrderingBuilder.MOVE_OPTIONS.UP ||\n option === VisibilityOrderingBuilder.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 VisibilityOrderingBuilder.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 VisibilityOrderingBuilder.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 VisibilityOrderingBuilder.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 VisibilityOrderingBuilder.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 VisibilityOrderingBuilder.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 === VisibilityOrderingBuilder.MOVE_OPTIONS.TOP) {\n scrollListAfterMove = () => {\n this.list?.parentElement?.scroll({ top: 0 });\n };\n }\n if (option === VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM) {\n scrollListAfterMove = () => {\n this.list?.parentElement?.scroll({\n top: this.list.parentElement.scrollHeight,\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 VisibilityOrderingBuilder.SORTING_OPTIONS,\n movedColumns: readonly MoveOperation[]\n ): MoveOperation[] {\n const items = [...itemsParam];\n // Sort all the movable columns\n const isAscending =\n option === VisibilityOrderingBuilder.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 VisibilityOrderingBuilder.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 handleItemClick(\n name: string,\n event: React.MouseEvent<HTMLElement, MouseEvent>\n ): void {\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 = flattenTree(this.getTreeItems());\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.adjustQueriedIndex(name);\n\n this.setState({\n lastSelectedColumn: name,\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 = flattenTree(this.getTreeItems());\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 = flattenTree(this.getTreeItems());\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): void {\n const { selectedColumns } = this.state;\n if (!selectedColumns.has(id)) {\n this.addColumnToSelected([id], false);\n }\n }\n\n handleDragEnd(\n from: FlattenedIrisGridTreeItem,\n to: FlattenedIrisGridTreeItem\n ): void {\n const {\n movedColumns,\n onMovedColumnsChanged,\n columnHeaderGroups,\n onColumnHeaderGroupChanged,\n } = this.props;\n\n const selectedParentItems = this.getSelectedParentItems();\n const flattenedItems = flattenTree(this.getTreeItems()).map((item, i) => ({\n ...item,\n index: i,\n }));\n const firstMovableIndex = this.getFirstMovableIndex();\n const lastMovableIndex = this.getLastMovableIndex();\n\n assertNotNull(firstMovableIndex);\n assertNotNull(lastMovableIndex);\n\n const { groups: newGroups, movedColumns: newMoves } = moveItemsFromDrop(\n from,\n to,\n movedColumns,\n columnHeaderGroups,\n flattenedItems,\n selectedParentItems,\n firstMovableIndex,\n lastMovableIndex\n );\n\n onColumnHeaderGroupChanged(newGroups);\n onMovedColumnsChanged(newMoves);\n }\n\n handleGroupNameChange(group: ColumnHeaderGroup, newName: string): void {\n const { columnHeaderGroups, onColumnHeaderGroupChanged } = 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 onColumnHeaderGroupChanged(newGroups);\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, onColumnHeaderGroupChanged } = 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 }\n\n handleGroupCreate(): void {\n const { movedColumns, onMovedColumnsChanged, onColumnHeaderGroupChanged } =\n this.props;\n\n const { newMoves, groups } = this.moveSelectedColumns(\n VisibilityOrderingBuilder.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 onMovedColumnsChanged(movedColumns.concat(newMoves), () => {\n this.list?.parentElement?.scroll({ top: 0 });\n });\n\n onColumnHeaderGroupChanged(newGroups.concat([newGroup]));\n\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 = memoize<TreeItemRenderFn<IrisGridTreeItem>>(\n ({ value, clone, item, ref, handleProps }) => {\n const { onColumnVisibilityChanged } = this.props;\n const { selectedColumns } = 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 ref={ref}\n value={displayString}\n clone={clone}\n item={item}\n childCount={selectedColumns.size}\n onVisibilityChange={onColumnVisibilityChanged}\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 { max: 1000 }\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 ): readonly IrisGridTreeItem[] =>\n getTreeItems(columns, movedColumns, columnHeaderGroups, hiddenColumns, [\n ...selectedColumns.values(),\n ]),\n { max: 1000 }\n );\n\n /**\n * Gets the tree of movable items in order. Memoized for efficiency\n * Use flattenItems(this.getTreeItems()) if a flat list is needed\n * @returns The movable tree items in order\n */\n getTreeItems(): readonly IrisGridTreeItem[] {\n const { model, movedColumns, hiddenColumns, columnHeaderGroups } =\n this.props;\n const { selectedColumns } = this.state;\n\n return this.memoizedGetTreeItems(\n model.columns,\n movedColumns,\n columnHeaderGroups,\n hiddenColumns,\n selectedColumns\n );\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 = flattenTree(this.getTreeItems());\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 IrisGridTreeItem[]\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 const lastMovableTreeIndex = treeItems.findIndex(({ data }) =>\n Array.isArray(data.visibleIndex)\n ? data.visibleIndex[1] === lastMovableIndex\n : data.visibleIndex === lastMovableIndex\n );\n\n const movableItems = treeItems.slice(\n firstMovableTreeIndex,\n lastMovableTreeIndex + 1\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 (VisibilityOrderingBuilder.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 (VisibilityOrderingBuilder.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 onDragStart={this.handleDragStart}\n onDragEnd={this.handleDragEnd}\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 (VisibilityOrderingBuilder.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: 1000 }\n );\n\n render(): ReactElement {\n const { model, hiddenColumns, onColumnVisibilityChanged } = this.props;\n const {\n selectedColumns,\n searchFilter,\n prevQueriedColumns,\n queriedColumnIndex,\n } = this.state;\n const hasSelection = selectedColumns.size > 0;\n const treeItems = this.getTreeItems();\n const nameToIndexes = new Map(\n flattenTree(treeItems).map(item => [item.id, item.data.modelIndex])\n );\n const hiddenColumnsSet = new Set(hiddenColumns);\n\n const columnsToToggle = [\n // Pass through Set to dedupe model indexes\n ...new Set(\n hasSelection\n ? [...selectedColumns.values()]\n .map(name => nameToIndexes.get(name))\n .filter((i): i is number | number[] => i != null)\n .flat()\n : treeItems.map(item => item.data.modelIndex).flat()\n ),\n ];\n const areSomeVisible = columnsToToggle.some(\n column => !hiddenColumnsSet.has(column)\n );\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 treeItems\n );\n\n const cursor = {\n index: queriedColumnIndex,\n next: (direction: 'forward' | 'back') =>\n this.changeSelectedColumn(direction),\n };\n\n const matchCount = Object.keys(prevQueriedColumns ?? {}).length;\n\n return (\n <div role=\"menu\" className=\"visibility-ordering-builder\" tabIndex={0}>\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 <SearchInput\n className=\"visibility-search\"\n value={searchFilter}\n matchCount={searchFilter ? matchCount : undefined}\n onChange={this.handleSearchInputChange}\n cursor={cursor}\n />\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 VisibilityOrderingBuilder.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 VisibilityOrderingBuilder.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(VisibilityOrderingBuilder.MOVE_OPTIONS.UP);\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 VisibilityOrderingBuilder.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 VisibilityOrderingBuilder.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 VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM\n );\n }}\n disabled={!hasSelection}\n />\n </div>\n\n <div role=\"menu\" className={classNames('visibility-ordering-list')}>\n <div\n className=\"column-list\"\n ref={list => {\n this.list = list;\n }}\n >\n {visibilityOrderingList}\n </div>\n </div>\n </div>\n );\n }\n}\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","debounce","ActionButton","Button","GLOBAL_SHORTCUTS","Icon","Item","Keyboard","MenuTrigger","SearchInput","Section","SpectrumMenu","Text","clamp","throttle","useUndoRedo","Log","ColumnHeaderGroup","VisibilityOrderingItem","flattenTree","getTreeItems","SortableTree","moveItemsFromDrop","moveToGroup","IrisGridUtils","jsx","_jsx","jsxs","_jsxs","log","module","DEBOUNCE_SEARCH_COLUMN","VisibilityOrderingBuilderInner","shouldRenderColumn","column","isProxy","constructor","props","_defineProperty","createRef","searchColumns","group","color","columnHeaderGroups","onColumnHeaderGroupChanged","newGroups","newGroup","_objectSpread","splice","findIndex","_ref","name","_ref2","value","clone","item","ref","handleProps","onColumnVisibilityChanged","selectedColumns","state","displayString","selectedItemNames","getSelectedParentItems","map","_ref3","id","join","childCount","size","onVisibilityChange","onClick","handleItemClick","onGroupDelete","handleGroupDelete","onGroupColorChange","handleGroupColorChange","onGroupNameChange","handleGroupNameChange","validateGroupName","max","model","columns","movedColumns","i","length","modelIndex","getModelIndex","isColumnMovable","hiddenColumns","showHiddenColumns","values","treeItems","elements","firstMovableIndex","getFirstMovableIndex","lastMovableIndex","getLastMovableIndex","firstMovableTreeIndex","_ref4","data","Array","isArray","visibleIndex","lastMovableTreeIndex","_ref5","movableItems","slice","filter","isVisible","push","renderImmovableItem","items","renderItem","onDragStart","handleDragStart","onDragEnd","handleDragEnd","columnName","className","children","handleSearchInputChange","bind","handleGroupCreate","addColumnToSelected","handleOverflowAction","handleKeyboardShortcut","Set","queriedColumnIndex","undefined","queriedColumnRange","prevQueriedColumns","lastSelectedColumn","searchFilter","list","componentDidMount","wrapperRef","current","addEventListener","e","target","HTMLElement","treeItem","closest","lastFocusedItemIndex","dataset","index","parseInt","componentDidUpdate","prevProps","document","activeElement","body","documentElement","_this$list","itemToFocus","querySelector","concat","warn","focus","componentWillUnmount","debouncedSearchColumns","cancel","filteredGroups","isNew","resetVisibilityOrdering","onReset","onMovedColumnsChanged","setState","initialColumnHeaderGroups","initialMovedColumns","resetSelection","event","updateQuery","arguments","flattenedItems","itemsMatch","_ref6","_data$group$isNew","_data$group","toLowerCase","includes","columnsMatchMap","reduce","acc","_ref7","originalIndex","columnIds","_ref8","_this$list2","visibleIndexToFocus","_ref9","columnItemToFocus","querySelectorAll","scrollIntoView","block","changeSelectedColumn","direction","_this$list3","newQueriedColumnIndex","queriedColumnsLength","Object","keys","nextIndex","prevIndex","actualColumnIndex","adjustQueriedIndex","indexOf","clickedIndex","queriedColumnsIndexes","idx","moveSelectedColumns","option","selectedItems","isMovingUpward","MOVE_OPTIONS","UP","TOP","reverse","newMoves","updatedGroups","_loop","parentId","depth","moveItemOrRange","BOTTOM","itemIndex","prevItemIndex","has","lastIndexOf","prevItem","Math","abs","newParentItemIndex","newParentItem","toIndex","DOWN","nextItem","find","_parentItem$parentId","parentItem","groups","handleMoveColumns","scrollListAfterMove","_this$list4","parentElement","scroll","top","_this$list5","scrollHeight","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","stopPropagation","tagName","currentTarget","isModifierKeyDown","isShiftKeyDown","shiftKey","isSelected","columnsToBeAdded","removeColumnFromSelected","selectedItem","_ref0","selectedIndex","lastSelectedIndex","addToExisting","newSelectedColumns","forEach","_ref1","child","add","_ref10","_ref11","delete","_loop2","newParentId","_ref12","selectedParentItems","newName","endUndoGroup","oldName","groupIndex","_ref13","oldGroup","parentIndex","_ref14","parent","newParent","removeChildren","addChildren","g","startUndoGroup","childIndexes","flat","NEW_GROUP_PREFIX","Date","now","_ref15","_this$list6","groupName","isValidColumnName","some","_ref16","_ref17","getMemoizedFirstMovableIndex","getMemoizedLastMovableIndex","memoizedGetTreeItems","_ref18","key","undo","redo","prev","canUndo","canRedo","UNDO","matchesEvent","preventDefault","REDO","render","hasSelection","nameToIndexes","Map","hiddenColumnsSet","columnsToToggle","get","areSomeVisible","allToggleText","selectedToggleText","visibilityOrderingList","makeVisibilityOrderingList","cursor","next","matchCount","role","tabIndex","onKeyUp","kind","icon","tooltip","onChange","closeOnSelect","isQuiet","onAction","disabledKeys","k","textValue","getDisplayText","DSC","disabled","mask","transform","VisibilityOrderingBuilder","onFrozenColumnsChanged","__testRef","set","setUndoState","isUndoRedoAction","isBatched","col","handleColumnHeaderGroupChanged","parseColumnHeaderGroups","handleUndo","handleRedo","displayName"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.tsx"],"sourcesContent":["import React, {\n memo,\n type ChangeEvent,\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 type VisibleIndex,\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 debounce from 'lodash.debounce';\nimport type { Key } from '@react-types/shared';\nimport {\n ActionButton,\n Button,\n GLOBAL_SHORTCUTS,\n Icon,\n Item,\n Keyboard,\n MenuTrigger,\n SearchInput,\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} from './sortable-tree/utilities';\nimport SortableTree from './sortable-tree/SortableTree';\nimport { type TreeItemRenderFn } from './sortable-tree/TreeItem';\nimport {\n moveItemsFromDrop,\n moveToGroup,\n} from './VisibilityOrderingBuilderUtils';\nimport IrisGridUtils from '../../IrisGridUtils';\n\nconst log = Log.module('VisibilityOrderingBuilder');\n\nconst DEBOUNCE_SEARCH_COLUMN = 150;\n\ninterface IndexRange {\n prevIndex: number;\n nextIndex: number;\n}\n\nexport interface VisibilityOrderingBuilderProps {\n model: IrisGridModel;\n movedColumns: readonly MoveOperation[];\n hiddenColumns: readonly ModelIndex[];\n columnHeaderGroups: readonly ColumnHeaderGroup[];\n onColumnVisibilityChanged: (\n columns: readonly VisibleIndex[],\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 queriedColumnIndex: number | undefined;\n queriedColumnRange: IndexRange | undefined;\n prevQueriedColumns: Record<number, string> | undefined;\n lastSelectedColumn: string;\n searchFilter: string;\n showHiddenColumns: boolean;\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.handleSearchInputChange = this.handleSearchInputChange.bind(this);\n this.searchColumns = this.searchColumns.bind(this);\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\n this.state = {\n selectedColumns: new Set(),\n queriedColumnIndex: undefined,\n queriedColumnRange: undefined,\n prevQueriedColumns: undefined,\n lastSelectedColumn: '',\n searchFilter: '',\n showHiddenColumns: true,\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 const { movedColumns } = this.props;\n if (movedColumns !== prevProps.movedColumns) {\n const { searchFilter } = this.state;\n this.searchColumns(searchFilter, false);\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 use 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:nth-child(${this.lastFocusedItemIndex + 1}) .tree-item`\n );\n\n if (itemToFocus == null || !(itemToFocus instanceof HTMLElement)) {\n log.warn('Could not maintain focus');\n this.lastFocusedItemIndex = null;\n return;\n }\n\n itemToFocus.focus();\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSearchColumns.cancel();\n\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 lastFocusedItemIndex: number | null = null;\n\n list: HTMLDivElement | null;\n\n debouncedSearchColumns = debounce(this.searchColumns, DEBOUNCE_SEARCH_COLUMN);\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 queriedColumnIndex: undefined,\n queriedColumnRange: undefined,\n prevQueriedColumns: undefined,\n lastSelectedColumn: '',\n searchFilter: '',\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 handleSearchInputChange(event: ChangeEvent<HTMLInputElement>): void {\n const searchFilter = event.target.value;\n this.setState({ searchFilter });\n if (!searchFilter) {\n this.debouncedSearchColumns.cancel();\n this.resetSelection();\n return;\n }\n this.debouncedSearchColumns(searchFilter);\n }\n\n searchColumns(searchFilter: string, updateQuery = true): void {\n const flattenedItems = flattenTree(this.getTreeItems());\n const itemsMatch = flattenedItems.filter(\n ({ id, data }) =>\n !(data.group?.isNew ?? false) &&\n id.toLowerCase().includes(searchFilter.toLowerCase())\n );\n\n const columnsMatchMap: Record<number, string> = itemsMatch.reduce(\n (acc, { id }) => {\n const originalIndex = flattenedItems.findIndex(item => item.id === id);\n return { ...acc, [originalIndex]: id };\n },\n {}\n );\n\n if (!updateQuery) {\n this.setState({\n prevQueriedColumns: columnsMatchMap,\n });\n return;\n }\n\n const columnIds: string[] = itemsMatch.map(({ id }) => id);\n this.addColumnToSelected(columnIds, false);\n\n if (columnIds.length > 0) {\n const visibleIndexToFocus = flattenedItems.findIndex(({ id }) =>\n id.toLowerCase().includes(searchFilter.toLowerCase())\n );\n const columnItemToFocus =\n this.list?.querySelectorAll('.item-wrapper')[visibleIndexToFocus];\n columnItemToFocus?.scrollIntoView({ block: 'center' });\n }\n\n this.setState({\n prevQueriedColumns: columnsMatchMap,\n queriedColumnIndex: undefined,\n });\n }\n\n /**\n * Change the selected column to the next or previous column that matches the search criteria.\n *\n * queriedColumnRange stores the closes options in the case that the user clicks on an option that didn't fulfill the search criteria.\n * On click of the forward/back button, queriedColumnIndex is updated to either the upper or lower index in queriedColumnRange\n *\n * queriedColumnIndex is the current index within prevQueriedColumns. Not their actual index in the tree.\n *\n * @param direction The direction to move the selection\n */\n\n changeSelectedColumn(direction: 'forward' | 'back'): void {\n const { queriedColumnIndex, queriedColumnRange, prevQueriedColumns } =\n this.state;\n let newQueriedColumnIndex = queriedColumnIndex;\n\n if (prevQueriedColumns === undefined) return;\n\n const queriedColumnsLength = Object.keys(prevQueriedColumns).length;\n\n if (direction === 'forward') {\n if (queriedColumnRange !== undefined) {\n newQueriedColumnIndex = queriedColumnRange.nextIndex;\n } else if (\n newQueriedColumnIndex === undefined ||\n newQueriedColumnIndex >= queriedColumnsLength - 1\n ) {\n newQueriedColumnIndex = 0;\n } else {\n newQueriedColumnIndex += 1;\n }\n } else if (direction === 'back') {\n if (queriedColumnRange !== undefined) {\n newQueriedColumnIndex = queriedColumnRange.prevIndex;\n } else if (\n newQueriedColumnIndex === undefined ||\n newQueriedColumnIndex <= 0\n ) {\n newQueriedColumnIndex = queriedColumnsLength - 1;\n } else {\n newQueriedColumnIndex -= 1;\n }\n }\n\n this.addColumnToSelected(\n [Object.values(prevQueriedColumns)[newQueriedColumnIndex as number]],\n false\n );\n\n const actualColumnIndex: number = parseInt(\n Object.keys(prevQueriedColumns)[newQueriedColumnIndex as number],\n 10\n );\n\n const columnItemToFocus =\n this.list?.querySelectorAll('.item-wrapper')[actualColumnIndex];\n columnItemToFocus?.scrollIntoView({ block: 'center' });\n\n this.setState({\n queriedColumnIndex: newQueriedColumnIndex,\n queriedColumnRange: undefined,\n });\n }\n\n /**\n * Handles changing the queriedColumnIndex on user click.\n *\n * If the option clicked matches the search criteria the index is updated immediately.\n *\n * If the option clicked doesn't meet the search criteria, the two closest options that fulfill the criteria are stored.\n * On click of the forward/back button the selection will change to one of those options. (Think of VS Code search functionality)\n *\n * @param name the name of the clicked column\n */\n adjustQueriedIndex(name: string): void {\n const { prevQueriedColumns } = this.state;\n\n if (prevQueriedColumns === undefined) return;\n\n if (name in Object.values(prevQueriedColumns)) {\n const newQueriedColumnIndex =\n Object.values(prevQueriedColumns).indexOf(name);\n\n this.setState({\n queriedColumnIndex: newQueriedColumnIndex,\n queriedColumnRange: undefined,\n });\n return;\n }\n\n const flattenedItems = flattenTree(this.getTreeItems());\n const clickedIndex = flattenedItems.findIndex(item => item.id === name);\n\n const queriedColumnsIndexes = Object.keys(prevQueriedColumns).map(idx =>\n parseInt(idx, 10)\n );\n\n let prevIndex = queriedColumnsIndexes.length - 1;\n let nextIndex = 0;\n\n for (let i = 0; i < queriedColumnsIndexes.length; i += 1) {\n const index = queriedColumnsIndexes[i];\n\n if (index < clickedIndex) {\n prevIndex = i;\n } else if (index > clickedIndex) {\n nextIndex = i;\n break;\n }\n }\n\n this.setState({\n queriedColumnRange: { prevIndex, nextIndex },\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 = flattenTree(this.getTreeItems());\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.list?.parentElement?.scroll({ top: 0 });\n };\n }\n if (option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.BOTTOM) {\n scrollListAfterMove = () => {\n this.list?.parentElement?.scroll({\n top: this.list.parentElement.scrollHeight,\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 handleItemClick(\n name: string,\n event: React.MouseEvent<HTMLElement, MouseEvent>\n ): void {\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 = flattenTree(this.getTreeItems());\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.adjustQueriedIndex(name);\n\n this.setState({\n lastSelectedColumn: name,\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 = flattenTree(this.getTreeItems());\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 = flattenTree(this.getTreeItems());\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): void {\n const { selectedColumns } = this.state;\n if (!selectedColumns.has(id)) {\n this.addColumnToSelected([id], false);\n }\n }\n\n handleDragEnd(\n from: FlattenedIrisGridTreeItem,\n to: FlattenedIrisGridTreeItem\n ): void {\n const {\n movedColumns,\n onMovedColumnsChanged,\n columnHeaderGroups,\n onColumnHeaderGroupChanged,\n } = this.props;\n\n const selectedParentItems = this.getSelectedParentItems();\n const flattenedItems = flattenTree(this.getTreeItems());\n const firstMovableIndex = this.getFirstMovableIndex();\n const lastMovableIndex = this.getLastMovableIndex();\n\n assertNotNull(firstMovableIndex);\n assertNotNull(lastMovableIndex);\n\n const { groups: newGroups, movedColumns: newMoves } = moveItemsFromDrop(\n from,\n to,\n movedColumns,\n columnHeaderGroups,\n flattenedItems,\n selectedParentItems,\n firstMovableIndex,\n lastMovableIndex\n );\n\n onColumnHeaderGroupChanged(newGroups);\n onMovedColumnsChanged(newMoves);\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 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.list?.parentElement?.scroll({ 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 = memoize<TreeItemRenderFn<IrisGridTreeItem>>(\n ({ value, clone, item, ref, handleProps }) => {\n const { onColumnVisibilityChanged } = this.props;\n const { selectedColumns } = 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 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 { max: 1000 }\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: 1000 }\n );\n\n /**\n * Gets the tree of movable items in order. Memoized for efficiency\n * Use flattenItems(this.getTreeItems()) if a flat list is needed\n * @returns The movable tree items in order\n */\n getTreeItems(): readonly IrisGridTreeItem[] {\n const { model, movedColumns, hiddenColumns, columnHeaderGroups } =\n this.props;\n const { selectedColumns, showHiddenColumns } = this.state;\n\n return this.memoizedGetTreeItems(\n model.columns,\n movedColumns,\n columnHeaderGroups,\n hiddenColumns,\n selectedColumns,\n showHiddenColumns\n );\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 = flattenTree(this.getTreeItems());\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 IrisGridTreeItem[],\n showHiddenColumns: 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 const lastMovableTreeIndex = treeItems.findIndex(({ 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 onDragStart={this.handleDragStart}\n onDragEnd={this.handleDragEnd}\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: 1000 }\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 => ({ showHiddenColumns: !prev.showHiddenColumns }));\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 render(): ReactElement {\n const {\n model,\n hiddenColumns,\n onColumnVisibilityChanged,\n canUndo,\n canRedo,\n } = this.props;\n const {\n selectedColumns,\n searchFilter,\n prevQueriedColumns,\n queriedColumnIndex,\n showHiddenColumns,\n } = this.state;\n const hasSelection = selectedColumns.size > 0;\n const treeItems = this.getTreeItems();\n const nameToIndexes = new Map(\n flattenTree(treeItems).map(item => [item.id, item.data.modelIndex])\n );\n const hiddenColumnsSet = new Set(hiddenColumns);\n\n const columnsToToggle = [\n // Pass through Set to dedupe model indexes\n ...new Set(\n hasSelection\n ? [...selectedColumns.values()]\n .map(name => nameToIndexes.get(name))\n .filter((i): i is number | number[] => i != null)\n .flat()\n : treeItems.map(item => item.data.modelIndex).flat()\n ),\n ];\n const areSomeVisible = columnsToToggle.some(\n column => !hiddenColumnsSet.has(column)\n );\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 treeItems,\n showHiddenColumns\n );\n\n const cursor = {\n index: queriedColumnIndex,\n next: (direction: 'forward' | 'back') =>\n this.changeSelectedColumn(direction),\n };\n\n const matchCount = Object.keys(prevQueriedColumns ?? {}).length;\n\n return (\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 <SearchInput\n className=\"visibility-search\"\n value={searchFilter}\n matchCount={searchFilter ? matchCount : undefined}\n onChange={this.handleSearchInputChange}\n cursor={cursor}\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>{GLOBAL_SHORTCUTS.UNDO.getDisplayText()}</Keyboard>\n </Item>\n <Item key=\"redo\" textValue=\"Redo\">\n <Icon>\n <FontAwesomeIcon icon={vsBlank} />\n </Icon>\n <Text>Redo</Text>\n <Keyboard>{GLOBAL_SHORTCUTS.REDO.getDisplayText()}</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 role=\"menu\" className={classNames('visibility-ordering-list')}>\n <div\n className=\"column-list\"\n ref={list => {\n this.list = list;\n }}\n >\n {visibilityOrderingList}\n </div>\n </div>\n </div>\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 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 [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":[]}
@@ -22,5 +22,5 @@ export declare function moveItemsFromDrop(from: FlattenedIrisGridTreeItem, to: F
22
22
  groups: readonly ColumnHeaderGroup[];
23
23
  movedColumns: readonly MoveOperation[];
24
24
  };
25
- export declare function moveToGroup<T>(item: FlattenedItem<T>, toName: string | null, columnGroups: readonly ColumnHeaderGroup[]): ColumnHeaderGroup[];
25
+ export declare function moveToGroup<T>(item: FlattenedItem<T>, toName: string | null, columnGroups: readonly ColumnHeaderGroup[]): readonly ColumnHeaderGroup[];
26
26
  //# sourceMappingURL=VisibilityOrderingBuilderUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilityOrderingBuilderUtils.d.ts","sourceRoot":"","sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE3E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,yBAAyB,EAC/B,EAAE,EAAE,yBAAyB,EAC7B,YAAY,EAAE,SAAS,aAAa,EAAE,EACtC,kBAAkB,EAAE,SAAS,iBAAiB,EAAE,EAChD,cAAc,EAAE,SAAS,yBAAyB,EAAE,EACpD,mBAAmB,EAAE,SAAS,yBAAyB,EAAE,EACzD,iBAAiB,EAAE,MAAM,EACzB,gBAAgB,EAAE,MAAM,GACvB;IACD,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACrC,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;CACxC,CAyEA;AAED,wBAAgB,WAAW,CAAC,CAAC,EAC3B,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,YAAY,EAAE,SAAS,iBAAiB,EAAE,GACzC,iBAAiB,EAAE,CA6CrB"}
1
+ {"version":3,"file":"VisibilityOrderingBuilderUtils.d.ts","sourceRoot":"","sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE3E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,yBAAyB,EAC/B,EAAE,EAAE,yBAAyB,EAC7B,YAAY,EAAE,SAAS,aAAa,EAAE,EACtC,kBAAkB,EAAE,SAAS,iBAAiB,EAAE,EAChD,cAAc,EAAE,SAAS,yBAAyB,EAAE,EACpD,mBAAmB,EAAE,SAAS,yBAAyB,EAAE,EACzD,iBAAiB,EAAE,MAAM,EACzB,gBAAgB,EAAE,MAAM,GACvB;IACD,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACrC,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;CACxC,CA6EA;AAED,wBAAgB,WAAW,CAAC,CAAC,EAC3B,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,YAAY,EAAE,SAAS,iBAAiB,EAAE,GACzC,SAAS,iBAAiB,EAAE,CA6C9B"}
@@ -76,13 +76,13 @@ export function moveItemsFromDrop(from, to, movedColumns, columnHeaderGroups, fl
76
76
  newMoves = GridUtils.moveItemOrRange(selectedRange, clamp(dropIndex, firstMovableIndex, lastMovableIndex), newMoves);
77
77
  return {
78
78
  groups: newGroups,
79
- movedColumns: movedColumns.concat(newMoves)
79
+ movedColumns: newMoves.length > 0 ? movedColumns.concat(newMoves) : movedColumns
80
80
  };
81
81
  }
82
82
  export function moveToGroup(item, toName, columnGroups) {
83
83
  if (item.parentId === toName) {
84
84
  // Don't need to move an item if it is already in the group
85
- return [...columnGroups];
85
+ return columnGroups;
86
86
  }
87
87
  var newGroups = columnGroups.map(group => new ColumnHeaderGroup(group));
88
88
  var newGroupMap = new Map(newGroups.map(group => [group.name, group]));
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilityOrderingBuilderUtils.js","names":["GridUtils","clamp","ColumnHeaderGroup","moveItemsFromDrop","from","to","movedColumns","columnHeaderGroups","flattenedItems","selectedParentItems","firstMovableIndex","lastMovableIndex","treeItems","map","item","i","_objectSpread","index","newMoves","newGroups","firstVisibleIndex","data","visibleIndex","fromItemIndex","findIndex","_ref","id","toItemIndex","_ref2","toIndex","Array","isArray","moveToGroup","parentId","length","moveItemOrRange","selectedRange","originalDropIndex","dropIndex","getVisibleIndex","children","groups","concat","toName","columnGroups","group","newGroupMap","Map","name","fromGroup","find","g","toGroup","movedGroup","filter","_parent","deleteNames","Set","parent","parentName","get","removeChildren","_parent$parent","_parent2","add","nextParentName","nextParent","_ref3","has","addChildren","setParent","undefined"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.ts"],"sourcesContent":["import { GridUtils, type MoveOperation } from '@deephaven/grid';\nimport clamp from 'lodash.clamp';\nimport ColumnHeaderGroup from '../../ColumnHeaderGroup';\nimport { type FlattenedItem } from './sortable-tree/types';\nimport { type FlattenedIrisGridTreeItem } from './sortable-tree/utilities';\n\n/**\n * Moves an item as the result of drag and drop in the visibility ordering builder\n * This is extracted from the component mostly for testing purposes\n * Drag and drop interactions are not easily testable\n *\n * @param from The item being dragged\n * @param to The item being dropped on\n * @param movedColumns The existing moved columns\n * @param columnHeaderGroups The column header groups pre-drag\n * @param flattenedItems Flattened tree items representing the list\n * @param selectedParentItems The user selected items in tree order. Should not include items if their parent item is selected\n * @param firstMovableIndex The first visible index that can be moved\n * @param lastMovableIndex The last visible index that can be moved\n * @returns Object containing the updated column header groups and updated movedColumns array\n * The movedColumns returned is complete and does not need to be combined with the existing movedColumns\n */\nexport function moveItemsFromDrop(\n from: FlattenedIrisGridTreeItem,\n to: FlattenedIrisGridTreeItem,\n movedColumns: readonly MoveOperation[],\n columnHeaderGroups: readonly ColumnHeaderGroup[],\n flattenedItems: readonly FlattenedIrisGridTreeItem[],\n selectedParentItems: readonly FlattenedIrisGridTreeItem[],\n firstMovableIndex: number,\n lastMovableIndex: number\n): {\n groups: readonly ColumnHeaderGroup[];\n movedColumns: readonly MoveOperation[];\n} {\n const treeItems = flattenedItems.map((item, i) => ({\n ...item,\n index: i,\n }));\n\n let newMoves: MoveOperation[] = [];\n let newGroups = columnHeaderGroups;\n\n const firstVisibleIndex = selectedParentItems[0].data.visibleIndex;\n\n const fromItemIndex = treeItems.findIndex(({ id }) => id === from.id);\n const toItemIndex = treeItems.findIndex(({ id }) => id === to.id);\n\n let toIndex = Array.isArray(firstVisibleIndex)\n ? firstVisibleIndex[1] + 1\n : firstVisibleIndex + 1;\n\n newGroups = moveToGroup(selectedParentItems[0], to.parentId, newGroups);\n\n // Move the items after to all after the first selected item\n for (let i = 1; i < selectedParentItems.length; i += 1) {\n const {\n data: { visibleIndex },\n } = selectedParentItems[i];\n\n newMoves = GridUtils.moveItemOrRange(visibleIndex, toIndex, newMoves, true);\n\n toIndex += Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n\n newGroups = moveToGroup(selectedParentItems[i], to.parentId, newGroups);\n }\n\n const selectedRange = [\n Array.isArray(firstVisibleIndex) ? firstVisibleIndex[0] : firstVisibleIndex,\n toIndex - 1,\n ] as [number, number];\n\n const originalDropIndex = Array.isArray(to.data.visibleIndex)\n ? to.data.visibleIndex[0]\n : to.data.visibleIndex;\n let dropIndex = GridUtils.getVisibleIndex(originalDropIndex, newMoves);\n\n // When moving up from multi-select\n // And the items caused the drop index to shift (disjoint multi-select)\n // The drop index will be off by 1\n if (fromItemIndex > toItemIndex && dropIndex > originalDropIndex) {\n dropIndex -= 1;\n }\n // Dropping as first item in a group\n // Need to adjust visible index if dragging from before this group or it is off by 1\n if (\n to.children.length > 0 &&\n (Array.isArray(firstVisibleIndex)\n ? firstVisibleIndex[0]\n : firstVisibleIndex) < dropIndex\n ) {\n dropIndex -= 1;\n }\n\n if (selectedRange[0] < dropIndex) {\n dropIndex -= selectedRange[1] - selectedRange[0];\n }\n\n newMoves = GridUtils.moveItemOrRange(\n selectedRange,\n clamp(dropIndex, firstMovableIndex, lastMovableIndex),\n newMoves\n );\n\n return { groups: newGroups, movedColumns: movedColumns.concat(newMoves) };\n}\n\nexport function moveToGroup<T>(\n item: FlattenedItem<T>,\n toName: string | null,\n columnGroups: readonly ColumnHeaderGroup[]\n): ColumnHeaderGroup[] {\n if (item.parentId === toName) {\n // Don't need to move an item if it is already in the group\n return [...columnGroups];\n }\n\n let newGroups = columnGroups.map(group => new ColumnHeaderGroup(group));\n const newGroupMap = new Map(newGroups.map(group => [group.name, group]));\n const fromGroup = newGroups.find(g => g.name === item.parentId);\n const toGroup = newGroups.find(g => g.name === toName);\n const movedGroup = newGroups.find(g => g.name === item.id);\n\n if (fromGroup != null) {\n // Moved out of a group\n fromGroup.children = fromGroup.children.filter(name => name !== item.id);\n\n // Moved all children out of a group\n if (fromGroup.children.length === 0) {\n const deleteNames = new Set([fromGroup.name]);\n const { parent: parentName = '' } = fromGroup;\n let parent = newGroupMap.get(parentName);\n parent?.removeChildren([fromGroup.name]);\n\n // Might need to delete parents if their only child is the now empty group\n while (parent && parent.children.length === 0) {\n deleteNames.add(parent.name);\n const nextParentName = parent?.parent ?? '';\n const nextParent = newGroupMap.get(nextParentName);\n nextParent?.removeChildren([parent.name]);\n parent = nextParent;\n }\n\n // Delete all groups that are now empty\n newGroups = newGroups.filter(({ name }) => !deleteNames.has(name));\n }\n }\n\n if (toGroup != null) {\n // Moved into a group\n toGroup.addChildren([item.id]);\n }\n\n movedGroup?.setParent(toName ?? undefined);\n\n return newGroups;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VisibilityOrderingBuilderUtils.js","names":["GridUtils","clamp","ColumnHeaderGroup","moveItemsFromDrop","from","to","movedColumns","columnHeaderGroups","flattenedItems","selectedParentItems","firstMovableIndex","lastMovableIndex","treeItems","map","item","i","_objectSpread","index","newMoves","newGroups","firstVisibleIndex","data","visibleIndex","fromItemIndex","findIndex","_ref","id","toItemIndex","_ref2","toIndex","Array","isArray","moveToGroup","parentId","length","moveItemOrRange","selectedRange","originalDropIndex","dropIndex","getVisibleIndex","children","groups","concat","toName","columnGroups","group","newGroupMap","Map","name","fromGroup","find","g","toGroup","movedGroup","filter","_parent","deleteNames","Set","parent","parentName","get","removeChildren","_parent$parent","_parent2","add","nextParentName","nextParent","_ref3","has","addChildren","setParent","undefined"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.ts"],"sourcesContent":["import { GridUtils, type MoveOperation } from '@deephaven/grid';\nimport clamp from 'lodash.clamp';\nimport ColumnHeaderGroup from '../../ColumnHeaderGroup';\nimport { type FlattenedItem } from './sortable-tree/types';\nimport { type FlattenedIrisGridTreeItem } from './sortable-tree/utilities';\n\n/**\n * Moves an item as the result of drag and drop in the visibility ordering builder\n * This is extracted from the component mostly for testing purposes\n * Drag and drop interactions are not easily testable\n *\n * @param from The item being dragged\n * @param to The item being dropped on\n * @param movedColumns The existing moved columns\n * @param columnHeaderGroups The column header groups pre-drag\n * @param flattenedItems Flattened tree items representing the list\n * @param selectedParentItems The user selected items in tree order. Should not include items if their parent item is selected\n * @param firstMovableIndex The first visible index that can be moved\n * @param lastMovableIndex The last visible index that can be moved\n * @returns Object containing the updated column header groups and updated movedColumns array\n * The movedColumns returned is complete and does not need to be combined with the existing movedColumns\n */\nexport function moveItemsFromDrop(\n from: FlattenedIrisGridTreeItem,\n to: FlattenedIrisGridTreeItem,\n movedColumns: readonly MoveOperation[],\n columnHeaderGroups: readonly ColumnHeaderGroup[],\n flattenedItems: readonly FlattenedIrisGridTreeItem[],\n selectedParentItems: readonly FlattenedIrisGridTreeItem[],\n firstMovableIndex: number,\n lastMovableIndex: number\n): {\n groups: readonly ColumnHeaderGroup[];\n movedColumns: readonly MoveOperation[];\n} {\n const treeItems = flattenedItems.map((item, i) => ({\n ...item,\n index: i,\n }));\n\n let newMoves = [] as MoveOperation[];\n let newGroups = columnHeaderGroups;\n\n const firstVisibleIndex = selectedParentItems[0].data.visibleIndex;\n\n const fromItemIndex = treeItems.findIndex(({ id }) => id === from.id);\n const toItemIndex = treeItems.findIndex(({ id }) => id === to.id);\n\n let toIndex = Array.isArray(firstVisibleIndex)\n ? firstVisibleIndex[1] + 1\n : firstVisibleIndex + 1;\n\n newGroups = moveToGroup(selectedParentItems[0], to.parentId, newGroups);\n\n // Move the items after to all after the first selected item\n for (let i = 1; i < selectedParentItems.length; i += 1) {\n const {\n data: { visibleIndex },\n } = selectedParentItems[i];\n\n newMoves = GridUtils.moveItemOrRange(visibleIndex, toIndex, newMoves, true);\n\n toIndex += Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n\n newGroups = moveToGroup(selectedParentItems[i], to.parentId, newGroups);\n }\n\n const selectedRange = [\n Array.isArray(firstVisibleIndex) ? firstVisibleIndex[0] : firstVisibleIndex,\n toIndex - 1,\n ] as [number, number];\n\n const originalDropIndex = Array.isArray(to.data.visibleIndex)\n ? to.data.visibleIndex[0]\n : to.data.visibleIndex;\n let dropIndex = GridUtils.getVisibleIndex(originalDropIndex, newMoves);\n\n // When moving up from multi-select\n // And the items caused the drop index to shift (disjoint multi-select)\n // The drop index will be off by 1\n if (fromItemIndex > toItemIndex && dropIndex > originalDropIndex) {\n dropIndex -= 1;\n }\n // Dropping as first item in a group\n // Need to adjust visible index if dragging from before this group or it is off by 1\n if (\n to.children.length > 0 &&\n (Array.isArray(firstVisibleIndex)\n ? firstVisibleIndex[0]\n : firstVisibleIndex) < dropIndex\n ) {\n dropIndex -= 1;\n }\n\n if (selectedRange[0] < dropIndex) {\n dropIndex -= selectedRange[1] - selectedRange[0];\n }\n\n newMoves = GridUtils.moveItemOrRange(\n selectedRange,\n clamp(dropIndex, firstMovableIndex, lastMovableIndex),\n newMoves\n );\n\n return {\n groups: newGroups,\n movedColumns:\n newMoves.length > 0 ? movedColumns.concat(newMoves) : movedColumns,\n };\n}\n\nexport function moveToGroup<T>(\n item: FlattenedItem<T>,\n toName: string | null,\n columnGroups: readonly ColumnHeaderGroup[]\n): readonly ColumnHeaderGroup[] {\n if (item.parentId === toName) {\n // Don't need to move an item if it is already in the group\n return columnGroups;\n }\n\n let newGroups = columnGroups.map(group => new ColumnHeaderGroup(group));\n const newGroupMap = new Map(newGroups.map(group => [group.name, group]));\n const fromGroup = newGroups.find(g => g.name === item.parentId);\n const toGroup = newGroups.find(g => g.name === toName);\n const movedGroup = newGroups.find(g => g.name === item.id);\n\n if (fromGroup != null) {\n // Moved out of a group\n fromGroup.children = fromGroup.children.filter(name => name !== item.id);\n\n // Moved all children out of a group\n if (fromGroup.children.length === 0) {\n const deleteNames = new Set([fromGroup.name]);\n const { parent: parentName = '' } = fromGroup;\n let parent = newGroupMap.get(parentName);\n parent?.removeChildren([fromGroup.name]);\n\n // Might need to delete parents if their only child is the now empty group\n while (parent && parent.children.length === 0) {\n deleteNames.add(parent.name);\n const nextParentName = parent?.parent ?? '';\n const nextParent = newGroupMap.get(nextParentName);\n nextParent?.removeChildren([parent.name]);\n parent = nextParent;\n }\n\n // Delete all groups that are now empty\n newGroups = newGroups.filter(({ name }) => !deleteNames.has(name));\n }\n }\n\n if (toGroup != null) {\n // Moved into a group\n toGroup.addChildren([item.id]);\n }\n\n movedGroup?.setParent(toName ?? undefined);\n\n return newGroups;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilityOrderingGroup.d.ts","sourceRoot":"","sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,gCAAgC,CAAC;AAExC,UAAU,4BAA4B;IACpC,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC7E,YAAY,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC;AAED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,4BAA4B,GAClC,GAAG,CAAC,OAAO,CAkOb"}
1
+ {"version":3,"file":"VisibilityOrderingGroup.d.ts","sourceRoot":"","sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,gCAAgC,CAAC;AAExC,UAAU,4BAA4B;IACpC,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC7E,YAAY,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC;AAED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,4BAA4B,GAClC,GAAG,CAAC,OAAO,CAuNb"}