@deephaven/iris-grid 0.24.1-hierarchical-table.0 → 0.25.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 (106) hide show
  1. package/dist/ColumnHeaderGroup.d.ts +10 -3
  2. package/dist/ColumnHeaderGroup.d.ts.map +1 -1
  3. package/dist/ColumnHeaderGroup.js +20 -1
  4. package/dist/ColumnHeaderGroup.js.map +1 -1
  5. package/dist/IrisGrid.css.map +1 -1
  6. package/dist/IrisGrid.d.ts +6 -3
  7. package/dist/IrisGrid.d.ts.map +1 -1
  8. package/dist/IrisGrid.js +42 -25
  9. package/dist/IrisGrid.js.map +1 -1
  10. package/dist/IrisGridModel.d.ts +9 -2
  11. package/dist/IrisGridModel.d.ts.map +1 -1
  12. package/dist/IrisGridModel.js +0 -13
  13. package/dist/IrisGridModel.js.map +1 -1
  14. package/dist/IrisGridModelUpdater.d.ts +3 -1
  15. package/dist/IrisGridModelUpdater.d.ts.map +1 -1
  16. package/dist/IrisGridModelUpdater.js +5 -1
  17. package/dist/IrisGridModelUpdater.js.map +1 -1
  18. package/dist/IrisGridProxyModel.d.ts +7 -2
  19. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  20. package/dist/IrisGridProxyModel.js +16 -4
  21. package/dist/IrisGridProxyModel.js.map +1 -1
  22. package/dist/IrisGridTableModel.d.ts +1 -1
  23. package/dist/IrisGridTableModel.d.ts.map +1 -1
  24. package/dist/IrisGridTableModel.js.map +1 -1
  25. package/dist/IrisGridTableModelTemplate.d.ts +18 -9
  26. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  27. package/dist/IrisGridTableModelTemplate.js +143 -165
  28. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  29. package/dist/IrisGridTestUtils.d.ts +8 -2
  30. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  31. package/dist/IrisGridTestUtils.js +9 -4
  32. package/dist/IrisGridTestUtils.js.map +1 -1
  33. package/dist/IrisGridTheme.module.css.map +1 -1
  34. package/dist/IrisGridUtils.d.ts +16 -2
  35. package/dist/IrisGridUtils.d.ts.map +1 -1
  36. package/dist/IrisGridUtils.js +151 -48
  37. package/dist/IrisGridUtils.js.map +1 -1
  38. package/dist/index.d.ts +1 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +1 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/sidebar/index.d.ts +1 -1
  43. package/dist/sidebar/index.d.ts.map +1 -1
  44. package/dist/sidebar/index.js +1 -1
  45. package/dist/sidebar/index.js.map +1 -1
  46. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css +68 -0
  47. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css.map +1 -0
  48. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +156 -0
  49. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -0
  50. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +962 -0
  51. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -0
  52. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.d.ts +26 -0
  53. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.d.ts.map +1 -0
  54. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +130 -0
  55. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -0
  56. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css +29 -0
  57. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css.map +1 -0
  58. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.d.ts +13 -0
  59. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.d.ts.map +1 -0
  60. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +160 -0
  61. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -0
  62. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts +19 -0
  63. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts.map +1 -0
  64. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +81 -0
  65. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -0
  66. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.d.ts +13 -0
  67. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.d.ts.map +1 -0
  68. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +28 -0
  69. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -0
  70. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts +18 -0
  71. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts.map +1 -0
  72. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +156 -0
  73. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -0
  74. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts +19 -0
  75. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts.map +1 -0
  76. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +144 -0
  77. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -0
  78. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts +7 -0
  79. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts.map +1 -0
  80. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +57 -0
  81. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -0
  82. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +139 -0
  83. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +1 -0
  84. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts +36 -0
  85. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts.map +1 -0
  86. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +44 -0
  87. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -0
  88. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.d.ts +4 -0
  89. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.d.ts.map +1 -0
  90. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +127 -0
  91. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -0
  92. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.d.ts +20 -0
  93. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.d.ts.map +1 -0
  94. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js +4 -0
  95. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +1 -0
  96. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +55 -0
  97. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -0
  98. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +265 -0
  99. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -0
  100. package/package.json +20 -16
  101. package/dist/sidebar/VisibilityOrderingBuilder.css +0 -156
  102. package/dist/sidebar/VisibilityOrderingBuilder.css.map +0 -1
  103. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +0 -79
  104. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +0 -1
  105. package/dist/sidebar/VisibilityOrderingBuilder.js +0 -753
  106. package/dist/sidebar/VisibilityOrderingBuilder.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"VisibilityOrderingBuilder.js","names":["React","Component","classNames","GridUtils","TextUtils","assertNotNull","FontAwesomeIcon","dhEye","dhEyeSlash","dhSortAlphaDown","dhSortAlphaUp","dhArrowToTop","dhArrowToBottom","vsChevronUp","vsChevronDown","vsGripper","DragDropContext","Draggable","Droppable","memoize","debounce","Button","SearchInput","Tooltip","Log","log","module","DEBOUNCE_SEARCH_COLUMN","VisibilityOrderingBuilder","constructor","props","searchColumns","model","columns","i","length","isColumnMovable","columnName","modelIndex","visibleIndex","isHidden","isSelected","isDragging","isDragged","columnsDragged","provided","innerRef","draggableProps","event","handleVisibilityDraggingStart","VISIBILITY_OPTIONS","SHOW","HIDE","handleMouseEnter","handleVisibilityDraggingEnd","handleItemClick","key","handleVisibilityKeyDown","stopPropagation","preventDefault","dragHandleProps","handleSearchInputChange","bind","handleOrderDraggingStart","handleOrderDraggingEnd","state","selectedColumns","lastSelectedColumns","isDraggingVisibility","visibilityDraggingOption","undefined","visibilityDraggingStartColumn","isDraggingOrder","orderDraggingColumn","searchFilter","list","componentWillUnmount","debouncedSearchColumns","cancel","resetVisibilityOrdering","onColumnVisibilityChanged","onMovedColumnsChanged","map","column","index","getColumnIndexByName","name","setState","resetSelection","target","value","movedColumns","columnsMatch","visibleIndexToFocus","forEach","toLowerCase","includes","push","Math","min","getVisibleIndex","addColumnToSelected","columnItemToFocus","querySelectorAll","scrollIntoView","block","visibilityOption","isModifierKeyDown","isShiftKeyDown","shiftKey","focus","start","document","documentElement","classList","add","draggableId","source","startIndex","parseInt","result","remove","destination","destinationIndex","selectedColumnsSortByVisibleIndex","sort","columnA","columnB","newMoves","draggingVisibleIndex","upper","lower","moveItem","columnVisibleIndex","bottomDestinationIndex","reverse","debug","targetModelIndex","userColumnWidths","draggingStartVisibleIndex","targetVisibleIndex","columnsToChangeVisibility","checkDownward","visibleIndexToCheck","modelIndexToCheck","getModelIndex","checkColumnHidden","handleMoveColumns","option","firstMovableIndex","getFirstMovableIndex","lastMovableIndex","getLastMovableIndex","sortedSelectedColumns","MOVE_OPTIONS","TOP","UP","scrollListAfterMove","columnModelIndex","scrollTop","BOTTOM","scrollHeight","DOWN","concat","handleSortColumns","movableColumns","immovableColumns","movableColumnsSorted","a","b","isAscending","SORTING_OPTIONS","ASC","aName","toUpperCase","bName","modelIndexAlphaSorted","insertIndex","modelIndexClicked","removeSelectionOnClick","currentTarget","columnsToBeAdded","removeColumnFromSelected","lastSelectedColumn","lastSelectedColumnVisibleIndex","visibleIndexToBeSelected","columnsInBetween","addToExisting","newSelectedColumns","newLastSelectedColumns","splice","findIndex","selected","pop","makeVisibilityOrderingList","elements","wasMovable","isMovable","get","renderVisibilityOrderingItem","renderImmovableItem","render","noSelection","columnsToToggle","c","filter","toggleToShow","checkAllColumnsHidden","selectedToggleText","columnItems","DSC","snapshot","draggingFromThisWith","droppableProps","placeholder","ALL","SELECTION"],"sources":["../../src/sidebar/VisibilityOrderingBuilder.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { ChangeEvent, Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport {\n GridUtils,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n VisibleIndex,\n} from '@deephaven/grid';\nimport { TextUtils, assertNotNull } 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 vsGripper,\n} from '@deephaven/icons';\nimport {\n DragDropContext,\n Draggable,\n DragStart,\n Droppable,\n DropResult,\n} from 'react-beautiful-dnd';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport { Button, SearchInput, Tooltip } from '@deephaven/components';\nimport type { Column } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport './VisibilityOrderingBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\nimport { ColumnName } from '../CommonTypes';\n\nconst log = Log.module('VisibilityOrderingBuilder');\nconst DEBOUNCE_SEARCH_COLUMN = 150;\n\ninterface VisibilityOrderingBuilderProps {\n model: IrisGridModel;\n movedColumns: MoveOperation[];\n userColumnWidths: ModelSizeMap;\n onColumnVisibilityChanged: (\n columns: VisibleIndex[],\n options?: VisibilityOptionType\n ) => void;\n onMovedColumnsChanged: (operations: MoveOperation[], cb?: () => void) => void;\n}\n\ninterface VisibilityOrderingBuilderState {\n selectedColumns: ModelIndex[]; // model index of selected column(s)\n lastSelectedColumns: ModelIndex[];\n isDraggingVisibility: boolean;\n visibilityDraggingOption?: VisibilityOptionType;\n visibilityDraggingStartColumn: number | null;\n isDraggingOrder: boolean;\n orderDraggingColumn: number | null;\n searchFilter: string;\n}\n\ntype Values<T> = T[keyof T];\n\nexport type VisibilityOptionType = Values<\n typeof VisibilityOrderingBuilder.VISIBILITY_OPTIONS\n>;\n\nclass VisibilityOrderingBuilder extends Component<\n VisibilityOrderingBuilderProps,\n VisibilityOrderingBuilderState\n> {\n static VISIBILITY_OPTIONS = { SHOW: 'SHOW', HIDE: 'HIDE' } as const;\n\n static SORTING_OPTIONS = { DSC: 'DSC', ASC: 'ASC' };\n\n static MOVE_OPTIONS = {\n TOP: 'TOP',\n BOTTOM: 'BOTTOM',\n UP: 'UP',\n DOWN: 'DOWN',\n };\n\n static COLUMN_CHANGE_OPTIONS = { ALL: 'ALL', SELECTION: 'SELECTION' };\n\n static defaultProps = {\n movedColumns: [],\n onColumnVisibilityChanged: (): void => undefined,\n onMovedColumnsChanged: (): void => undefined,\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.handleOrderDraggingStart = this.handleOrderDraggingStart.bind(this);\n this.handleOrderDraggingEnd = this.handleOrderDraggingEnd.bind(this);\n\n this.state = {\n selectedColumns: [], // model index of selected column(s)\n lastSelectedColumns: [],\n isDraggingVisibility: false,\n visibilityDraggingOption: undefined,\n visibilityDraggingStartColumn: null,\n isDraggingOrder: false,\n orderDraggingColumn: null,\n searchFilter: '',\n };\n\n this.list = null;\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 onColumnVisibilityChanged,\n onMovedColumnsChanged,\n } = this.props;\n const { columns } = model;\n\n onColumnVisibilityChanged(\n columns.map(column => {\n const index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n return index;\n }),\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n );\n this.setState({\n selectedColumns: [],\n lastSelectedColumns: [],\n searchFilter: '',\n });\n onMovedColumnsChanged([]);\n }\n\n resetSelection(): void {\n const { isDraggingOrder } = this.state;\n // don't reset selection if user is dragging column(s)\n if (isDraggingOrder) {\n return;\n }\n this.setState({ selectedColumns: [], lastSelectedColumns: [] });\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): void {\n const { model, movedColumns } = this.props;\n const { columns } = model;\n\n const columnsMatch = [] as number[];\n let visibleIndexToFocus = columns.length;\n columns.forEach((column, index) => {\n const columnName = column.name.toLowerCase();\n if (\n model.isColumnMovable(index) &&\n columnName.includes(searchFilter.toLowerCase())\n ) {\n columnsMatch.push(index);\n visibleIndexToFocus = Math.min(\n visibleIndexToFocus,\n GridUtils.getVisibleIndex(index, movedColumns)\n );\n }\n });\n this.addColumnToSelected(columnsMatch, false);\n if (columnsMatch.length > 0) {\n const columnItemToFocus = this.list?.querySelectorAll('.column-item')[\n visibleIndexToFocus\n ];\n columnItemToFocus?.scrollIntoView({ block: 'center' });\n }\n }\n\n handleVisibilityKeyDown(\n modelIndex: ModelIndex,\n visibilityOption: VisibilityOptionType\n ): void {\n const { onColumnVisibilityChanged } = this.props;\n onColumnVisibilityChanged([modelIndex], visibilityOption);\n }\n\n handleVisibilityDraggingStart(\n modelIndex: ModelIndex,\n visibilityOption: VisibilityOptionType,\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ): void {\n const { onColumnVisibilityChanged, movedColumns } = this.props;\n\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n\n if (isModifierKeyDown || isShiftKeyDown) return;\n\n onColumnVisibilityChanged([modelIndex], visibilityOption);\n\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n this.setState({\n isDraggingVisibility: true,\n visibilityDraggingOption: visibilityOption,\n visibilityDraggingStartColumn: visibleIndex,\n });\n\n this.addColumnToSelected([modelIndex]);\n }\n\n handleVisibilityDraggingEnd(\n event: React.MouseEvent<HTMLButtonElement, MouseEvent> | null = null\n ): void {\n if (event) (event.target as HTMLButtonElement).focus();\n\n const { isDraggingVisibility } = this.state;\n if (isDraggingVisibility) {\n this.setState({\n isDraggingVisibility: false,\n visibilityDraggingOption: undefined,\n visibilityDraggingStartColumn: null,\n });\n }\n }\n\n handleOrderDraggingStart(start: DragStart): void {\n document.documentElement.classList.add('drag-pointer-events-none');\n\n const { selectedColumns } = this.state;\n const {\n draggableId,\n source: { index: startIndex },\n } = start;\n const orderDraggingColumn = parseInt(draggableId, 10);\n\n // we want to clear focus from any eye toggles\n // however to maintain react-beautiful-dnd keyboard functionality the only valid\n // focus target is the drag target itself, so we set it there instead of blurring\n (this.list?.querySelectorAll('.column-item')[\n startIndex\n ] as HTMLDivElement).focus();\n\n if (!selectedColumns.includes(orderDraggingColumn)) {\n this.setState({\n isDraggingOrder: true,\n orderDraggingColumn,\n selectedColumns: [orderDraggingColumn],\n });\n return;\n }\n this.setState({ isDraggingOrder: true, orderDraggingColumn });\n }\n\n handleOrderDraggingEnd(result: DropResult): void {\n document.documentElement.classList.remove('drag-pointer-events-none');\n\n const { movedColumns, onMovedColumnsChanged } = this.props;\n const { selectedColumns, orderDraggingColumn } = this.state;\n\n // reset dragging state\n this.setState({ isDraggingOrder: false, orderDraggingColumn: null });\n\n // if dropped outside the list, re-focus on the dragged item if necessary\n if (!result.destination) {\n return;\n }\n\n const { index: destinationIndex } = result.destination;\n\n const selectedColumnsSortByVisibleIndex = [...selectedColumns].sort(\n (columnA, columnB) =>\n GridUtils.getVisibleIndex(columnA, movedColumns) -\n GridUtils.getVisibleIndex(columnB, movedColumns)\n );\n\n let newMoves = [...movedColumns];\n assertNotNull(orderDraggingColumn);\n const draggingVisibleIndex = GridUtils.getVisibleIndex(\n orderDraggingColumn,\n newMoves\n );\n const upper: number[] = [];\n const lower: number[] = [];\n\n // move the dragged column to destination first,\n newMoves = GridUtils.moveItem(\n draggingVisibleIndex,\n destinationIndex,\n newMoves\n );\n\n // split selected columns into two parts on drop destination index: top & bottom\n selectedColumnsSortByVisibleIndex.forEach(column => {\n const columnVisibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n if (column === orderDraggingColumn) {\n return;\n }\n if (columnVisibleIndex < destinationIndex) {\n upper.push(column);\n } else {\n lower.push(column);\n }\n });\n\n // for the top part, move column(s) to the destination index\n upper.forEach(column => {\n const visibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n newMoves = GridUtils.moveItem(visibleIndex, destinationIndex, newMoves);\n });\n\n // for the bottom part, in reverse order, move column(s) to the drop destination index if there's no top column(s) or the dragged column is not dropped upside\n // otherwise, move column(s) under the dropping destination index\n const bottomDestinationIndex =\n upper.length > 0 || draggingVisibleIndex > destinationIndex\n ? destinationIndex + 1\n : destinationIndex;\n\n lower.reverse().forEach(column => {\n const visibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n newMoves = GridUtils.moveItem(\n visibleIndex,\n bottomDestinationIndex,\n newMoves\n );\n });\n\n onMovedColumnsChanged(newMoves);\n log.debug('move column order by drag & drop', newMoves);\n }\n\n handleMouseEnter(\n targetModelIndex: ModelIndex,\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ): void {\n const {\n onColumnVisibilityChanged,\n movedColumns,\n userColumnWidths,\n } = this.props;\n const {\n isDraggingVisibility,\n visibilityDraggingOption,\n visibilityDraggingStartColumn: draggingStartVisibleIndex,\n } = this.state;\n const targetVisibleIndex = GridUtils.getVisibleIndex(\n targetModelIndex,\n movedColumns\n );\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n\n if (!isDraggingVisibility || isModifierKeyDown || isShiftKeyDown) {\n return;\n }\n\n (event.target as HTMLButtonElement).focus();\n\n // browser can skip mouseEnter / mouseMove event if user moves the mouse too fast\n // try to check columns between dragging start index to current index to compensate missing event,\n const columnsToChangeVisibility = [targetModelIndex];\n assertNotNull(draggingStartVisibleIndex);\n const checkDownward = targetVisibleIndex > draggingStartVisibleIndex;\n\n for (\n let visibleIndexToCheck = draggingStartVisibleIndex;\n checkDownward\n ? visibleIndexToCheck < targetVisibleIndex\n : visibleIndexToCheck > targetVisibleIndex;\n checkDownward ? (visibleIndexToCheck += 1) : (visibleIndexToCheck -= 1)\n ) {\n const modelIndexToCheck = GridUtils.getModelIndex(\n visibleIndexToCheck,\n movedColumns\n );\n const isHidden = GridUtils.checkColumnHidden(\n modelIndexToCheck,\n userColumnWidths\n );\n if (\n isHidden &&\n visibilityDraggingOption ===\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n ) {\n columnsToChangeVisibility.push(modelIndexToCheck);\n } else if (\n !isHidden &&\n visibilityDraggingOption ===\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n ) {\n columnsToChangeVisibility.push(modelIndexToCheck);\n }\n }\n\n this.addColumnToSelected(columnsToChangeVisibility, true);\n\n onColumnVisibilityChanged(\n columnsToChangeVisibility,\n visibilityDraggingOption\n );\n }\n\n handleMoveColumns(option: string): void {\n const { movedColumns, onMovedColumnsChanged, model } = this.props;\n const { columns } = model;\n const { selectedColumns } = this.state;\n if (selectedColumns.length === 0) {\n return;\n }\n\n const firstMovableIndex = this.getFirstMovableIndex(model, columns);\n const lastMovableIndex = this.getLastMovableIndex(model, columns);\n if (firstMovableIndex == null || lastMovableIndex == null) {\n return;\n }\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 const sortedSelectedColumns = [\n ...selectedColumns,\n ].sort((columnA, columnB) =>\n option === VisibilityOrderingBuilder.MOVE_OPTIONS.TOP ||\n option === VisibilityOrderingBuilder.MOVE_OPTIONS.UP\n ? GridUtils.getVisibleIndex(columnA, movedColumns) -\n GridUtils.getVisibleIndex(columnB, movedColumns)\n : GridUtils.getVisibleIndex(columnB, movedColumns) -\n GridUtils.getVisibleIndex(columnA, movedColumns)\n );\n\n let newMoves = [] as MoveOperation[];\n let scrollListAfterMove: () => void = () => undefined;\n\n switch (option) {\n case VisibilityOrderingBuilder.MOVE_OPTIONS.TOP:\n sortedSelectedColumns.forEach((columnModelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n firstMovableIndex + index,\n newMoves\n );\n });\n scrollListAfterMove = () => {\n assertNotNull(this.list);\n this.list.scrollTop = 0;\n };\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM:\n sortedSelectedColumns.forEach((columnModelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n lastMovableIndex - index,\n newMoves\n );\n });\n scrollListAfterMove = () => {\n assertNotNull(this.list);\n this.list.scrollTop = this.list.scrollHeight;\n };\n\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.UP:\n if (\n GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !==\n firstMovableIndex // check if the first visible column has reached top\n ) {\n sortedSelectedColumns.forEach(columnModelIndex => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n visibleIndex - 1,\n newMoves\n );\n });\n }\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN:\n if (\n GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !==\n lastMovableIndex // check if the last visible column has reached bottom\n ) {\n sortedSelectedColumns.forEach(columnModelIndex => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n visibleIndex + 1,\n newMoves\n );\n });\n }\n break;\n default:\n break;\n }\n if (newMoves.length > 0) {\n onMovedColumnsChanged(movedColumns.concat(newMoves), scrollListAfterMove);\n }\n }\n\n handleSortColumns(option: string): void {\n const { model, onMovedColumnsChanged } = this.props;\n const { columns } = model;\n\n // We can't move the immovable columns when sorting, so separate them out first\n const movableColumns = [];\n const immovableColumns = [];\n for (let modelIndex = 0; modelIndex < columns.length; modelIndex += 1) {\n if (model.isColumnMovable(modelIndex)) {\n movableColumns.push(modelIndex);\n } else {\n immovableColumns.push(modelIndex);\n }\n }\n\n // Sort all the movable columns\n const movableColumnsSorted = movableColumns.sort((a, b) => {\n const isAscending =\n option === VisibilityOrderingBuilder.SORTING_OPTIONS.ASC;\n const aName = columns[a].name.toUpperCase();\n const bName = columns[b].name.toUpperCase();\n return TextUtils.sort(aName, bName, isAscending);\n });\n\n // Place all the immovable columns where they need to be\n const modelIndexAlphaSorted = [];\n for (let i = 0; i < immovableColumns.length; i += 1) {\n const modelIndex = immovableColumns[i];\n modelIndexAlphaSorted[modelIndex] = modelIndex;\n }\n\n // Then the rest of the sorted columns can be put in the empty spaces\n let insertIndex = 0;\n for (let i = 0; i < movableColumnsSorted.length; i += 1) {\n while (modelIndexAlphaSorted[insertIndex] != null) {\n insertIndex += 1;\n }\n\n modelIndexAlphaSorted[insertIndex] = movableColumnsSorted[i];\n }\n\n let newMoves = [] as MoveOperation[];\n modelIndexAlphaSorted.forEach((modelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, newMoves);\n newMoves = GridUtils.moveItem(visibleIndex, index, newMoves);\n });\n onMovedColumnsChanged(newMoves);\n }\n\n handleItemClick(\n modelIndexClicked: ModelIndex,\n event: React.MouseEvent<HTMLDivElement | HTMLButtonElement, MouseEvent>,\n removeSelectionOnClick = true\n ): void {\n event.stopPropagation();\n event.currentTarget.focus();\n\n const { selectedColumns, lastSelectedColumns } = this.state;\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n const isSelected = selectedColumns.includes(modelIndexClicked);\n const columnsToBeAdded = [modelIndexClicked];\n\n if (isSelected && isModifierKeyDown) {\n this.removeColumnFromSelected(modelIndexClicked);\n return;\n }\n\n if (isSelected && selectedColumns.length === 1 && removeSelectionOnClick) {\n this.removeColumnFromSelected(modelIndexClicked);\n return;\n }\n\n if (isShiftKeyDown) {\n const { movedColumns } = this.props;\n const lastSelectedColumn =\n lastSelectedColumns[lastSelectedColumns.length - 1];\n const lastSelectedColumnVisibleIndex = GridUtils.getVisibleIndex(\n lastSelectedColumn,\n movedColumns\n );\n const visibleIndexToBeSelected = GridUtils.getVisibleIndex(\n modelIndexClicked,\n movedColumns\n );\n const checkDownward =\n visibleIndexToBeSelected > lastSelectedColumnVisibleIndex;\n const columnsInBetween = [];\n for (\n let i = lastSelectedColumnVisibleIndex;\n checkDownward\n ? i < visibleIndexToBeSelected\n : i > visibleIndexToBeSelected;\n checkDownward ? (i += 1) : (i -= 1)\n ) {\n columnsInBetween.push(GridUtils.getModelIndex(i, movedColumns));\n }\n columnsInBetween.forEach(column => {\n if (!selectedColumns.includes(column)) {\n columnsToBeAdded.push(column);\n }\n });\n }\n\n this.addColumnToSelected(\n columnsToBeAdded,\n isModifierKeyDown || isShiftKeyDown\n );\n }\n\n addColumnToSelected(\n columnsToBeAdded: ModelIndex[],\n addToExisting = false\n ): void {\n const { selectedColumns, lastSelectedColumns } = this.state;\n const newSelectedColumns = addToExisting\n ? selectedColumns.concat(columnsToBeAdded)\n : columnsToBeAdded;\n const newLastSelectedColumns = addToExisting\n ? lastSelectedColumns.concat(columnsToBeAdded)\n : columnsToBeAdded;\n\n this.setState({\n selectedColumns: newSelectedColumns,\n lastSelectedColumns: newLastSelectedColumns,\n });\n }\n\n removeColumnFromSelected(modelIndex: ModelIndex): void {\n const { selectedColumns, lastSelectedColumns } = this.state;\n const newSelectedColumns = [...selectedColumns];\n\n newSelectedColumns.splice(\n newSelectedColumns.findIndex(selected => selected === modelIndex),\n 1\n );\n const lastSelectedColumn =\n lastSelectedColumns[lastSelectedColumns.length - 1];\n const newLastSelectedColumns = [...lastSelectedColumns];\n if (lastSelectedColumn === modelIndex) {\n newLastSelectedColumns.pop();\n }\n this.setState({\n selectedColumns: newSelectedColumns,\n lastSelectedColumns: newLastSelectedColumns,\n });\n }\n\n makeVisibilityOrderingList(): ReactElement[] {\n const { model, userColumnWidths, movedColumns } = this.props;\n const { columns } = model;\n const {\n selectedColumns,\n isDraggingOrder,\n orderDraggingColumn,\n } = this.state;\n\n const elements = [];\n let wasMovable = false;\n for (\n let visibleIndex = 0;\n visibleIndex < columns.length;\n visibleIndex += 1\n ) {\n const modelIndex = GridUtils.getModelIndex(visibleIndex, movedColumns);\n const column = columns[modelIndex];\n const isMovable = model.isColumnMovable(modelIndex);\n if (visibleIndex > 0 && isMovable !== wasMovable) {\n elements.push(<hr />);\n }\n if (isMovable) {\n const isHidden = userColumnWidths.get(modelIndex) === 0;\n const isSelected = selectedColumns.includes(modelIndex);\n const isDragged = orderDraggingColumn === modelIndex;\n const columnsDragged =\n isDraggingOrder && isDragged && selectedColumns.length > 1\n ? selectedColumns.length\n : null;\n elements.push(\n this.renderVisibilityOrderingItem(\n column.name,\n modelIndex,\n visibleIndex,\n isHidden,\n isSelected,\n isDraggingOrder,\n isDragged,\n columnsDragged\n )\n );\n } else {\n elements.push(this.renderImmovableItem(column.name));\n }\n\n wasMovable = isMovable;\n }\n\n return elements;\n }\n\n getFirstMovableIndex = memoize((model: IrisGridModel, columns: Column[]) => {\n for (let i = 0; i < columns.length; i += 1) {\n if (model.isColumnMovable(i)) {\n return i;\n }\n }\n\n return null;\n });\n\n getLastMovableIndex = memoize((model: IrisGridModel, columns: Column[]) => {\n for (let i = columns.length - 1; i >= 0; i -= 1) {\n if (model.isColumnMovable(i)) {\n return i;\n }\n }\n\n return null;\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 );\n\n renderVisibilityOrderingItem = memoize(\n (\n columnName: ColumnName,\n modelIndex: ModelIndex,\n visibleIndex: VisibleIndex,\n isHidden: boolean,\n isSelected: boolean,\n isDragging: boolean,\n isDragged: boolean,\n columnsDragged: number | null\n ) => (\n <Draggable\n draggableId={`${modelIndex}`} // draggableId requires string input\n index={visibleIndex}\n key={columnName}\n disableInteractiveElementBlocking\n >\n {provided => (\n <div\n className=\"visibility-ordering-list-item\"\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n >\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon visibility\"\n onMouseDown={event => {\n this.handleVisibilityDraggingStart(\n modelIndex,\n isHidden\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE,\n event\n );\n }}\n onMouseEnter={event => {\n this.handleMouseEnter(modelIndex, event);\n }}\n onMouseUp={event => {\n this.handleVisibilityDraggingEnd(event);\n }}\n onClick={event => {\n this.handleItemClick(modelIndex, event, false);\n }}\n onKeyDown={event => {\n // trigger on keyboard enter or space keys\n if (event.key === 'Enter' || event.key === ' ') {\n this.handleVisibilityKeyDown(\n modelIndex,\n isHidden\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n );\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n tooltip={isHidden ? 'Show' : 'Hide'}\n >\n <FontAwesomeIcon icon={isHidden ? dhEyeSlash : dhEye} />\n </Button>\n <div\n role=\"menuitem\"\n tabIndex={0}\n className={classNames(\n 'ordering column-item',\n {\n isSelected,\n },\n { isDragging },\n { isDragged },\n { 'two-dragged': columnsDragged === 2 },\n {\n 'multiple-dragged':\n columnsDragged != null && columnsDragged > 2,\n }\n )}\n onClick={event => {\n this.handleItemClick(modelIndex, event);\n }}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n <span className=\"column-name\">{columnName}</span>\n <div>\n {columnsDragged != null && columnsDragged !== 0 && (\n <span className=\"number-badge\">{columnsDragged}</span>\n )}\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n </div>\n </div>\n )}\n </Draggable>\n )\n );\n\n render(): ReactElement {\n const { model, userColumnWidths, onColumnVisibilityChanged } = this.props;\n const { selectedColumns, searchFilter } = this.state;\n const { columns } = model;\n const noSelection = selectedColumns.length === 0;\n const columnsToToggle = noSelection\n ? columns.map((c, i) => i).filter(i => model.isColumnMovable(i))\n : [...selectedColumns];\n const toggleToShow = GridUtils.checkAllColumnsHidden(\n columnsToToggle,\n userColumnWidths\n );\n const selectedToggleText = toggleToShow ? 'Show Selected' : 'Hide Selected';\n\n const columnItems = this.makeVisibilityOrderingList();\n\n return (\n <div\n role=\"menu\"\n className=\"visibility-ordering-builder\"\n tabIndex={0}\n onMouseUp={() => {\n this.handleVisibilityDraggingEnd();\n }}\n onMouseLeave={() => {\n this.handleVisibilityDraggingEnd();\n }}\n >\n <div className=\"top-menu\">\n <Button\n kind=\"ghost\"\n onClick={() => {\n onColumnVisibilityChanged(\n columnsToToggle,\n toggleToShow\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n );\n }}\n icon={toggleToShow ? dhEyeSlash : dhEye}\n tooltip=\"Toggle column visibility\"\n >\n {noSelection ? 'Toggle All' : selectedToggleText}\n </Button>\n\n <div>\n <Button\n kind=\"ghost\"\n className=\"text-muted\"\n onClick={() => {\n this.resetVisibilityOrdering();\n }}\n tooltip=\"Reset to default\"\n >\n Reset\n </Button>\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.ASC\n );\n }}\n tooltip=\"Sort ascending\"\n >\n <FontAwesomeIcon icon={dhSortAlphaDown} />\n </Button>\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.DSC\n );\n }}\n tooltip=\"Sort descending\"\n >\n <FontAwesomeIcon icon={dhSortAlphaUp} />\n </Button>\n <span className=\"vertical-divider\" />\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.UP\n );\n }}\n disabled={noSelection}\n tooltip=\"Move selection up\"\n >\n <FontAwesomeIcon icon={vsChevronUp} />\n </Button>\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN\n );\n }}\n disabled={noSelection}\n tooltip=\"Move selection down\"\n >\n <FontAwesomeIcon icon={vsChevronDown} />\n </Button>\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.TOP\n );\n }}\n disabled={noSelection}\n tooltip=\"Move selection to top\"\n >\n <FontAwesomeIcon icon={dhArrowToTop} />\n </Button>\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM\n );\n }}\n disabled={noSelection}\n tooltip=\"Move selection to bottom\"\n >\n <FontAwesomeIcon icon={dhArrowToBottom} />\n </Button>\n </div>\n </div>\n <div className=\"top-menu\">\n <SearchInput\n className=\"w-100\"\n value={searchFilter}\n matchCount={searchFilter ? selectedColumns.length : undefined}\n onChange={this.handleSearchInputChange}\n />\n </div>\n <DragDropContext\n onDragStart={this.handleOrderDraggingStart}\n onDragEnd={this.handleOrderDraggingEnd}\n >\n <Droppable droppableId=\"droppable-visibility-order-list\">\n {(provided, snapshot) => (\n // eslint-disable-next-line jsx-a11y/interactive-supports-focus\n <div\n role=\"menu\"\n className={classNames('visibility-ordering-list', {\n isDragging: snapshot.draggingFromThisWith,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n <div\n className=\"column-list\"\n ref={list => {\n this.list = list;\n }}\n >\n {columnItems}\n {provided.placeholder}\n </div>\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </div>\n );\n }\n}\n\nexport default VisibilityOrderingBuilder;\n"],"mappings":"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"}