@deephaven/iris-grid 0.22.3-beta.18 → 0.22.3-beta.21

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 (199) hide show
  1. package/dist/AdvancedFilterCreator.js +7 -65
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorFilterItem.js +0 -23
  4. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.js +0 -52
  6. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValueList.js +2 -42
  8. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  9. package/dist/ColumnHeaderGroup.js +0 -11
  10. package/dist/ColumnHeaderGroup.js.map +1 -1
  11. package/dist/ColumnStatistics.js +1 -20
  12. package/dist/ColumnStatistics.js.map +1 -1
  13. package/dist/CrossColumnSearch.js +2 -23
  14. package/dist/CrossColumnSearch.js.map +1 -1
  15. package/dist/FilterInputField.js +2 -36
  16. package/dist/FilterInputField.js.map +1 -1
  17. package/dist/GotoRow.d.ts +1 -1
  18. package/dist/GotoRow.d.ts.map +1 -1
  19. package/dist/GotoRow.js +2 -7
  20. package/dist/GotoRow.js.map +1 -1
  21. package/dist/IrisGrid.d.ts +11 -5
  22. package/dist/IrisGrid.d.ts.map +1 -1
  23. package/dist/IrisGrid.js +77 -519
  24. package/dist/IrisGrid.js.map +1 -1
  25. package/dist/IrisGridBottomBar.d.ts +1 -1
  26. package/dist/IrisGridBottomBar.d.ts.map +1 -1
  27. package/dist/IrisGridBottomBar.js +2 -2
  28. package/dist/IrisGridBottomBar.js.map +1 -1
  29. package/dist/IrisGridCellOverflowModal.js +6 -21
  30. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  31. package/dist/IrisGridCopyHandler.js +3 -50
  32. package/dist/IrisGridCopyHandler.js.map +1 -1
  33. package/dist/IrisGridMetricCalculator.js +2 -12
  34. package/dist/IrisGridMetricCalculator.js.map +1 -1
  35. package/dist/IrisGridModel.js +32 -58
  36. package/dist/IrisGridModel.js.map +1 -1
  37. package/dist/IrisGridModelFactory.js +0 -7
  38. package/dist/IrisGridModelFactory.js.map +1 -1
  39. package/dist/IrisGridModelUpdater.js +0 -4
  40. package/dist/IrisGridModelUpdater.js.map +1 -1
  41. package/dist/IrisGridPartitionSelector.js +0 -23
  42. package/dist/IrisGridPartitionSelector.js.map +1 -1
  43. package/dist/IrisGridProxyModel.js +9 -153
  44. package/dist/IrisGridProxyModel.js.map +1 -1
  45. package/dist/IrisGridRenderer.js +41 -183
  46. package/dist/IrisGridRenderer.js.map +1 -1
  47. package/dist/IrisGridShortcuts.js.map +1 -1
  48. package/dist/IrisGridTableModel.js +7 -86
  49. package/dist/IrisGridTableModel.js.map +1 -1
  50. package/dist/IrisGridTableModelTemplate.js +70 -461
  51. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  52. package/dist/IrisGridTestUtils.js +0 -23
  53. package/dist/IrisGridTestUtils.js.map +1 -1
  54. package/dist/IrisGridTheme.js.map +1 -1
  55. package/dist/IrisGridTreeTableModel.js +3 -42
  56. package/dist/IrisGridTreeTableModel.js.map +1 -1
  57. package/dist/IrisGridUtils.d.ts +8 -2
  58. package/dist/IrisGridUtils.d.ts.map +1 -1
  59. package/dist/IrisGridUtils.js +97 -195
  60. package/dist/IrisGridUtils.js.map +1 -1
  61. package/dist/MissingKeyError.js +0 -7
  62. package/dist/MissingKeyError.js.map +1 -1
  63. package/dist/PartitionSelectorSearch.js +2 -48
  64. package/dist/PartitionSelectorSearch.js.map +1 -1
  65. package/dist/PendingDataBottomBar.d.ts +1 -1
  66. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  67. package/dist/PendingDataBottomBar.js +2 -7
  68. package/dist/PendingDataBottomBar.js.map +1 -1
  69. package/dist/TableViewportUpdater.js +3 -29
  70. package/dist/TableViewportUpdater.js.map +1 -1
  71. package/dist/ToastBottomBar.d.ts +1 -1
  72. package/dist/ToastBottomBar.d.ts.map +1 -1
  73. package/dist/ToastBottomBar.js +2 -4
  74. package/dist/ToastBottomBar.js.map +1 -1
  75. package/dist/TreeTableViewportUpdater.js +0 -21
  76. package/dist/TreeTableViewportUpdater.js.map +1 -1
  77. package/dist/format-context-menus/CustomFormatAction.js +4 -25
  78. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  79. package/dist/format-context-menus/DateTimeFormatContextMenu.js +0 -7
  80. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
  81. package/dist/format-context-menus/DecimalFormatContextMenu.js +0 -9
  82. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  83. package/dist/format-context-menus/FormatContextMenuUtils.js +3 -9
  84. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  85. package/dist/format-context-menus/IntegerFormatContextMenu.js +0 -8
  86. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  87. package/dist/format-context-menus/index.js.map +1 -1
  88. package/dist/index.d.ts +3 -3
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +3 -3
  91. package/dist/index.js.map +1 -1
  92. package/dist/key-handlers/ClearFilterKeyHandler.js +0 -8
  93. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
  94. package/dist/key-handlers/CopyKeyHandler.js +1 -10
  95. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  96. package/dist/key-handlers/ReverseKeyHandler.js +0 -11
  97. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  98. package/dist/key-handlers/index.js.map +1 -1
  99. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +2 -32
  100. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  101. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +4 -34
  102. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  103. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +0 -20
  104. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  105. package/dist/mousehandlers/IrisGridContextMenuHandler.js +15 -105
  106. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  107. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +0 -9
  108. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  109. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +0 -17
  110. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  111. package/dist/mousehandlers/IrisGridSortMouseHandler.js +2 -15
  112. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  113. package/dist/mousehandlers/PendingMouseHandler.js +0 -6
  114. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  115. package/dist/mousehandlers/index.js.map +1 -1
  116. package/dist/sidebar/AdvancedSettings.js.map +1 -1
  117. package/dist/sidebar/AdvancedSettingsMenu.d.ts +4 -4
  118. package/dist/sidebar/AdvancedSettingsMenu.d.ts.map +1 -1
  119. package/dist/sidebar/AdvancedSettingsMenu.js +2 -6
  120. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  121. package/dist/sidebar/AdvancedSettingsType.js +0 -2
  122. package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
  123. package/dist/sidebar/ChartBuilder.js +2 -46
  124. package/dist/sidebar/ChartBuilder.js.map +1 -1
  125. package/dist/sidebar/CustomColumnBuilder.js +6 -58
  126. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  127. package/dist/sidebar/CustomColumnInput.js +4 -15
  128. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  129. package/dist/sidebar/InputEditor.js +5 -36
  130. package/dist/sidebar/InputEditor.js.map +1 -1
  131. package/dist/sidebar/OptionType.js +0 -2
  132. package/dist/sidebar/OptionType.js.map +1 -1
  133. package/dist/sidebar/RollupRows.js +9 -65
  134. package/dist/sidebar/RollupRows.js.map +1 -1
  135. package/dist/sidebar/SelectDistinctBuilder.js +0 -13
  136. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  137. package/dist/sidebar/TableCsvExporter.js +0 -52
  138. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  139. package/dist/sidebar/TableSaver.js +10 -123
  140. package/dist/sidebar/TableSaver.js.map +1 -1
  141. package/dist/sidebar/VisibilityOrderingBuilder.js +37 -116
  142. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  143. package/dist/sidebar/aggregations/AggregationEdit.d.ts +1 -1
  144. package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
  145. package/dist/sidebar/aggregations/AggregationEdit.js +2 -14
  146. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  147. package/dist/sidebar/aggregations/AggregationOperation.js +0 -2
  148. package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
  149. package/dist/sidebar/aggregations/AggregationUtils.js +2 -5
  150. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  151. package/dist/sidebar/aggregations/Aggregations.d.ts +1 -1
  152. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  153. package/dist/sidebar/aggregations/Aggregations.js +2 -12
  154. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  155. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +1 -1
  156. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  157. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +2 -16
  158. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  159. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -1
  160. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  161. package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -35
  162. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  163. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts +1 -1
  164. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  165. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -12
  166. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  167. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +0 -3
  168. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  169. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +1 -1
  170. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  171. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +16 -26
  172. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  173. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +9 -172
  174. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  175. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +1 -1
  176. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  177. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +2 -16
  178. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  179. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts +1 -1
  180. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts.map +1 -1
  181. package/dist/sidebar/conditional-formatting/StyleEditor.js +2 -12
  182. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  183. package/dist/sidebar/icons/BarIcon.js +0 -3
  184. package/dist/sidebar/icons/BarIcon.js.map +1 -1
  185. package/dist/sidebar/icons/FormatColumnWhereIcon.js +2 -5
  186. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
  187. package/dist/sidebar/icons/FormatRowWhereIcon.js +2 -5
  188. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
  189. package/dist/sidebar/icons/HistogramIcon.js +0 -3
  190. package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
  191. package/dist/sidebar/icons/LineIcon.js +0 -3
  192. package/dist/sidebar/icons/LineIcon.js.map +1 -1
  193. package/dist/sidebar/icons/PieIcon.js +0 -3
  194. package/dist/sidebar/icons/PieIcon.js.map +1 -1
  195. package/dist/sidebar/icons/ScatterIcon.js +0 -3
  196. package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
  197. package/dist/sidebar/icons/index.js.map +1 -1
  198. package/dist/sidebar/index.js.map +1 -1
  199. package/package.json +15 -15
