@deephaven/iris-grid 0.13.3-treemap.2 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AdvancedFilterCreator.d.ts +69 -63
- package/dist/AdvancedFilterCreator.d.ts.map +1 -1
- package/dist/AdvancedFilterCreator.js +79 -73
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.d.ts +45 -45
- package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +32 -36
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts +47 -52
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +24 -39
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnStatistics.d.ts +34 -22
- package/dist/ColumnStatistics.d.ts.map +1 -1
- package/dist/ColumnStatistics.js +8 -12
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CommonTypes.d.ts +58 -0
- package/dist/CommonTypes.d.ts.map +1 -0
- package/dist/CommonTypes.js +2 -0
- package/dist/CommonTypes.js.map +1 -0
- package/dist/CrossColumnSearch.d.ts +26 -24
- package/dist/CrossColumnSearch.d.ts.map +1 -1
- package/dist/CrossColumnSearch.js +9 -13
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.d.ts +48 -51
- package/dist/FilterInputField.d.ts.map +1 -1
- package/dist/FilterInputField.js +30 -27
- package/dist/FilterInputField.js.map +1 -1
- package/dist/IrisGrid.d.ts +409 -453
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +514 -449
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.d.ts +1 -1
- package/dist/IrisGridCellOverflowModal.d.ts.map +1 -1
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCopyHandler.d.ts +52 -46
- package/dist/IrisGridCopyHandler.d.ts.map +1 -1
- package/dist/IrisGridCopyHandler.js +22 -38
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.d.ts +5 -4
- package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
- package/dist/IrisGridMetricCalculator.js +5 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.d.ts +37 -35
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +19 -3
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.d.ts +7 -5
- package/dist/IrisGridModelFactory.d.ts.map +1 -1
- package/dist/IrisGridModelFactory.js +5 -5
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.d.ts +13 -11
- package/dist/IrisGridModelUpdater.d.ts.map +1 -1
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.d.ts +38 -39
- package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
- package/dist/IrisGridPartitionSelector.js +18 -24
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.d.ts +111 -32
- package/dist/IrisGridProxyModel.d.ts.map +1 -1
- package/dist/IrisGridProxyModel.js +212 -170
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.d.ts +59 -31
- package/dist/IrisGridRenderer.d.ts.map +1 -1
- package/dist/IrisGridRenderer.js +92 -46
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.d.ts +48 -147
- package/dist/IrisGridTableModel.d.ts.map +1 -1
- package/dist/IrisGridTableModel.js +58 -1381
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts +219 -0
- package/dist/IrisGridTableModelTemplate.d.ts.map +1 -0
- package/dist/IrisGridTableModelTemplate.js +1623 -0
- package/dist/IrisGridTableModelTemplate.js.map +1 -0
- package/dist/IrisGridTestUtils.d.ts +18 -14
- package/dist/IrisGridTestUtils.d.ts.map +1 -1
- package/dist/IrisGridTestUtils.js +29 -1
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTheme.d.ts +35 -3
- package/dist/IrisGridTheme.d.ts.map +1 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridTreeTableModel.d.ts +26 -7
- package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
- package/dist/IrisGridTreeTableModel.js +24 -14
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.d.ts +257 -162
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +132 -95
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/MissingKeyError.d.ts +5 -3
- package/dist/MissingKeyError.d.ts.map +1 -1
- package/dist/MissingKeyError.js.map +1 -1
- package/dist/PartitionSelectorSearch.d.ts +61 -40
- package/dist/PartitionSelectorSearch.d.ts.map +1 -1
- package/dist/PartitionSelectorSearch.js +25 -15
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.d.ts +3 -6
- package/dist/PendingDataBottomBar.d.ts.map +1 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/TableViewportUpdater.d.ts +39 -55
- package/dist/TableViewportUpdater.d.ts.map +1 -1
- package/dist/TableViewportUpdater.js +42 -64
- package/dist/TableViewportUpdater.js.map +1 -1
- package/dist/TreeTableViewportUpdater.d.ts +29 -37
- package/dist/TreeTableViewportUpdater.d.ts.map +1 -1
- package/dist/TreeTableViewportUpdater.js +39 -50
- package/dist/TreeTableViewportUpdater.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +2 -0
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +41 -130
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +426 -317
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js +2 -2
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.d.ts +8 -4
- package/dist/mousehandlers/PendingMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +4 -5
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/sidebar/ChartBuilder.d.ts +48 -33
- package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
- package/dist/sidebar/ChartBuilder.js +28 -27
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.d.ts +51 -41
- package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +22 -18
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.d.ts +26 -36
- package/dist/sidebar/CustomColumnInput.d.ts.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +11 -20
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.d.ts +34 -35
- package/dist/sidebar/InputEditor.d.ts.map +1 -1
- package/dist/sidebar/InputEditor.js +43 -24
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/RollupRows.d.ts +67 -52
- package/dist/sidebar/RollupRows.d.ts.map +1 -1
- package/dist/sidebar/RollupRows.js +51 -53
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.d.ts +27 -21
- package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +6 -10
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.d.ts +42 -39
- package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +12 -20
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.d.ts +59 -60
- package/dist/sidebar/TableSaver.d.ts.map +1 -1
- package/dist/sidebar/TableSaver.js +154 -68
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.d.ts +56 -45
- package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.js +34 -29
- package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +2 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +6 -5
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +5 -0
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/icons/index.d.ts +7 -7
- package/dist/sidebar/icons/index.d.ts.map +1 -1
- package/dist/sidebar/icons/index.js.map +1 -1
- package/dist/sidebar/index.d.ts +12 -12
- package/dist/sidebar/index.d.ts.map +1 -1
- package/dist/sidebar/index.js.map +1 -1
- package/package.json +17 -16
|
@@ -1,8 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/// <reference types="lodash" />
|
|
2
|
+
import React, { ChangeEvent, Component, ReactElement } from 'react';
|
|
3
|
+
import { ModelIndex, ModelSizeMap, MoveOperation, VisibleIndex } from '@deephaven/grid';
|
|
4
|
+
import { DragStart, DropResult } from 'react-beautiful-dnd';
|
|
5
|
+
import memoize from 'memoizee';
|
|
6
|
+
import './VisibilityOrderingBuilder.scss';
|
|
7
|
+
import IrisGridModel from '../IrisGridModel';
|
|
8
|
+
import { ColumnName } from '../CommonTypes';
|
|
9
|
+
interface VisibilityOrderingBuilderProps {
|
|
10
|
+
model: IrisGridModel;
|
|
11
|
+
movedColumns: MoveOperation[];
|
|
12
|
+
userColumnWidths: ModelSizeMap;
|
|
13
|
+
onColumnVisibilityChanged: (columns: VisibleIndex[], options?: VisibilityOptionType) => void;
|
|
14
|
+
onMovedColumnsChanged: (operations: MoveOperation[], cb?: () => void) => void;
|
|
15
|
+
}
|
|
16
|
+
interface VisibilityOrderingBuilderState {
|
|
17
|
+
selectedColumns: ModelIndex[];
|
|
18
|
+
lastSelectedColumns: ModelIndex[];
|
|
19
|
+
isDraggingVisibility: boolean;
|
|
20
|
+
visibilityDraggingOption?: VisibilityOptionType;
|
|
21
|
+
visibilityDraggingStartColumn: number | null;
|
|
22
|
+
isDraggingOrder: boolean;
|
|
23
|
+
orderDraggingColumn: number | null;
|
|
24
|
+
searchFilter: string;
|
|
25
|
+
}
|
|
26
|
+
declare type Values<T> = T[keyof T];
|
|
27
|
+
export declare type VisibilityOptionType = Values<typeof VisibilityOrderingBuilder.VISIBILITY_OPTIONS>;
|
|
28
|
+
declare class VisibilityOrderingBuilder extends Component<VisibilityOrderingBuilderProps, VisibilityOrderingBuilderState> {
|
|
3
29
|
static VISIBILITY_OPTIONS: {
|
|
4
|
-
SHOW:
|
|
5
|
-
HIDE:
|
|
30
|
+
readonly SHOW: "SHOW";
|
|
31
|
+
readonly HIDE: "HIDE";
|
|
6
32
|
};
|
|
7
33
|
static SORTING_OPTIONS: {
|
|
8
34
|
DSC: string;
|
|
@@ -18,51 +44,36 @@ declare class VisibilityOrderingBuilder extends React.Component<any, any, any> {
|
|
|
18
44
|
ALL: string;
|
|
19
45
|
SELECTION: string;
|
|
20
46
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
47
|
+
static defaultProps: {
|
|
48
|
+
movedColumns: never[];
|
|
49
|
+
onColumnVisibilityChanged: () => void;
|
|
50
|
+
onMovedColumnsChanged: () => void;
|
|
51
|
+
};
|
|
52
|
+
constructor(props: VisibilityOrderingBuilderProps);
|
|
53
|
+
componentWillUnmount(): void;
|
|
26
54
|
list: HTMLDivElement | null;
|
|
55
|
+
debouncedSearchColumns: import("lodash").DebouncedFunc<(searchFilter: string) => void>;
|
|
27
56
|
resetVisibilityOrdering(): void;
|
|
28
57
|
resetSelection(): void;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
58
|
+
handleSearchInputChange(event: ChangeEvent<HTMLInputElement>): void;
|
|
59
|
+
searchColumns(searchFilter: string): void;
|
|
60
|
+
handleVisibilityKeyDown(modelIndex: ModelIndex, visibilityOption: VisibilityOptionType): void;
|
|
61
|
+
handleVisibilityDraggingStart(modelIndex: ModelIndex, visibilityOption: VisibilityOptionType, event: React.MouseEvent<HTMLButtonElement, MouseEvent>): void;
|
|
62
|
+
handleVisibilityDraggingEnd(event?: React.MouseEvent<HTMLButtonElement, MouseEvent> | null): void;
|
|
63
|
+
handleOrderDraggingStart(start: DragStart): void;
|
|
64
|
+
handleOrderDraggingEnd(result: DropResult): void;
|
|
65
|
+
handleMouseEnter(targetModelIndex: ModelIndex, event: React.MouseEvent<HTMLButtonElement, MouseEvent>): void;
|
|
66
|
+
handleMoveColumns(option: string): void;
|
|
67
|
+
handleSortColumns(option: string): void;
|
|
68
|
+
handleItemClick(modelIndexClicked: ModelIndex, event: React.MouseEvent<HTMLDivElement | HTMLButtonElement, MouseEvent>, removeSelectionOnClick?: boolean): void;
|
|
69
|
+
addColumnToSelected(columnsToBeAdded: ModelIndex[], addToExisting?: boolean): void;
|
|
70
|
+
removeColumnFromSelected(modelIndex: ModelIndex): void;
|
|
71
|
+
makeVisibilityOrderingList(): ReactElement[];
|
|
40
72
|
getFirstMovableIndex: ((model: any, columns: any) => number | null) & memoize.Memoized<(model: any, columns: any) => number | null>;
|
|
41
73
|
getLastMovableIndex: ((model: any, columns: any) => number | null) & memoize.Memoized<(model: any, columns: any) => number | null>;
|
|
42
|
-
renderImmovableItem: ((columnName:
|
|
43
|
-
renderVisibilityOrderingItem: ((columnName:
|
|
44
|
-
|
|
45
|
-
declare namespace VisibilityOrderingBuilder {
|
|
46
|
-
namespace propTypes {
|
|
47
|
-
const model: PropTypes.Validator<any>;
|
|
48
|
-
const movedColumns: PropTypes.Requireable<(PropTypes.InferProps<{
|
|
49
|
-
from: PropTypes.Requireable<number>;
|
|
50
|
-
to: PropTypes.Requireable<number>;
|
|
51
|
-
}> | null | undefined)[]>;
|
|
52
|
-
const userColumnWidths: PropTypes.Validator<Map<unknown, unknown>>;
|
|
53
|
-
const onColumnVisibilityChanged: PropTypes.Requireable<(...args: any[]) => any>;
|
|
54
|
-
const onMovedColumnsChanged: PropTypes.Requireable<(...args: any[]) => any>;
|
|
55
|
-
}
|
|
56
|
-
namespace defaultProps {
|
|
57
|
-
const movedColumns_1: never[];
|
|
58
|
-
export { movedColumns_1 as movedColumns };
|
|
59
|
-
export function onColumnVisibilityChanged_1(): void;
|
|
60
|
-
export { onColumnVisibilityChanged_1 as onColumnVisibilityChanged };
|
|
61
|
-
export function onMovedColumnsChanged_1(): void;
|
|
62
|
-
export { onMovedColumnsChanged_1 as onMovedColumnsChanged };
|
|
63
|
-
}
|
|
74
|
+
renderImmovableItem: ((columnName: ColumnName) => ReactElement) & memoize.Memoized<(columnName: ColumnName) => ReactElement>;
|
|
75
|
+
renderVisibilityOrderingItem: ((columnName: ColumnName, modelIndex: ModelIndex, visibleIndex: VisibleIndex, isHidden: boolean, isSelected: boolean, isDragging: boolean, isDragged: boolean, columnsDragged: any) => JSX.Element) & memoize.Memoized<(columnName: ColumnName, modelIndex: ModelIndex, visibleIndex: VisibleIndex, isHidden: boolean, isSelected: boolean, isDragging: boolean, isDragged: boolean, columnsDragged: any) => JSX.Element>;
|
|
76
|
+
render(): ReactElement;
|
|
64
77
|
}
|
|
65
|
-
|
|
66
|
-
import memoize from "memoizee";
|
|
67
|
-
import PropTypes from "prop-types";
|
|
78
|
+
export default VisibilityOrderingBuilder;
|
|
68
79
|
//# sourceMappingURL=VisibilityOrderingBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisibilityOrderingBuilder.d.ts","sourceRoot":"","sources":["../../src/sidebar/VisibilityOrderingBuilder.
|
|
1
|
+
{"version":3,"file":"VisibilityOrderingBuilder.d.ts","sourceRoot":"","sources":["../../src/sidebar/VisibilityOrderingBuilder.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,8 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
5
5
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
6
6
|
import React, { Component } from 'react';
|
|
7
7
|
import classNames from 'classnames';
|
|
8
|
-
import PropTypes from 'prop-types';
|
|
9
8
|
import { GridUtils } from '@deephaven/grid';
|
|
10
|
-
import { TextUtils } from '@deephaven/utils';
|
|
9
|
+
import { TextUtils, assertNotNull } from '@deephaven/utils';
|
|
11
10
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
12
11
|
import { dhEye, dhEyeSlash, dhSortAlphaDown, dhSortAlphaUp, dhArrowToTop, dhArrowToBottom, vsChevronUp, vsChevronDown, vsGripper } from '@deephaven/icons';
|
|
13
12
|
import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';
|
|
@@ -16,7 +15,6 @@ import debounce from 'lodash.debounce';
|
|
|
16
15
|
import { SearchInput, Tooltip } from '@deephaven/components';
|
|
17
16
|
import Log from '@deephaven/log';
|
|
18
17
|
import "./VisibilityOrderingBuilder.css";
|
|
19
|
-
import IrisGridModel from "../IrisGridModel.js";
|
|
20
18
|
var log = Log.module('VisibilityOrderingBuilder');
|
|
21
19
|
var DEBOUNCE_SEARCH_COLUMN = 150;
|
|
22
20
|
|
|
@@ -24,6 +22,10 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
24
22
|
constructor(props) {
|
|
25
23
|
super(props);
|
|
26
24
|
|
|
25
|
+
_defineProperty(this, "list", void 0);
|
|
26
|
+
|
|
27
|
+
_defineProperty(this, "debouncedSearchColumns", debounce(this.searchColumns, DEBOUNCE_SEARCH_COLUMN));
|
|
28
|
+
|
|
27
29
|
_defineProperty(this, "getFirstMovableIndex", memoize((model, columns) => {
|
|
28
30
|
for (var i = 0; i < columns.length; i += 1) {
|
|
29
31
|
if (model.isColumnMovable(i)) {
|
|
@@ -90,7 +92,7 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
90
92
|
icon: isHidden ? dhEyeSlash : dhEye
|
|
91
93
|
})), /*#__PURE__*/React.createElement("div", _extends({
|
|
92
94
|
role: "menuitem",
|
|
93
|
-
tabIndex:
|
|
95
|
+
tabIndex: 0,
|
|
94
96
|
className: classNames('ordering column-item', {
|
|
95
97
|
isSelected
|
|
96
98
|
}, {
|
|
@@ -115,7 +117,7 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
115
117
|
})))))));
|
|
116
118
|
|
|
117
119
|
this.handleSearchInputChange = this.handleSearchInputChange.bind(this);
|
|
118
|
-
this.
|
|
120
|
+
this.searchColumns = this.searchColumns.bind(this);
|
|
119
121
|
this.handleOrderDraggingStart = this.handleOrderDraggingStart.bind(this);
|
|
120
122
|
this.handleOrderDraggingEnd = this.handleOrderDraggingEnd.bind(this);
|
|
121
123
|
this.state = {
|
|
@@ -123,7 +125,7 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
123
125
|
// model index of selected column(s)
|
|
124
126
|
lastSelectedColumns: [],
|
|
125
127
|
isDraggingVisibility: false,
|
|
126
|
-
visibilityDraggingOption:
|
|
128
|
+
visibilityDraggingOption: undefined,
|
|
127
129
|
visibilityDraggingStartColumn: null,
|
|
128
130
|
isDraggingOrder: false,
|
|
129
131
|
orderDraggingColumn: null,
|
|
@@ -145,7 +147,11 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
145
147
|
var {
|
|
146
148
|
columns
|
|
147
149
|
} = model;
|
|
148
|
-
onColumnVisibilityChanged(columns.map(column =>
|
|
150
|
+
onColumnVisibilityChanged(columns.map(column => {
|
|
151
|
+
var index = model.getColumnIndexByName(column.name);
|
|
152
|
+
assertNotNull(index);
|
|
153
|
+
return index;
|
|
154
|
+
}), VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW);
|
|
149
155
|
this.setState({
|
|
150
156
|
selectedColumns: [],
|
|
151
157
|
lastSelectedColumns: [],
|
|
@@ -205,8 +211,10 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
205
211
|
this.addColumnToSelected(columnsMatch, false);
|
|
206
212
|
|
|
207
213
|
if (columnsMatch.length > 0) {
|
|
208
|
-
var
|
|
209
|
-
|
|
214
|
+
var _this$list;
|
|
215
|
+
|
|
216
|
+
var columnItemToFocus = (_this$list = this.list) === null || _this$list === void 0 ? void 0 : _this$list.querySelectorAll('.column-item')[visibleIndexToFocus];
|
|
217
|
+
columnItemToFocus === null || columnItemToFocus === void 0 ? void 0 : columnItemToFocus.scrollIntoView({
|
|
210
218
|
block: 'center'
|
|
211
219
|
});
|
|
212
220
|
}
|
|
@@ -247,13 +255,15 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
247
255
|
if (isDraggingVisibility) {
|
|
248
256
|
this.setState({
|
|
249
257
|
isDraggingVisibility: false,
|
|
250
|
-
visibilityDraggingOption:
|
|
258
|
+
visibilityDraggingOption: undefined,
|
|
251
259
|
visibilityDraggingStartColumn: null
|
|
252
260
|
});
|
|
253
261
|
}
|
|
254
262
|
}
|
|
255
263
|
|
|
256
264
|
handleOrderDraggingStart(start) {
|
|
265
|
+
var _this$list2;
|
|
266
|
+
|
|
257
267
|
document.documentElement.classList.add('drag-pointer-events-none');
|
|
258
268
|
var {
|
|
259
269
|
selectedColumns
|
|
@@ -268,7 +278,7 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
268
278
|
// however to maintain react-beautiful-dnd keyboard functionality the only valid
|
|
269
279
|
// focus target is the drag target itself, so we set it there instead of blurring
|
|
270
280
|
|
|
271
|
-
this.list.querySelectorAll('.column-item')[startIndex].focus();
|
|
281
|
+
((_this$list2 = this.list) === null || _this$list2 === void 0 ? void 0 : _this$list2.querySelectorAll('.column-item')[startIndex]).focus();
|
|
272
282
|
|
|
273
283
|
if (!selectedColumns.includes(orderDraggingColumn)) {
|
|
274
284
|
this.setState({
|
|
@@ -309,7 +319,8 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
309
319
|
index: destinationIndex
|
|
310
320
|
} = result.destination;
|
|
311
321
|
var selectedColumnsSortByVisibleIndex = [...selectedColumns].sort((columnA, columnB) => GridUtils.getVisibleIndex(columnA, movedColumns) - GridUtils.getVisibleIndex(columnB, movedColumns));
|
|
312
|
-
var newMoves = []
|
|
322
|
+
var newMoves = [...movedColumns];
|
|
323
|
+
assertNotNull(orderDraggingColumn);
|
|
313
324
|
var draggingVisibleIndex = GridUtils.getVisibleIndex(orderDraggingColumn, newMoves);
|
|
314
325
|
var upper = [];
|
|
315
326
|
var lower = []; // move the dragged column to destination first,
|
|
@@ -368,6 +379,7 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
368
379
|
// try to check columns between dragging start index to current index to compensate missing event,
|
|
369
380
|
|
|
370
381
|
var columnsToChangeVisibility = [targetModelIndex];
|
|
382
|
+
assertNotNull(draggingStartVisibleIndex);
|
|
371
383
|
var checkDownward = targetVisibleIndex > draggingStartVisibleIndex;
|
|
372
384
|
|
|
373
385
|
for (var visibleIndexToCheck = draggingStartVisibleIndex; checkDownward ? visibleIndexToCheck < targetVisibleIndex : visibleIndexToCheck > targetVisibleIndex; checkDownward ? visibleIndexToCheck += 1 : visibleIndexToCheck -= 1) {
|
|
@@ -414,7 +426,7 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
414
426
|
var sortedSelectedColumns = [...selectedColumns].sort((columnA, columnB) => option === VisibilityOrderingBuilder.MOVE_OPTIONS.TOP || option === VisibilityOrderingBuilder.MOVE_OPTIONS.UP ? GridUtils.getVisibleIndex(columnA, movedColumns) - GridUtils.getVisibleIndex(columnB, movedColumns) : GridUtils.getVisibleIndex(columnB, movedColumns) - GridUtils.getVisibleIndex(columnA, movedColumns));
|
|
415
427
|
var newMoves = [];
|
|
416
428
|
|
|
417
|
-
var scrollListAfterMove = () =>
|
|
429
|
+
var scrollListAfterMove = () => undefined;
|
|
418
430
|
|
|
419
431
|
switch (option) {
|
|
420
432
|
case VisibilityOrderingBuilder.MOVE_OPTIONS.TOP:
|
|
@@ -424,6 +436,7 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
424
436
|
});
|
|
425
437
|
|
|
426
438
|
scrollListAfterMove = () => {
|
|
439
|
+
assertNotNull(this.list);
|
|
427
440
|
this.list.scrollTop = 0;
|
|
428
441
|
};
|
|
429
442
|
|
|
@@ -436,6 +449,7 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
436
449
|
});
|
|
437
450
|
|
|
438
451
|
scrollListAfterMove = () => {
|
|
452
|
+
assertNotNull(this.list);
|
|
439
453
|
this.list.scrollTop = this.list.scrollHeight;
|
|
440
454
|
};
|
|
441
455
|
|
|
@@ -670,7 +684,7 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
670
684
|
return /*#__PURE__*/React.createElement("div", {
|
|
671
685
|
role: "menu",
|
|
672
686
|
className: "visibility-ordering-builder",
|
|
673
|
-
tabIndex:
|
|
687
|
+
tabIndex: 0,
|
|
674
688
|
onMouseUp: () => {
|
|
675
689
|
this.handleVisibilityDraggingEnd();
|
|
676
690
|
},
|
|
@@ -752,7 +766,7 @@ class VisibilityOrderingBuilder extends Component {
|
|
|
752
766
|
}, /*#__PURE__*/React.createElement(SearchInput, {
|
|
753
767
|
className: "w-100",
|
|
754
768
|
value: searchFilter,
|
|
755
|
-
matchCount: searchFilter ? selectedColumns.length :
|
|
769
|
+
matchCount: searchFilter ? selectedColumns.length : undefined,
|
|
756
770
|
onChange: this.handleSearchInputChange
|
|
757
771
|
})), /*#__PURE__*/React.createElement(DragDropContext, {
|
|
758
772
|
onDragStart: this.handleOrderDraggingStart,
|
|
@@ -801,20 +815,11 @@ _defineProperty(VisibilityOrderingBuilder, "COLUMN_CHANGE_OPTIONS", {
|
|
|
801
815
|
SELECTION: 'SELECTION'
|
|
802
816
|
});
|
|
803
817
|
|
|
804
|
-
VisibilityOrderingBuilder
|
|
805
|
-
model: PropTypes.instanceOf(IrisGridModel).isRequired,
|
|
806
|
-
movedColumns: PropTypes.arrayOf(PropTypes.shape({
|
|
807
|
-
from: PropTypes.number,
|
|
808
|
-
to: PropTypes.number
|
|
809
|
-
})),
|
|
810
|
-
userColumnWidths: PropTypes.instanceOf(Map).isRequired,
|
|
811
|
-
onColumnVisibilityChanged: PropTypes.func,
|
|
812
|
-
onMovedColumnsChanged: PropTypes.func
|
|
813
|
-
};
|
|
814
|
-
VisibilityOrderingBuilder.defaultProps = {
|
|
818
|
+
_defineProperty(VisibilityOrderingBuilder, "defaultProps", {
|
|
815
819
|
movedColumns: [],
|
|
816
|
-
onColumnVisibilityChanged: () =>
|
|
817
|
-
onMovedColumnsChanged: () =>
|
|
818
|
-
};
|
|
820
|
+
onColumnVisibilityChanged: () => undefined,
|
|
821
|
+
onMovedColumnsChanged: () => undefined
|
|
822
|
+
});
|
|
823
|
+
|
|
819
824
|
export default VisibilityOrderingBuilder;
|
|
820
825
|
//# sourceMappingURL=VisibilityOrderingBuilder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sidebar/VisibilityOrderingBuilder.jsx"],"names":["React","Component","classNames","PropTypes","GridUtils","TextUtils","FontAwesomeIcon","dhEye","dhEyeSlash","dhSortAlphaDown","dhSortAlphaUp","dhArrowToTop","dhArrowToBottom","vsChevronUp","vsChevronDown","vsGripper","DragDropContext","Draggable","Droppable","memoize","debounce","SearchInput","Tooltip","Log","IrisGridModel","log","module","DEBOUNCE_SEARCH_COLUMN","VisibilityOrderingBuilder","constructor","props","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","debouncedSearchColumns","searchColumns","handleOrderDraggingStart","handleOrderDraggingEnd","state","selectedColumns","lastSelectedColumns","isDraggingVisibility","visibilityDraggingOption","visibilityDraggingStartColumn","isDraggingOrder","orderDraggingColumn","searchFilter","list","componentWillUnmount","cancel","resetVisibilityOrdering","onColumnVisibilityChanged","onMovedColumnsChanged","map","column","getColumnIndexByName","name","setState","resetSelection","target","value","movedColumns","columnsMatch","visibleIndexToFocus","forEach","index","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","concat","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","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","propTypes","instanceOf","isRequired","arrayOf","shape","from","number","to","Map","func","defaultProps"],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { GridUtils } from '@deephaven/grid';\nimport { TextUtils } 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 { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport { SearchInput, Tooltip } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport './VisibilityOrderingBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('VisibilityOrderingBuilder');\nconst DEBOUNCE_SEARCH_COLUMN = 150;\n\nclass VisibilityOrderingBuilder extends Component {\n static VISIBILITY_OPTIONS = { SHOW: 'SHOW', HIDE: 'HIDE' };\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 constructor(props) {\n super(props);\n\n this.handleSearchInputChange = this.handleSearchInputChange.bind(this);\n this.debouncedSearchColumns = debounce(\n this.searchColumns.bind(this),\n DEBOUNCE_SEARCH_COLUMN\n );\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: null,\n visibilityDraggingStartColumn: null,\n isDraggingOrder: false,\n orderDraggingColumn: null,\n searchFilter: '',\n };\n\n this.list = null;\n }\n\n componentWillUnmount() {\n this.debouncedSearchColumns.cancel();\n }\n\n resetVisibilityOrdering() {\n const {\n model,\n onColumnVisibilityChanged,\n onMovedColumnsChanged,\n } = this.props;\n const { columns } = model;\n\n onColumnVisibilityChanged(\n columns.map(column => model.getColumnIndexByName(column.name)),\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n );\n this.setState({\n selectedColumns: [],\n lastSelectedColumns: [],\n searchFilter: '',\n });\n onMovedColumnsChanged([]);\n }\n\n resetSelection() {\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) {\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) {\n const { model, movedColumns } = this.props;\n const { columns } = model;\n\n const columnsMatch = [];\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(modelIndex, visibilityOption) {\n const { onColumnVisibilityChanged } = this.props;\n onColumnVisibilityChanged([modelIndex], visibilityOption);\n }\n\n handleVisibilityDraggingStart(modelIndex, visibilityOption, event) {\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(event = null) {\n if (event) event.target.focus();\n\n const { isDraggingVisibility } = this.state;\n if (isDraggingVisibility) {\n this.setState({\n isDraggingVisibility: false,\n visibilityDraggingOption: null,\n visibilityDraggingStartColumn: null,\n });\n }\n }\n\n handleOrderDraggingStart(start) {\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')[startIndex].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) {\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 = [].concat(movedColumns);\n const draggingVisibleIndex = GridUtils.getVisibleIndex(\n orderDraggingColumn,\n newMoves\n );\n const upper = [];\n const lower = [];\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(targetModelIndex, event) {\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.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 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) {\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 = [];\n let scrollListAfterMove = () => {};\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 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 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) {\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 = [];\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(modelIndexClicked, event, removeSelectionOnClick = true) {\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(columnsToBeAdded, addToExisting = false) {\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) {\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() {\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, columns) => {\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, columns) => {\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(columnName => (\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 renderVisibilityOrderingItem = memoize(\n (\n columnName,\n modelIndex,\n visibleIndex,\n isHidden,\n isSelected,\n isDragging,\n isDragged,\n columnsDragged\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 type=\"button\"\n className=\"visibility btn btn-link btn-link-icon\"\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 >\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 { 'multiple-dragged': columnsDragged > 2 }\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 && (\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() {\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 type=\"button\"\n className=\"btn btn-link\"\n onClick={() => {\n onColumnVisibilityChanged(\n columnsToToggle,\n toggleToShow\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n );\n }}\n >\n <FontAwesomeIcon icon={toggleToShow ? dhEyeSlash : dhEye} />\n <Tooltip>Toggle column visibility</Tooltip>\n {noSelection ? 'Toggle All' : selectedToggleText}\n </button>\n\n <div>\n <button\n type=\"button\"\n className=\"btn btn-link text-muted\"\n onClick={() => {\n this.resetVisibilityOrdering();\n }}\n >\n Reset\n <Tooltip>Reset to default</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.ASC\n );\n }}\n >\n <FontAwesomeIcon icon={dhSortAlphaDown} />\n <Tooltip>Sort ascending</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.DSC\n );\n }}\n >\n <FontAwesomeIcon icon={dhSortAlphaUp} />\n <Tooltip>Sort descending</Tooltip>\n </button>\n <span className=\"vertical-divider\" />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.UP\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={vsChevronUp} />\n <Tooltip>Move selection up</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={vsChevronDown} />\n <Tooltip>Move selection down</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.TOP\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={dhArrowToTop} />\n <Tooltip>Move selection to top</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={dhArrowToBottom} />\n <Tooltip>Move selection to bottom</Tooltip>\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 : null}\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\nVisibilityOrderingBuilder.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n movedColumns: PropTypes.arrayOf(\n PropTypes.shape({\n from: PropTypes.number,\n to: PropTypes.number,\n })\n ),\n userColumnWidths: PropTypes.instanceOf(Map).isRequired,\n onColumnVisibilityChanged: PropTypes.func,\n onMovedColumnsChanged: PropTypes.func,\n};\n\nVisibilityOrderingBuilder.defaultProps = {\n movedColumns: [],\n onColumnVisibilityChanged: () => {},\n onMovedColumnsChanged: () => {},\n};\n\nexport default VisibilityOrderingBuilder;\n"],"file":"VisibilityOrderingBuilder.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/sidebar/VisibilityOrderingBuilder.tsx"],"names":["React","Component","classNames","GridUtils","TextUtils","assertNotNull","FontAwesomeIcon","dhEye","dhEyeSlash","dhSortAlphaDown","dhSortAlphaUp","dhArrowToTop","dhArrowToBottom","vsChevronUp","vsChevronDown","vsGripper","DragDropContext","Draggable","Droppable","memoize","debounce","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"],"mappings":"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","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 { SearchInput, Tooltip } from '@deephaven/components';\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, columns) => {\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, columns) => {\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\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 type=\"button\"\n className=\"visibility btn btn-link btn-link-icon\"\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 >\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 { 'multiple-dragged': columnsDragged > 2 }\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 && (\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 type=\"button\"\n className=\"btn btn-link\"\n onClick={() => {\n onColumnVisibilityChanged(\n columnsToToggle,\n toggleToShow\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n );\n }}\n >\n <FontAwesomeIcon icon={toggleToShow ? dhEyeSlash : dhEye} />\n <Tooltip>Toggle column visibility</Tooltip>\n {noSelection ? 'Toggle All' : selectedToggleText}\n </button>\n\n <div>\n <button\n type=\"button\"\n className=\"btn btn-link text-muted\"\n onClick={() => {\n this.resetVisibilityOrdering();\n }}\n >\n Reset\n <Tooltip>Reset to default</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.ASC\n );\n }}\n >\n <FontAwesomeIcon icon={dhSortAlphaDown} />\n <Tooltip>Sort ascending</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.DSC\n );\n }}\n >\n <FontAwesomeIcon icon={dhSortAlphaUp} />\n <Tooltip>Sort descending</Tooltip>\n </button>\n <span className=\"vertical-divider\" />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.UP\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={vsChevronUp} />\n <Tooltip>Move selection up</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={vsChevronDown} />\n <Tooltip>Move selection down</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.TOP\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={dhArrowToTop} />\n <Tooltip>Move selection to top</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={dhArrowToBottom} />\n <Tooltip>Move selection to bottom</Tooltip>\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"],"file":"VisibilityOrderingBuilder.js"}
|