@deephaven/iris-grid 1.26.1 → 1.27.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/IrisGridUtils.d.ts +7 -0
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +31 -5
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -0
- package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js +177 -167
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -2
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +23 -18
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +27 -7
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +172 -122
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/MultiColumnFormatEditor.d.ts +18 -0
- package/dist/sidebar/conditional-formatting/MultiColumnFormatEditor.d.ts.map +1 -0
- package/dist/sidebar/conditional-formatting/{ColumnFormatEditor.js → MultiColumnFormatEditor.js} +110 -22
- package/dist/sidebar/conditional-formatting/MultiColumnFormatEditor.js.map +1 -0
- package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js +8 -5
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/package.json +5 -5
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +0 -11
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +0 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { dh as DhType } from '@deephaven/jsapi-types';
|
|
2
|
+
import { type BaseFormatConfig, type ChangeCallback, type ModelColumn } from './ConditionalFormattingUtils';
|
|
3
|
+
export interface MultiColumnFormatEditorProps {
|
|
4
|
+
columns: ModelColumn[];
|
|
5
|
+
config?: BaseFormatConfig;
|
|
6
|
+
dh: typeof DhType;
|
|
7
|
+
onChange?: ChangeCallback;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Multi-column format editor component. Allows users to select multiple columns to apply formatting to,
|
|
11
|
+
* specify a condition for formatting, and choose a style for the formatting.
|
|
12
|
+
*
|
|
13
|
+
* @param props The props for the component.
|
|
14
|
+
* @returns The JSX element for the multi-column format editor.
|
|
15
|
+
*/
|
|
16
|
+
declare function MultiColumnFormatEditor(props: MultiColumnFormatEditorProps): JSX.Element;
|
|
17
|
+
export default MultiColumnFormatEditor;
|
|
18
|
+
//# sourceMappingURL=MultiColumnFormatEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiColumnFormatEditor.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/MultiColumnFormatEditor.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAInB,KAAK,WAAW,EAIjB,MAAM,8BAA8B,CAAC;AAMtC,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,EAAE,EAAE,OAAO,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAgBD;;;;;;GAMG;AACH,iBAAS,uBAAuB,CAC9B,KAAK,EAAE,4BAA4B,GAClC,GAAG,CAAC,OAAO,CAgNb;AAED,eAAe,uBAAuB,CAAC"}
|
package/dist/sidebar/conditional-formatting/{ColumnFormatEditor.js → MultiColumnFormatEditor.js}
RENAMED
|
@@ -11,28 +11,37 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
|
|
|
11
11
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
12
12
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
13
13
|
import Log from '@deephaven/log';
|
|
14
|
-
import { ComboBox } from '@deephaven/components';
|
|
14
|
+
import { ComboBox, MultiSelect } from '@deephaven/components';
|
|
15
15
|
import { getDefaultConditionConfigForType, getConditionConfig, getDefaultStyleConfig, FormatStyleType } from "./ConditionalFormattingUtils.js";
|
|
16
16
|
import ConditionEditor from "./ConditionEditor.js";
|
|
17
17
|
import StyleEditor from "./StyleEditor.js";
|
|
18
18
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
19
|
-
var log = Log.module('
|
|
19
|
+
var log = Log.module('MultiColumnFormatEditor');
|
|
20
20
|
var DEFAULT_CALLBACK = () => undefined;
|
|
21
21
|
function makeDefaultConfig(columns) {
|
|
22
22
|
var _columns$ = columns[0],
|
|
23
23
|
type = _columns$.type,
|
|
24
24
|
name = _columns$.name;
|
|
25
|
-
var
|
|
25
|
+
var leftHandValue = {
|
|
26
26
|
type,
|
|
27
27
|
name
|
|
28
28
|
};
|
|
29
29
|
var config = _objectSpread({
|
|
30
|
-
|
|
30
|
+
leftHandValue,
|
|
31
|
+
formattedColumns: [],
|
|
31
32
|
style: getDefaultStyleConfig()
|
|
32
33
|
}, getDefaultConditionConfigForType(type));
|
|
33
34
|
return config;
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Multi-column format editor component. Allows users to select multiple columns to apply formatting to,
|
|
39
|
+
* specify a condition for formatting, and choose a style for the formatting.
|
|
40
|
+
*
|
|
41
|
+
* @param props The props for the component.
|
|
42
|
+
* @returns The JSX element for the multi-column format editor.
|
|
43
|
+
*/
|
|
44
|
+
function MultiColumnFormatEditor(props) {
|
|
36
45
|
var _columns$find;
|
|
37
46
|
var columns = props.columns,
|
|
38
47
|
_props$config = props.config,
|
|
@@ -40,22 +49,52 @@ function ColumnFormatEditor(props) {
|
|
|
40
49
|
dh = props.dh,
|
|
41
50
|
_props$onChange = props.onChange,
|
|
42
51
|
onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange;
|
|
43
|
-
|
|
52
|
+
|
|
53
|
+
// The left-hand value column selected for the condition. This is the column that will be evaluated against the specified condition.
|
|
54
|
+
var _useState = useState((_columns$find = columns.find(c => c.name === config.leftHandValue.name && c.type === config.leftHandValue.type)) !== null && _columns$find !== void 0 ? _columns$find : columns[0]),
|
|
44
55
|
_useState2 = _slicedToArray(_useState, 2),
|
|
45
56
|
selectedColumn = _useState2[0],
|
|
46
57
|
setColumn = _useState2[1];
|
|
47
|
-
|
|
58
|
+
|
|
59
|
+
// customFormattedColumns holds an explicit column selection when non-empty.
|
|
60
|
+
// An empty array means "track the condition column" (selectedFormattedColumns
|
|
61
|
+
// will mirror [selectedColumn] automatically).
|
|
62
|
+
var _useState3 = useState(() => {
|
|
63
|
+
var formattedColumns = config.formattedColumns,
|
|
64
|
+
leftHandValue = config.leftHandValue;
|
|
65
|
+
var isCustom = formattedColumns.length > 1 || formattedColumns.length === 1 && formattedColumns[0].name !== leftHandValue.name;
|
|
66
|
+
if (!isCustom) return [];
|
|
67
|
+
return formattedColumns.map(col => {
|
|
68
|
+
var _columns$find2;
|
|
69
|
+
return (_columns$find2 = columns.find(c => c.name === col.name && c.type === col.type)) !== null && _columns$find2 !== void 0 ? _columns$find2 : columns[0];
|
|
70
|
+
});
|
|
71
|
+
}),
|
|
48
72
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
var
|
|
73
|
+
customFormattedColumns = _useState4[0],
|
|
74
|
+
setCustomFormattedColumns = _useState4[1];
|
|
75
|
+
var selectedFormattedColumns = useMemo(() => customFormattedColumns.length > 0 ? customFormattedColumns : [selectedColumn], [customFormattedColumns, selectedColumn]);
|
|
76
|
+
|
|
77
|
+
// The condition configuration for the formatting rule. This includes the condition type and any associated values.
|
|
78
|
+
var _useState5 = useState(getConditionConfig(config)),
|
|
52
79
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
80
|
+
conditionConfig = _useState6[0],
|
|
81
|
+
setConditionConfig = _useState6[1];
|
|
82
|
+
// Whether the current condition configuration is valid. This is used to determine if the rule can be applied.
|
|
83
|
+
var _useState7 = useState(false),
|
|
56
84
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
57
|
-
|
|
58
|
-
|
|
85
|
+
conditionValid = _useState8[0],
|
|
86
|
+
setConditionValid = _useState8[1];
|
|
87
|
+
// The style configuration for the formatting rule. This includes the style type and any associated style properties.
|
|
88
|
+
var _useState9 = useState(config.style),
|
|
89
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
90
|
+
selectedStyle = _useState0[0],
|
|
91
|
+
setStyle = _useState0[1];
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Handles changes to the selected column for the condition.
|
|
95
|
+
*
|
|
96
|
+
* @param value The name of the new column selected for the condition.
|
|
97
|
+
*/
|
|
59
98
|
var handleColumnChange = useCallback(value => {
|
|
60
99
|
var newColumn = columns.find(_ref => {
|
|
61
100
|
var name = _ref.name;
|
|
@@ -71,15 +110,42 @@ function ColumnFormatEditor(props) {
|
|
|
71
110
|
log.error("Column ".concat(value, " not found."));
|
|
72
111
|
}
|
|
73
112
|
}, [columns, selectedColumn]);
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Handles changes to the selected columns for formatting. Updates the list of selected formatted columns based on the provided keys.
|
|
116
|
+
*
|
|
117
|
+
* @param keys The keys of the columns selected for formatting.
|
|
118
|
+
*/
|
|
119
|
+
var handleFormattedColumnsChange = useCallback(keys => {
|
|
120
|
+
if (keys === 'all') return;
|
|
121
|
+
var newCols = [...keys].map(key => columns.find(c => c.name === String(key))).filter(c => c !== undefined);
|
|
122
|
+
// Empty array reverts to tracking the condition column
|
|
123
|
+
setCustomFormattedColumns(newCols);
|
|
124
|
+
}, [columns]);
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Handles changes to the condition configuration. Updates the condition configuration and validity state based on the provided values.
|
|
128
|
+
*
|
|
129
|
+
* @param updatedConditionConfig The new condition configuration.
|
|
130
|
+
* @param isValid Whether the new condition configuration is valid.
|
|
131
|
+
*/
|
|
74
132
|
var handleConditionChange = useCallback((updatedConditionConfig, isValid) => {
|
|
75
133
|
log.debug('handleConditionChange', updatedConditionConfig, isValid);
|
|
76
134
|
setConditionConfig(updatedConditionConfig);
|
|
77
135
|
setConditionValid(isValid);
|
|
78
136
|
}, []);
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Handles changes to the style configuration. Updates the selected style based on the provided style configuration.
|
|
140
|
+
*
|
|
141
|
+
* @param updatedStyleConfig The new style configuration.
|
|
142
|
+
*/
|
|
79
143
|
var handleStyleChange = useCallback(updatedStyleConfig => {
|
|
80
144
|
log.debug('handleStyleChange', updatedStyleConfig);
|
|
81
145
|
setStyle(updatedStyleConfig);
|
|
82
146
|
}, []);
|
|
147
|
+
|
|
148
|
+
// Update the parent component with the current rule configuration whenever any of the relevant state variables change.
|
|
83
149
|
useEffect(function updateColumnFormat() {
|
|
84
150
|
var isValid = conditionValid;
|
|
85
151
|
if (selectedColumn === undefined) {
|
|
@@ -92,19 +158,28 @@ function ColumnFormatEditor(props) {
|
|
|
92
158
|
}
|
|
93
159
|
var type = selectedColumn.type,
|
|
94
160
|
name = selectedColumn.name;
|
|
95
|
-
var
|
|
161
|
+
var leftHandValue = {
|
|
96
162
|
type,
|
|
97
163
|
name
|
|
98
164
|
};
|
|
99
165
|
onChange(_objectSpread({
|
|
100
|
-
|
|
166
|
+
leftHandValue,
|
|
167
|
+
formattedColumns: selectedFormattedColumns.map(_ref2 => {
|
|
168
|
+
var colType = _ref2.type,
|
|
169
|
+
colName = _ref2.name;
|
|
170
|
+
return {
|
|
171
|
+
type: colType,
|
|
172
|
+
name: colName
|
|
173
|
+
};
|
|
174
|
+
}),
|
|
101
175
|
style: selectedStyle
|
|
102
176
|
}, conditionConfig), isValid);
|
|
103
|
-
}, [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]);
|
|
104
|
-
var columnNames = useMemo(() => columns.map(
|
|
105
|
-
var name =
|
|
177
|
+
}, [onChange, selectedColumn, selectedFormattedColumns, selectedStyle, conditionConfig, conditionValid]);
|
|
178
|
+
var columnNames = useMemo(() => columns.map(_ref3 => {
|
|
179
|
+
var name = _ref3.name;
|
|
106
180
|
return name;
|
|
107
181
|
}), [columns]);
|
|
182
|
+
var selectedFormattedColumnKeys = useMemo(() => selectedFormattedColumns.map(c => c.name), [selectedFormattedColumns]);
|
|
108
183
|
return /*#__PURE__*/_jsxs("div", {
|
|
109
184
|
className: "conditional-rule-editor form",
|
|
110
185
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
@@ -122,14 +197,27 @@ function ColumnFormatEditor(props) {
|
|
|
122
197
|
children: [/*#__PURE__*/_jsx(ConditionEditor, {
|
|
123
198
|
dh: dh,
|
|
124
199
|
column: selectedColumn,
|
|
200
|
+
columns: columns,
|
|
125
201
|
config: conditionConfig,
|
|
126
202
|
onChange: handleConditionChange
|
|
127
203
|
}), /*#__PURE__*/_jsx(StyleEditor, {
|
|
128
204
|
config: selectedStyle,
|
|
129
205
|
onChange: handleStyleChange
|
|
130
206
|
})]
|
|
207
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
208
|
+
className: "mb-2",
|
|
209
|
+
children: [/*#__PURE__*/_jsx("label", {
|
|
210
|
+
className: "mb-0 mt-1",
|
|
211
|
+
children: "Apply to Columns"
|
|
212
|
+
}), /*#__PURE__*/_jsx(MultiSelect, {
|
|
213
|
+
"aria-label": "Select columns to apply formatting to",
|
|
214
|
+
width: "100%",
|
|
215
|
+
selectedKeys: selectedFormattedColumnKeys,
|
|
216
|
+
onChange: handleFormattedColumnsChange,
|
|
217
|
+
children: columnNames
|
|
218
|
+
})]
|
|
131
219
|
})]
|
|
132
220
|
});
|
|
133
221
|
}
|
|
134
|
-
export default
|
|
135
|
-
//# sourceMappingURL=
|
|
222
|
+
export default MultiColumnFormatEditor;
|
|
223
|
+
//# sourceMappingURL=MultiColumnFormatEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiColumnFormatEditor.js","names":["React","useCallback","useEffect","useMemo","useState","Log","ComboBox","MultiSelect","getDefaultConditionConfigForType","getConditionConfig","getDefaultStyleConfig","FormatStyleType","ConditionEditor","StyleEditor","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","DEFAULT_CALLBACK","undefined","makeDefaultConfig","columns","_columns$","type","name","leftHandValue","config","_objectSpread","formattedColumns","style","MultiColumnFormatEditor","props","_columns$find","_props$config","dh","_props$onChange","onChange","_useState","find","c","_useState2","_slicedToArray","selectedColumn","setColumn","_useState3","isCustom","length","map","col","_columns$find2","_useState4","customFormattedColumns","setCustomFormattedColumns","selectedFormattedColumns","_useState5","_useState6","conditionConfig","setConditionConfig","_useState7","_useState8","conditionValid","setConditionValid","_useState9","_useState0","selectedStyle","setStyle","handleColumnChange","value","newColumn","_ref","error","concat","handleFormattedColumnsChange","keys","newCols","key","String","filter","handleConditionChange","updatedConditionConfig","isValid","debug","handleStyleChange","updatedStyleConfig","updateColumnFormat","NO_FORMATTING","_ref2","colType","colName","columnNames","_ref3","selectedFormattedColumnKeys","className","children","defaultSelectedKey","column","width","selectedKeys"],"sources":["../../../src/sidebar/conditional-formatting/MultiColumnFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport {\n ComboBox,\n type ItemKey,\n type ItemSelection,\n MultiSelect,\n} from '@deephaven/components';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type BaseFormatConfig,\n type ChangeCallback,\n getDefaultConditionConfigForType,\n getConditionConfig,\n getDefaultStyleConfig,\n type ModelColumn,\n FormatStyleType,\n type ConditionConfig,\n type FormatStyleConfig,\n} from './ConditionalFormattingUtils';\nimport ConditionEditor from './ConditionEditor';\nimport StyleEditor from './StyleEditor';\n\nconst log = Log.module('MultiColumnFormatEditor');\n\nexport interface MultiColumnFormatEditorProps {\n columns: ModelColumn[];\n config?: BaseFormatConfig;\n dh: typeof DhType;\n onChange?: ChangeCallback;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nfunction makeDefaultConfig(columns: ModelColumn[]): BaseFormatConfig {\n const { type, name } = columns[0];\n const leftHandValue = { type, name };\n const config = {\n leftHandValue,\n formattedColumns: [] as ModelColumn[],\n style: getDefaultStyleConfig(),\n ...getDefaultConditionConfigForType(type),\n };\n return config;\n}\n\n/**\n * Multi-column format editor component. Allows users to select multiple columns to apply formatting to,\n * specify a condition for formatting, and choose a style for the formatting.\n *\n * @param props The props for the component.\n * @returns The JSX element for the multi-column format editor.\n */\nfunction MultiColumnFormatEditor(\n props: MultiColumnFormatEditorProps\n): JSX.Element {\n const {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK,\n } = props;\n\n // The left-hand value column selected for the condition. This is the column that will be evaluated against the specified condition.\n const [selectedColumn, setColumn] = useState(\n columns.find(\n c =>\n c.name === config.leftHandValue.name &&\n c.type === config.leftHandValue.type\n ) ?? columns[0]\n );\n\n // customFormattedColumns holds an explicit column selection when non-empty.\n // An empty array means \"track the condition column\" (selectedFormattedColumns\n // will mirror [selectedColumn] automatically).\n const [customFormattedColumns, setCustomFormattedColumns] = useState<\n ModelColumn[]\n >(() => {\n const { formattedColumns, leftHandValue } = config;\n const isCustom =\n formattedColumns.length > 1 ||\n (formattedColumns.length === 1 &&\n formattedColumns[0].name !== leftHandValue.name);\n if (!isCustom) return [];\n return formattedColumns.map(\n col =>\n columns.find(c => c.name === col.name && c.type === col.type) ??\n columns[0]\n );\n });\n const selectedFormattedColumns = useMemo(\n () =>\n customFormattedColumns.length > 0\n ? customFormattedColumns\n : [selectedColumn],\n [customFormattedColumns, selectedColumn]\n );\n\n // The condition configuration for the formatting rule. This includes the condition type and any associated values.\n const [conditionConfig, setConditionConfig] = useState(\n getConditionConfig(config)\n );\n // Whether the current condition configuration is valid. This is used to determine if the rule can be applied.\n const [conditionValid, setConditionValid] = useState(false);\n // The style configuration for the formatting rule. This includes the style type and any associated style properties.\n const [selectedStyle, setStyle] = useState(config.style);\n\n /**\n * Handles changes to the selected column for the condition.\n *\n * @param value The name of the new column selected for the condition.\n */\n const handleColumnChange = useCallback(\n (value: ItemKey | null) => {\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 /**\n * Handles changes to the selected columns for formatting. Updates the list of selected formatted columns based on the provided keys.\n *\n * @param keys The keys of the columns selected for formatting.\n */\n const handleFormattedColumnsChange = useCallback(\n (keys: ItemSelection) => {\n if (keys === 'all') return;\n const newCols = [...keys]\n .map(key => columns.find(c => c.name === String(key)))\n .filter((c): c is ModelColumn => c !== undefined);\n // Empty array reverts to tracking the condition column\n setCustomFormattedColumns(newCols);\n },\n [columns]\n );\n\n /**\n * Handles changes to the condition configuration. Updates the condition configuration and validity state based on the provided values.\n *\n * @param updatedConditionConfig The new condition configuration.\n * @param isValid Whether the new condition configuration is valid.\n */\n const handleConditionChange = useCallback(\n (updatedConditionConfig: ConditionConfig, isValid: boolean) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n },\n []\n );\n\n /**\n * Handles changes to the style configuration. Updates the selected style based on the provided style configuration.\n *\n * @param updatedStyleConfig The new style configuration.\n */\n const handleStyleChange = useCallback(\n (updatedStyleConfig: FormatStyleConfig) => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n },\n []\n );\n\n // Update the parent component with the current rule configuration whenever any of the relevant state variables change.\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 leftHandValue = { type, name };\n onChange(\n {\n leftHandValue,\n formattedColumns: selectedFormattedColumns.map(\n ({ type: colType, name: colName }) => ({\n type: colType,\n name: colName,\n })\n ),\n style: selectedStyle,\n ...conditionConfig,\n },\n isValid\n );\n },\n [\n onChange,\n selectedColumn,\n selectedFormattedColumns,\n selectedStyle,\n conditionConfig,\n conditionValid,\n ]\n );\n\n const columnNames = useMemo(() => columns.map(({ name }) => name), [columns]);\n\n const selectedFormattedColumnKeys = useMemo(\n () => selectedFormattedColumns.map(c => c.name),\n [selectedFormattedColumns]\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 aria-label=\"Select column to format\"\n defaultSelectedKey={selectedColumn?.name}\n onChange={handleColumnChange}\n >\n {columnNames}\n </ComboBox>\n </div>\n\n {selectedColumn !== undefined && (\n <>\n <ConditionEditor\n dh={dh}\n column={selectedColumn}\n columns={columns}\n config={conditionConfig}\n onChange={handleConditionChange}\n />\n <StyleEditor config={selectedStyle} onChange={handleStyleChange} />\n </>\n )}\n\n <div className=\"mb-2\">\n <label className=\"mb-0 mt-1\">Apply to Columns</label>\n <MultiSelect\n aria-label=\"Select columns to apply formatting to\"\n width=\"100%\"\n selectedKeys={selectedFormattedColumnKeys}\n onChange={handleFormattedColumnsChange}\n >\n {columnNames}\n </MultiSelect>\n </div>\n </div>\n );\n}\n\nexport default MultiColumnFormatEditor;\n"],"mappings":";;;;;;;;;;;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AACxE,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SACEC,QAAQ,EAGRC,WAAW,QACN,uBAAuB;AAAC,SAK7BC,gCAAgC,EAChCC,kBAAkB,EAClBC,qBAAqB,EAErBC,eAAe;AAAA,OAIVC,eAAe;AAAA,OACfC,WAAW;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAElB,IAAMC,GAAG,GAAGf,GAAG,CAACgB,MAAM,CAAC,yBAAyB,CAAC;AASjD,IAAMC,gBAAgB,GAAGA,CAAA,KAAYC,SAAS;AAE9C,SAASC,iBAAiBA,CAACC,OAAsB,EAAoB;EACnE,IAAAC,SAAA,GAAuBD,OAAO,CAAC,CAAC,CAAC;IAAzBE,IAAI,GAAAD,SAAA,CAAJC,IAAI;IAAEC,IAAI,GAAAF,SAAA,CAAJE,IAAI;EAClB,IAAMC,aAAa,GAAG;IAAEF,IAAI;IAAEC;EAAK,CAAC;EACpC,IAAME,MAAM,GAAAC,aAAA;IACVF,aAAa;IACbG,gBAAgB,EAAE,EAAmB;IACrCC,KAAK,EAAEvB,qBAAqB,CAAC;EAAC,GAC3BF,gCAAgC,CAACmB,IAAI,CAAC,CAC1C;EACD,OAAOG,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASI,uBAAuBA,CAC9BC,KAAmC,EACtB;EAAA,IAAAC,aAAA;EACb,IACEX,OAAO,GAILU,KAAK,CAJPV,OAAO;IAAAY,aAAA,GAILF,KAAK,CAHPL,MAAM;IAANA,MAAM,GAAAO,aAAA,cAAGb,iBAAiB,CAACC,OAAO,CAAC,GAAAY,aAAA;IACnCC,EAAE,GAEAH,KAAK,CAFPG,EAAE;IAAAC,eAAA,GAEAJ,KAAK,CADPK,QAAQ;IAARA,QAAQ,GAAAD,eAAA,cAAGjB,gBAAgB,GAAAiB,eAAA;;EAG7B;EACA,IAAAE,SAAA,GAAoCrC,QAAQ,EAAAgC,aAAA,GAC1CX,OAAO,CAACiB,IAAI,CACVC,CAAC,IACCA,CAAC,CAACf,IAAI,KAAKE,MAAM,CAACD,aAAa,CAACD,IAAI,IACpCe,CAAC,CAAChB,IAAI,KAAKG,MAAM,CAACD,aAAa,CAACF,IACpC,CAAC,cAAAS,aAAA,cAAAA,aAAA,GAAIX,OAAO,CAAC,CAAC,CAChB,CAAC;IAAAmB,UAAA,GAAAC,cAAA,CAAAJ,SAAA;IANMK,cAAc,GAAAF,UAAA;IAAEG,SAAS,GAAAH,UAAA;;EAQhC;EACA;EACA;EACA,IAAAI,UAAA,GAA4D5C,QAAQ,CAElE,MAAM;MACN,IAAQ4B,gBAAgB,GAAoBF,MAAM,CAA1CE,gBAAgB;QAAEH,aAAa,GAAKC,MAAM,CAAxBD,aAAa;MACvC,IAAMoB,QAAQ,GACZjB,gBAAgB,CAACkB,MAAM,GAAG,CAAC,IAC1BlB,gBAAgB,CAACkB,MAAM,KAAK,CAAC,IAC5BlB,gBAAgB,CAAC,CAAC,CAAC,CAACJ,IAAI,KAAKC,aAAa,CAACD,IAAK;MACpD,IAAI,CAACqB,QAAQ,EAAE,OAAO,EAAE;MACxB,OAAOjB,gBAAgB,CAACmB,GAAG,CACzBC,GAAG;QAAA,IAAAC,cAAA;QAAA,QAAAA,cAAA,GACD5B,OAAO,CAACiB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACf,IAAI,KAAKwB,GAAG,CAACxB,IAAI,IAAIe,CAAC,CAAChB,IAAI,KAAKyB,GAAG,CAACzB,IAAI,CAAC,cAAA0B,cAAA,cAAAA,cAAA,GAC7D5B,OAAO,CAAC,CAAC,CAAC;MAAA,CACd,CAAC;IACH,CAAC,CAAC;IAAA6B,UAAA,GAAAT,cAAA,CAAAG,UAAA;IAdKO,sBAAsB,GAAAD,UAAA;IAAEE,yBAAyB,GAAAF,UAAA;EAexD,IAAMG,wBAAwB,GAAGtD,OAAO,CACtC,MACEoD,sBAAsB,CAACL,MAAM,GAAG,CAAC,GAC7BK,sBAAsB,GACtB,CAACT,cAAc,CAAC,EACtB,CAACS,sBAAsB,EAAET,cAAc,CACzC,CAAC;;EAED;EACA,IAAAY,UAAA,GAA8CtD,QAAQ,CACpDK,kBAAkB,CAACqB,MAAM,CAC3B,CAAC;IAAA6B,UAAA,GAAAd,cAAA,CAAAa,UAAA;IAFME,eAAe,GAAAD,UAAA;IAAEE,kBAAkB,GAAAF,UAAA;EAG1C;EACA,IAAAG,UAAA,GAA4C1D,QAAQ,CAAC,KAAK,CAAC;IAAA2D,UAAA,GAAAlB,cAAA,CAAAiB,UAAA;IAApDE,cAAc,GAAAD,UAAA;IAAEE,iBAAiB,GAAAF,UAAA;EACxC;EACA,IAAAG,UAAA,GAAkC9D,QAAQ,CAAC0B,MAAM,CAACG,KAAK,CAAC;IAAAkC,UAAA,GAAAtB,cAAA,CAAAqB,UAAA;IAAjDE,aAAa,GAAAD,UAAA;IAAEE,QAAQ,GAAAF,UAAA;;EAE9B;AACF;AACA;AACA;AACA;EACE,IAAMG,kBAAkB,GAAGrE,WAAW,CACnCsE,KAAqB,IAAK;IACzB,IAAMC,SAAS,GAAG/C,OAAO,CAACiB,IAAI,CAAC+B,IAAA;MAAA,IAAG7C,IAAI,GAAA6C,IAAA,CAAJ7C,IAAI;MAAA,OAAOA,IAAI,KAAK2C,KAAK;IAAA,EAAC;IAC5D,IAAIC,SAAS,KAAKjD,SAAS,EAAE;MAC3BwB,SAAS,CAACyB,SAAS,CAAC;MACpB,IAAI1B,cAAc,CAACnB,IAAI,KAAK6C,SAAS,CAAC7C,IAAI,EAAE;QAC1CkC,kBAAkB,CAACrD,gCAAgC,CAACgE,SAAS,CAAC7C,IAAI,CAAC,CAAC;QACpEsC,iBAAiB,CAAC,KAAK,CAAC;MAC1B;IACF,CAAC,MAAM;MACL7C,GAAG,CAACsD,KAAK,WAAAC,MAAA,CAAWJ,KAAK,gBAAa,CAAC;IACzC;EACF,CAAC,EACD,CAAC9C,OAAO,EAAEqB,cAAc,CAC1B,CAAC;;EAED;AACF;AACA;AACA;AACA;EACE,IAAM8B,4BAA4B,GAAG3E,WAAW,CAC7C4E,IAAmB,IAAK;IACvB,IAAIA,IAAI,KAAK,KAAK,EAAE;IACpB,IAAMC,OAAO,GAAG,CAAC,GAAGD,IAAI,CAAC,CACtB1B,GAAG,CAAC4B,GAAG,IAAItD,OAAO,CAACiB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACf,IAAI,KAAKoD,MAAM,CAACD,GAAG,CAAC,CAAC,CAAC,CACrDE,MAAM,CAAEtC,CAAC,IAAuBA,CAAC,KAAKpB,SAAS,CAAC;IACnD;IACAiC,yBAAyB,CAACsB,OAAO,CAAC;EACpC,CAAC,EACD,CAACrD,OAAO,CACV,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;EACE,IAAMyD,qBAAqB,GAAGjF,WAAW,CACvC,CAACkF,sBAAuC,EAAEC,OAAgB,KAAK;IAC7DhE,GAAG,CAACiE,KAAK,CAAC,uBAAuB,EAAEF,sBAAsB,EAAEC,OAAO,CAAC;IACnEvB,kBAAkB,CAACsB,sBAAsB,CAAC;IAC1ClB,iBAAiB,CAACmB,OAAO,CAAC;EAC5B,CAAC,EACD,EACF,CAAC;;EAED;AACF;AACA;AACA;AACA;EACE,IAAME,iBAAiB,GAAGrF,WAAW,CAClCsF,kBAAqC,IAAK;IACzCnE,GAAG,CAACiE,KAAK,CAAC,mBAAmB,EAAEE,kBAAkB,CAAC;IAClDlB,QAAQ,CAACkB,kBAAkB,CAAC;EAC9B,CAAC,EACD,EACF,CAAC;;EAED;EACArF,SAAS,CACP,SAASsF,kBAAkBA,CAAA,EAAG;IAC5B,IAAIJ,OAAO,GAAGpB,cAAc;IAE5B,IAAIlB,cAAc,KAAKvB,SAAS,EAAE;MAChCH,GAAG,CAACiE,KAAK,CAAC,8CAA8C,CAAC;MACzDD,OAAO,GAAG,KAAK;IACjB;IACA,IACEhB,aAAa,KAAK7C,SAAS,IAC3B6C,aAAa,CAACzC,IAAI,KAAKhB,eAAe,CAAC8E,aAAa,EACpD;MACArE,GAAG,CAACiE,KAAK,CAAC,6CAA6C,CAAC;MACxDD,OAAO,GAAG,KAAK;IACjB;IAEA,IAAQzD,IAAI,GAAWmB,cAAc,CAA7BnB,IAAI;MAAEC,IAAI,GAAKkB,cAAc,CAAvBlB,IAAI;IAClB,IAAMC,aAAa,GAAG;MAAEF,IAAI;MAAEC;IAAK,CAAC;IACpCY,QAAQ,CAAAT,aAAA;MAEJF,aAAa;MACbG,gBAAgB,EAAEyB,wBAAwB,CAACN,GAAG,CAC5CuC,KAAA;QAAA,IAASC,OAAO,GAAAD,KAAA,CAAb/D,IAAI;UAAiBiE,OAAO,GAAAF,KAAA,CAAb9D,IAAI;QAAA,OAAiB;UACrCD,IAAI,EAAEgE,OAAO;UACb/D,IAAI,EAAEgE;QACR,CAAC;MAAA,CACH,CAAC;MACD3D,KAAK,EAAEmC;IAAa,GACjBR,eAAe,GAEpBwB,OACF,CAAC;EACH,CAAC,EACD,CACE5C,QAAQ,EACRM,cAAc,EACdW,wBAAwB,EACxBW,aAAa,EACbR,eAAe,EACfI,cAAc,CAElB,CAAC;EAED,IAAM6B,WAAW,GAAG1F,OAAO,CAAC,MAAMsB,OAAO,CAAC0B,GAAG,CAAC2C,KAAA;IAAA,IAAGlE,IAAI,GAAAkE,KAAA,CAAJlE,IAAI;IAAA,OAAOA,IAAI;EAAA,EAAC,EAAE,CAACH,OAAO,CAAC,CAAC;EAE7E,IAAMsE,2BAA2B,GAAG5F,OAAO,CACzC,MAAMsD,wBAAwB,CAACN,GAAG,CAACR,CAAC,IAAIA,CAAC,CAACf,IAAI,CAAC,EAC/C,CAAC6B,wBAAwB,CAC3B,CAAC;EAED,oBACExC,KAAA;IAAK+E,SAAS,EAAC,8BAA8B;IAAAC,QAAA,gBAC3ChF,KAAA;MAAK+E,SAAS,EAAC,MAAM;MAAAC,QAAA,gBACnBlF,IAAA;QAAOiF,SAAS,EAAC,MAAM;QAAAC,QAAA,EAAC;MAAc,CAAO,CAAC,eAC9ClF,IAAA,CAACT,QAAQ;QACP,cAAW,yBAAyB;QACpC4F,kBAAkB,EAAEpD,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAElB,IAAK;QACzCY,QAAQ,EAAE8B,kBAAmB;QAAA2B,QAAA,EAE5BJ;MAAW,CACJ,CAAC;IAAA,CACR,CAAC,EAEL/C,cAAc,KAAKvB,SAAS,iBAC3BN,KAAA,CAAAE,SAAA;MAAA8E,QAAA,gBACElF,IAAA,CAACH,eAAe;QACd0B,EAAE,EAAEA,EAAG;QACP6D,MAAM,EAAErD,cAAe;QACvBrB,OAAO,EAAEA,OAAQ;QACjBK,MAAM,EAAE8B,eAAgB;QACxBpB,QAAQ,EAAE0C;MAAsB,CACjC,CAAC,eACFnE,IAAA,CAACF,WAAW;QAACiB,MAAM,EAAEsC,aAAc;QAAC5B,QAAQ,EAAE8C;MAAkB,CAAE,CAAC;IAAA,CACnE,CACH,eAEDrE,KAAA;MAAK+E,SAAS,EAAC,MAAM;MAAAC,QAAA,gBACnBlF,IAAA;QAAOiF,SAAS,EAAC,WAAW;QAAAC,QAAA,EAAC;MAAgB,CAAO,CAAC,eACrDlF,IAAA,CAACR,WAAW;QACV,cAAW,uCAAuC;QAClD6F,KAAK,EAAC,MAAM;QACZC,YAAY,EAAEN,2BAA4B;QAC1CvD,QAAQ,EAAEoC,4BAA6B;QAAAqB,QAAA,EAEtCJ;MAAW,CACD,CAAC;IAAA,CACX,CAAC;EAAA,CACH,CAAC;AAEV;AAEA,eAAe3D,uBAAuB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowFormatEditor.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/RowFormatEditor.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAInB,KAAK,WAAW,EAGjB,MAAM,8BAA8B,CAAC;AAMtC,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,EAAE,EAAE,OAAO,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"RowFormatEditor.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/RowFormatEditor.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAInB,KAAK,WAAW,EAGjB,MAAM,8BAA8B,CAAC;AAMtC,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,EAAE,EAAE,OAAO,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAgBD,iBAAS,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,GAAG,CAAC,OAAO,CA4GjE;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -22,12 +22,13 @@ function makeDefaultConfig(columns) {
|
|
|
22
22
|
var _columns$ = columns[0],
|
|
23
23
|
type = _columns$.type,
|
|
24
24
|
name = _columns$.name;
|
|
25
|
-
var
|
|
25
|
+
var leftHandValue = {
|
|
26
26
|
type,
|
|
27
27
|
name
|
|
28
28
|
};
|
|
29
29
|
var config = _objectSpread({
|
|
30
|
-
|
|
30
|
+
leftHandValue,
|
|
31
|
+
formattedColumns: [],
|
|
31
32
|
style: getDefaultStyleConfig()
|
|
32
33
|
}, getDefaultConditionConfigForType(type));
|
|
33
34
|
return config;
|
|
@@ -40,7 +41,7 @@ function RowFormatEditor(props) {
|
|
|
40
41
|
dh = props.dh,
|
|
41
42
|
_props$onChange = props.onChange,
|
|
42
43
|
onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange;
|
|
43
|
-
var _useState = useState((_columns$find = columns.find(c => c.name === config.
|
|
44
|
+
var _useState = useState((_columns$find = columns.find(c => c.name === config.leftHandValue.name && c.type === config.leftHandValue.type)) !== null && _columns$find !== void 0 ? _columns$find : columns[0]),
|
|
44
45
|
_useState2 = _slicedToArray(_useState, 2),
|
|
45
46
|
selectedColumn = _useState2[0],
|
|
46
47
|
setColumn = _useState2[1];
|
|
@@ -91,12 +92,13 @@ function RowFormatEditor(props) {
|
|
|
91
92
|
}
|
|
92
93
|
var type = selectedColumn.type,
|
|
93
94
|
name = selectedColumn.name;
|
|
94
|
-
var
|
|
95
|
+
var leftHandValue = {
|
|
95
96
|
type,
|
|
96
97
|
name
|
|
97
98
|
};
|
|
98
99
|
onChange(_objectSpread({
|
|
99
|
-
|
|
100
|
+
leftHandValue,
|
|
101
|
+
formattedColumns: [],
|
|
100
102
|
style: selectedStyle
|
|
101
103
|
}, conditionConfig), conditionValid);
|
|
102
104
|
}, [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]);
|
|
@@ -120,6 +122,7 @@ function RowFormatEditor(props) {
|
|
|
120
122
|
}), selectedColumn !== undefined && /*#__PURE__*/_jsxs(_Fragment, {
|
|
121
123
|
children: [/*#__PURE__*/_jsx(ConditionEditor, {
|
|
122
124
|
column: selectedColumn,
|
|
125
|
+
columns: columns,
|
|
123
126
|
config: conditionConfig,
|
|
124
127
|
dh: dh,
|
|
125
128
|
onChange: handleConditionChange
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowFormatEditor.js","names":["React","useCallback","useEffect","useMemo","useState","Log","ComboBox","getDefaultConditionConfigForType","getConditionConfig","getDefaultStyleConfig","ConditionEditor","StyleEditor","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","DEFAULT_CALLBACK","undefined","makeDefaultConfig","columns","_columns$","type","name","
|
|
1
|
+
{"version":3,"file":"RowFormatEditor.js","names":["React","useCallback","useEffect","useMemo","useState","Log","ComboBox","getDefaultConditionConfigForType","getConditionConfig","getDefaultStyleConfig","ConditionEditor","StyleEditor","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","DEFAULT_CALLBACK","undefined","makeDefaultConfig","columns","_columns$","type","name","leftHandValue","config","_objectSpread","formattedColumns","style","RowFormatEditor","props","_columns$find","_props$config","dh","_props$onChange","onChange","_useState","find","c","_useState2","_slicedToArray","selectedColumn","setColumn","_useState3","_useState4","conditionConfig","setConditionConfig","_useState5","_useState6","conditionValid","setConditionValid","_useState7","_useState8","selectedStyle","setStyle","handleColumnChange","value","newColumn","_ref","error","concat","handleConditionChange","updatedConditionConfig","isValid","debug","handleStyleChange","updatedStyleConfig","updateRowFormat","columnNames","map","_ref2","className","children","defaultSelectedKey","column"],"sources":["../../../src/sidebar/conditional-formatting/RowFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { ItemKey } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { ComboBox } from '@deephaven/components';\nimport {\n type BaseFormatConfig,\n type ChangeCallback,\n getDefaultConditionConfigForType,\n getConditionConfig,\n getDefaultStyleConfig,\n type ModelColumn,\n type ConditionConfig,\n type FormatStyleConfig,\n} from './ConditionalFormattingUtils';\nimport ConditionEditor from './ConditionEditor';\nimport StyleEditor from './StyleEditor';\n\nconst log = Log.module('RowFormatEditor');\n\nexport interface RowFormatEditorProps {\n columns: ModelColumn[];\n config?: BaseFormatConfig;\n dh: typeof DhType;\n onChange?: ChangeCallback;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nfunction makeDefaultConfig(columns: ModelColumn[]): BaseFormatConfig {\n const { type, name } = columns[0];\n const leftHandValue = { type, name };\n const config = {\n leftHandValue,\n formattedColumns: [] as ModelColumn[],\n style: getDefaultStyleConfig(),\n ...getDefaultConditionConfigForType(type),\n };\n return config;\n}\n\nfunction RowFormatEditor(props: RowFormatEditorProps): 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 =>\n c.name === config.leftHandValue.name &&\n c.type === config.leftHandValue.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: ItemKey | null) => {\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: ConditionConfig, isValid: boolean) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n },\n []\n );\n\n const handleStyleChange = useCallback(\n (updatedStyleConfig: FormatStyleConfig) => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n },\n []\n );\n\n useEffect(\n function updateRowFormat() {\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, skip update.');\n return;\n }\n if (selectedStyle === undefined) {\n log.debug('Style is not selected, skip update.');\n return;\n }\n const { type, name } = selectedColumn;\n const leftHandValue = { type, name };\n onChange(\n {\n leftHandValue,\n formattedColumns: [],\n style: selectedStyle,\n ...conditionConfig,\n },\n conditionValid\n );\n },\n [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]\n );\n\n const columnNames = useMemo(() => columns.map(({ name }) => name), [columns]);\n\n return (\n <div className=\"conditional-rule-editor form\">\n <div className=\"mb-2\">\n <label className=\"mb-0\">Format Row If</label>\n <ComboBox\n aria-label=\"Select column to format row by\"\n defaultSelectedKey={selectedColumn?.name}\n onChange={handleColumnChange}\n >\n {columnNames}\n </ComboBox>\n </div>\n\n {selectedColumn !== undefined && (\n <>\n <ConditionEditor\n column={selectedColumn}\n columns={columns}\n config={conditionConfig}\n dh={dh}\n onChange={handleConditionChange}\n />\n <StyleEditor config={selectedStyle} onChange={handleStyleChange} />\n </>\n )}\n </div>\n );\n}\n\nexport default RowFormatEditor;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StyleEditor.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","FontAwesomeIcon","Log","ColorUtils","vsCheck","Button","DropdownMenu","FormatStyleType","getLabelForStyleType","getBackgroundForStyleConfig","getColorForStyleConfig","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_BACKGROUND","DEFAULT_COLOR_LIGHT","DEFAULT_COLOR_DARK","DEFAULT_DROPDOWN_WIDTH","DEFAULT_CALLBACK","undefined","StyleEditor","props","_config$customConfig$","_config$customConfig","config","_props$onChange","onChange","_useState","type","_useState2","_slicedToArray","styleType","setStyleType","_useState3","customConfig","background","_useState4","setBackground","_useState5","_useState6","isShown","setShown","_useState7","_useState8","dropdownWidth","setDropdownWidth","csContainer","handleBackgroundChange","e","value","target","debug","handleMenuClosed","handleToggleClick","updateDropdownWidth","styleOptions","NO_FORMATTING","POSITIVE","NEGATIVE","WARN","NEUTRAL","ACCENT_1","ACCENT_2","CUSTOM","current","getBoundingClientRect","width","updateTheme","color","isDark","renderOptions","matchFound","optionArray","_loop","option","index","key","concat","push","kind","className","onClick","style","children","icon","length","renderMenuElement","role","ref","actions","menuElement","popperOptions","placement","popperClassName","onMenuClosed","menuStyle","maxWidth"],"sources":["../../../src/sidebar/conditional-formatting/StyleEditor.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Log from '@deephaven/log';\nimport { ColorUtils } from '@deephaven/utils';\nimport { vsCheck } from '@deephaven/icons';\nimport { Button, DropdownMenu } from '@deephaven/components';\nimport {\n FormatStyleType,\n getLabelForStyleType,\n type FormatStyleConfig,\n getBackgroundForStyleConfig,\n getColorForStyleConfig,\n} from './ConditionalFormattingUtils';\n\nimport './StyleEditor.scss';\n\nconst log = Log.module('StyleEditor');\n\nconst DEFAULT_BACKGROUND = '#fcfcfa';\n\nconst DEFAULT_COLOR_LIGHT = '#f0f0ee';\n\nconst DEFAULT_COLOR_DARK = '#1a171a';\n\nconst DEFAULT_DROPDOWN_WIDTH = 200;\n\nexport interface ConditionEditorProps {\n config: FormatStyleConfig;\n onChange?: (config: FormatStyleConfig) => void;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nfunction StyleEditor(props: ConditionEditorProps): JSX.Element {\n const { config, onChange = DEFAULT_CALLBACK } = props;\n const [styleType, setStyleType] = useState(config.type);\n const [background, setBackground] = useState(\n config.customConfig?.background ?? DEFAULT_BACKGROUND\n );\n const [isShown, setShown] = useState(false);\n const [dropdownWidth, setDropdownWidth] = useState(DEFAULT_DROPDOWN_WIDTH);\n const csContainer = useRef<HTMLDivElement>(null);\n\n const handleBackgroundChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n log.debug('handleBackgroundChange', value);\n setBackground(value);\n },\n []\n );\n\n const handleMenuClosed = useCallback(() => {\n if (isShown) {\n setShown(false);\n }\n }, [isShown]);\n\n const handleToggleClick = useCallback(() => {\n if (!isShown) {\n updateDropdownWidth();\n }\n setShown(!isShown);\n }, [isShown]);\n\n const styleOptions = useMemo(\n () => [\n FormatStyleType.NO_FORMATTING,\n FormatStyleType.POSITIVE,\n FormatStyleType.NEGATIVE,\n FormatStyleType.WARN,\n FormatStyleType.NEUTRAL,\n FormatStyleType.ACCENT_1,\n FormatStyleType.ACCENT_2,\n FormatStyleType.CUSTOM,\n ],\n []\n );\n\n function updateDropdownWidth(): void {\n if (csContainer.current) {\n setDropdownWidth(csContainer.current.getBoundingClientRect().width);\n }\n }\n\n useEffect(\n function updateTheme() {\n onChange({\n type: styleType,\n customConfig: {\n color: ColorUtils.isDark(background)\n ? DEFAULT_COLOR_LIGHT\n : DEFAULT_COLOR_DARK,\n background,\n },\n });\n },\n [onChange, styleType, background]\n );\n\n const renderOptions = useCallback(() => {\n let matchFound = false;\n const optionArray: JSX.Element[] = [];\n for (let index = 0; index < styleOptions.length; index += 1) {\n const option = styleOptions[index];\n const key = `option-${index}-${option}`;\n matchFound = matchFound || option === styleType;\n optionArray.push(\n <Button\n key={key}\n kind=\"inline\"\n className=\"style-option-btn\"\n onClick={() => {\n setStyleType(option);\n setShown(false);\n }}\n style={{\n color: getColorForStyleConfig({ type: option }),\n background: getBackgroundForStyleConfig({ type: option }),\n }}\n >\n {option === styleType && (\n <FontAwesomeIcon icon={vsCheck} className=\"mr-2\" />\n )}\n {option !== styleType && <span className=\"mr-4\" />}\n {getLabelForStyleType(option)}\n </Button>\n );\n }\n return optionArray;\n }, [styleOptions, styleType]);\n\n const renderMenuElement = useCallback(\n () => (\n <div\n className=\"style-menu-container\"\n role=\"presentation\"\n style={{ width: dropdownWidth }}\n >\n <div className=\"style-options\">{renderOptions()}</div>\n </div>\n ),\n [dropdownWidth, renderOptions]\n );\n\n return (\n <div className=\"style-editor\">\n <div className=\"mb-2\" ref={csContainer}>\n <label className=\"mb-0\">Style</label>\n <Button\n kind=\"inline\"\n className=\"cs-dropdown custom-select\"\n style={{\n color: getColorForStyleConfig({ type: styleType }),\n background: getBackgroundForStyleConfig({ type: styleType }),\n }}\n onClick={handleToggleClick}\n >\n {getLabelForStyleType(styleType)}\n\n <DropdownMenu\n isShown={isShown}\n actions={{ menuElement: renderMenuElement() }}\n popperOptions={{ placement: 'bottom-start' }}\n popperClassName=\"style-dropdown-menu\"\n onMenuClosed={handleMenuClosed}\n menuStyle={{ maxWidth: '100rem' }}\n />\n </Button>\n </div>\n\n {styleType === FormatStyleType.CUSTOM && (\n <div className=\"mb-2\">\n <label className=\"mb-0\">Background</label>\n <input\n type=\"color\"\n value={background}\n className=\"custom-select color-select\"\n onChange={handleBackgroundChange}\n />\n </div>\n )}\n </div>\n );\n}\n\nexport default StyleEditor;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"StyleEditor.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","FontAwesomeIcon","Log","ColorUtils","vsCheck","Button","DropdownMenu","FormatStyleType","getLabelForStyleType","getBackgroundForStyleConfig","getColorForStyleConfig","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_BACKGROUND","DEFAULT_COLOR_LIGHT","DEFAULT_COLOR_DARK","DEFAULT_DROPDOWN_WIDTH","DEFAULT_CALLBACK","undefined","StyleEditor","props","_config$customConfig$","_config$customConfig","config","_props$onChange","onChange","_useState","type","_useState2","_slicedToArray","styleType","setStyleType","_useState3","customConfig","background","_useState4","setBackground","_useState5","_useState6","isShown","setShown","_useState7","_useState8","dropdownWidth","setDropdownWidth","csContainer","handleBackgroundChange","e","value","target","debug","handleMenuClosed","handleToggleClick","updateDropdownWidth","styleOptions","NO_FORMATTING","POSITIVE","NEGATIVE","WARN","NEUTRAL","ACCENT_1","ACCENT_2","CUSTOM","current","getBoundingClientRect","width","updateTheme","color","isDark","renderOptions","matchFound","optionArray","_loop","option","index","key","concat","push","kind","className","onClick","style","children","icon","length","renderMenuElement","role","ref","actions","menuElement","popperOptions","placement","popperClassName","onMenuClosed","menuStyle","maxWidth"],"sources":["../../../src/sidebar/conditional-formatting/StyleEditor.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Log from '@deephaven/log';\nimport { ColorUtils } from '@deephaven/utils';\nimport { vsCheck } from '@deephaven/icons';\nimport { Button, DropdownMenu } from '@deephaven/components';\nimport {\n FormatStyleType,\n getLabelForStyleType,\n type FormatStyleConfig,\n getBackgroundForStyleConfig,\n getColorForStyleConfig,\n} from './ConditionalFormattingUtils';\n\nimport './StyleEditor.scss';\n\nconst log = Log.module('StyleEditor');\n\nconst DEFAULT_BACKGROUND = '#fcfcfa';\n\nconst DEFAULT_COLOR_LIGHT = '#f0f0ee';\n\nconst DEFAULT_COLOR_DARK = '#1a171a';\n\nconst DEFAULT_DROPDOWN_WIDTH = 200;\n\nexport interface ConditionEditorProps {\n config: FormatStyleConfig;\n onChange?: (config: FormatStyleConfig) => void;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nfunction StyleEditor(props: ConditionEditorProps): JSX.Element {\n const { config, onChange = DEFAULT_CALLBACK } = props;\n const [styleType, setStyleType] = useState(config.type);\n const [background, setBackground] = useState(\n config.customConfig?.background ?? DEFAULT_BACKGROUND\n );\n const [isShown, setShown] = useState(false);\n const [dropdownWidth, setDropdownWidth] = useState(DEFAULT_DROPDOWN_WIDTH);\n const csContainer = useRef<HTMLDivElement>(null);\n\n const handleBackgroundChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n log.debug('handleBackgroundChange', value);\n setBackground(value);\n },\n []\n );\n\n const handleMenuClosed = useCallback(() => {\n if (isShown) {\n setShown(false);\n }\n }, [isShown]);\n\n const handleToggleClick = useCallback(() => {\n if (!isShown) {\n updateDropdownWidth();\n }\n setShown(!isShown);\n }, [isShown]);\n\n const styleOptions = useMemo(\n () => [\n FormatStyleType.NO_FORMATTING,\n FormatStyleType.POSITIVE,\n FormatStyleType.NEGATIVE,\n FormatStyleType.WARN,\n FormatStyleType.NEUTRAL,\n FormatStyleType.ACCENT_1,\n FormatStyleType.ACCENT_2,\n FormatStyleType.CUSTOM,\n ],\n []\n );\n\n function updateDropdownWidth(): void {\n if (csContainer.current) {\n setDropdownWidth(csContainer.current.getBoundingClientRect().width);\n }\n }\n\n useEffect(\n function updateTheme() {\n onChange({\n type: styleType,\n customConfig: {\n color: ColorUtils.isDark(background)\n ? DEFAULT_COLOR_LIGHT\n : DEFAULT_COLOR_DARK,\n background,\n },\n });\n },\n [onChange, styleType, background]\n );\n\n const renderOptions = useCallback(() => {\n let matchFound = false;\n const optionArray: JSX.Element[] = [];\n for (let index = 0; index < styleOptions.length; index += 1) {\n const option = styleOptions[index];\n const key = `option-${index}-${option}`;\n matchFound = matchFound || option === styleType;\n optionArray.push(\n <Button\n key={key}\n kind=\"inline\"\n className=\"style-option-btn\"\n onClick={() => {\n setStyleType(option);\n setShown(false);\n }}\n style={{\n color: getColorForStyleConfig({ type: option }),\n background: getBackgroundForStyleConfig({ type: option }),\n }}\n >\n {option === styleType && (\n <FontAwesomeIcon icon={vsCheck} className=\"mr-2\" />\n )}\n {option !== styleType && <span className=\"mr-4\" />}\n {getLabelForStyleType(option)}\n </Button>\n );\n }\n return optionArray;\n }, [styleOptions, styleType]);\n\n const renderMenuElement = useCallback(\n () => (\n <div\n className=\"style-menu-container\"\n role=\"presentation\"\n style={{ width: dropdownWidth }}\n >\n <div className=\"style-options\">{renderOptions()}</div>\n </div>\n ),\n [dropdownWidth, renderOptions]\n );\n\n return (\n <div className=\"style-editor\">\n <div className=\"mb-2\" ref={csContainer}>\n <label className=\"mb-0 mt-1\">Style</label>\n <Button\n kind=\"inline\"\n className=\"cs-dropdown custom-select\"\n style={{\n color: getColorForStyleConfig({ type: styleType }),\n background: getBackgroundForStyleConfig({ type: styleType }),\n }}\n onClick={handleToggleClick}\n >\n {getLabelForStyleType(styleType)}\n\n <DropdownMenu\n isShown={isShown}\n actions={{ menuElement: renderMenuElement() }}\n popperOptions={{ placement: 'bottom-start' }}\n popperClassName=\"style-dropdown-menu\"\n onMenuClosed={handleMenuClosed}\n menuStyle={{ maxWidth: '100rem' }}\n />\n </Button>\n </div>\n\n {styleType === FormatStyleType.CUSTOM && (\n <div className=\"mb-2\">\n <label className=\"mb-0\">Background</label>\n <input\n type=\"color\"\n value={background}\n className=\"custom-select color-select\"\n onChange={handleBackgroundChange}\n />\n </div>\n )}\n </div>\n );\n}\n\nexport default StyleEditor;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/iris-grid",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.27.0",
|
|
4
4
|
"description": "Deephaven Iris Grid",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@deephaven/components": "^1.
|
|
35
|
-
"@deephaven/console": "^1.
|
|
34
|
+
"@deephaven/components": "^1.27.0",
|
|
35
|
+
"@deephaven/console": "^1.27.0",
|
|
36
36
|
"@deephaven/filters": "^1.1.0",
|
|
37
37
|
"@deephaven/grid": "^1.25.0",
|
|
38
38
|
"@deephaven/icons": "^1.2.0",
|
|
39
|
-
"@deephaven/jsapi-components": "^1.
|
|
39
|
+
"@deephaven/jsapi-components": "^1.27.0",
|
|
40
40
|
"@deephaven/jsapi-types": "^1.0.0-dev0.40.4",
|
|
41
41
|
"@deephaven/jsapi-utils": "^1.23.0",
|
|
42
42
|
"@deephaven/log": "^1.8.0",
|
|
@@ -81,5 +81,5 @@
|
|
|
81
81
|
"publishConfig": {
|
|
82
82
|
"access": "public"
|
|
83
83
|
},
|
|
84
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "29750deaabe9cf1ed370e04522732a5b1eb61522"
|
|
85
85
|
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { dh as DhType } from '@deephaven/jsapi-types';
|
|
2
|
-
import { type BaseFormatConfig, type ChangeCallback, type ModelColumn } from './ConditionalFormattingUtils';
|
|
3
|
-
export interface ColumnFormatEditorProps {
|
|
4
|
-
columns: ModelColumn[];
|
|
5
|
-
config?: BaseFormatConfig;
|
|
6
|
-
dh: typeof DhType;
|
|
7
|
-
onChange?: ChangeCallback;
|
|
8
|
-
}
|
|
9
|
-
declare function ColumnFormatEditor(props: ColumnFormatEditorProps): JSX.Element;
|
|
10
|
-
export default ColumnFormatEditor;
|
|
11
|
-
//# sourceMappingURL=ColumnFormatEditor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnFormatEditor.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ColumnFormatEditor.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAInB,KAAK,WAAW,EAIjB,MAAM,8BAA8B,CAAC;AAMtC,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,EAAE,EAAE,OAAO,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAeD,iBAAS,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,GAAG,CAAC,OAAO,CA8GvE;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnFormatEditor.js","names":["React","useCallback","useEffect","useMemo","useState","Log","ComboBox","getDefaultConditionConfigForType","getConditionConfig","getDefaultStyleConfig","FormatStyleType","ConditionEditor","StyleEditor","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","DEFAULT_CALLBACK","undefined","makeDefaultConfig","columns","_columns$","type","name","column","config","_objectSpread","style","ColumnFormatEditor","props","_columns$find","_props$config","dh","_props$onChange","onChange","_useState","find","c","_useState2","_slicedToArray","selectedColumn","setColumn","_useState3","_useState4","conditionConfig","setConditionConfig","_useState5","_useState6","conditionValid","setConditionValid","_useState7","_useState8","selectedStyle","setStyle","handleColumnChange","value","newColumn","_ref","error","concat","handleConditionChange","updatedConditionConfig","isValid","debug","handleStyleChange","updatedStyleConfig","updateColumnFormat","NO_FORMATTING","columnNames","map","_ref2","className","children","defaultSelectedKey"],"sources":["../../../src/sidebar/conditional-formatting/ColumnFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox, type ItemKey } from '@deephaven/components';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type BaseFormatConfig,\n type ChangeCallback,\n getDefaultConditionConfigForType,\n getConditionConfig,\n getDefaultStyleConfig,\n type ModelColumn,\n FormatStyleType,\n type ConditionConfig,\n type FormatStyleConfig,\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: typeof DhType;\n onChange?: ChangeCallback;\n}\n\nconst DEFAULT_CALLBACK = (): void => 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: ItemKey | null) => {\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: ConditionConfig, isValid: boolean) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n },\n []\n );\n\n const handleStyleChange = useCallback(\n (updatedStyleConfig: FormatStyleConfig) => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n },\n []\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 columnNames = useMemo(() => columns.map(({ name }) => name), [columns]);\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 aria-label=\"Select column to format\"\n defaultSelectedKey={selectedColumn?.name}\n onChange={handleColumnChange}\n >\n {columnNames}\n </ComboBox>\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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","ignoreList":[]}
|