@@ -8,34 +8,26 @@ import RowFormatEditor from "./RowFormatEditor.js";
8
8
  import { FormatterType, isSupportedColumn } from "./ConditionalFormattingUtils.js";
9
9
  import "./ConditionalFormatEditor.css";
10
10
  var log = Log.module('ConditionalFormatEditor');
11
-
12
11
  var DEFAULT_CALLBACK = () => undefined;
13
-
14
12
  function getFormatterTypeIcon(option) {
15
13
  switch (option) {
16
14
  case FormatterType.CONDITIONAL:
17
15
  return /*#__PURE__*/React.createElement(FormatColumnWhereIcon, null);
18
-
19
16
  case FormatterType.ROWS:
20
17
  return /*#__PURE__*/React.createElement(FormatRowWhereIcon, null);
21
18
  }
22
19
  }
23
-
24
20
  function getFormatterTypeLabel(option) {
25
21
  switch (option) {
26
22
  case FormatterType.CONDITIONAL:
27
23
  return 'Conditional';
28
-
29
24
  case FormatterType.ROWS:
30
25
  return 'Rows';
31
26
  }
32
27
  }
33
-
34
28
  var formatterTypes = [FormatterType.CONDITIONAL, FormatterType.ROWS];
35
-
36
- var ConditionalFormatEditor = props => {
29
+ function ConditionalFormatEditor(props) {
37
30
  var _defaultRule$type;
38
-
39
31
  var {
40
32
  columns: originalColumns,
41
33
  onSave = DEFAULT_CALLBACK,
@@ -55,7 +47,6 @@ var ConditionalFormatEditor = props => {
55
47
  log.error('Rule is not defined.');
56
48
  return;
57
49
  }
58
-
59
50
  onSave(rule);
60
51
  }, [onSave, rule]);
61
52
  var handleFormatterChange = useCallback(value => {
@@ -110,7 +101,6 @@ var ConditionalFormatEditor = props => {
110
101
  onClick: handleSave,
111
102
  disabled: rule === undefined || !isValid
112
103
  }, "Done")));
113
- };
114
-
104
+ }
115
105
  export default ConditionalFormatEditor;
