@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.
Files changed (30) hide show
  1. package/dist/IrisGridUtils.d.ts +7 -0
  2. package/dist/IrisGridUtils.d.ts.map +1 -1
  3. package/dist/IrisGridUtils.js +31 -5
  4. package/dist/IrisGridUtils.js.map +1 -1
  5. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -0
  6. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  7. package/dist/sidebar/conditional-formatting/ConditionEditor.js +177 -167
  8. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  9. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -2
  10. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  11. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  12. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +23 -18
  13. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  14. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +27 -7
  15. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  16. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +172 -122
  17. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  18. package/dist/sidebar/conditional-formatting/MultiColumnFormatEditor.d.ts +18 -0
  19. package/dist/sidebar/conditional-formatting/MultiColumnFormatEditor.d.ts.map +1 -0
  20. package/dist/sidebar/conditional-formatting/{ColumnFormatEditor.js → MultiColumnFormatEditor.js} +110 -22
  21. package/dist/sidebar/conditional-formatting/MultiColumnFormatEditor.js.map +1 -0
  22. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  23. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +8 -5
  24. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  25. package/dist/sidebar/conditional-formatting/StyleEditor.js +1 -1
  26. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  27. package/package.json +5 -5
  28. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +0 -11
  29. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +0 -1
  30. 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"}
@@ -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('ColumnFormatEditor');
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 column = {
25
+ var leftHandValue = {
26
26
  type,
27
27
  name
28
28
  };
29
29
  var config = _objectSpread({
30
- column,
30
+ leftHandValue,
31
+ formattedColumns: [],
31
32
  style: getDefaultStyleConfig()
32
33
  }, getDefaultConditionConfigForType(type));
33
34
  return config;
34
35
  }
35
- function ColumnFormatEditor(props) {
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
- var _useState = useState((_columns$find = columns.find(c => c.name === config.column.name && c.type === config.column.type)) !== null && _columns$find !== void 0 ? _columns$find : columns[0]),
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
- var _useState3 = useState(getConditionConfig(config)),
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
- conditionConfig = _useState4[0],
50
- setConditionConfig = _useState4[1];
51
- var _useState5 = useState(false),
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
- conditionValid = _useState6[0],
54
- setConditionValid = _useState6[1];
55
- var _useState7 = useState(config.style),
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
- selectedStyle = _useState8[0],
58
- setStyle = _useState8[1];
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 column = {
161
+ var leftHandValue = {
96
162
  type,
97
163
  name
98
164
  };
99
165
  onChange(_objectSpread({
100
- column,
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(_ref2 => {
105
- var name = _ref2.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 ColumnFormatEditor;
135
- //# sourceMappingURL=ColumnFormatEditor.js.map
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":"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","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;AAeD,iBAAS,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,GAAG,CAAC,OAAO,CAwGjE;AAED,eAAe,eAAe,CAAC"}
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 column = {
25
+ var leftHandValue = {
26
26
  type,
27
27
  name
28
28
  };
29
29
  var config = _objectSpread({
30
- column,
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.column.name && c.type === config.column.type)) !== null && _columns$find !== void 0 ? _columns$find : columns[0]),
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 column = {
95
+ var leftHandValue = {
95
96
  type,
96
97
  name
97
98
  };
98
99
  onChange(_objectSpread({
99
- column,
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","column","config","_objectSpread","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"],"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 column = { type, name };\n const config = {\n column,\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 => 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 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 column = { type, name };\n onChange(\n {\n column,\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 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
+ {"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":[]}
@@ -124,7 +124,7 @@ function StyleEditor(props) {
124
124
  className: "mb-2",
125
125
  ref: csContainer,
126
126
  children: [/*#__PURE__*/_jsx("label", {
127
- className: "mb-0",
127
+ className: "mb-0 mt-1",
128
128
  children: "Style"
129
129
  }), /*#__PURE__*/_jsxs(Button, {
130
130
  kind: "inline",
@@ -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.26.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.22.1",
35
- "@deephaven/console": "^1.26.0",
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.26.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": "9d0c4b05d92671e7690be73f7b7784656d75e0c5"
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":[]}