@deephaven/iris-grid 0.46.1-beta.0 → 0.46.1-beta.4
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.js +122 -102
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js +47 -38
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +52 -40
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +35 -28
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnStatistics.js +74 -54
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CrossColumnSearch.js +113 -90
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js +42 -35
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js +226 -193
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.js +371 -344
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js +11 -8
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js +56 -50
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCopyHandler.js +34 -24
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js +59 -46
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/PartitionSelectorSearch.js +43 -36
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.js +34 -22
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/ToastBottomBar.js +5 -3
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js +34 -25
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js +2 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +50 -36
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js +2 -1
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js +134 -107
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +70 -48
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +66 -53
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.js +15 -11
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/RollupRows.js +130 -103
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +49 -39
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +178 -128
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js +67 -57
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js +86 -63
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +30 -22
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js +52 -47
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +52 -42
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +90 -67
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js +30 -22
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js +70 -58
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/icons/BarIcon.js +21 -12
- package/dist/sidebar/icons/BarIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatColumnWhereIcon.js +38 -30
- package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatRowWhereIcon.js +32 -24
- package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/HistogramIcon.js +21 -12
- package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
- package/dist/sidebar/icons/LineIcon.js +24 -15
- package/dist/sidebar/icons/LineIcon.js.map +1 -1
- package/dist/sidebar/icons/PieIcon.js +21 -12
- package/dist/sidebar/icons/PieIcon.js.map +1 -1
- package/dist/sidebar/icons/ScatterIcon.js +71 -62
- package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +129 -121
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +121 -87
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +40 -26
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +17 -14
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +34 -28
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +2 -2
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +8 -7
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/package.json +15 -15
|
@@ -11,6 +11,8 @@ import { dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';
|
|
|
11
11
|
import { TableUtils } from '@deephaven/jsapi-utils';
|
|
12
12
|
import { filterValidColumns } from "./AggregationUtils.js";
|
|
13
13
|
import "./AggregationEdit.css";
|
|
14
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
16
|
var SortType;
|
|
15
17
|
(function (SortType) {
|
|
16
18
|
SortType[SortType["NONE"] = 0] = "NONE";
|
|
@@ -92,64 +94,72 @@ function AggregationEdit(_ref) {
|
|
|
92
94
|
}, [aggregation, invert, onChange, selected]);
|
|
93
95
|
var checked = selected.length === 0 ? invert : null;
|
|
94
96
|
var isModified = selected.length !== 0 || !invert || sort !== SortType.NONE;
|
|
95
|
-
return /*#__PURE__*/
|
|
97
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
96
98
|
role: "menu",
|
|
97
|
-
className: "aggregation-edit"
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
99
|
+
className: "aggregation-edit",
|
|
100
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
101
|
+
className: "top-menu",
|
|
102
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
103
|
+
className: "form-inline",
|
|
104
|
+
children: [/*#__PURE__*/_jsx(Checkbox, {
|
|
105
|
+
checked: checked,
|
|
106
|
+
onChange: toggleAll,
|
|
107
|
+
children: "Toggle All"
|
|
108
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
109
|
+
className: "spacer"
|
|
110
|
+
}), /*#__PURE__*/_jsx(CSSTransition, {
|
|
111
|
+
in: isModified,
|
|
112
|
+
timeout: ThemeExport.transitionSlowMs,
|
|
113
|
+
classNames: "fade",
|
|
114
|
+
mountOnEnter: true,
|
|
115
|
+
unmountOnExit: true,
|
|
116
|
+
children: /*#__PURE__*/_jsx(Button, {
|
|
117
|
+
kind: "ghost",
|
|
118
|
+
className: "btn-reset",
|
|
119
|
+
onClick: handleReset,
|
|
120
|
+
children: "Reset"
|
|
121
|
+
})
|
|
122
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
123
|
+
kind: "ghost",
|
|
124
|
+
className: classNames({
|
|
125
|
+
active: sort === SortType.ASCENDING
|
|
126
|
+
}),
|
|
127
|
+
icon: dhSortAlphaDown,
|
|
128
|
+
tooltip: "Sort ascending",
|
|
129
|
+
onClick: () => setSort(SortType.ASCENDING)
|
|
130
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
131
|
+
kind: "ghost",
|
|
132
|
+
className: classNames({
|
|
133
|
+
active: sort === SortType.DESCENDING
|
|
134
|
+
}),
|
|
135
|
+
icon: dhSortAlphaUp,
|
|
136
|
+
tooltip: "Sort descending",
|
|
137
|
+
onClick: () => setSort(SortType.DESCENDING)
|
|
138
|
+
})]
|
|
139
|
+
})
|
|
140
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
141
|
+
className: "aggregation-edit-item-list",
|
|
142
|
+
children: /*#__PURE__*/_jsx(ItemList, {
|
|
143
|
+
itemCount: validColumns.length,
|
|
144
|
+
items: items,
|
|
145
|
+
offset: top,
|
|
146
|
+
renderItem: _ref2 => {
|
|
147
|
+
var {
|
|
148
|
+
item
|
|
149
|
+
} = _ref2;
|
|
150
|
+
return /*#__PURE__*/_jsx(Checkbox, {
|
|
151
|
+
checked: isSelected(item.value),
|
|
152
|
+
children: item.displayValue
|
|
153
|
+
});
|
|
154
|
+
},
|
|
155
|
+
onSelect: handleSelect,
|
|
156
|
+
onViewportChange: handleViewportChange,
|
|
157
|
+
rowHeight: DEFAULT_ROW_HEIGHT,
|
|
158
|
+
focusSelector: "input",
|
|
159
|
+
ref: list
|
|
160
|
+
})
|
|
161
|
+
})]
|
|
162
|
+
});
|
|
153
163
|
}
|
|
154
164
|
export default AggregationEdit;
|
|
155
165
|
//# sourceMappingURL=AggregationEdit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AggregationEdit.js","names":["React","useCallback","useMemo","useRef","useState","classNames","CSSTransition","Button","Checkbox","ItemList","ThemeExport","dhSortAlphaDown","dhSortAlphaUp","TableUtils","filterValidColumns","SortType","DEFAULT_ROW_HEIGHT","AggregationEdit","aggregation","columns","onChange","top","setTop","bottom","setBottom","sort","setSort","NONE","invert","selected","list","isSelected","name","includes","validColumns","filteredColumns","operation","sortColumns","ASCENDING","items","slice","map","c","value","displayValue","handleSelect","itemIndex","selectedIndex","indexOf","newSelected","newInvert","splice","push","length","handleReset","handleViewportChange","newTop","newBottom","toggleAll","checked","isModified","transitionSlowMs","active","DESCENDING","item"],"sources":["../../../src/sidebar/aggregations/AggregationEdit.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, Checkbox, ItemList, ThemeExport } from '@deephaven/components';\nimport { dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport type { Column } from '@deephaven/jsapi-types';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { Aggregation } from './Aggregations';\nimport { filterValidColumns } from './AggregationUtils';\nimport './AggregationEdit.scss';\n\ninterface AggregationEditItem {\n value: string;\n displayValue: string;\n}\n\nexport type AggregationEditProps = {\n aggregation: Aggregation;\n columns: readonly Column[];\n onChange: (aggregation: Aggregation) => void;\n};\n\nenum SortType {\n NONE,\n ASCENDING,\n DESCENDING,\n}\n\nconst DEFAULT_ROW_HEIGHT = 30;\n\nfunction AggregationEdit({\n aggregation,\n columns,\n onChange,\n}: AggregationEditProps): JSX.Element {\n const [top, setTop] = useState(-1);\n const [bottom, setBottom] = useState(-1);\n const [sort, setSort] = useState(SortType.NONE);\n const { invert, selected } = aggregation;\n const list = useRef<ItemList<AggregationEditItem>>(null);\n\n const isSelected = useCallback(\n name => (selected.includes(name) ? !invert : invert),\n [invert, selected]\n );\n\n const validColumns = useMemo(() => {\n let filteredColumns = filterValidColumns(columns, aggregation.operation);\n if (sort !== SortType.NONE) {\n filteredColumns = TableUtils.sortColumns(\n filteredColumns,\n sort === SortType.ASCENDING\n );\n }\n return filteredColumns;\n }, [columns, aggregation.operation, sort]);\n\n const items = useMemo(\n () =>\n top >= 0\n ? validColumns.slice(top, bottom + 1).map(c => ({\n value: c.name,\n displayValue: c.name,\n isSelected: isSelected(c.name),\n }))\n : [],\n [validColumns, isSelected, bottom, top]\n );\n\n const handleSelect = useCallback(\n itemIndex => {\n const { name } = validColumns[itemIndex];\n const selectedIndex = selected.indexOf(name);\n let newSelected = [...selected];\n let newInvert = invert;\n if (selectedIndex >= 0) {\n newSelected.splice(selectedIndex, 1);\n } else {\n newSelected.push(name);\n if (newSelected.length === validColumns.length) {\n // Every item is either selected or deselected, flip the inversion bit\n newSelected = [];\n newInvert = !invert;\n }\n }\n\n onChange({ ...aggregation, selected: newSelected, invert: newInvert });\n },\n [aggregation, invert, validColumns, selected, onChange]\n );\n\n const handleReset = useCallback(() => {\n setSort(SortType.NONE);\n onChange({ ...aggregation, selected: [], invert: true });\n }, [aggregation, onChange]);\n\n const handleViewportChange = useCallback(\n (newTop, newBottom) => {\n setTop(newTop);\n setBottom(newBottom);\n },\n [setTop, setBottom]\n );\n\n const toggleAll = useCallback(() => {\n if (selected.length === 0) {\n onChange({ ...aggregation, invert: !invert });\n } else {\n onChange({ ...aggregation, selected: [], invert: true });\n }\n }, [aggregation, invert, onChange, selected]);\n\n const checked = selected.length === 0 ? invert : null;\n const isModified = selected.length !== 0 || !invert || sort !== SortType.NONE;\n\n return (\n <div role=\"menu\" className=\"aggregation-edit\">\n <div className=\"top-menu\">\n <div className=\"form-inline\">\n <Checkbox checked={checked} onChange={toggleAll}>\n Toggle All\n </Checkbox>\n <div className=\"spacer\" />\n <CSSTransition\n in={isModified}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <Button kind=\"ghost\" className=\"btn-reset\" onClick={handleReset}>\n Reset\n </Button>\n </CSSTransition>\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.ASCENDING,\n })}\n icon={dhSortAlphaDown}\n tooltip=\"Sort ascending\"\n onClick={() => setSort(SortType.ASCENDING)}\n />\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.DESCENDING,\n })}\n icon={dhSortAlphaUp}\n tooltip=\"Sort descending\"\n onClick={() => setSort(SortType.DESCENDING)}\n />\n </div>\n </div>\n <div className=\"aggregation-edit-item-list\">\n <ItemList\n itemCount={validColumns.length}\n items={items}\n offset={top}\n renderItem={({ item }) => (\n <Checkbox checked={isSelected(item.value)}>\n {item.displayValue}\n </Checkbox>\n )}\n onSelect={handleSelect}\n onViewportChange={handleViewportChange}\n rowHeight={DEFAULT_ROW_HEIGHT}\n focusSelector=\"input\"\n ref={list}\n />\n </div>\n </div>\n );\n}\n\nexport default AggregationEdit;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AggregationEdit.js","names":["React","useCallback","useMemo","useRef","useState","classNames","CSSTransition","Button","Checkbox","ItemList","ThemeExport","dhSortAlphaDown","dhSortAlphaUp","TableUtils","filterValidColumns","SortType","DEFAULT_ROW_HEIGHT","AggregationEdit","aggregation","columns","onChange","top","setTop","bottom","setBottom","sort","setSort","NONE","invert","selected","list","isSelected","name","includes","validColumns","filteredColumns","operation","sortColumns","ASCENDING","items","slice","map","c","value","displayValue","handleSelect","itemIndex","selectedIndex","indexOf","newSelected","newInvert","splice","push","length","handleReset","handleViewportChange","newTop","newBottom","toggleAll","checked","isModified","transitionSlowMs","active","DESCENDING","item"],"sources":["../../../src/sidebar/aggregations/AggregationEdit.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, Checkbox, ItemList, ThemeExport } from '@deephaven/components';\nimport { dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport type { Column } from '@deephaven/jsapi-types';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { Aggregation } from './Aggregations';\nimport { filterValidColumns } from './AggregationUtils';\nimport './AggregationEdit.scss';\n\ninterface AggregationEditItem {\n value: string;\n displayValue: string;\n}\n\nexport type AggregationEditProps = {\n aggregation: Aggregation;\n columns: readonly Column[];\n onChange: (aggregation: Aggregation) => void;\n};\n\nenum SortType {\n NONE,\n ASCENDING,\n DESCENDING,\n}\n\nconst DEFAULT_ROW_HEIGHT = 30;\n\nfunction AggregationEdit({\n aggregation,\n columns,\n onChange,\n}: AggregationEditProps): JSX.Element {\n const [top, setTop] = useState(-1);\n const [bottom, setBottom] = useState(-1);\n const [sort, setSort] = useState(SortType.NONE);\n const { invert, selected } = aggregation;\n const list = useRef<ItemList<AggregationEditItem>>(null);\n\n const isSelected = useCallback(\n name => (selected.includes(name) ? !invert : invert),\n [invert, selected]\n );\n\n const validColumns = useMemo(() => {\n let filteredColumns = filterValidColumns(columns, aggregation.operation);\n if (sort !== SortType.NONE) {\n filteredColumns = TableUtils.sortColumns(\n filteredColumns,\n sort === SortType.ASCENDING\n );\n }\n return filteredColumns;\n }, [columns, aggregation.operation, sort]);\n\n const items = useMemo(\n () =>\n top >= 0\n ? validColumns.slice(top, bottom + 1).map(c => ({\n value: c.name,\n displayValue: c.name,\n isSelected: isSelected(c.name),\n }))\n : [],\n [validColumns, isSelected, bottom, top]\n );\n\n const handleSelect = useCallback(\n itemIndex => {\n const { name } = validColumns[itemIndex];\n const selectedIndex = selected.indexOf(name);\n let newSelected = [...selected];\n let newInvert = invert;\n if (selectedIndex >= 0) {\n newSelected.splice(selectedIndex, 1);\n } else {\n newSelected.push(name);\n if (newSelected.length === validColumns.length) {\n // Every item is either selected or deselected, flip the inversion bit\n newSelected = [];\n newInvert = !invert;\n }\n }\n\n onChange({ ...aggregation, selected: newSelected, invert: newInvert });\n },\n [aggregation, invert, validColumns, selected, onChange]\n );\n\n const handleReset = useCallback(() => {\n setSort(SortType.NONE);\n onChange({ ...aggregation, selected: [], invert: true });\n }, [aggregation, onChange]);\n\n const handleViewportChange = useCallback(\n (newTop, newBottom) => {\n setTop(newTop);\n setBottom(newBottom);\n },\n [setTop, setBottom]\n );\n\n const toggleAll = useCallback(() => {\n if (selected.length === 0) {\n onChange({ ...aggregation, invert: !invert });\n } else {\n onChange({ ...aggregation, selected: [], invert: true });\n }\n }, [aggregation, invert, onChange, selected]);\n\n const checked = selected.length === 0 ? invert : null;\n const isModified = selected.length !== 0 || !invert || sort !== SortType.NONE;\n\n return (\n <div role=\"menu\" className=\"aggregation-edit\">\n <div className=\"top-menu\">\n <div className=\"form-inline\">\n <Checkbox checked={checked} onChange={toggleAll}>\n Toggle All\n </Checkbox>\n <div className=\"spacer\" />\n <CSSTransition\n in={isModified}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <Button kind=\"ghost\" className=\"btn-reset\" onClick={handleReset}>\n Reset\n </Button>\n </CSSTransition>\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.ASCENDING,\n })}\n icon={dhSortAlphaDown}\n tooltip=\"Sort ascending\"\n onClick={() => setSort(SortType.ASCENDING)}\n />\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.DESCENDING,\n })}\n icon={dhSortAlphaUp}\n tooltip=\"Sort descending\"\n onClick={() => setSort(SortType.DESCENDING)}\n />\n </div>\n </div>\n <div className=\"aggregation-edit-item-list\">\n <ItemList\n itemCount={validColumns.length}\n items={items}\n offset={top}\n renderItem={({ item }) => (\n <Checkbox checked={isSelected(item.value)}>\n {item.displayValue}\n </Checkbox>\n )}\n onSelect={handleSelect}\n onViewportChange={handleViewportChange}\n rowHeight={DEFAULT_ROW_HEIGHT}\n focusSelector=\"input\"\n ref={list}\n />\n </div>\n </div>\n );\n}\n\nexport default AggregationEdit;\n"],"mappings":"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"}
|
|
@@ -12,6 +12,9 @@ import Log from '@deephaven/log';
|
|
|
12
12
|
import { DraggableItemList, DragUtils, Option, Select, RadioItem, RadioGroup, Button } from '@deephaven/components';
|
|
13
13
|
import AggregationUtils, { SELECTABLE_OPTIONS } from "./AggregationUtils.js";
|
|
14
14
|
import "./Aggregations.css";
|
|
15
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
16
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
15
18
|
var log = Log.module('Aggregations');
|
|
16
19
|
function Aggregations(_ref) {
|
|
17
20
|
var {
|
|
@@ -107,72 +110,92 @@ function Aggregations(_ref) {
|
|
|
107
110
|
var className = isClone ? 'item-list-item-clone' : undefined;
|
|
108
111
|
var isRollupOperation = AggregationUtils.isRollupOperation(item.operation);
|
|
109
112
|
var isEditable = !isClone && !isRollupOperation;
|
|
110
|
-
return /*#__PURE__*/
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
113
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
114
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
115
|
+
className: classNames('item-list-item-content', 'draggable-item-list-item-content', className),
|
|
116
|
+
children: [/*#__PURE__*/_jsxs("span", {
|
|
117
|
+
className: "title",
|
|
118
|
+
children: [text, !isRollup && isRollupOperation && /*#__PURE__*/_jsxs("span", {
|
|
119
|
+
className: "small text-warning",
|
|
120
|
+
children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
121
|
+
icon: dhWarningFilled
|
|
122
|
+
}), " Requires rollup"]
|
|
123
|
+
})]
|
|
124
|
+
}), DraggableItemList.renderBadge({
|
|
125
|
+
text: badgeText
|
|
126
|
+
}), DraggableItemList.renderHandle()]
|
|
127
|
+
}), !isClone && /*#__PURE__*/_jsxs(_Fragment, {
|
|
128
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
129
|
+
kind: "ghost",
|
|
130
|
+
className: "btn-edit",
|
|
131
|
+
icon: vsEdit,
|
|
132
|
+
tooltip: "Edit Columns",
|
|
133
|
+
onClick: () => onEdit(item),
|
|
134
|
+
disabled: !isEditable
|
|
135
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
136
|
+
kind: "ghost",
|
|
137
|
+
className: "btn-delete",
|
|
138
|
+
icon: vsTrash,
|
|
139
|
+
tooltip: "Delete Aggregation",
|
|
140
|
+
onClick: () => handleDeleteClicked(itemIndex)
|
|
141
|
+
})]
|
|
142
|
+
})]
|
|
143
|
+
});
|
|
134
144
|
}, [handleDeleteClicked, onEdit, isRollup]);
|
|
135
145
|
var isOptionsShown = options.length > 0;
|
|
136
146
|
var isAggregationsShown = aggregations.length > 0;
|
|
137
|
-
return /*#__PURE__*/
|
|
138
|
-
className: "aggregations"
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
147
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
148
|
+
className: "aggregations",
|
|
149
|
+
children: [isOptionsShown && /*#__PURE__*/_jsxs("div", {
|
|
150
|
+
className: "form-inline",
|
|
151
|
+
children: [/*#__PURE__*/_jsx(Select, {
|
|
152
|
+
onChange: handleOperationChange,
|
|
153
|
+
value: selectedOperation,
|
|
154
|
+
children: options.map(option => /*#__PURE__*/_jsx(Option, {
|
|
155
|
+
value: option,
|
|
156
|
+
children: option
|
|
157
|
+
}, option))
|
|
158
|
+
}), /*#__PURE__*/_jsxs("button", {
|
|
159
|
+
type: "button",
|
|
160
|
+
className: "btn btn-link btn-add",
|
|
161
|
+
onClick: handleAdd,
|
|
162
|
+
children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
163
|
+
icon: dhNewCircleLargeFilled
|
|
164
|
+
}), "Add Aggregation"]
|
|
165
|
+
})]
|
|
166
|
+
}), isOptionsShown && isAggregationsShown && /*#__PURE__*/_jsx("hr", {}), isAggregationsShown && /*#__PURE__*/_jsxs(_Fragment, {
|
|
167
|
+
children: [!isRollup && /*#__PURE__*/_jsxs("div", {
|
|
168
|
+
className: "form-inline",
|
|
169
|
+
children: [/*#__PURE__*/_jsx("label", {
|
|
170
|
+
children: "Placement:\xA0"
|
|
171
|
+
}), /*#__PURE__*/_jsxs(RadioGroup, {
|
|
172
|
+
onChange: handleShowOnTopChange,
|
|
173
|
+
value: "".concat(showOnTop),
|
|
174
|
+
children: [/*#__PURE__*/_jsx(RadioItem, {
|
|
175
|
+
value: "true",
|
|
176
|
+
children: "Top"
|
|
177
|
+
}), /*#__PURE__*/_jsx(RadioItem, {
|
|
178
|
+
value: "false",
|
|
179
|
+
children: "Bottom"
|
|
180
|
+
})]
|
|
181
|
+
})]
|
|
182
|
+
}), /*#__PURE__*/_jsx(DragDropContext, {
|
|
183
|
+
onDragStart: handleDragStart,
|
|
184
|
+
onDragEnd: handleDragEnd,
|
|
185
|
+
children: /*#__PURE__*/_jsx(DraggableItemList, {
|
|
186
|
+
className: "selected-aggregations",
|
|
187
|
+
itemCount: aggregations.length,
|
|
188
|
+
items: aggregations,
|
|
189
|
+
renderItem: renderAggregation,
|
|
190
|
+
offset: 0,
|
|
191
|
+
onSelectionChange: handleAggregationSelectionChange,
|
|
192
|
+
onSelect: handleAggregationSelect,
|
|
193
|
+
selectedRanges: selectedRanges,
|
|
194
|
+
isMultiSelect: true
|
|
195
|
+
})
|
|
196
|
+
})]
|
|
197
|
+
})]
|
|
198
|
+
});
|
|
176
199
|
}
|
|
177
200
|
export default Aggregations;
|
|
178
201
|
//# sourceMappingURL=Aggregations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Aggregations.js","names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","RadioItem","RadioGroup","Button","AggregationUtils","SELECTABLE_OPTIONS","log","module","Aggregations","isRollup","settings","onChange","onEdit","aggregations","showOnTop","options","filter","option","some","aggregation","operation","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","length","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","event","target","value","setDefaultOperation","includes","renderAggregation","item","isClone","selectedCount","text","badgeText","undefined","className","isEditable","renderBadge","renderHandle","isOptionsShown","isAggregationsShown","map"],"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n RadioItem,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { ModelIndex } from '@deephaven/grid';\nimport AggregationOperation from './AggregationOperation';\nimport AggregationUtils, { SELECTABLE_OPTIONS } from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: readonly string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: readonly Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n settings: AggregationSettings;\n onChange: (settings: AggregationSettings) => void;\n onEdit: (aggregation: Aggregation) => void;\n};\n\nfunction Aggregations({\n isRollup,\n settings,\n onChange,\n onEdit,\n}: AggregationsProps): JSX.Element {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option)\n ),\n [aggregations]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<Range[]>([]);\n const changeSettings = useCallback(\n changedSettings => {\n onChange({ ...settings, ...changedSettings });\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n newAggregations => {\n changeSettings({ aggregations: newAggregations });\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n newShowOnTop => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination === null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n operation => {\n setSelectedOperation(operation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations([\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ]);\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n changeAggregations(\n aggregations.filter((aggregation, index) => index !== itemIndex)\n );\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n newSelectedRanges => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n itemIndex => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n changeShowOnTop(event.target.value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone = false,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div className=\"form-inline\">\n <label>Placement: </label>\n <RadioGroup\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <RadioItem value=\"true\">Top</RadioItem>\n <RadioItem value=\"false\">Bottom</RadioItem>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n}\n\nexport default Aggregations;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Aggregations.js","names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","RadioItem","RadioGroup","Button","AggregationUtils","SELECTABLE_OPTIONS","log","module","Aggregations","isRollup","settings","onChange","onEdit","aggregations","showOnTop","options","filter","option","some","aggregation","operation","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","length","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","event","target","value","setDefaultOperation","includes","renderAggregation","item","isClone","selectedCount","text","badgeText","undefined","className","isEditable","renderBadge","renderHandle","isOptionsShown","isAggregationsShown","map"],"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n RadioItem,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { ModelIndex } from '@deephaven/grid';\nimport AggregationOperation from './AggregationOperation';\nimport AggregationUtils, { SELECTABLE_OPTIONS } from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: readonly string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: readonly Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n settings: AggregationSettings;\n onChange: (settings: AggregationSettings) => void;\n onEdit: (aggregation: Aggregation) => void;\n};\n\nfunction Aggregations({\n isRollup,\n settings,\n onChange,\n onEdit,\n}: AggregationsProps): JSX.Element {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option)\n ),\n [aggregations]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<Range[]>([]);\n const changeSettings = useCallback(\n changedSettings => {\n onChange({ ...settings, ...changedSettings });\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n newAggregations => {\n changeSettings({ aggregations: newAggregations });\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n newShowOnTop => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination === null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n operation => {\n setSelectedOperation(operation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations([\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ]);\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n changeAggregations(\n aggregations.filter((aggregation, index) => index !== itemIndex)\n );\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n newSelectedRanges => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n itemIndex => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n changeShowOnTop(event.target.value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone = false,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div className=\"form-inline\">\n <label>Placement: </label>\n <RadioGroup\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <RadioItem value=\"true\">Top</RadioItem>\n <RadioItem value=\"false\">Bottom</RadioItem>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n}\n\nexport default Aggregations;\n"],"mappings":"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"}
|
|
@@ -9,6 +9,9 @@ import { ComboBox } from '@deephaven/components';
|
|
|
9
9
|
import { getDefaultConditionConfigForType, getConditionConfig, getDefaultStyleConfig, FormatStyleType } from "./ConditionalFormattingUtils.js";
|
|
10
10
|
import ConditionEditor from "./ConditionEditor.js";
|
|
11
11
|
import StyleEditor from "./StyleEditor.js";
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
12
15
|
var log = Log.module('ColumnFormatEditor');
|
|
13
16
|
var DEFAULT_CALLBACK = () => undefined;
|
|
14
17
|
function makeDefaultConfig(columns) {
|
|
@@ -96,28 +99,33 @@ function ColumnFormatEditor(props) {
|
|
|
96
99
|
value: name
|
|
97
100
|
};
|
|
98
101
|
});
|
|
99
|
-
return /*#__PURE__*/
|
|
100
|
-
className: "conditional-rule-editor form"
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
102
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
103
|
+
className: "conditional-rule-editor form",
|
|
104
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
105
|
+
className: "mb-2",
|
|
106
|
+
children: [/*#__PURE__*/_jsx("label", {
|
|
107
|
+
className: "mb-0",
|
|
108
|
+
children: "Format Cell If"
|
|
109
|
+
}), /*#__PURE__*/_jsx(ComboBox, {
|
|
110
|
+
defaultValue: selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.name,
|
|
111
|
+
options: columnInputOptions,
|
|
112
|
+
inputPlaceholder: "Select a column",
|
|
113
|
+
spellCheck: false,
|
|
114
|
+
onChange: handleColumnChange,
|
|
115
|
+
searchPlaceholder: "Filter columns"
|
|
116
|
+
})]
|
|
117
|
+
}), selectedColumn !== undefined && /*#__PURE__*/_jsxs(_Fragment, {
|
|
118
|
+
children: [/*#__PURE__*/_jsx(ConditionEditor, {
|
|
119
|
+
dh: dh,
|
|
120
|
+
column: selectedColumn,
|
|
121
|
+
config: conditionConfig,
|
|
122
|
+
onChange: handleConditionChange
|
|
123
|
+
}), /*#__PURE__*/_jsx(StyleEditor, {
|
|
124
|
+
config: selectedStyle,
|
|
125
|
+
onChange: handleStyleChange
|
|
126
|
+
})]
|
|
127
|
+
})]
|
|
128
|
+
});
|
|
121
129
|
}
|
|
122
130
|
export default ColumnFormatEditor;
|
|
123
131
|
//# sourceMappingURL=ColumnFormatEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnFormatEditor.js","names":["React","useCallback","useEffect","useState","Log","ComboBox","getDefaultConditionConfigForType","getConditionConfig","getDefaultStyleConfig","FormatStyleType","ConditionEditor","StyleEditor","log","module","DEFAULT_CALLBACK","undefined","makeDefaultConfig","columns","type","name","column","config","style","ColumnFormatEditor","props","dh","onChange","selectedColumn","setColumn","find","c","conditionConfig","setConditionConfig","conditionValid","setConditionValid","selectedStyle","setStyle","handleColumnChange","value","newColumn","error","handleConditionChange","updatedConditionConfig","isValid","debug","handleStyleChange","updatedStyleConfig","updateColumnFormat","NO_FORMATTING","columnInputOptions","map","title"],"sources":["../../../src/sidebar/conditional-formatting/ColumnFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox } from '@deephaven/components';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n BaseFormatConfig,\n ChangeCallback,\n getDefaultConditionConfigForType,\n getConditionConfig,\n getDefaultStyleConfig,\n ModelColumn,\n FormatStyleType,\n} from './ConditionalFormattingUtils';\nimport ConditionEditor from './ConditionEditor';\nimport StyleEditor from './StyleEditor';\n\nconst log = Log.module('ColumnFormatEditor');\n\nexport interface ColumnFormatEditorProps {\n columns: ModelColumn[];\n config?: BaseFormatConfig;\n dh: DhType;\n onChange?: ChangeCallback;\n}\n\nconst DEFAULT_CALLBACK = () => undefined;\n\nfunction makeDefaultConfig(columns: ModelColumn[]): BaseFormatConfig {\n const { type, name } = columns[0];\n const column = { type, name };\n const config = {\n column,\n style: getDefaultStyleConfig(),\n ...getDefaultConditionConfigForType(type),\n };\n return config;\n}\n\nfunction ColumnFormatEditor(props: ColumnFormatEditorProps): JSX.Element {\n const {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK,\n } = props;\n\n const [selectedColumn, setColumn] = useState(\n columns.find(\n c => c.name === config.column.name && c.type === config.column.type\n ) ?? columns[0]\n );\n const [conditionConfig, setConditionConfig] = useState(\n getConditionConfig(config)\n );\n const [conditionValid, setConditionValid] = useState(false);\n const [selectedStyle, setStyle] = useState(config.style);\n\n const handleColumnChange = useCallback(\n value => {\n const newColumn = columns.find(({ name }) => name === value);\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(`Column ${value} not found.`);\n }\n },\n [columns, selectedColumn]\n );\n\n const handleConditionChange = useCallback(\n (updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n },\n []\n );\n\n const handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n\n useEffect(\n function updateColumnFormat() {\n let isValid = conditionValid;\n\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, invalidating update.');\n isValid = false;\n }\n if (\n selectedStyle === undefined ||\n selectedStyle.type === FormatStyleType.NO_FORMATTING\n ) {\n log.debug('Style is not selected, invalidating update.');\n isValid = false;\n }\n\n const { type, name } = selectedColumn;\n const column = { type, name };\n onChange(\n {\n column,\n style: selectedStyle,\n ...conditionConfig,\n },\n isValid\n );\n },\n [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]\n );\n\n const columnInputOptions = columns.map(({ name }) => ({\n title: name,\n value: name,\n }));\n\n return (\n <div className=\"conditional-rule-editor form\">\n <div className=\"mb-2\">\n <label className=\"mb-0\">Format Cell If</label>\n <ComboBox\n defaultValue={selectedColumn?.name}\n options={columnInputOptions}\n inputPlaceholder=\"Select a column\"\n spellCheck={false}\n onChange={handleColumnChange}\n searchPlaceholder=\"Filter columns\"\n />\n </div>\n\n {selectedColumn !== undefined && (\n <>\n <ConditionEditor\n dh={dh}\n column={selectedColumn}\n config={conditionConfig}\n onChange={handleConditionChange}\n />\n <StyleEditor config={selectedStyle} onChange={handleStyleChange} />\n </>\n )}\n </div>\n );\n}\n\nexport default ColumnFormatEditor;\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ColumnFormatEditor.js","names":["React","useCallback","useEffect","useState","Log","ComboBox","getDefaultConditionConfigForType","getConditionConfig","getDefaultStyleConfig","FormatStyleType","ConditionEditor","StyleEditor","log","module","DEFAULT_CALLBACK","undefined","makeDefaultConfig","columns","type","name","column","config","style","ColumnFormatEditor","props","dh","onChange","selectedColumn","setColumn","find","c","conditionConfig","setConditionConfig","conditionValid","setConditionValid","selectedStyle","setStyle","handleColumnChange","value","newColumn","error","handleConditionChange","updatedConditionConfig","isValid","debug","handleStyleChange","updatedStyleConfig","updateColumnFormat","NO_FORMATTING","columnInputOptions","map","title"],"sources":["../../../src/sidebar/conditional-formatting/ColumnFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox } from '@deephaven/components';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n BaseFormatConfig,\n ChangeCallback,\n getDefaultConditionConfigForType,\n getConditionConfig,\n getDefaultStyleConfig,\n ModelColumn,\n FormatStyleType,\n} from './ConditionalFormattingUtils';\nimport ConditionEditor from './ConditionEditor';\nimport StyleEditor from './StyleEditor';\n\nconst log = Log.module('ColumnFormatEditor');\n\nexport interface ColumnFormatEditorProps {\n columns: ModelColumn[];\n config?: BaseFormatConfig;\n dh: DhType;\n onChange?: ChangeCallback;\n}\n\nconst DEFAULT_CALLBACK = () => undefined;\n\nfunction makeDefaultConfig(columns: ModelColumn[]): BaseFormatConfig {\n const { type, name } = columns[0];\n const column = { type, name };\n const config = {\n column,\n style: getDefaultStyleConfig(),\n ...getDefaultConditionConfigForType(type),\n };\n return config;\n}\n\nfunction ColumnFormatEditor(props: ColumnFormatEditorProps): JSX.Element {\n const {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK,\n } = props;\n\n const [selectedColumn, setColumn] = useState(\n columns.find(\n c => c.name === config.column.name && c.type === config.column.type\n ) ?? columns[0]\n );\n const [conditionConfig, setConditionConfig] = useState(\n getConditionConfig(config)\n );\n const [conditionValid, setConditionValid] = useState(false);\n const [selectedStyle, setStyle] = useState(config.style);\n\n const handleColumnChange = useCallback(\n value => {\n const newColumn = columns.find(({ name }) => name === value);\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(`Column ${value} not found.`);\n }\n },\n [columns, selectedColumn]\n );\n\n const handleConditionChange = useCallback(\n (updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n },\n []\n );\n\n const handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n\n useEffect(\n function updateColumnFormat() {\n let isValid = conditionValid;\n\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, invalidating update.');\n isValid = false;\n }\n if (\n selectedStyle === undefined ||\n selectedStyle.type === FormatStyleType.NO_FORMATTING\n ) {\n log.debug('Style is not selected, invalidating update.');\n isValid = false;\n }\n\n const { type, name } = selectedColumn;\n const column = { type, name };\n onChange(\n {\n column,\n style: selectedStyle,\n ...conditionConfig,\n },\n isValid\n );\n },\n [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]\n );\n\n const columnInputOptions = columns.map(({ name }) => ({\n title: name,\n value: name,\n }));\n\n return (\n <div className=\"conditional-rule-editor form\">\n <div className=\"mb-2\">\n <label className=\"mb-0\">Format Cell If</label>\n <ComboBox\n defaultValue={selectedColumn?.name}\n options={columnInputOptions}\n inputPlaceholder=\"Select a column\"\n spellCheck={false}\n onChange={handleColumnChange}\n searchPlaceholder=\"Filter columns\"\n />\n </div>\n\n {selectedColumn !== undefined && (\n <>\n <ConditionEditor\n dh={dh}\n column={selectedColumn}\n config={conditionConfig}\n onChange={handleConditionChange}\n />\n <StyleEditor config={selectedStyle} onChange={handleStyleChange} />\n </>\n )}\n </div>\n );\n}\n\nexport default ColumnFormatEditor;\n"],"mappings":"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"}
|