116
106
  //# sourceMappingURL=ConditionalFormatEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalFormatEditor.js","names":["React","useCallback","useState","classNames","Button","Log","FormatColumnWhereIcon","FormatRowWhereIcon","ColumnFormatEditor","RowFormatEditor","FormatterType","isSupportedColumn","log","module","DEFAULT_CALLBACK","undefined","getFormatterTypeIcon","option","CONDITIONAL","ROWS","getFormatterTypeLabel","formatterTypes","ConditionalFormatEditor","props","columns","originalColumns","onSave","onUpdate","onCancel","rule","defaultRule","filter","selectedFormatter","setFormatter","type","setRule","isValid","setIsValid","handleCancel","handleSave","error","handleFormatterChange","value","debug","handleRuleChange","ruleConfig","isRuleValid","updatedRule","config","map","index","active"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { FormatColumnWhereIcon, FormatRowWhereIcon } from '../icons';\nimport ColumnFormatEditor from './ColumnFormatEditor';\nimport RowFormatEditor from './RowFormatEditor';\nimport {\n BaseFormatConfig,\n FormatterType,\n FormattingRule,\n isSupportedColumn,\n ModelColumn,\n} from './ConditionalFormattingUtils';\nimport './ConditionalFormatEditor.scss';\n\nconst log = Log.module('ConditionalFormatEditor');\n\nexport type SaveCallback = (rule: FormattingRule) => void;\n\nexport type UpdateCallback = (rule?: FormattingRule) => void;\n\nexport type CancelCallback = () => void;\n\nexport interface ConditionalFormatEditorProps {\n columns: ModelColumn[];\n rule?: FormattingRule;\n onCancel?: CancelCallback;\n onSave?: SaveCallback;\n onUpdate?: UpdateCallback;\n}\n\nconst DEFAULT_CALLBACK = () => undefined;\n\nfunction getFormatterTypeIcon(option: FormatterType): JSX.Element | undefined {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return <FormatColumnWhereIcon />;\n case FormatterType.ROWS:\n return <FormatRowWhereIcon />;\n }\n}\n\nfunction getFormatterTypeLabel(option: FormatterType): string {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return 'Conditional';\n case FormatterType.ROWS:\n return 'Rows';\n }\n}\n\nconst formatterTypes = [FormatterType.CONDITIONAL, FormatterType.ROWS];\n\nconst ConditionalFormatEditor = (\n props: ConditionalFormatEditorProps\n): JSX.Element => {\n const {\n columns: originalColumns,\n onSave = DEFAULT_CALLBACK,\n onUpdate = DEFAULT_CALLBACK,\n onCancel = DEFAULT_CALLBACK,\n rule: defaultRule,\n } = props;\n\n const columns = originalColumns.filter(isSupportedColumn);\n\n const [selectedFormatter, setFormatter] = useState(\n defaultRule?.type ?? formatterTypes[0]\n );\n const [rule, setRule] = useState(defaultRule);\n const [isValid, setIsValid] = useState(false);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n const handleSave = useCallback(() => {\n if (rule === undefined) {\n log.error('Rule is not defined.');\n return;\n }\n onSave(rule);\n }, [onSave, rule]);\n\n const handleFormatterChange = useCallback(value => {\n log.debug('handleFormatterChange', value);\n setFormatter(value);\n }, []);\n\n const handleRuleChange = useCallback(\n (ruleConfig, isRuleValid: boolean) => {\n log.debug('handleRuleChange', ruleConfig, isRuleValid, selectedFormatter);\n const updatedRule = {\n type: selectedFormatter,\n config: ruleConfig as BaseFormatConfig,\n };\n setRule(updatedRule);\n setIsValid(isRuleValid);\n onUpdate(isRuleValid ? updatedRule : undefined);\n },\n [onUpdate, selectedFormatter]\n );\n\n return (\n <div className=\"conditional-format-editor form\">\n <div className=\"mb-2\">\n <label className=\"mb-0\" htmlFor=\"formatter-select\">\n Select Formatter\n </label>\n\n <div className=\"formatter-list\">\n {formatterTypes.map((type, index) => (\n <div key={type} className=\"formatter-type\">\n <button\n type=\"button\"\n className={classNames('btn', 'btn-icon', 'btn-formatter-type', {\n active: type === selectedFormatter,\n })}\n data-index={index}\n onClick={() => handleFormatterChange(type)}\n >\n {getFormatterTypeIcon(type)}\n {getFormatterTypeLabel(type)}\n </button>\n </div>\n ))}\n </div>\n </div>\n {selectedFormatter === FormatterType.CONDITIONAL && (\n <ColumnFormatEditor\n columns={columns}\n config={rule?.config}\n onChange={handleRuleChange}\n />\n )}\n {selectedFormatter === FormatterType.ROWS && (\n <RowFormatEditor\n columns={columns}\n config={rule?.config}\n onChange={handleRuleChange}\n />\n )}\n <hr />\n <div className=\"d-flex justify-content-end my-3\">\n <Button kind=\"secondary\" onClick={handleCancel} className=\"mr-2\">\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n onClick={handleSave}\n disabled={rule === undefined || !isValid}\n >\n Done\n </Button>\n </div>\n </div>\n );\n};\n\nexport default ConditionalFormatEditor;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConditionalFormatEditor.js","names":["React","useCallback","useState","classNames","Button","Log","FormatColumnWhereIcon","FormatRowWhereIcon","ColumnFormatEditor","RowFormatEditor","FormatterType","isSupportedColumn","log","module","DEFAULT_CALLBACK","undefined","getFormatterTypeIcon","option","CONDITIONAL","ROWS","getFormatterTypeLabel","formatterTypes","ConditionalFormatEditor","props","columns","originalColumns","onSave","onUpdate","onCancel","rule","defaultRule","filter","selectedFormatter","setFormatter","type","setRule","isValid","setIsValid","handleCancel","handleSave","error","handleFormatterChange","value","debug","handleRuleChange","ruleConfig","isRuleValid","updatedRule","config","map","index","active"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { FormatColumnWhereIcon, FormatRowWhereIcon } from '../icons';\nimport ColumnFormatEditor from './ColumnFormatEditor';\nimport RowFormatEditor from './RowFormatEditor';\nimport {\n BaseFormatConfig,\n FormatterType,\n FormattingRule,\n isSupportedColumn,\n ModelColumn,\n} from './ConditionalFormattingUtils';\nimport './ConditionalFormatEditor.scss';\n\nconst log = Log.module('ConditionalFormatEditor');\n\nexport type SaveCallback = (rule: FormattingRule) => void;\n\nexport type UpdateCallback = (rule?: FormattingRule) => void;\n\nexport type CancelCallback = () => void;\n\nexport interface ConditionalFormatEditorProps {\n columns: ModelColumn[];\n rule?: FormattingRule;\n onCancel?: CancelCallback;\n onSave?: SaveCallback;\n onUpdate?: UpdateCallback;\n}\n\nconst DEFAULT_CALLBACK = () => undefined;\n\nfunction getFormatterTypeIcon(option: FormatterType): JSX.Element | undefined {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return <FormatColumnWhereIcon />;\n case FormatterType.ROWS:\n return <FormatRowWhereIcon />;\n }\n}\n\nfunction getFormatterTypeLabel(option: FormatterType): string {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return 'Conditional';\n case FormatterType.ROWS:\n return 'Rows';\n }\n}\n\nconst formatterTypes = [FormatterType.CONDITIONAL, FormatterType.ROWS];\n\nfunction ConditionalFormatEditor(\n props: ConditionalFormatEditorProps\n): JSX.Element {\n const {\n columns: originalColumns,\n onSave = DEFAULT_CALLBACK,\n onUpdate = DEFAULT_CALLBACK,\n onCancel = DEFAULT_CALLBACK,\n rule: defaultRule,\n } = props;\n\n const columns = originalColumns.filter(isSupportedColumn);\n\n const [selectedFormatter, setFormatter] = useState(\n defaultRule?.type ?? formatterTypes[0]\n );\n const [rule, setRule] = useState(defaultRule);\n const [isValid, setIsValid] = useState(false);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n const handleSave = useCallback(() => {\n if (rule === undefined) {\n log.error('Rule is not defined.');\n return;\n }\n onSave(rule);\n }, [onSave, rule]);\n\n const handleFormatterChange = useCallback(value => {\n log.debug('handleFormatterChange', value);\n setFormatter(value);\n }, []);\n\n const handleRuleChange = useCallback(\n (ruleConfig, isRuleValid: boolean) => {\n log.debug('handleRuleChange', ruleConfig, isRuleValid, selectedFormatter);\n const updatedRule = {\n type: selectedFormatter,\n config: ruleConfig as BaseFormatConfig,\n };\n setRule(updatedRule);\n setIsValid(isRuleValid);\n onUpdate(isRuleValid ? updatedRule : undefined);\n },\n [onUpdate, selectedFormatter]\n );\n\n return (\n <div className=\"conditional-format-editor form\">\n <div className=\"mb-2\">\n <label className=\"mb-0\" htmlFor=\"formatter-select\">\n Select Formatter\n </label>\n\n <div className=\"formatter-list\">\n {formatterTypes.map((type, index) => (\n <div key={type} className=\"formatter-type\">\n <button\n type=\"button\"\n className={classNames('btn', 'btn-icon', 'btn-formatter-type', {\n active: type === selectedFormatter,\n })}\n data-index={index}\n onClick={() => handleFormatterChange(type)}\n >\n {getFormatterTypeIcon(type)}\n {getFormatterTypeLabel(type)}\n </button>\n </div>\n ))}\n </div>\n </div>\n {selectedFormatter === FormatterType.CONDITIONAL && (\n <ColumnFormatEditor\n columns={columns}\n config={rule?.config}\n onChange={handleRuleChange}\n />\n )}\n {selectedFormatter === FormatterType.ROWS && (\n <RowFormatEditor\n columns={columns}\n config={rule?.config}\n onChange={handleRuleChange}\n />\n )}\n <hr />\n <div className=\"d-flex justify-content-end my-3\">\n <Button kind=\"secondary\" onClick={handleCancel} className=\"mr-2\">\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n onClick={handleSave}\n disabled={rule === undefined || !isValid}\n >\n Done\n </Button>\n </div>\n </div>\n );\n}\n\nexport default ConditionalFormatEditor;\n"],"mappings":"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"}
@@ -1,14 +1,11 @@
1
1
  import { getConditionDBString, getStyleDBString } from "./ConditionalFormattingUtils.js"; // Conditional formatting API utils in a separate file
2
2
  // to make ConditionalFormattingUtils.ts easier to test.
3
3
  // https://github.com/facebook/jest/issues/936#issuecomment-545080082
4
-
5
4
  export function makeTernaryFormatRule(config, prevRule) {
6
5
  var styleDBString = getStyleDBString(config);
7
-
8
6
  if (styleDBString === undefined) {
9
7
  return undefined;
10
8
  }
11
-
12
9
  var conditionDBString = getConditionDBString(config);
13
10
  return "".concat(conditionDBString, " ? ").concat(styleDBString, " : ").concat(prevRule);
14
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalFormattingAPIUtils.js","names":["getConditionDBString","getStyleDBString","makeTernaryFormatRule","config","prevRule","styleDBString","undefined","conditionDBString","makeRowFormatColumn","rule","dh","Column","formatRowColor","makeColumnFormatColumn","col","formatColor"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.ts"],"sourcesContent":["import { Column, CustomColumn } from '@deephaven/jsapi-shim';\nimport {\n BaseFormatConfig,\n getConditionDBString,\n getStyleDBString,\n} from './ConditionalFormattingUtils';\n\n// Conditional formatting API utils in a separate file\n// to make ConditionalFormattingUtils.ts easier to test.\n// https://github.com/facebook/jest/issues/936#issuecomment-545080082\n\nexport function makeTernaryFormatRule(\n config: BaseFormatConfig,\n prevRule: string\n): string | undefined {\n const styleDBString = getStyleDBString(config);\n if (styleDBString === undefined) {\n return undefined;\n }\n const conditionDBString = getConditionDBString(config);\n return `${conditionDBString} ? ${styleDBString} : ${prevRule}`;\n}\n\nexport function makeRowFormatColumn(rule: string): CustomColumn {\n return dh.Column.formatRowColor(rule);\n}\n\nexport function makeColumnFormatColumn(\n col: Column,\n rule: string\n): CustomColumn {\n return col.formatColor(rule);\n}\n"],"mappings":"SAGEA,oB,EACAC,gB,2CAGF;AACA;AACA;;AAEA,OAAO,SAASC,qBAAT,CACLC,MADK,EAELC,QAFK,EAGe;EACpB,IAAMC,aAAa,GAAGJ,gBAAgB,CAACE,MAAD,CAAtC;;EACA,IAAIE,aAAa,KAAKC,SAAtB,EAAiC;IAC/B,OAAOA,SAAP;EACD;;EACD,IAAMC,iBAAiB,GAAGP,oBAAoB,CAACG,MAAD,CAA9C;EACA,iBAAUI,iBAAV,gBAAiCF,aAAjC,gBAAoDD,QAApD;AACD;AAED,OAAO,SAASI,mBAAT,CAA6BC,IAA7B,EAAyD;EAC9D,OAAOC,EAAE,CAACC,MAAH,CAAUC,cAAV,CAAyBH,IAAzB,CAAP;AACD;AAED,OAAO,SAASI,sBAAT,CACLC,GADK,EAELL,IAFK,EAGS;EACd,OAAOK,GAAG,CAACC,WAAJ,CAAgBN,IAAhB,CAAP;AACD"}
1
+ {"version":3,"file":"ConditionalFormattingAPIUtils.js","names":["getConditionDBString","getStyleDBString","makeTernaryFormatRule","config","prevRule","styleDBString","undefined","conditionDBString","makeRowFormatColumn","rule","dh","Column","formatRowColor","makeColumnFormatColumn","col","formatColor"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.ts"],"sourcesContent":["import { Column, CustomColumn } from '@deephaven/jsapi-shim';\nimport {\n BaseFormatConfig,\n getConditionDBString,\n getStyleDBString,\n} from './ConditionalFormattingUtils';\n\n// Conditional formatting API utils in a separate file\n// to make ConditionalFormattingUtils.ts easier to test.\n// https://github.com/facebook/jest/issues/936#issuecomment-545080082\n\nexport function makeTernaryFormatRule(\n config: BaseFormatConfig,\n prevRule: string\n): string | undefined {\n const styleDBString = getStyleDBString(config);\n if (styleDBString === undefined) {\n return undefined;\n }\n const conditionDBString = getConditionDBString(config);\n return `${conditionDBString} ? ${styleDBString} : ${prevRule}`;\n}\n\nexport function makeRowFormatColumn(rule: string): CustomColumn {\n return dh.Column.formatRowColor(rule);\n}\n\nexport function makeColumnFormatColumn(\n col: Column,\n rule: string\n): CustomColumn {\n return col.formatColor(rule);\n}\n"],"mappings":"SAGEA,oBAAoB,EACpBC,gBAAgB,2CAGlB;AACA;AACA;AAEA,OAAO,SAASC,qBAAqB,CACnCC,MAAwB,EACxBC,QAAgB,EACI;EACpB,IAAMC,aAAa,GAAGJ,gBAAgB,CAACE,MAAM,CAAC;EAC9C,IAAIE,aAAa,KAAKC,SAAS,EAAE;IAC/B,OAAOA,SAAS;EAClB;EACA,IAAMC,iBAAiB,GAAGP,oBAAoB,CAACG,MAAM,CAAC;EACtD,iBAAUI,iBAAiB,gBAAMF,aAAa,gBAAMD,QAAQ;AAC9D;AAEA,OAAO,SAASI,mBAAmB,CAACC,IAAY,EAAgB;EAC9D,OAAOC,EAAE,CAACC,MAAM,CAACC,cAAc,CAACH,IAAI,CAAC;AACvC;AAEA,OAAO,SAASI,sBAAsB,CACpCC,GAAW,EACXL,IAAY,EACE;EACd,OAAOK,GAAG,CAACC,WAAW,CAACN,IAAI,CAAC;AAC9B"}
@@ -12,6 +12,6 @@ export declare type ConditionalFormattingMenuProps = {
12
12
  onCreate?: CreateCallback;
13
13
  onSelect?: SelectCallback;
14
14
  };
15
- declare const ConditionalFormattingMenu: (props: ConditionalFormattingMenuProps) => JSX.Element;
15
+ declare function ConditionalFormattingMenu(props: ConditionalFormattingMenuProps): JSX.Element;
16
16
  export default ConditionalFormattingMenu;
17
17
  //# sourceMappingURL=ConditionalFormattingMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalFormattingMenu.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingMenu.tsx"],"names":[],"mappings":";AAaA,OAAO,kCAAkC,CAAC;AAC1C,OAAO,EAEL,cAAc,EAQf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI/C,oBAAY,cAAc,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;AAE/D,oBAAY,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAErD,oBAAY,cAAc,GAAG,MAAM,IAAI,CAAC;AAExC,oBAAY,8BAA8B,GAAG;IAC3C,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,CAAC;AAoDF,QAAA,MAAM,yBAAyB,UACtB,8BAA8B,KACpC,WAwJF,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"ConditionalFormattingMenu.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingMenu.tsx"],"names":[],"mappings":";AAaA,OAAO,kCAAkC,CAAC;AAC1C,OAAO,EAEL,cAAc,EAQf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI/C,oBAAY,cAAc,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;AAE/D,oBAAY,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAErD,oBAAY,cAAc,GAAG,MAAM,IAAI,CAAC;AAExC,oBAAY,8BAA8B,GAAG;IAC3C,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,CAAC;AAoDF,iBAAS,yBAAyB,CAChC,KAAK,EAAE,8BAA8B,GACpC,GAAG,CAAC,OAAO,CAwJb;AAED,eAAe,yBAAyB,CAAC"}
@@ -1,5 +1,4 @@
1
1
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
-
3
2
  import React, { useCallback } from 'react';
4
3
  import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';
5
4
  import classNames from 'classnames';
@@ -11,48 +10,37 @@ import Log from '@deephaven/log';
11
10
  import "./ConditionalFormattingMenu.css";
12
11
  import { FormatterType, getBackgroundForStyleConfig, getColorForStyleConfig, getShortLabelForConditionType, NumberCondition, StringCondition, DateCondition } from "./ConditionalFormattingUtils.js";
13
12
  var log = Log.module('ConditionalFormattingMenu');
14
-
15
13
  var DEFAULT_CALLBACK = () => undefined;
16
-
17
14
  function getRuleValue(config) {
18
15
  var {
19
16
  column: {
20
17
  type
21
18
  }
22
19
  } = config;
23
-
24
20
  if (TableUtils.isNumberType(type)) {
25
21
  return config.condition === NumberCondition.IS_NULL || config.condition === NumberCondition.IS_NOT_NULL ? '' : "".concat(config.value);
26
22
  }
27
-
28
23
  if (TableUtils.isCharType(type)) {
29
24
  return config.condition === DateCondition.IS_NULL || config.condition === DateCondition.IS_NOT_NULL ? '' : "".concat(config.value);
30
25
  }
31
-
32
26
  if (TableUtils.isStringType(type)) {
33
27
  return config.condition === StringCondition.IS_NULL || config.condition === StringCondition.IS_NOT_NULL ? '' : "\"".concat(config.value, "\"");
34
28
  }
35
-
36
29
  if (TableUtils.isDateType(type)) {
37
30
  return config.condition === DateCondition.IS_NULL || config.condition === DateCondition.IS_NOT_NULL ? '' : "".concat(config.value);
38
31
  }
39
-
40
32
  if (TableUtils.isBooleanType(type)) {
41
33
  return '';
42
34
  }
43
-
44
35
  throw new Error("Invalid column type ".concat(type, " in getRuleValue"));
45
36
  }
46
-
47
37
  function getRuleTitle(config) {
48
38
  if (TableUtils.isNumberType(config.column.type) && config.condition === NumberCondition.IS_BETWEEN) {
49
39
  return "".concat(config.start, " < ").concat(config.column.name, " < ").concat(config.end);
50
40
  }
51
-
52
41
  return "".concat(config.column.name, " ").concat(getShortLabelForConditionType(config.column.type, config.condition), " \n ").concat(getRuleValue(config));
53
42
  }
54
-
55
- var ConditionalFormattingMenu = props => {
43
+ function ConditionalFormattingMenu(props) {
56
44
  var {
57
45
  rules = [],
58
46
  onChange = DEFAULT_CALLBACK,
@@ -75,12 +63,12 @@ var ConditionalFormattingMenu = props => {
75
63
  e.stopPropagation();
76
64
  }, []);
77
65
  var handleDragEnd = useCallback(result => {
78
- DragUtils.stopDragging(); // if dropped outside the list
66
+ DragUtils.stopDragging();
79
67
 
68
+ // if dropped outside the list
80
69
  if (result.destination == null) {
81
70
  return;
82
71
  }
83
-
84
72
  var sourceIndex = result.source.index;
85
73
  var destinationIndex = result.destination.index;
86
74
  var updatedRules = [...rules];
@@ -88,8 +76,9 @@ var ConditionalFormattingMenu = props => {
88
76
  updatedRules.splice(sourceIndex, 1);
89
77
  updatedRules.splice(destinationIndex, 0, sourceInput);
90
78
  onChange(updatedRules);
91
- }, [onChange, rules]); // Display list of rules
79
+ }, [onChange, rules]);
92
80
 
81
+ // Display list of rules
93
82
  return /*#__PURE__*/React.createElement("div", {
94
83
  className: "conditional-formatting-rules"
95
84
  }, /*#__PURE__*/React.createElement(DragDropContext, {
@@ -98,21 +87,23 @@ var ConditionalFormattingMenu = props => {
98
87
  }, /*#__PURE__*/React.createElement(Droppable, {
99
88
  droppableId: "droppable-custom-columns"
100
89
  }, (provided, snapshot) => /*#__PURE__*/React.createElement("div", _extends({
101
- ref: provided.innerRef // eslint-disable-next-line react/jsx-props-no-spreading
102
-
90
+ ref: provided.innerRef
91
+ // eslint-disable-next-line react/jsx-props-no-spreading
103
92
  }, provided.droppableProps, {
104
93
  className: classNames('droppable-container', {
105
94
  dragging: snapshot.draggingFromThisWith
106
95
  })
107
96
  }), rules.length === 0 && /*#__PURE__*/React.createElement("div", {
108
97
  className: "text-muted pl-2"
109
- }, "No formats defined"), rules.map((rule, index) => /*#__PURE__*/React.createElement(Draggable // eslint-disable-next-line react/no-array-index-key
98
+ }, "No formats defined"), rules.map((rule, index) => /*#__PURE__*/React.createElement(Draggable
99
+ // eslint-disable-next-line react/no-array-index-key
110
100
  , {
111
101
  key: "".concat(index, "-").concat(rule.type),
112
102
  draggableId: "".concat(index, "-").concat(rule.type),
113
103
  index: index,
114
104
  disableInteractiveElementBlocking: true
115
- }, // eslint-disable-next-line @typescript-eslint/no-shadow
105
+ },
106
+ // eslint-disable-next-line @typescript-eslint/no-shadow
116
107
  (provided, snapshot) => /*#__PURE__*/React.createElement("div", _extends({
117
108
  role: "menuitem",
118
109
  tabIndex: 0,
@@ -120,8 +111,8 @@ var ConditionalFormattingMenu = props => {
120
111
  className: classNames('draggable-container', {
121
112
  dragging: snapshot.isDragging
122
113
  }),
123
- ref: provided.innerRef // eslint-disable-next-line react/jsx-props-no-spreading
124
-
114
+ ref: provided.innerRef
115
+ // eslint-disable-next-line react/jsx-props-no-spreading
125
116
  }, provided.draggableProps), /*#__PURE__*/React.createElement("div", {
126
117
  className: "conditional-formatting-list-item"
127
118
  }, /*#__PURE__*/React.createElement("div", {
@@ -145,8 +136,8 @@ var ConditionalFormattingMenu = props => {
145
136
  }), /*#__PURE__*/React.createElement("button", _extends({
146
137
  type: "button",
147
138
  className: "btn btn-link btn-link-icon px-2 btn-drag-handle",
148
- onClick: handleDragHandlerClick // eslint-disable-next-line react/jsx-props-no-spreading
149
-
139
+ onClick: handleDragHandlerClick
140
+ // eslint-disable-next-line react/jsx-props-no-spreading
150
141
  }, provided.dragHandleProps), /*#__PURE__*/React.createElement(Tooltip, null, "Drag to re-order"), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
151
142
  icon: vsGripper
152
143
  }))))))), provided.placeholder))), /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement(Button, {
@@ -154,7 +145,6 @@ var ConditionalFormattingMenu = props => {
154
145
  onClick: onCreate,
155
146
  icon: dhNewCircleLargeFilled
156
147
  }, "Add New Rule"));
157
- };
158
-
148
+ }
159
149
  export default ConditionalFormattingMenu;
160
150
  //# sourceMappingURL=ConditionalFormattingMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalFormattingMenu.js","names":["React","useCallback","DragDropContext","Draggable","Droppable","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsGripper","vsTrash","Button","DragUtils","Tooltip","TableUtils","Log","FormatterType","getBackgroundForStyleConfig","getColorForStyleConfig","getShortLabelForConditionType","NumberCondition","StringCondition","DateCondition","log","module","DEFAULT_CALLBACK","undefined","getRuleValue","config","column","type","isNumberType","condition","IS_NULL","IS_NOT_NULL","value","isCharType","isStringType","isDateType","isBooleanType","Error","getRuleTitle","IS_BETWEEN","start","name","end","ConditionalFormattingMenu","props","rules","onChange","onCreate","onSelect","handleRuleClick","e","rule","index","stopPropagation","debug","handleDeleteClick","updatedRules","splice","handleDragHandlerClick","handleDragEnd","result","stopDragging","destination","sourceIndex","source","destinationIndex","sourceInput","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","length","map","isDragging","draggableProps","backgroundColor","style","color","ROWS","dragHandleProps","placeholder"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingMenu.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport {\n DragDropContext,\n Draggable,\n Droppable,\n DropResult,\n} from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsGripper, vsTrash } from '@deephaven/icons';\nimport { Button, DragUtils, Tooltip } from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport './ConditionalFormattingMenu.scss';\nimport {\n BaseFormatConfig,\n FormattingRule,\n FormatterType,\n getBackgroundForStyleConfig,\n getColorForStyleConfig,\n getShortLabelForConditionType,\n NumberCondition,\n StringCondition,\n DateCondition,\n} from './ConditionalFormattingUtils';\nimport { ColumnName } from '../../CommonTypes';\n\nconst log = Log.module('ConditionalFormattingMenu');\n\nexport type ChangeCallback = (rules: FormattingRule[]) => void;\n\nexport type SelectCallback = (index: number) => void;\n\nexport type CreateCallback = () => void;\n\nexport type ConditionalFormattingMenuProps = {\n rules: FormattingRule[];\n selectedColumn?: ColumnName;\n onChange?: ChangeCallback;\n onCreate?: CreateCallback;\n onSelect?: SelectCallback;\n};\n\nconst DEFAULT_CALLBACK = () => undefined;\n\nfunction getRuleValue(config: BaseFormatConfig): string {\n const {\n column: { type },\n } = config;\n if (TableUtils.isNumberType(type)) {\n return config.condition === NumberCondition.IS_NULL ||\n config.condition === NumberCondition.IS_NOT_NULL\n ? ''\n : `${config.value}`;\n }\n if (TableUtils.isCharType(type)) {\n return config.condition === DateCondition.IS_NULL ||\n config.condition === DateCondition.IS_NOT_NULL\n ? ''\n : `${config.value}`;\n }\n if (TableUtils.isStringType(type)) {\n return config.condition === StringCondition.IS_NULL ||\n config.condition === StringCondition.IS_NOT_NULL\n ? ''\n : `\"${config.value}\"`;\n }\n if (TableUtils.isDateType(type)) {\n return config.condition === DateCondition.IS_NULL ||\n config.condition === DateCondition.IS_NOT_NULL\n ? ''\n : `${config.value}`;\n }\n if (TableUtils.isBooleanType(type)) {\n return '';\n }\n throw new Error(`Invalid column type ${type} in getRuleValue`);\n}\n\nfunction getRuleTitle(config: BaseFormatConfig): string {\n if (\n TableUtils.isNumberType(config.column.type) &&\n config.condition === NumberCondition.IS_BETWEEN\n ) {\n return `${config.start} < ${config.column.name} < ${config.end}`;\n }\n return `${config.column.name} ${getShortLabelForConditionType(\n (config as BaseFormatConfig).column.type,\n (config as BaseFormatConfig).condition\n )} \n ${getRuleValue(config as BaseFormatConfig)}`;\n}\n\nconst ConditionalFormattingMenu = (\n props: ConditionalFormattingMenuProps\n): JSX.Element => {\n const {\n rules = [],\n onChange = DEFAULT_CALLBACK,\n onCreate = DEFAULT_CALLBACK,\n onSelect = DEFAULT_CALLBACK,\n } = props;\n\n const handleRuleClick = useCallback(\n (e, rule, index) => {\n e.stopPropagation();\n log.debug('Rule clicked', rule, index);\n onSelect(index);\n },\n [onSelect]\n );\n\n const handleDeleteClick = useCallback(\n (e, rule, index) => {\n e.stopPropagation();\n log.debug('Delete button clicked', rule, index);\n const updatedRules = [...rules];\n updatedRules.splice(index, 1);\n onChange(updatedRules);\n },\n [onChange, rules]\n );\n\n const handleDragHandlerClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n\n const handleDragEnd = useCallback(\n (result: DropResult) => {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (result.destination == null) {\n return;\n }\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const updatedRules = [...rules];\n const sourceInput = rules[sourceIndex];\n\n updatedRules.splice(sourceIndex, 1);\n updatedRules.splice(destinationIndex, 0, sourceInput);\n\n onChange(updatedRules);\n },\n [onChange, rules]\n );\n\n // Display list of rules\n return (\n <div className=\"conditional-formatting-rules\">\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={handleDragEnd}\n >\n <Droppable droppableId=\"droppable-custom-columns\">\n {(provided, snapshot) => (\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith,\n })}\n >\n {rules.length === 0 && (\n <div className=\"text-muted pl-2\">No formats defined</div>\n )}\n {rules.map((rule, index) => (\n <Draggable\n // eslint-disable-next-line react/no-array-index-key\n key={`${index}-${rule.type}`}\n draggableId={`${index}-${rule.type}`}\n index={index}\n disableInteractiveElementBlocking\n >\n {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (provided, snapshot) => (\n <div\n role=\"menuitem\"\n tabIndex={0}\n onClick={e => handleRuleClick(e, rule, index)}\n className={classNames('draggable-container', {\n dragging: snapshot.isDragging,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n >\n <div className=\"conditional-formatting-list-item\">\n <div className=\"formatting-item\">\n <div className=\"rule-icon\">\n <span\n className=\"rule-icon-bg\"\n style={{\n backgroundColor: getBackgroundForStyleConfig(\n (rule.config as BaseFormatConfig).style\n ),\n color: getColorForStyleConfig(\n (rule.config as BaseFormatConfig).style\n ),\n }}\n >\n {rule.type === FormatterType.ROWS\n ? 'row'\n : 'col'}\n </span>\n </div>\n <div className=\"rule-title\">\n {getRuleTitle(rule.config as BaseFormatConfig)}\n </div>\n <Button\n kind=\"ghost\"\n className=\"ml-1 px-2\"\n onClick={e => handleDeleteClick(e, rule, index)}\n icon={vsTrash}\n tooltip=\"Delete rule\"\n />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon px-2 btn-drag-handle\"\n onClick={handleDragHandlerClick}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </button>\n </div>\n </div>\n </div>\n )\n }\n </Draggable>\n ))}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n <hr />\n <Button kind=\"ghost\" onClick={onCreate} icon={dhNewCircleLargeFilled}>\n Add New Rule\n </Button>\n </div>\n );\n};\n\nexport default ConditionalFormattingMenu;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConditionalFormattingMenu.js","names":["React","useCallback","DragDropContext","Draggable","Droppable","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsGripper","vsTrash","Button","DragUtils","Tooltip","TableUtils","Log","FormatterType","getBackgroundForStyleConfig","getColorForStyleConfig","getShortLabelForConditionType","NumberCondition","StringCondition","DateCondition","log","module","DEFAULT_CALLBACK","undefined","getRuleValue","config","column","type","isNumberType","condition","IS_NULL","IS_NOT_NULL","value","isCharType","isStringType","isDateType","isBooleanType","Error","getRuleTitle","IS_BETWEEN","start","name","end","ConditionalFormattingMenu","props","rules","onChange","onCreate","onSelect","handleRuleClick","e","rule","index","stopPropagation","debug","handleDeleteClick","updatedRules","splice","handleDragHandlerClick","handleDragEnd","result","stopDragging","destination","sourceIndex","source","destinationIndex","sourceInput","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","length","map","isDragging","draggableProps","backgroundColor","style","color","ROWS","dragHandleProps","placeholder"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingMenu.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport {\n DragDropContext,\n Draggable,\n Droppable,\n DropResult,\n} from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsGripper, vsTrash } from '@deephaven/icons';\nimport { Button, DragUtils, Tooltip } from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport './ConditionalFormattingMenu.scss';\nimport {\n BaseFormatConfig,\n FormattingRule,\n FormatterType,\n getBackgroundForStyleConfig,\n getColorForStyleConfig,\n getShortLabelForConditionType,\n NumberCondition,\n StringCondition,\n DateCondition,\n} from './ConditionalFormattingUtils';\nimport { ColumnName } from '../../CommonTypes';\n\nconst log = Log.module('ConditionalFormattingMenu');\n\nexport type ChangeCallback = (rules: FormattingRule[]) => void;\n\nexport type SelectCallback = (index: number) => void;\n\nexport type CreateCallback = () => void;\n\nexport type ConditionalFormattingMenuProps = {\n rules: FormattingRule[];\n selectedColumn?: ColumnName;\n onChange?: ChangeCallback;\n onCreate?: CreateCallback;\n onSelect?: SelectCallback;\n};\n\nconst DEFAULT_CALLBACK = () => undefined;\n\nfunction getRuleValue(config: BaseFormatConfig): string {\n const {\n column: { type },\n } = config;\n if (TableUtils.isNumberType(type)) {\n return config.condition === NumberCondition.IS_NULL ||\n config.condition === NumberCondition.IS_NOT_NULL\n ? ''\n : `${config.value}`;\n }\n if (TableUtils.isCharType(type)) {\n return config.condition === DateCondition.IS_NULL ||\n config.condition === DateCondition.IS_NOT_NULL\n ? ''\n : `${config.value}`;\n }\n if (TableUtils.isStringType(type)) {\n return config.condition === StringCondition.IS_NULL ||\n config.condition === StringCondition.IS_NOT_NULL\n ? ''\n : `\"${config.value}\"`;\n }\n if (TableUtils.isDateType(type)) {\n return config.condition === DateCondition.IS_NULL ||\n config.condition === DateCondition.IS_NOT_NULL\n ? ''\n : `${config.value}`;\n }\n if (TableUtils.isBooleanType(type)) {\n return '';\n }\n throw new Error(`Invalid column type ${type} in getRuleValue`);\n}\n\nfunction getRuleTitle(config: BaseFormatConfig): string {\n if (\n TableUtils.isNumberType(config.column.type) &&\n config.condition === NumberCondition.IS_BETWEEN\n ) {\n return `${config.start} < ${config.column.name} < ${config.end}`;\n }\n return `${config.column.name} ${getShortLabelForConditionType(\n (config as BaseFormatConfig).column.type,\n (config as BaseFormatConfig).condition\n )} \n ${getRuleValue(config as BaseFormatConfig)}`;\n}\n\nfunction ConditionalFormattingMenu(\n props: ConditionalFormattingMenuProps\n): JSX.Element {\n const {\n rules = [],\n onChange = DEFAULT_CALLBACK,\n onCreate = DEFAULT_CALLBACK,\n onSelect = DEFAULT_CALLBACK,\n } = props;\n\n const handleRuleClick = useCallback(\n (e, rule, index) => {\n e.stopPropagation();\n log.debug('Rule clicked', rule, index);\n onSelect(index);\n },\n [onSelect]\n );\n\n const handleDeleteClick = useCallback(\n (e, rule, index) => {\n e.stopPropagation();\n log.debug('Delete button clicked', rule, index);\n const updatedRules = [...rules];\n updatedRules.splice(index, 1);\n onChange(updatedRules);\n },\n [onChange, rules]\n );\n\n const handleDragHandlerClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n\n const handleDragEnd = useCallback(\n (result: DropResult) => {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (result.destination == null) {\n return;\n }\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const updatedRules = [...rules];\n const sourceInput = rules[sourceIndex];\n\n updatedRules.splice(sourceIndex, 1);\n updatedRules.splice(destinationIndex, 0, sourceInput);\n\n onChange(updatedRules);\n },\n [onChange, rules]\n );\n\n // Display list of rules\n return (\n <div className=\"conditional-formatting-rules\">\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={handleDragEnd}\n >\n <Droppable droppableId=\"droppable-custom-columns\">\n {(provided, snapshot) => (\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith,\n })}\n >\n {rules.length === 0 && (\n <div className=\"text-muted pl-2\">No formats defined</div>\n )}\n {rules.map((rule, index) => (\n <Draggable\n // eslint-disable-next-line react/no-array-index-key\n key={`${index}-${rule.type}`}\n draggableId={`${index}-${rule.type}`}\n index={index}\n disableInteractiveElementBlocking\n >\n {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (provided, snapshot) => (\n <div\n role=\"menuitem\"\n tabIndex={0}\n onClick={e => handleRuleClick(e, rule, index)}\n className={classNames('draggable-container', {\n dragging: snapshot.isDragging,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n >\n <div className=\"conditional-formatting-list-item\">\n <div className=\"formatting-item\">\n <div className=\"rule-icon\">\n <span\n className=\"rule-icon-bg\"\n style={{\n backgroundColor: getBackgroundForStyleConfig(\n (rule.config as BaseFormatConfig).style\n ),\n color: getColorForStyleConfig(\n (rule.config as BaseFormatConfig).style\n ),\n }}\n >\n {rule.type === FormatterType.ROWS\n ? 'row'\n : 'col'}\n </span>\n </div>\n <div className=\"rule-title\">\n {getRuleTitle(rule.config as BaseFormatConfig)}\n </div>\n <Button\n kind=\"ghost\"\n className=\"ml-1 px-2\"\n onClick={e => handleDeleteClick(e, rule, index)}\n icon={vsTrash}\n tooltip=\"Delete rule\"\n />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon px-2 btn-drag-handle\"\n onClick={handleDragHandlerClick}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </button>\n </div>\n </div>\n </div>\n )\n }\n </Draggable>\n ))}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n <hr />\n <Button kind=\"ghost\" onClick={onCreate} icon={dhNewCircleLargeFilled}>\n Add New Rule\n </Button>\n </div>\n );\n}\n\nexport default ConditionalFormattingMenu;\n"],"mappings":"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"}