@deephaven/iris-grid 0.94.1-beta.0 → 0.95.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 (245) hide show
  1. package/dist/AdvancedFilterCreator.d.ts +5 -5
  2. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  3. package/dist/AdvancedFilterCreator.js.map +1 -1
  4. package/dist/AdvancedFilterCreatorFilterItem.d.ts +2 -2
  5. package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
  6. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValue.d.ts +2 -2
  8. package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
  9. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  10. package/dist/AdvancedFilterCreatorSelectValueList.d.ts +3 -3
  11. package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
  12. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  13. package/dist/ColumnHeaderGroup.d.ts +1 -1
  14. package/dist/ColumnHeaderGroup.d.ts.map +1 -1
  15. package/dist/ColumnHeaderGroup.js.map +1 -1
  16. package/dist/ColumnStatistics.d.ts +4 -3
  17. package/dist/ColumnStatistics.d.ts.map +1 -1
  18. package/dist/ColumnStatistics.js.map +1 -1
  19. package/dist/CommonTypes.d.ts +6 -6
  20. package/dist/CommonTypes.d.ts.map +1 -1
  21. package/dist/CommonTypes.js.map +1 -1
  22. package/dist/CrossColumnSearch.d.ts +2 -2
  23. package/dist/CrossColumnSearch.d.ts.map +1 -1
  24. package/dist/CrossColumnSearch.js.map +1 -1
  25. package/dist/EmptyIrisGridModel.d.ts +5 -5
  26. package/dist/EmptyIrisGridModel.d.ts.map +1 -1
  27. package/dist/EmptyIrisGridModel.js.map +1 -1
  28. package/dist/FilterInputField.d.ts +1 -1
  29. package/dist/FilterInputField.d.ts.map +1 -1
  30. package/dist/FilterInputField.js.map +1 -1
  31. package/dist/GotoRow.d.ts +4 -4
  32. package/dist/GotoRow.d.ts.map +1 -1
  33. package/dist/GotoRow.js.map +1 -1
  34. package/dist/IrisGrid.d.ts +16 -16
  35. package/dist/IrisGrid.d.ts.map +1 -1
  36. package/dist/IrisGrid.js.map +1 -1
  37. package/dist/IrisGridCellRendererUtils.d.ts +2 -2
  38. package/dist/IrisGridCellRendererUtils.d.ts.map +1 -1
  39. package/dist/IrisGridCellRendererUtils.js.map +1 -1
  40. package/dist/IrisGridCopyHandler.d.ts +3 -3
  41. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  42. package/dist/IrisGridCopyHandler.js.map +1 -1
  43. package/dist/IrisGridDataBarCellRenderer.d.ts +2 -2
  44. package/dist/IrisGridDataBarCellRenderer.d.ts.map +1 -1
  45. package/dist/IrisGridDataBarCellRenderer.js.map +1 -1
  46. package/dist/IrisGridIcons.js.map +1 -1
  47. package/dist/IrisGridMetricCalculator.d.ts +2 -2
  48. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  49. package/dist/IrisGridMetricCalculator.js.map +1 -1
  50. package/dist/IrisGridModel.d.ts +4 -4
  51. package/dist/IrisGridModel.d.ts.map +1 -1
  52. package/dist/IrisGridModel.js.map +1 -1
  53. package/dist/IrisGridModelFactory.d.ts +1 -1
  54. package/dist/IrisGridModelFactory.d.ts.map +1 -1
  55. package/dist/IrisGridModelFactory.js.map +1 -1
  56. package/dist/IrisGridModelUpdater.d.ts +5 -5
  57. package/dist/IrisGridModelUpdater.d.ts.map +1 -1
  58. package/dist/IrisGridModelUpdater.js.map +1 -1
  59. package/dist/IrisGridPartitionSelector.d.ts +1 -1
  60. package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
  61. package/dist/IrisGridPartitionSelector.js.map +1 -1
  62. package/dist/IrisGridPartitionedTableModel.d.ts +2 -2
  63. package/dist/IrisGridPartitionedTableModel.d.ts.map +1 -1
  64. package/dist/IrisGridPartitionedTableModel.js.map +1 -1
  65. package/dist/IrisGridProxyModel.d.ts +2 -2
  66. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  67. package/dist/IrisGridProxyModel.js.map +1 -1
  68. package/dist/IrisGridRenderer.d.ts +5 -5
  69. package/dist/IrisGridRenderer.d.ts.map +1 -1
  70. package/dist/IrisGridRenderer.js.map +1 -1
  71. package/dist/IrisGridTableModel.d.ts +3 -3
  72. package/dist/IrisGridTableModel.d.ts.map +1 -1
  73. package/dist/IrisGridTableModel.js.map +1 -1
  74. package/dist/IrisGridTableModelTemplate.d.ts +6 -6
  75. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  76. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  77. package/dist/IrisGridTestUtils.d.ts +1 -1
  78. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  79. package/dist/IrisGridTestUtils.js.map +1 -1
  80. package/dist/IrisGridTextCellRenderer.d.ts +2 -2
  81. package/dist/IrisGridTextCellRenderer.d.ts.map +1 -1
  82. package/dist/IrisGridTextCellRenderer.js.map +1 -1
  83. package/dist/IrisGridTheme.d.ts +1 -1
  84. package/dist/IrisGridTheme.d.ts.map +1 -1
  85. package/dist/IrisGridTheme.js.map +1 -1
  86. package/dist/IrisGridThemeProvider.d.ts +2 -2
  87. package/dist/IrisGridThemeProvider.d.ts.map +1 -1
  88. package/dist/IrisGridThemeProvider.js.map +1 -1
  89. package/dist/IrisGridTreeTableModel.d.ts +2 -2
  90. package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
  91. package/dist/IrisGridTreeTableModel.js.map +1 -1
  92. package/dist/IrisGridUtils.d.ts +9 -9
  93. package/dist/IrisGridUtils.d.ts.map +1 -1
  94. package/dist/IrisGridUtils.js.map +1 -1
  95. package/dist/MissingKeyError.d.ts +2 -2
  96. package/dist/MissingKeyError.d.ts.map +1 -1
  97. package/dist/MissingKeyError.js.map +1 -1
  98. package/dist/PartitionedGridModel.d.ts +1 -1
  99. package/dist/PartitionedGridModel.d.ts.map +1 -1
  100. package/dist/PartitionedGridModel.js.map +1 -1
  101. package/dist/PendingDataBottomBar.d.ts +1 -1
  102. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  103. package/dist/PendingDataBottomBar.js.map +1 -1
  104. package/dist/format-context-menus/DateTimeFormatContextMenu.d.ts +2 -2
  105. package/dist/format-context-menus/DateTimeFormatContextMenu.d.ts.map +1 -1
  106. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
  107. package/dist/format-context-menus/DecimalFormatContextMenu.d.ts +2 -2
  108. package/dist/format-context-menus/DecimalFormatContextMenu.d.ts.map +1 -1
  109. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  110. package/dist/format-context-menus/FormatContextMenuUtils.d.ts +1 -1
  111. package/dist/format-context-menus/FormatContextMenuUtils.d.ts.map +1 -1
  112. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  113. package/dist/format-context-menus/IntegerFormatContextMenu.d.ts +2 -2
  114. package/dist/format-context-menus/IntegerFormatContextMenu.d.ts.map +1 -1
  115. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  116. package/dist/key-handlers/ClearFilterKeyHandler.d.ts +1 -1
  117. package/dist/key-handlers/ClearFilterKeyHandler.d.ts.map +1 -1
  118. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
  119. package/dist/key-handlers/CopyCellKeyHandler.d.ts +1 -1
  120. package/dist/key-handlers/CopyCellKeyHandler.d.ts.map +1 -1
  121. package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
  122. package/dist/key-handlers/CopyKeyHandler.d.ts +1 -1
  123. package/dist/key-handlers/CopyKeyHandler.d.ts.map +1 -1
  124. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  125. package/dist/key-handlers/ReverseKeyHandler.d.ts +1 -1
  126. package/dist/key-handlers/ReverseKeyHandler.d.ts.map +1 -1
  127. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  128. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.d.ts +1 -1
  129. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.d.ts.map +1 -1
  130. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  131. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts +1 -1
  132. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts.map +1 -1
  133. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  134. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.d.ts +1 -1
  135. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.d.ts.map +1 -1
  136. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  137. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +5 -5
  138. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  139. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  140. package/dist/mousehandlers/IrisGridCopyCellMouseHandler.d.ts +2 -2
  141. package/dist/mousehandlers/IrisGridCopyCellMouseHandler.d.ts.map +1 -1
  142. package/dist/mousehandlers/IrisGridCopyCellMouseHandler.js.map +1 -1
  143. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.d.ts +1 -1
  144. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.d.ts.map +1 -1
  145. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  146. package/dist/mousehandlers/IrisGridFilterMouseHandler.d.ts +1 -1
  147. package/dist/mousehandlers/IrisGridFilterMouseHandler.d.ts.map +1 -1
  148. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  149. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.d.ts +1 -1
  150. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.d.ts.map +1 -1
  151. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
  152. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.d.ts +1 -1
  153. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.d.ts.map +1 -1
  154. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
  155. package/dist/mousehandlers/IrisGridSortMouseHandler.d.ts +1 -1
  156. package/dist/mousehandlers/IrisGridSortMouseHandler.d.ts.map +1 -1
  157. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  158. package/dist/mousehandlers/IrisGridTokenMouseHandler.d.ts +2 -2
  159. package/dist/mousehandlers/IrisGridTokenMouseHandler.d.ts.map +1 -1
  160. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
  161. package/dist/mousehandlers/PendingMouseHandler.d.ts +2 -2
  162. package/dist/mousehandlers/PendingMouseHandler.d.ts.map +1 -1
  163. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  164. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  165. package/dist/sidebar/ChartBuilder.d.ts +1 -1
  166. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  167. package/dist/sidebar/ChartBuilder.js.map +1 -1
  168. package/dist/sidebar/CustomColumnBuilder.d.ts +3 -3
  169. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  170. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  171. package/dist/sidebar/CustomColumnInput.d.ts +1 -1
  172. package/dist/sidebar/CustomColumnInput.d.ts.map +1 -1
  173. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  174. package/dist/sidebar/InputEditor.d.ts +1 -1
  175. package/dist/sidebar/InputEditor.d.ts.map +1 -1
  176. package/dist/sidebar/InputEditor.js.map +1 -1
  177. package/dist/sidebar/RollupRows.d.ts +6 -6
  178. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  179. package/dist/sidebar/RollupRows.js.map +1 -1
  180. package/dist/sidebar/SelectDistinctBuilder.d.ts +4 -4
  181. package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
  182. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  183. package/dist/sidebar/TableCsvExporter.d.ts +3 -3
  184. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  185. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  186. package/dist/sidebar/TableSaver.d.ts +3 -3
  187. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  188. package/dist/sidebar/TableSaver.js.map +1 -1
  189. package/dist/sidebar/aggregations/AggregationEdit.d.ts +2 -2
  190. package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
  191. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  192. package/dist/sidebar/aggregations/AggregationUtils.d.ts +1 -1
  193. package/dist/sidebar/aggregations/AggregationUtils.d.ts.map +1 -1
  194. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  195. package/dist/sidebar/aggregations/Aggregations.d.ts +1 -1
  196. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  197. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  198. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +1 -1
  199. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  200. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  201. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -1
  202. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  203. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  204. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts +1 -1
  205. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  206. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  207. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.d.ts +1 -1
  208. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.d.ts.map +1 -1
  209. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  210. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +2 -2
  211. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  212. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  213. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +1 -1
  214. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  215. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  216. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +1 -1
  217. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  218. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  219. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts +1 -1
  220. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts.map +1 -1
  221. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  222. package/dist/sidebar/index.d.ts +1 -1
  223. package/dist/sidebar/index.d.ts.map +1 -1
  224. package/dist/sidebar/index.js.map +1 -1
  225. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +7 -6
  226. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -1
  227. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  228. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.d.ts +3 -3
  229. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.d.ts.map +1 -1
  230. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
  231. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts +1 -1
  232. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts.map +1 -1
  233. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  234. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  235. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -1
  236. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts +1 -1
  237. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts.map +1 -1
  238. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  239. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.d.ts +1 -1
  240. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.d.ts.map +1 -1
  241. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
  242. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +2 -2
  243. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -1
  244. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  245. package/package.json +16 -16
@@ -1 +1 @@
1
- {"version":3,"file":"AggregationUtils.js","names":["TableUtils","AggregationOperation","SELECTABLE_OPTIONS","SUM","ABS_SUM","MIN","MAX","VAR","AVG","STD","FIRST","LAST","COUNT_DISTINCT","DISTINCT","COUNT","UNIQUE","isRollupOperation","type","isValidOperation","operationType","columnType","isNumberType","isDateType","isTextType","SKIP","filterValidColumns","columns","filter","c","isProxy","getOperationColumnNames","selected","invert","map","_ref","name","includes"],"sources":["../../../src/sidebar/aggregations/AggregationUtils.ts"],"sourcesContent":["import { TableUtils } from '@deephaven/jsapi-utils';\nimport { DisplayColumn } from '../../IrisGridModel';\nimport AggregationOperation from './AggregationOperation';\n\nexport const SELECTABLE_OPTIONS = [\n AggregationOperation.SUM,\n AggregationOperation.ABS_SUM,\n AggregationOperation.MIN,\n AggregationOperation.MAX,\n AggregationOperation.VAR,\n AggregationOperation.AVG,\n AggregationOperation.STD,\n AggregationOperation.FIRST,\n AggregationOperation.LAST,\n AggregationOperation.COUNT_DISTINCT,\n AggregationOperation.DISTINCT,\n AggregationOperation.COUNT,\n AggregationOperation.UNIQUE,\n];\n\n/**\n * Check if an operation requires a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation applies to the whole table, false if applies to columns\n */\nexport const isRollupOperation = (type: AggregationOperation): boolean => {\n switch (type) {\n // currently no rollup only operations, but there has been in the past\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is valid against the given column type\n * @param operationType The operation to check\n * @param columnType The column type to check against\n */\nexport const isValidOperation = (\n operationType: AggregationOperation,\n columnType: string\n): boolean => {\n switch (operationType) {\n case AggregationOperation.COUNT:\n case AggregationOperation.FIRST:\n case AggregationOperation.LAST:\n case AggregationOperation.COUNT_DISTINCT:\n case AggregationOperation.DISTINCT:\n case AggregationOperation.UNIQUE:\n return true;\n case AggregationOperation.MIN:\n case AggregationOperation.MAX:\n return (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isDateType(columnType) ||\n TableUtils.isTextType(columnType)\n );\n case AggregationOperation.SUM:\n case AggregationOperation.ABS_SUM:\n case AggregationOperation.VAR:\n case AggregationOperation.AVG:\n case AggregationOperation.STD:\n return TableUtils.isNumberType(columnType);\n case AggregationOperation.SKIP:\n return false;\n // No default case - if AggregationOperation is added, we'll get a compile time error\n }\n};\n\nexport const filterValidColumns = (\n columns: readonly DisplayColumn[],\n operationType: AggregationOperation\n): DisplayColumn[] =>\n columns.filter(\n c => c.isProxy !== true && isValidOperation(operationType, c.type)\n );\n\nexport const getOperationColumnNames = (\n columns: readonly DisplayColumn[],\n operationType: AggregationOperation,\n selected: readonly string[],\n invert: boolean\n): string[] =>\n filterValidColumns(columns, operationType)\n .map(({ name }) => name)\n .filter(name => (selected.includes(name) ? !invert : invert));\n\nexport default {\n isRollupOperation,\n filterValidColumns,\n getOperationColumnNames,\n};\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,wBAAwB;AAAC,OAE7CC,oBAAoB;AAE3B,OAAO,IAAMC,kBAAkB,GAAG,CAChCD,oBAAoB,CAACE,GAAG,EACxBF,oBAAoB,CAACG,OAAO,EAC5BH,oBAAoB,CAACI,GAAG,EACxBJ,oBAAoB,CAACK,GAAG,EACxBL,oBAAoB,CAACM,GAAG,EACxBN,oBAAoB,CAACO,GAAG,EACxBP,oBAAoB,CAACQ,GAAG,EACxBR,oBAAoB,CAACS,KAAK,EAC1BT,oBAAoB,CAACU,IAAI,EACzBV,oBAAoB,CAACW,cAAc,EACnCX,oBAAoB,CAACY,QAAQ,EAC7BZ,oBAAoB,CAACa,KAAK,EAC1Bb,oBAAoB,CAACc,MAAM,CAC5B;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,iBAAiB,GAAIC,IAA0B,IAAc;EACxE,QAAQA,IAAI;IACV;IACA;MACE,OAAO,KAAK;EAChB;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,gBAAgB,GAAGA,CAC9BC,aAAmC,EACnCC,UAAkB,KACN;EACZ,QAAQD,aAAa;IACnB,KAAKlB,oBAAoB,CAACa,KAAK;IAC/B,KAAKb,oBAAoB,CAACS,KAAK;IAC/B,KAAKT,oBAAoB,CAACU,IAAI;IAC9B,KAAKV,oBAAoB,CAACW,cAAc;IACxC,KAAKX,oBAAoB,CAACY,QAAQ;IAClC,KAAKZ,oBAAoB,CAACc,MAAM;MAC9B,OAAO,IAAI;IACb,KAAKd,oBAAoB,CAACI,GAAG;IAC7B,KAAKJ,oBAAoB,CAACK,GAAG;MAC3B,OACEN,UAAU,CAACqB,YAAY,CAACD,UAAU,CAAC,IACnCpB,UAAU,CAACsB,UAAU,CAACF,UAAU,CAAC,IACjCpB,UAAU,CAACuB,UAAU,CAACH,UAAU,CAAC;IAErC,KAAKnB,oBAAoB,CAACE,GAAG;IAC7B,KAAKF,oBAAoB,CAACG,OAAO;IACjC,KAAKH,oBAAoB,CAACM,GAAG;IAC7B,KAAKN,oBAAoB,CAACO,GAAG;IAC7B,KAAKP,oBAAoB,CAACQ,GAAG;MAC3B,OAAOT,UAAU,CAACqB,YAAY,CAACD,UAAU,CAAC;IAC5C,KAAKnB,oBAAoB,CAACuB,IAAI;MAC5B,OAAO,KAAK;IACd;EACF;AACF,CAAC;;AAED,OAAO,IAAMC,kBAAkB,GAAGA,CAChCC,OAAiC,EACjCP,aAAmC,KAEnCO,OAAO,CAACC,MAAM,CACZC,CAAC,IAAIA,CAAC,CAACC,OAAO,KAAK,IAAI,IAAIX,gBAAgB,CAACC,aAAa,EAAES,CAAC,CAACX,IAAI,CACnE,CAAC;AAEH,OAAO,IAAMa,uBAAuB,GAAGA,CACrCJ,OAAiC,EACjCP,aAAmC,EACnCY,QAA2B,EAC3BC,MAAe,KAEfP,kBAAkB,CAACC,OAAO,EAAEP,aAAa,CAAC,CACvCc,GAAG,CAACC,IAAA;EAAA,IAAC;IAAEC;EAAK,CAAC,GAAAD,IAAA;EAAA,OAAKC,IAAI;AAAA,EAAC,CACvBR,MAAM,CAACQ,IAAI,IAAKJ,QAAQ,CAACK,QAAQ,CAACD,IAAI,CAAC,GAAG,CAACH,MAAM,GAAGA,MAAO,CAAC;AAEjE,eAAe;EACbhB,iBAAiB;EACjBS,kBAAkB;EAClBK;AACF,CAAC"}
1
+ {"version":3,"file":"AggregationUtils.js","names":["TableUtils","AggregationOperation","SELECTABLE_OPTIONS","SUM","ABS_SUM","MIN","MAX","VAR","AVG","STD","FIRST","LAST","COUNT_DISTINCT","DISTINCT","COUNT","UNIQUE","isRollupOperation","type","isValidOperation","operationType","columnType","isNumberType","isDateType","isTextType","SKIP","filterValidColumns","columns","filter","c","isProxy","getOperationColumnNames","selected","invert","map","_ref","name","includes"],"sources":["../../../src/sidebar/aggregations/AggregationUtils.ts"],"sourcesContent":["import { TableUtils } from '@deephaven/jsapi-utils';\nimport { type DisplayColumn } from '../../IrisGridModel';\nimport AggregationOperation from './AggregationOperation';\n\nexport const SELECTABLE_OPTIONS = [\n AggregationOperation.SUM,\n AggregationOperation.ABS_SUM,\n AggregationOperation.MIN,\n AggregationOperation.MAX,\n AggregationOperation.VAR,\n AggregationOperation.AVG,\n AggregationOperation.STD,\n AggregationOperation.FIRST,\n AggregationOperation.LAST,\n AggregationOperation.COUNT_DISTINCT,\n AggregationOperation.DISTINCT,\n AggregationOperation.COUNT,\n AggregationOperation.UNIQUE,\n];\n\n/**\n * Check if an operation requires a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation applies to the whole table, false if applies to columns\n */\nexport const isRollupOperation = (type: AggregationOperation): boolean => {\n switch (type) {\n // currently no rollup only operations, but there has been in the past\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is valid against the given column type\n * @param operationType The operation to check\n * @param columnType The column type to check against\n */\nexport const isValidOperation = (\n operationType: AggregationOperation,\n columnType: string\n): boolean => {\n switch (operationType) {\n case AggregationOperation.COUNT:\n case AggregationOperation.FIRST:\n case AggregationOperation.LAST:\n case AggregationOperation.COUNT_DISTINCT:\n case AggregationOperation.DISTINCT:\n case AggregationOperation.UNIQUE:\n return true;\n case AggregationOperation.MIN:\n case AggregationOperation.MAX:\n return (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isDateType(columnType) ||\n TableUtils.isTextType(columnType)\n );\n case AggregationOperation.SUM:\n case AggregationOperation.ABS_SUM:\n case AggregationOperation.VAR:\n case AggregationOperation.AVG:\n case AggregationOperation.STD:\n return TableUtils.isNumberType(columnType);\n case AggregationOperation.SKIP:\n return false;\n // No default case - if AggregationOperation is added, we'll get a compile time error\n }\n};\n\nexport const filterValidColumns = (\n columns: readonly DisplayColumn[],\n operationType: AggregationOperation\n): DisplayColumn[] =>\n columns.filter(\n c => c.isProxy !== true && isValidOperation(operationType, c.type)\n );\n\nexport const getOperationColumnNames = (\n columns: readonly DisplayColumn[],\n operationType: AggregationOperation,\n selected: readonly string[],\n invert: boolean\n): string[] =>\n filterValidColumns(columns, operationType)\n .map(({ name }) => name)\n .filter(name => (selected.includes(name) ? !invert : invert));\n\nexport default {\n isRollupOperation,\n filterValidColumns,\n getOperationColumnNames,\n};\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,wBAAwB;AAAC,OAE7CC,oBAAoB;AAE3B,OAAO,IAAMC,kBAAkB,GAAG,CAChCD,oBAAoB,CAACE,GAAG,EACxBF,oBAAoB,CAACG,OAAO,EAC5BH,oBAAoB,CAACI,GAAG,EACxBJ,oBAAoB,CAACK,GAAG,EACxBL,oBAAoB,CAACM,GAAG,EACxBN,oBAAoB,CAACO,GAAG,EACxBP,oBAAoB,CAACQ,GAAG,EACxBR,oBAAoB,CAACS,KAAK,EAC1BT,oBAAoB,CAACU,IAAI,EACzBV,oBAAoB,CAACW,cAAc,EACnCX,oBAAoB,CAACY,QAAQ,EAC7BZ,oBAAoB,CAACa,KAAK,EAC1Bb,oBAAoB,CAACc,MAAM,CAC5B;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,iBAAiB,GAAIC,IAA0B,IAAc;EACxE,QAAQA,IAAI;IACV;IACA;MACE,OAAO,KAAK;EAChB;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,gBAAgB,GAAGA,CAC9BC,aAAmC,EACnCC,UAAkB,KACN;EACZ,QAAQD,aAAa;IACnB,KAAKlB,oBAAoB,CAACa,KAAK;IAC/B,KAAKb,oBAAoB,CAACS,KAAK;IAC/B,KAAKT,oBAAoB,CAACU,IAAI;IAC9B,KAAKV,oBAAoB,CAACW,cAAc;IACxC,KAAKX,oBAAoB,CAACY,QAAQ;IAClC,KAAKZ,oBAAoB,CAACc,MAAM;MAC9B,OAAO,IAAI;IACb,KAAKd,oBAAoB,CAACI,GAAG;IAC7B,KAAKJ,oBAAoB,CAACK,GAAG;MAC3B,OACEN,UAAU,CAACqB,YAAY,CAACD,UAAU,CAAC,IACnCpB,UAAU,CAACsB,UAAU,CAACF,UAAU,CAAC,IACjCpB,UAAU,CAACuB,UAAU,CAACH,UAAU,CAAC;IAErC,KAAKnB,oBAAoB,CAACE,GAAG;IAC7B,KAAKF,oBAAoB,CAACG,OAAO;IACjC,KAAKH,oBAAoB,CAACM,GAAG;IAC7B,KAAKN,oBAAoB,CAACO,GAAG;IAC7B,KAAKP,oBAAoB,CAACQ,GAAG;MAC3B,OAAOT,UAAU,CAACqB,YAAY,CAACD,UAAU,CAAC;IAC5C,KAAKnB,oBAAoB,CAACuB,IAAI;MAC5B,OAAO,KAAK;IACd;EACF;AACF,CAAC;;AAED,OAAO,IAAMC,kBAAkB,GAAGA,CAChCC,OAAiC,EACjCP,aAAmC,KAEnCO,OAAO,CAACC,MAAM,CACZC,CAAC,IAAIA,CAAC,CAACC,OAAO,KAAK,IAAI,IAAIX,gBAAgB,CAACC,aAAa,EAAES,CAAC,CAACX,IAAI,CACnE,CAAC;AAEH,OAAO,IAAMa,uBAAuB,GAAGA,CACrCJ,OAAiC,EACjCP,aAAmC,EACnCY,QAA2B,EAC3BC,MAAe,KAEfP,kBAAkB,CAACC,OAAO,EAAEP,aAAa,CAAC,CACvCc,GAAG,CAACC,IAAA;EAAA,IAAC;IAAEC;EAAK,CAAC,GAAAD,IAAA;EAAA,OAAKC,IAAI;AAAA,EAAC,CACvBR,MAAM,CAACQ,IAAI,IAAKJ,QAAQ,CAACK,QAAQ,CAACD,IAAI,CAAC,GAAG,CAACH,MAAM,GAAGA,MAAO,CAAC;AAEjE,eAAe;EACbhB,iBAAiB;EACjBS,kBAAkB;EAClBK;AACF,CAAC"}
@@ -1,4 +1,4 @@
1
- import AggregationOperation from './AggregationOperation';
1
+ import type AggregationOperation from './AggregationOperation';
2
2
  import './Aggregations.scss';
3
3
  export type Aggregation = {
4
4
  operation: AggregationOperation;
@@ -1 +1 @@
1
- {"version":3,"file":"Aggregations.d.ts","sourceRoot":"","sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"names":[],"mappings":"AAsBA,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,OAAO,qBAAqB,CAAC;AAI7B,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,oBAAoB,CAAC;IAChC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAClD,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,iBAAS,YAAY,CAAC,EACpB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,GACP,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CA0PjC;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"Aggregations.d.ts","sourceRoot":"","sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,oBAAoB,MAAM,wBAAwB,CAAC;AAE/D,OAAO,qBAAqB,CAAC;AAI7B,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,oBAAoB,CAAC;IAChC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAClD,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,iBAAS,YAAY,CAAC,EACpB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,GACP,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CA0PjC;AAED,eAAe,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Aggregations.js","names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","Radio","RadioGroup","Button","AggregationUtils","SELECTABLE_OPTIONS","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","Aggregations","_ref","isRollup","settings","onChange","onEdit","aggregations","showOnTop","options","filter","option","some","aggregation","operation","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","_objectSpread","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","_ref2","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","length","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","value","setDefaultOperation","includes","renderAggregation","_ref3","item","isClone","selectedCount","text","badgeText","concat","undefined","className","isEditable","children","icon","renderBadge","renderHandle","kind","tooltip","onClick","disabled","isOptionsShown","isAggregationsShown","map","type","id","marginStart","orientation","onDragStart","onDragEnd","itemCount","items","renderItem","offset","onSelectionChange","onSelect","isMultiSelect"],"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n Radio,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { ModelIndex } from '@deephaven/grid';\nimport AggregationOperation from './AggregationOperation';\nimport AggregationUtils, { SELECTABLE_OPTIONS } from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: readonly string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: readonly Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n settings: AggregationSettings;\n onChange: (settings: AggregationSettings) => void;\n onEdit: (aggregation: Aggregation) => void;\n};\n\nfunction Aggregations({\n isRollup,\n settings,\n onChange,\n onEdit,\n}: AggregationsProps): JSX.Element {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option)\n ),\n [aggregations]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<Range[]>([]);\n const changeSettings = useCallback(\n changedSettings => {\n onChange({ ...settings, ...changedSettings });\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n newAggregations => {\n changeSettings({ aggregations: newAggregations });\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n newShowOnTop => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination === null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n operation => {\n setSelectedOperation(operation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations([\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ]);\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n changeAggregations(\n aggregations.filter((aggregation, index) => index !== itemIndex)\n );\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n newSelectedRanges => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n itemIndex => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (value: string) => {\n changeShowOnTop(value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone = false,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div>\n <label id=\"placement-options-label\">Placement:&nbsp;</label>\n <RadioGroup\n aria-labelledby=\"placement-options-label\"\n marginStart=\"size-125\"\n orientation=\"horizontal\"\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <Radio value=\"true\">Top</Radio>\n <Radio value=\"false\">Bottom</Radio>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n}\n\nexport default Aggregations;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Aggregations.js","names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","Radio","RadioGroup","Button","AggregationUtils","SELECTABLE_OPTIONS","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","Aggregations","_ref","isRollup","settings","onChange","onEdit","aggregations","showOnTop","options","filter","option","some","aggregation","operation","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","_objectSpread","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","_ref2","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","length","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","value","setDefaultOperation","includes","renderAggregation","_ref3","item","isClone","selectedCount","text","badgeText","concat","undefined","className","isEditable","children","icon","renderBadge","renderHandle","kind","tooltip","onClick","disabled","isOptionsShown","isAggregationsShown","map","type","id","marginStart","orientation","onDragStart","onDragEnd","itemCount","items","renderItem","offset","onSelectionChange","onSelect","isMultiSelect"],"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n Radio,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { type ModelIndex } from '@deephaven/grid';\nimport type AggregationOperation from './AggregationOperation';\nimport AggregationUtils, { SELECTABLE_OPTIONS } from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: readonly string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: readonly Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n settings: AggregationSettings;\n onChange: (settings: AggregationSettings) => void;\n onEdit: (aggregation: Aggregation) => void;\n};\n\nfunction Aggregations({\n isRollup,\n settings,\n onChange,\n onEdit,\n}: AggregationsProps): JSX.Element {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option)\n ),\n [aggregations]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<Range[]>([]);\n const changeSettings = useCallback(\n changedSettings => {\n onChange({ ...settings, ...changedSettings });\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n newAggregations => {\n changeSettings({ aggregations: newAggregations });\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n newShowOnTop => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination === null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n operation => {\n setSelectedOperation(operation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations([\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ]);\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n changeAggregations(\n aggregations.filter((aggregation, index) => index !== itemIndex)\n );\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n newSelectedRanges => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n itemIndex => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (value: string) => {\n changeShowOnTop(value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone = false,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div>\n <label id=\"placement-options-label\">Placement:&nbsp;</label>\n <RadioGroup\n aria-labelledby=\"placement-options-label\"\n marginStart=\"size-125\"\n orientation=\"horizontal\"\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <Radio value=\"true\">Top</Radio>\n <Radio value=\"false\">Bottom</Radio>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n}\n\nexport default Aggregations;\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { dh as DhType } from '@deephaven/jsapi-types';
2
- import { BaseFormatConfig, ChangeCallback, ModelColumn } from './ConditionalFormattingUtils';
2
+ import { type BaseFormatConfig, type ChangeCallback, type ModelColumn } from './ConditionalFormattingUtils';
3
3
  export interface ColumnFormatEditorProps {
4
4
  columns: ModelColumn[];
5
5
  config?: BaseFormatConfig;
@@ -1 +1 @@
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,gBAAgB,EAChB,cAAc,EAId,WAAW,EAEZ,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,CA2GvE;AAED,eAAe,kBAAkB,CAAC"}
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,EAEjB,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,CA2GvE;AAED,eAAe,kBAAkB,CAAC"}
@@ -1 +1 @@
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","type","name","column","config","_objectSpread","style","ColumnFormatEditor","props","_columns$find","dh","onChange","selectedColumn","setColumn","find","c","conditionConfig","setConditionConfig","conditionValid","setConditionValid","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 } from '@deephaven/components';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n BaseFormatConfig,\n ChangeCallback,\n getDefaultConditionConfigForType,\n getConditionConfig,\n getDefaultStyleConfig,\n ModelColumn,\n FormatStyleType,\n} from './ConditionalFormattingUtils';\nimport ConditionEditor from './ConditionEditor';\nimport StyleEditor from './StyleEditor';\n\nconst log = Log.module('ColumnFormatEditor');\n\nexport interface ColumnFormatEditorProps {\n columns: ModelColumn[];\n config?: BaseFormatConfig;\n dh: 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 => {\n const newColumn = columns.find(({ name }) => name === value);\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(`Column ${value} not found.`);\n }\n },\n [columns, selectedColumn]\n );\n\n const handleConditionChange = useCallback(\n (updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n },\n []\n );\n\n const handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n\n useEffect(\n function updateColumnFormat() {\n let isValid = conditionValid;\n\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, invalidating update.');\n isValid = false;\n }\n if (\n selectedStyle === undefined ||\n selectedStyle.type === FormatStyleType.NO_FORMATTING\n ) {\n log.debug('Style is not selected, invalidating update.');\n isValid = false;\n }\n\n const { type, name } = selectedColumn;\n const column = { type, name };\n onChange(\n {\n column,\n style: selectedStyle,\n ...conditionConfig,\n },\n isValid\n );\n },\n [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]\n );\n\n const 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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"}
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","type","name","column","config","_objectSpread","style","ColumnFormatEditor","props","_columns$find","dh","onChange","selectedColumn","setColumn","find","c","conditionConfig","setConditionConfig","conditionValid","setConditionValid","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 } 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} 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 => {\n const newColumn = columns.find(({ name }) => name === value);\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(`Column ${value} not found.`);\n }\n },\n [columns, selectedColumn]\n );\n\n const handleConditionChange = useCallback(\n (updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n },\n []\n );\n\n const handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n\n useEffect(\n function updateColumnFormat() {\n let isValid = conditionValid;\n\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, invalidating update.');\n isValid = false;\n }\n if (\n selectedStyle === undefined ||\n selectedStyle.type === FormatStyleType.NO_FORMATTING\n ) {\n log.debug('Style is not selected, invalidating update.');\n isValid = false;\n }\n\n const { type, name } = selectedColumn;\n const column = { type, name };\n onChange(\n {\n column,\n style: selectedStyle,\n ...conditionConfig,\n },\n isValid\n );\n },\n [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]\n );\n\n const 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":";;;;;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AACxE,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,QAAQ,QAAQ,uBAAuB;AAAC,SAK/CC,gCAAgC,EAChCC,kBAAkB,EAClBC,qBAAqB,EAErBC,eAAe;AAAA,OAEVC,eAAe;AAAA,OACfC,WAAW;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAAA,SAAAC,QAAA,IAAAC,SAAA;AAElB,IAAMC,GAAG,GAAGd,GAAG,CAACe,MAAM,CAAC,oBAAoB,CAAC;AAS5C,IAAMC,gBAAgB,GAAGA,CAAA,KAAYC,SAAS;AAE9C,SAASC,iBAAiBA,CAACC,OAAsB,EAAoB;EACnE,IAAM;IAAEC,IAAI;IAAEC;EAAK,CAAC,GAAGF,OAAO,CAAC,CAAC,CAAC;EACjC,IAAMG,MAAM,GAAG;IAAEF,IAAI;IAAEC;EAAK,CAAC;EAC7B,IAAME,MAAM,GAAAC,aAAA;IACVF,MAAM;IACNG,KAAK,EAAErB,qBAAqB,CAAC;EAAC,GAC3BF,gCAAgC,CAACkB,IAAI,CAAC,CAC1C;EACD,OAAOG,MAAM;AACf;AAEA,SAASG,kBAAkBA,CAACC,KAA8B,EAAe;EAAA,IAAAC,aAAA;EACvE,IAAM;IACJT,OAAO;IACPI,MAAM,GAAGL,iBAAiB,CAACC,OAAO,CAAC;IACnCU,EAAE;IACFC,QAAQ,GAAGd;EACb,CAAC,GAAGW,KAAK;EAET,IAAM,CAACI,cAAc,EAAEC,SAAS,CAAC,GAAGjC,QAAQ,EAAA6B,aAAA,GAC1CT,OAAO,CAACc,IAAI,CACVC,CAAC,IAAIA,CAAC,CAACb,IAAI,KAAKE,MAAM,CAACD,MAAM,CAACD,IAAI,IAAIa,CAAC,CAACd,IAAI,KAAKG,MAAM,CAACD,MAAM,CAACF,IACjE,CAAC,cAAAQ,aAAA,cAAAA,aAAA,GAAIT,OAAO,CAAC,CAAC,CAChB,CAAC;EACD,IAAM,CAACgB,eAAe,EAAEC,kBAAkB,CAAC,GAAGrC,QAAQ,CACpDI,kBAAkB,CAACoB,MAAM,CAC3B,CAAC;EACD,IAAM,CAACc,cAAc,EAAEC,iBAAiB,CAAC,GAAGvC,QAAQ,CAAC,KAAK,CAAC;EAC3D,IAAM,CAACwC,aAAa,EAAEC,QAAQ,CAAC,GAAGzC,QAAQ,CAACwB,MAAM,CAACE,KAAK,CAAC;EAExD,IAAMgB,kBAAkB,GAAG7C,WAAW,CACpC8C,KAAK,IAAI;IACP,IAAMC,SAAS,GAAGxB,OAAO,CAACc,IAAI,CAACW,IAAA;MAAA,IAAC;QAAEvB;MAAK,CAAC,GAAAuB,IAAA;MAAA,OAAKvB,IAAI,KAAKqB,KAAK;IAAA,EAAC;IAC5D,IAAIC,SAAS,KAAK1B,SAAS,EAAE;MAC3Be,SAAS,CAACW,SAAS,CAAC;MACpB,IAAIZ,cAAc,CAACX,IAAI,KAAKuB,SAAS,CAACvB,IAAI,EAAE;QAC1CgB,kBAAkB,CAAClC,gCAAgC,CAACyC,SAAS,CAACvB,IAAI,CAAC,CAAC;QACpEkB,iBAAiB,CAAC,KAAK,CAAC;MAC1B;IACF,CAAC,MAAM;MACLxB,GAAG,CAAC+B,KAAK,WAAAC,MAAA,CAAWJ,KAAK,gBAAa,CAAC;IACzC;EACF,CAAC,EACD,CAACvB,OAAO,EAAEY,cAAc,CAC1B,CAAC;EAED,IAAMgB,qBAAqB,GAAGnD,WAAW,CACvC,CAACoD,sBAAsB,EAAEC,OAAO,KAAK;IACnCnC,GAAG,CAACoC,KAAK,CAAC,uBAAuB,EAAEF,sBAAsB,EAAEC,OAAO,CAAC;IACnEb,kBAAkB,CAACY,sBAAsB,CAAC;IAC1CV,iBAAiB,CAACW,OAAO,CAAC;EAC5B,CAAC,EACD,EACF,CAAC;EAED,IAAME,iBAAiB,GAAGvD,WAAW,CAACwD,kBAAkB,IAAI;IAC1DtC,GAAG,CAACoC,KAAK,CAAC,mBAAmB,EAAEE,kBAAkB,CAAC;IAClDZ,QAAQ,CAACY,kBAAkB,CAAC;EAC9B,CAAC,EAAE,EAAE,CAAC;EAENvD,SAAS,CACP,SAASwD,kBAAkBA,CAAA,EAAG;IAC5B,IAAIJ,OAAO,GAAGZ,cAAc;IAE5B,IAAIN,cAAc,KAAKd,SAAS,EAAE;MAChCH,GAAG,CAACoC,KAAK,CAAC,8CAA8C,CAAC;MACzDD,OAAO,GAAG,KAAK;IACjB;IACA,IACEV,aAAa,KAAKtB,SAAS,IAC3BsB,aAAa,CAACnB,IAAI,KAAKf,eAAe,CAACiD,aAAa,EACpD;MACAxC,GAAG,CAACoC,KAAK,CAAC,6CAA6C,CAAC;MACxDD,OAAO,GAAG,KAAK;IACjB;IAEA,IAAM;MAAE7B,IAAI;MAAEC;IAAK,CAAC,GAAGU,cAAc;IACrC,IAAMT,MAAM,GAAG;MAAEF,IAAI;MAAEC;IAAK,CAAC;IAC7BS,QAAQ,CAAAN,aAAA;MAEJF,MAAM;MACNG,KAAK,EAAEc;IAAa,GACjBJ,eAAe,GAEpBc,OACF,CAAC;EACH,CAAC,EACD,CAACnB,QAAQ,EAAEC,cAAc,EAAEQ,aAAa,EAAEJ,eAAe,EAAEE,cAAc,CAC3E,CAAC;EAED,IAAMkB,WAAW,GAAGzD,OAAO,CAAC,MAAMqB,OAAO,CAACqC,GAAG,CAACC,KAAA;IAAA,IAAC;MAAEpC;IAAK,CAAC,GAAAoC,KAAA;IAAA,OAAKpC,IAAI;EAAA,EAAC,EAAE,CAACF,OAAO,CAAC,CAAC;EAE7E,oBACER,KAAA;IAAK+C,SAAS,EAAC,8BAA8B;IAAAC,QAAA,gBAC3ChD,KAAA;MAAK+C,SAAS,EAAC,MAAM;MAAAC,QAAA,gBACnBlD,IAAA;QAAOiD,SAAS,EAAC,MAAM;QAAAC,QAAA,EAAC;MAAc,CAAO,CAAC,eAC9ClD,IAAA,CAACR,QAAQ;QACP,cAAW,yBAAyB;QACpC2D,kBAAkB,EAAE7B,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEV,IAAK;QACzCS,QAAQ,EAAEW,kBAAmB;QAAAkB,QAAA,EAE5BJ;MAAW,CACJ,CAAC;IAAA,CACR,CAAC,EAELxB,cAAc,KAAKd,SAAS,iBAC3BN,KAAA,CAAAE,SAAA;MAAA8C,QAAA,gBACElD,IAAA,CAACH,eAAe;QACduB,EAAE,EAAEA,EAAG;QACPP,MAAM,EAAES,cAAe;QACvBR,MAAM,EAAEY,eAAgB;QACxBL,QAAQ,EAAEiB;MAAsB,CACjC,CAAC,eACFtC,IAAA,CAACF,WAAW;QAACgB,MAAM,EAAEgB,aAAc;QAACT,QAAQ,EAAEqB;MAAkB,CAAE,CAAC;IAAA,CACnE,CACH;EAAA,CACE,CAAC;AAEV;AAEA,eAAezB,kBAAkB"}
@@ -1,5 +1,5 @@
1
1
  import type { dh as DhType } from '@deephaven/jsapi-types';
2
- import { ModelColumn, ConditionConfig } from './ConditionalFormattingUtils';
2
+ import { type ModelColumn, type ConditionConfig } from './ConditionalFormattingUtils';
3
3
  export interface ConditionEditorProps {
4
4
  dh: typeof DhType;
5
5
  column: ModelColumn;
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionEditor.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ConditionEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAG3D,OAAO,EAOL,WAAW,EACX,eAAe,EAShB,MAAM,8BAA8B,CAAC;AAItC,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAChE;AAmOD,iBAAS,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,GAAG,CAAC,OAAO,CAyLjE;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"ConditionEditor.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ConditionEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAG3D,OAAO,EAOL,KAAK,WAAW,EAChB,KAAK,eAAe,EASrB,MAAM,8BAA8B,CAAC;AAItC,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAChE;AAmOD,iBAAS,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,GAAG,CAAC,OAAO,CAyLjE;AAED,eAAe,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionEditor.js","names":["useCallback","useEffect","useMemo","useState","TableUtils","Log","Select","StringCondition","DateCondition","getLabelForNumberCondition","getLabelForDateCondition","getLabelForStringCondition","NumberCondition","getDefaultConditionForType","getLabelForBooleanCondition","BooleanCondition","CharCondition","getLabelForCharCondition","isDateConditionValid","getDefaultValueForType","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_CALLBACK","undefined","numberConditionOptions","IS_EQUAL","IS_NOT_EQUAL","IS_BETWEEN","GREATER_THAN","GREATER_THAN_OR_EQUAL","LESS_THAN","LESS_THAN_OR_EQUAL","IS_NULL","IS_NOT_NULL","map","option","value","children","stringConditions","IS_EXACTLY","IS_NOT_EXACTLY","CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH","dateConditions","IS_BEFORE","IS_BEFORE_OR_EQUAL","IS_AFTER","IS_AFTER_OR_EQUAL","booleanConditions","IS_TRUE","IS_FALSE","charConditions","isNumberConditionValid","condition","startValue","endValue","Number","isNaN","parseFloat","getNumberInputs","selectedCondition","handleValueChange","handleStartValueChange","handleEndValueChange","conditionValue","type","className","placeholder","onChange","getStringInputs","getDateInputs","getBooleanInputs","getCharInputs","maxLength","ConditionEditor","props","column","config","dh","selectedColumnType","prevColumnType","setPrevColumnType","setCondition","setValue","setStartValue","start","setEndValue","end","conditions","isNumberType","isCharType","isStringType","isDateType","isBooleanType","handleConditionChange","debug","e","target","changeCondition","isValid","conditionInputs"],"sources":["../../../src/sidebar/conditional-formatting/ConditionEditor.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { Select } from '@deephaven/components';\nimport {\n StringCondition,\n DateCondition,\n getLabelForNumberCondition,\n getLabelForDateCondition,\n getLabelForStringCondition,\n NumberCondition,\n ModelColumn,\n ConditionConfig,\n getDefaultConditionForType,\n getLabelForBooleanCondition,\n BooleanCondition,\n CharCondition,\n Condition,\n getLabelForCharCondition,\n isDateConditionValid,\n getDefaultValueForType,\n} from './ConditionalFormattingUtils';\n\nconst log = Log.module('ConditionEditor');\n\nexport interface ConditionEditorProps {\n dh: typeof DhType;\n column: ModelColumn;\n config: ConditionConfig;\n onChange?: (config: ConditionConfig, isValid: boolean) => void;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nconst numberConditionOptions = [\n NumberCondition.IS_EQUAL,\n NumberCondition.IS_NOT_EQUAL,\n NumberCondition.IS_BETWEEN,\n NumberCondition.GREATER_THAN,\n NumberCondition.GREATER_THAN_OR_EQUAL,\n NumberCondition.LESS_THAN,\n NumberCondition.LESS_THAN_OR_EQUAL,\n NumberCondition.IS_NULL,\n NumberCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForNumberCondition(option)}\n </option>\n));\n\nconst stringConditions = [\n StringCondition.IS_EXACTLY,\n StringCondition.IS_NOT_EXACTLY,\n StringCondition.CONTAINS,\n StringCondition.DOES_NOT_CONTAIN,\n StringCondition.STARTS_WITH,\n StringCondition.ENDS_WITH,\n StringCondition.IS_NULL,\n StringCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForStringCondition(option)}\n </option>\n));\n\nconst dateConditions = [\n DateCondition.IS_EXACTLY,\n DateCondition.IS_NOT_EXACTLY,\n DateCondition.IS_BEFORE,\n DateCondition.IS_BEFORE_OR_EQUAL,\n DateCondition.IS_AFTER,\n DateCondition.IS_AFTER_OR_EQUAL,\n DateCondition.IS_NULL,\n DateCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForDateCondition(option)}\n </option>\n));\n\nconst booleanConditions = [\n BooleanCondition.IS_TRUE,\n BooleanCondition.IS_FALSE,\n BooleanCondition.IS_NULL,\n BooleanCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForBooleanCondition(option)}\n </option>\n));\n\nconst charConditions = [\n CharCondition.IS_EQUAL,\n CharCondition.IS_NOT_EQUAL,\n CharCondition.IS_NULL,\n CharCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForCharCondition(option)}\n </option>\n));\n\nfunction isNumberConditionValid(\n condition: NumberCondition,\n value?: string,\n startValue?: string,\n endValue?: string\n): boolean {\n if (\n condition === NumberCondition.IS_NULL ||\n condition === NumberCondition.IS_NOT_NULL\n ) {\n return true;\n }\n if (\n condition === NumberCondition.IS_BETWEEN &&\n startValue != null &&\n startValue !== '' &&\n !Number.isNaN(Number.parseFloat(startValue)) &&\n endValue != null &&\n endValue !== '' &&\n !Number.isNaN(Number.parseFloat(endValue))\n ) {\n return true;\n }\n if (\n condition !== NumberCondition.IS_BETWEEN &&\n value !== undefined &&\n value !== '' &&\n !Number.isNaN(Number.parseFloat(value))\n ) {\n return true;\n }\n return false;\n}\n\nfunction getNumberInputs(\n selectedCondition: NumberCondition,\n handleValueChange: (e: unknown) => void,\n handleStartValueChange: (e: unknown) => void,\n handleEndValueChange: (e: unknown) => void,\n conditionValue?: string,\n startValue?: string,\n endValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case NumberCondition.IS_EQUAL:\n case NumberCondition.IS_NOT_EQUAL:\n case NumberCondition.GREATER_THAN:\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n case NumberCondition.LESS_THAN:\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return (\n <input\n type=\"number\"\n className=\"form-control\"\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n case NumberCondition.IS_BETWEEN:\n return (\n <div className=\"d-flex flex-row\">\n <input\n type=\"number\"\n className=\"form-control d-flex mr-2\"\n placeholder=\"Start value\"\n value={startValue ?? ''}\n onChange={handleStartValueChange}\n />\n <input\n type=\"number\"\n className=\"form-control d-flex\"\n placeholder=\"End value\"\n value={endValue ?? ''}\n onChange={handleEndValueChange}\n />\n </div>\n );\n case NumberCondition.IS_NULL:\n case NumberCondition.IS_NOT_NULL:\n return null;\n }\n}\n\nfunction getStringInputs(\n selectedCondition: StringCondition,\n handleValueChange: (e: unknown) => void,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case StringCondition.IS_NULL:\n case StringCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className=\"form-control\"\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction getDateInputs(\n selectedCondition: DateCondition,\n handleValueChange: (e: unknown) => void,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className=\"form-control\"\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction getBooleanInputs(): null {\n return null;\n}\n\nfunction getCharInputs(\n selectedCondition: CharCondition,\n handleValueChange: (e: unknown) => void,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case CharCondition.IS_NULL:\n case CharCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className=\"form-control\"\n maxLength={1}\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction ConditionEditor(props: ConditionEditorProps): JSX.Element {\n const { column, config, dh, onChange = DEFAULT_CALLBACK } = props;\n const selectedColumnType = column.type;\n const [prevColumnType, setPrevColumnType] = useState(selectedColumnType);\n const [selectedCondition, setCondition] = useState(config.condition);\n const [conditionValue, setValue] = useState(config.value);\n const [startValue, setStartValue] = useState(config.start);\n const [endValue, setEndValue] = useState(config.end);\n\n if (selectedColumnType !== prevColumnType) {\n // Column type changed, reset condition and value fields\n setCondition(getDefaultConditionForType(selectedColumnType));\n setValue(getDefaultValueForType(selectedColumnType));\n setStartValue(undefined);\n setEndValue(undefined);\n setPrevColumnType(selectedColumnType);\n }\n\n const conditions = useMemo(() => {\n if (selectedColumnType === undefined) {\n return [];\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return numberConditionOptions;\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return charConditions;\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return stringConditions;\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return dateConditions;\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return booleanConditions;\n }\n }, [selectedColumnType]);\n\n const handleConditionChange = useCallback((value: string) => {\n log.debug('handleConditionChange', value);\n setCondition(value as Condition);\n }, []);\n\n const handleValueChange = useCallback(e => {\n const { value } = e.target;\n log.debug('handleValueChange', value);\n setValue(value);\n }, []);\n\n const handleStartValueChange = useCallback(e => {\n const { value } = e.target;\n log.debug('handleStartValueChange', value);\n setStartValue(value);\n }, []);\n\n const handleEndValueChange = useCallback(e => {\n const { value } = e.target;\n log.debug('handleEndValueChange', value);\n setEndValue(value);\n }, []);\n\n useEffect(\n function changeCondition() {\n let isValid = true;\n\n if (selectedCondition === undefined) {\n log.debug(\n 'Unable to create formatting rule. Condition is not selected.'\n );\n isValid = false;\n } else if (\n TableUtils.isNumberType(column.type) &&\n !isNumberConditionValid(\n selectedCondition as NumberCondition,\n conditionValue,\n startValue,\n endValue\n )\n ) {\n log.debug(\n 'Unable to create formatting rule. Invalid value',\n conditionValue\n );\n isValid = false;\n } else if (\n TableUtils.isDateType(column.type) &&\n !isDateConditionValid(\n dh,\n selectedCondition as DateCondition,\n conditionValue\n )\n ) {\n log.debug(\n 'Unable to create formatting rule. Invalid date condition',\n conditionValue\n );\n isValid = false;\n }\n\n onChange(\n {\n condition: selectedCondition,\n value: conditionValue,\n start: startValue,\n end: endValue,\n },\n isValid\n );\n },\n [\n onChange,\n column.type,\n dh,\n selectedCondition,\n conditionValue,\n startValue,\n endValue,\n ]\n );\n\n const conditionInputs = useMemo(() => {\n if (selectedColumnType === undefined) {\n // Column not selected\n return null;\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return getNumberInputs(\n selectedCondition as NumberCondition,\n handleValueChange,\n handleStartValueChange,\n handleEndValueChange,\n conditionValue,\n startValue,\n endValue\n );\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return getCharInputs(\n selectedCondition as CharCondition,\n handleValueChange,\n conditionValue\n );\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return getStringInputs(\n selectedCondition as StringCondition,\n handleValueChange,\n conditionValue\n );\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return getDateInputs(\n selectedCondition as DateCondition,\n handleValueChange,\n conditionValue\n );\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return getBooleanInputs();\n }\n }, [\n selectedColumnType,\n selectedCondition,\n conditionValue,\n startValue,\n endValue,\n handleValueChange,\n handleStartValueChange,\n handleEndValueChange,\n ]);\n\n return (\n <div className=\"condition-editor mb-2\">\n <Select\n value={selectedCondition}\n data-testid=\"condition-select\"\n className=\"custom-select mb-2\"\n onChange={handleConditionChange}\n >\n {conditions}\n </Select>\n {conditionInputs}\n </div>\n );\n}\n\nexport default ConditionEditor;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AACjE,SAASC,UAAU,QAAQ,wBAAwB;AAEnD,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,MAAM,QAAQ,uBAAuB;AAAC,SAE7CC,eAAe,EACfC,aAAa,EACbC,0BAA0B,EAC1BC,wBAAwB,EACxBC,0BAA0B,EAC1BC,eAAe,EAGfC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,gBAAgB,EAChBC,aAAa,EAEbC,wBAAwB,EACxBC,oBAAoB,EACpBC,sBAAsB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAGxB,IAAMC,GAAG,GAAGnB,GAAG,CAACoB,MAAM,CAAC,iBAAiB,CAAC;AASzC,IAAMC,gBAAgB,GAAGA,CAAA,KAAYC,SAAS;AAE9C,IAAMC,sBAAsB,GAAG,CAC7BhB,eAAe,CAACiB,QAAQ,EACxBjB,eAAe,CAACkB,YAAY,EAC5BlB,eAAe,CAACmB,UAAU,EAC1BnB,eAAe,CAACoB,YAAY,EAC5BpB,eAAe,CAACqB,qBAAqB,EACrCrB,eAAe,CAACsB,SAAS,EACzBtB,eAAe,CAACuB,kBAAkB,EAClCvB,eAAe,CAACwB,OAAO,EACvBxB,eAAe,CAACyB,WAAW,CAC5B,CAACC,GAAG,CAACC,MAAM,iBACVlB,IAAA;EAAqBmB,KAAK,EAAED,MAAO;EAAAE,QAAA,EAChChC,0BAA0B,CAAC8B,MAAM;AAAC,GADxBA,MAEL,CACT,CAAC;AAEF,IAAMG,gBAAgB,GAAG,CACvBnC,eAAe,CAACoC,UAAU,EAC1BpC,eAAe,CAACqC,cAAc,EAC9BrC,eAAe,CAACsC,QAAQ,EACxBtC,eAAe,CAACuC,gBAAgB,EAChCvC,eAAe,CAACwC,WAAW,EAC3BxC,eAAe,CAACyC,SAAS,EACzBzC,eAAe,CAAC6B,OAAO,EACvB7B,eAAe,CAAC8B,WAAW,CAC5B,CAACC,GAAG,CAACC,MAAM,iBACVlB,IAAA;EAAqBmB,KAAK,EAAED,MAAO;EAAAE,QAAA,EAChC9B,0BAA0B,CAAC4B,MAAM;AAAC,GADxBA,MAEL,CACT,CAAC;AAEF,IAAMU,cAAc,GAAG,CACrBzC,aAAa,CAACmC,UAAU,EACxBnC,aAAa,CAACoC,cAAc,EAC5BpC,aAAa,CAAC0C,SAAS,EACvB1C,aAAa,CAAC2C,kBAAkB,EAChC3C,aAAa,CAAC4C,QAAQ,EACtB5C,aAAa,CAAC6C,iBAAiB,EAC/B7C,aAAa,CAAC4B,OAAO,EACrB5B,aAAa,CAAC6B,WAAW,CAC1B,CAACC,GAAG,CAACC,MAAM,iBACVlB,IAAA;EAAqBmB,KAAK,EAAED,MAAO;EAAAE,QAAA,EAChC/B,wBAAwB,CAAC6B,MAAM;AAAC,GADtBA,MAEL,CACT,CAAC;AAEF,IAAMe,iBAAiB,GAAG,CACxBvC,gBAAgB,CAACwC,OAAO,EACxBxC,gBAAgB,CAACyC,QAAQ,EACzBzC,gBAAgB,CAACqB,OAAO,EACxBrB,gBAAgB,CAACsB,WAAW,CAC7B,CAACC,GAAG,CAACC,MAAM,iBACVlB,IAAA;EAAqBmB,KAAK,EAAED,MAAO;EAAAE,QAAA,EAChC3B,2BAA2B,CAACyB,MAAM;AAAC,GADzBA,MAEL,CACT,CAAC;AAEF,IAAMkB,cAAc,GAAG,CACrBzC,aAAa,CAACa,QAAQ,EACtBb,aAAa,CAACc,YAAY,EAC1Bd,aAAa,CAACoB,OAAO,EACrBpB,aAAa,CAACqB,WAAW,CAC1B,CAACC,GAAG,CAACC,MAAM,iBACVlB,IAAA;EAAqBmB,KAAK,EAAED,MAAO;EAAAE,QAAA,EAChCxB,wBAAwB,CAACsB,MAAM;AAAC,GADtBA,MAEL,CACT,CAAC;AAEF,SAASmB,sBAAsBA,CAC7BC,SAA0B,EAC1BnB,KAAc,EACdoB,UAAmB,EACnBC,QAAiB,EACR;EACT,IACEF,SAAS,KAAK/C,eAAe,CAACwB,OAAO,IACrCuB,SAAS,KAAK/C,eAAe,CAACyB,WAAW,EACzC;IACA,OAAO,IAAI;EACb;EACA,IACEsB,SAAS,KAAK/C,eAAe,CAACmB,UAAU,IACxC6B,UAAU,IAAI,IAAI,IAClBA,UAAU,KAAK,EAAE,IACjB,CAACE,MAAM,CAACC,KAAK,CAACD,MAAM,CAACE,UAAU,CAACJ,UAAU,CAAC,CAAC,IAC5CC,QAAQ,IAAI,IAAI,IAChBA,QAAQ,KAAK,EAAE,IACf,CAACC,MAAM,CAACC,KAAK,CAACD,MAAM,CAACE,UAAU,CAACH,QAAQ,CAAC,CAAC,EAC1C;IACA,OAAO,IAAI;EACb;EACA,IACEF,SAAS,KAAK/C,eAAe,CAACmB,UAAU,IACxCS,KAAK,KAAKb,SAAS,IACnBa,KAAK,KAAK,EAAE,IACZ,CAACsB,MAAM,CAACC,KAAK,CAACD,MAAM,CAACE,UAAU,CAACxB,KAAK,CAAC,CAAC,EACvC;IACA,OAAO,IAAI;EACb;EACA,OAAO,KAAK;AACd;AAEA,SAASyB,eAAeA,CACtBC,iBAAkC,EAClCC,iBAAuC,EACvCC,sBAA4C,EAC5CC,oBAA0C,EAC1CC,cAAuB,EACvBV,UAAmB,EACnBC,QAAiB,EACG;EACpB,QAAQK,iBAAiB;IACvB,KAAKtD,eAAe,CAACiB,QAAQ;IAC7B,KAAKjB,eAAe,CAACkB,YAAY;IACjC,KAAKlB,eAAe,CAACoB,YAAY;IACjC,KAAKpB,eAAe,CAACqB,qBAAqB;IAC1C,KAAKrB,eAAe,CAACsB,SAAS;IAC9B,KAAKtB,eAAe,CAACuB,kBAAkB;MACrC,oBACEd,IAAA;QACEkD,IAAI,EAAC,QAAQ;QACbC,SAAS,EAAC,cAAc;QACxBC,WAAW,EAAC,aAAa;QACzBjC,KAAK,EAAE8B,cAAc,aAAdA,cAAc,cAAdA,cAAc,GAAI,EAAG;QAC5BI,QAAQ,EAAEP;MAAkB,CAC7B,CAAC;IAEN,KAAKvD,eAAe,CAACmB,UAAU;MAC7B,oBACER,KAAA;QAAKiD,SAAS,EAAC,iBAAiB;QAAA/B,QAAA,gBAC9BpB,IAAA;UACEkD,IAAI,EAAC,QAAQ;UACbC,SAAS,EAAC,0BAA0B;UACpCC,WAAW,EAAC,aAAa;UACzBjC,KAAK,EAAEoB,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAI,EAAG;UACxBc,QAAQ,EAAEN;QAAuB,CAClC,CAAC,eACF/C,IAAA;UACEkD,IAAI,EAAC,QAAQ;UACbC,SAAS,EAAC,qBAAqB;UAC/BC,WAAW,EAAC,WAAW;UACvBjC,KAAK,EAAEqB,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAI,EAAG;UACtBa,QAAQ,EAAEL;QAAqB,CAChC,CAAC;MAAA,CACC,CAAC;IAEV,KAAKzD,eAAe,CAACwB,OAAO;IAC5B,KAAKxB,eAAe,CAACyB,WAAW;MAC9B,OAAO,IAAI;EACf;AACF;AAEA,SAASsC,eAAeA,CACtBT,iBAAkC,EAClCC,iBAAuC,EACvCG,cAAuB,EACH;EACpB,QAAQJ,iBAAiB;IACvB,KAAK3D,eAAe,CAAC6B,OAAO;IAC5B,KAAK7B,eAAe,CAAC8B,WAAW;MAC9B,OAAO,IAAI;IACb;MACE,oBACEhB,IAAA;QACEkD,IAAI,EAAC,MAAM;QACXC,SAAS,EAAC,cAAc;QACxBC,WAAW,EAAC,aAAa;QACzBjC,KAAK,EAAE8B,cAAc,aAAdA,cAAc,cAAdA,cAAc,GAAI,EAAG;QAC5BI,QAAQ,EAAEP;MAAkB,CAC7B,CAAC;EAER;AACF;AAEA,SAASS,aAAaA,CACpBV,iBAAgC,EAChCC,iBAAuC,EACvCG,cAAuB,EACH;EACpB,QAAQJ,iBAAiB;IACvB,KAAK1D,aAAa,CAAC4B,OAAO;IAC1B,KAAK5B,aAAa,CAAC6B,WAAW;MAC5B,OAAO,IAAI;IACb;MACE,oBACEhB,IAAA;QACEkD,IAAI,EAAC,MAAM;QACXC,SAAS,EAAC,cAAc;QACxBC,WAAW,EAAC,aAAa;QACzBjC,KAAK,EAAE8B,cAAc,aAAdA,cAAc,cAAdA,cAAc,GAAI,EAAG;QAC5BI,QAAQ,EAAEP;MAAkB,CAC7B,CAAC;EAER;AACF;AAEA,SAASU,gBAAgBA,CAAA,EAAS;EAChC,OAAO,IAAI;AACb;AAEA,SAASC,aAAaA,CACpBZ,iBAAgC,EAChCC,iBAAuC,EACvCG,cAAuB,EACH;EACpB,QAAQJ,iBAAiB;IACvB,KAAKlD,aAAa,CAACoB,OAAO;IAC1B,KAAKpB,aAAa,CAACqB,WAAW;MAC5B,OAAO,IAAI;IACb;MACE,oBACEhB,IAAA;QACEkD,IAAI,EAAC,MAAM;QACXC,SAAS,EAAC,cAAc;QACxBO,SAAS,EAAE,CAAE;QACbN,WAAW,EAAC,aAAa;QACzBjC,KAAK,EAAE8B,cAAc,aAAdA,cAAc,cAAdA,cAAc,GAAI,EAAG;QAC5BI,QAAQ,EAAEP;MAAkB,CAC7B,CAAC;EAER;AACF;AAEA,SAASa,eAAeA,CAACC,KAA2B,EAAe;EACjE,IAAM;IAAEC,MAAM;IAAEC,MAAM;IAAEC,EAAE;IAAEV,QAAQ,GAAGhD;EAAiB,CAAC,GAAGuD,KAAK;EACjE,IAAMI,kBAAkB,GAAGH,MAAM,CAACX,IAAI;EACtC,IAAM,CAACe,cAAc,EAAEC,iBAAiB,CAAC,GAAGpF,QAAQ,CAACkF,kBAAkB,CAAC;EACxE,IAAM,CAACnB,iBAAiB,EAAEsB,YAAY,CAAC,GAAGrF,QAAQ,CAACgF,MAAM,CAACxB,SAAS,CAAC;EACpE,IAAM,CAACW,cAAc,EAAEmB,QAAQ,CAAC,GAAGtF,QAAQ,CAACgF,MAAM,CAAC3C,KAAK,CAAC;EACzD,IAAM,CAACoB,UAAU,EAAE8B,aAAa,CAAC,GAAGvF,QAAQ,CAACgF,MAAM,CAACQ,KAAK,CAAC;EAC1D,IAAM,CAAC9B,QAAQ,EAAE+B,WAAW,CAAC,GAAGzF,QAAQ,CAACgF,MAAM,CAACU,GAAG,CAAC;EAEpD,IAAIR,kBAAkB,KAAKC,cAAc,EAAE;IACzC;IACAE,YAAY,CAAC3E,0BAA0B,CAACwE,kBAAkB,CAAC,CAAC;IAC5DI,QAAQ,CAACtE,sBAAsB,CAACkE,kBAAkB,CAAC,CAAC;IACpDK,aAAa,CAAC/D,SAAS,CAAC;IACxBiE,WAAW,CAACjE,SAAS,CAAC;IACtB4D,iBAAiB,CAACF,kBAAkB,CAAC;EACvC;EAEA,IAAMS,UAAU,GAAG5F,OAAO,CAAC,MAAM;IAC/B,IAAImF,kBAAkB,KAAK1D,SAAS,EAAE;MACpC,OAAO,EAAE;IACX;IACA,IAAIvB,UAAU,CAAC2F,YAAY,CAACV,kBAAkB,CAAC,EAAE;MAC/C,OAAOzD,sBAAsB;IAC/B;IACA,IAAIxB,UAAU,CAAC4F,UAAU,CAACX,kBAAkB,CAAC,EAAE;MAC7C,OAAO5B,cAAc;IACvB;IACA,IAAIrD,UAAU,CAAC6F,YAAY,CAACZ,kBAAkB,CAAC,EAAE;MAC/C,OAAO3C,gBAAgB;IACzB;IACA,IAAItC,UAAU,CAAC8F,UAAU,CAACb,kBAAkB,CAAC,EAAE;MAC7C,OAAOpC,cAAc;IACvB;IACA,IAAI7C,UAAU,CAAC+F,aAAa,CAACd,kBAAkB,CAAC,EAAE;MAChD,OAAO/B,iBAAiB;IAC1B;EACF,CAAC,EAAE,CAAC+B,kBAAkB,CAAC,CAAC;EAExB,IAAMe,qBAAqB,GAAGpG,WAAW,CAAEwC,KAAa,IAAK;IAC3DhB,GAAG,CAAC6E,KAAK,CAAC,uBAAuB,EAAE7D,KAAK,CAAC;IACzCgD,YAAY,CAAChD,KAAkB,CAAC;EAClC,CAAC,EAAE,EAAE,CAAC;EAEN,IAAM2B,iBAAiB,GAAGnE,WAAW,CAACsG,CAAC,IAAI;IACzC,IAAM;MAAE9D;IAAM,CAAC,GAAG8D,CAAC,CAACC,MAAM;IAC1B/E,GAAG,CAAC6E,KAAK,CAAC,mBAAmB,EAAE7D,KAAK,CAAC;IACrCiD,QAAQ,CAACjD,KAAK,CAAC;EACjB,CAAC,EAAE,EAAE,CAAC;EAEN,IAAM4B,sBAAsB,GAAGpE,WAAW,CAACsG,CAAC,IAAI;IAC9C,IAAM;MAAE9D;IAAM,CAAC,GAAG8D,CAAC,CAACC,MAAM;IAC1B/E,GAAG,CAAC6E,KAAK,CAAC,wBAAwB,EAAE7D,KAAK,CAAC;IAC1CkD,aAAa,CAAClD,KAAK,CAAC;EACtB,CAAC,EAAE,EAAE,CAAC;EAEN,IAAM6B,oBAAoB,GAAGrE,WAAW,CAACsG,CAAC,IAAI;IAC5C,IAAM;MAAE9D;IAAM,CAAC,GAAG8D,CAAC,CAACC,MAAM;IAC1B/E,GAAG,CAAC6E,KAAK,CAAC,sBAAsB,EAAE7D,KAAK,CAAC;IACxCoD,WAAW,CAACpD,KAAK,CAAC;EACpB,CAAC,EAAE,EAAE,CAAC;EAENvC,SAAS,CACP,SAASuG,eAAeA,CAAA,EAAG;IACzB,IAAIC,OAAO,GAAG,IAAI;IAElB,IAAIvC,iBAAiB,KAAKvC,SAAS,EAAE;MACnCH,GAAG,CAAC6E,KAAK,CACP,8DACF,CAAC;MACDI,OAAO,GAAG,KAAK;IACjB,CAAC,MAAM,IACLrG,UAAU,CAAC2F,YAAY,CAACb,MAAM,CAACX,IAAI,CAAC,IACpC,CAACb,sBAAsB,CACrBQ,iBAAiB,EACjBI,cAAc,EACdV,UAAU,EACVC,QACF,CAAC,EACD;MACArC,GAAG,CAAC6E,KAAK,CACP,iDAAiD,EACjD/B,cACF,CAAC;MACDmC,OAAO,GAAG,KAAK;IACjB,CAAC,MAAM,IACLrG,UAAU,CAAC8F,UAAU,CAAChB,MAAM,CAACX,IAAI,CAAC,IAClC,CAACrD,oBAAoB,CACnBkE,EAAE,EACFlB,iBAAiB,EACjBI,cACF,CAAC,EACD;MACA9C,GAAG,CAAC6E,KAAK,CACP,0DAA0D,EAC1D/B,cACF,CAAC;MACDmC,OAAO,GAAG,KAAK;IACjB;IAEA/B,QAAQ,CACN;MACEf,SAAS,EAAEO,iBAAiB;MAC5B1B,KAAK,EAAE8B,cAAc;MACrBqB,KAAK,EAAE/B,UAAU;MACjBiC,GAAG,EAAEhC;IACP,CAAC,EACD4C,OACF,CAAC;EACH,CAAC,EACD,CACE/B,QAAQ,EACRQ,MAAM,CAACX,IAAI,EACXa,EAAE,EACFlB,iBAAiB,EACjBI,cAAc,EACdV,UAAU,EACVC,QAAQ,CAEZ,CAAC;EAED,IAAM6C,eAAe,GAAGxG,OAAO,CAAC,MAAM;IACpC,IAAImF,kBAAkB,KAAK1D,SAAS,EAAE;MACpC;MACA,OAAO,IAAI;IACb;IACA,IAAIvB,UAAU,CAAC2F,YAAY,CAACV,kBAAkB,CAAC,EAAE;MAC/C,OAAOpB,eAAe,CACpBC,iBAAiB,EACjBC,iBAAiB,EACjBC,sBAAsB,EACtBC,oBAAoB,EACpBC,cAAc,EACdV,UAAU,EACVC,QACF,CAAC;IACH;IACA,IAAIzD,UAAU,CAAC4F,UAAU,CAACX,kBAAkB,CAAC,EAAE;MAC7C,OAAOP,aAAa,CAClBZ,iBAAiB,EACjBC,iBAAiB,EACjBG,cACF,CAAC;IACH;IACA,IAAIlE,UAAU,CAAC6F,YAAY,CAACZ,kBAAkB,CAAC,EAAE;MAC/C,OAAOV,eAAe,CACpBT,iBAAiB,EACjBC,iBAAiB,EACjBG,cACF,CAAC;IACH;IACA,IAAIlE,UAAU,CAAC8F,UAAU,CAACb,kBAAkB,CAAC,EAAE;MAC7C,OAAOT,aAAa,CAClBV,iBAAiB,EACjBC,iBAAiB,EACjBG,cACF,CAAC;IACH;IACA,IAAIlE,UAAU,CAAC+F,aAAa,CAACd,kBAAkB,CAAC,EAAE;MAChD,OAAOR,gBAAgB,CAAC,CAAC;IAC3B;EACF,CAAC,EAAE,CACDQ,kBAAkB,EAClBnB,iBAAiB,EACjBI,cAAc,EACdV,UAAU,EACVC,QAAQ,EACRM,iBAAiB,EACjBC,sBAAsB,EACtBC,oBAAoB,CACrB,CAAC;EAEF,oBACE9C,KAAA;IAAKiD,SAAS,EAAC,uBAAuB;IAAA/B,QAAA,gBACpCpB,IAAA,CAACf,MAAM;MACLkC,KAAK,EAAE0B,iBAAkB;MACzB,eAAY,kBAAkB;MAC9BM,SAAS,EAAC,oBAAoB;MAC9BE,QAAQ,EAAE0B,qBAAsB;MAAA3D,QAAA,EAE/BqD;IAAU,CACL,CAAC,EACRY,eAAe;EAAA,CACb,CAAC;AAEV;AAEA,eAAe1B,eAAe"}
1
+ {"version":3,"file":"ConditionEditor.js","names":["useCallback","useEffect","useMemo","useState","TableUtils","Log","Select","StringCondition","DateCondition","getLabelForNumberCondition","getLabelForDateCondition","getLabelForStringCondition","NumberCondition","getDefaultConditionForType","getLabelForBooleanCondition","BooleanCondition","CharCondition","getLabelForCharCondition","isDateConditionValid","getDefaultValueForType","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_CALLBACK","undefined","numberConditionOptions","IS_EQUAL","IS_NOT_EQUAL","IS_BETWEEN","GREATER_THAN","GREATER_THAN_OR_EQUAL","LESS_THAN","LESS_THAN_OR_EQUAL","IS_NULL","IS_NOT_NULL","map","option","value","children","stringConditions","IS_EXACTLY","IS_NOT_EXACTLY","CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH","dateConditions","IS_BEFORE","IS_BEFORE_OR_EQUAL","IS_AFTER","IS_AFTER_OR_EQUAL","booleanConditions","IS_TRUE","IS_FALSE","charConditions","isNumberConditionValid","condition","startValue","endValue","Number","isNaN","parseFloat","getNumberInputs","selectedCondition","handleValueChange","handleStartValueChange","handleEndValueChange","conditionValue","type","className","placeholder","onChange","getStringInputs","getDateInputs","getBooleanInputs","getCharInputs","maxLength","ConditionEditor","props","column","config","dh","selectedColumnType","prevColumnType","setPrevColumnType","setCondition","setValue","setStartValue","start","setEndValue","end","conditions","isNumberType","isCharType","isStringType","isDateType","isBooleanType","handleConditionChange","debug","e","target","changeCondition","isValid","conditionInputs"],"sources":["../../../src/sidebar/conditional-formatting/ConditionEditor.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { Select } from '@deephaven/components';\nimport {\n StringCondition,\n DateCondition,\n getLabelForNumberCondition,\n getLabelForDateCondition,\n getLabelForStringCondition,\n NumberCondition,\n type ModelColumn,\n type ConditionConfig,\n getDefaultConditionForType,\n getLabelForBooleanCondition,\n BooleanCondition,\n CharCondition,\n type Condition,\n getLabelForCharCondition,\n isDateConditionValid,\n getDefaultValueForType,\n} from './ConditionalFormattingUtils';\n\nconst log = Log.module('ConditionEditor');\n\nexport interface ConditionEditorProps {\n dh: typeof DhType;\n column: ModelColumn;\n config: ConditionConfig;\n onChange?: (config: ConditionConfig, isValid: boolean) => void;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nconst numberConditionOptions = [\n NumberCondition.IS_EQUAL,\n NumberCondition.IS_NOT_EQUAL,\n NumberCondition.IS_BETWEEN,\n NumberCondition.GREATER_THAN,\n NumberCondition.GREATER_THAN_OR_EQUAL,\n NumberCondition.LESS_THAN,\n NumberCondition.LESS_THAN_OR_EQUAL,\n NumberCondition.IS_NULL,\n NumberCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForNumberCondition(option)}\n </option>\n));\n\nconst stringConditions = [\n StringCondition.IS_EXACTLY,\n StringCondition.IS_NOT_EXACTLY,\n StringCondition.CONTAINS,\n StringCondition.DOES_NOT_CONTAIN,\n StringCondition.STARTS_WITH,\n StringCondition.ENDS_WITH,\n StringCondition.IS_NULL,\n StringCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForStringCondition(option)}\n </option>\n));\n\nconst dateConditions = [\n DateCondition.IS_EXACTLY,\n DateCondition.IS_NOT_EXACTLY,\n DateCondition.IS_BEFORE,\n DateCondition.IS_BEFORE_OR_EQUAL,\n DateCondition.IS_AFTER,\n DateCondition.IS_AFTER_OR_EQUAL,\n DateCondition.IS_NULL,\n DateCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForDateCondition(option)}\n </option>\n));\n\nconst booleanConditions = [\n BooleanCondition.IS_TRUE,\n BooleanCondition.IS_FALSE,\n BooleanCondition.IS_NULL,\n BooleanCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForBooleanCondition(option)}\n </option>\n));\n\nconst charConditions = [\n CharCondition.IS_EQUAL,\n CharCondition.IS_NOT_EQUAL,\n CharCondition.IS_NULL,\n CharCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForCharCondition(option)}\n </option>\n));\n\nfunction isNumberConditionValid(\n condition: NumberCondition,\n value?: string,\n startValue?: string,\n endValue?: string\n): boolean {\n if (\n condition === NumberCondition.IS_NULL ||\n condition === NumberCondition.IS_NOT_NULL\n ) {\n return true;\n }\n if (\n condition === NumberCondition.IS_BETWEEN &&\n startValue != null &&\n startValue !== '' &&\n !Number.isNaN(Number.parseFloat(startValue)) &&\n endValue != null &&\n endValue !== '' &&\n !Number.isNaN(Number.parseFloat(endValue))\n ) {\n return true;\n }\n if (\n condition !== NumberCondition.IS_BETWEEN &&\n value !== undefined &&\n value !== '' &&\n !Number.isNaN(Number.parseFloat(value))\n ) {\n return true;\n }\n return false;\n}\n\nfunction getNumberInputs(\n selectedCondition: NumberCondition,\n handleValueChange: (e: unknown) => void,\n handleStartValueChange: (e: unknown) => void,\n handleEndValueChange: (e: unknown) => void,\n conditionValue?: string,\n startValue?: string,\n endValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case NumberCondition.IS_EQUAL:\n case NumberCondition.IS_NOT_EQUAL:\n case NumberCondition.GREATER_THAN:\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n case NumberCondition.LESS_THAN:\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return (\n <input\n type=\"number\"\n className=\"form-control\"\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n case NumberCondition.IS_BETWEEN:\n return (\n <div className=\"d-flex flex-row\">\n <input\n type=\"number\"\n className=\"form-control d-flex mr-2\"\n placeholder=\"Start value\"\n value={startValue ?? ''}\n onChange={handleStartValueChange}\n />\n <input\n type=\"number\"\n className=\"form-control d-flex\"\n placeholder=\"End value\"\n value={endValue ?? ''}\n onChange={handleEndValueChange}\n />\n </div>\n );\n case NumberCondition.IS_NULL:\n case NumberCondition.IS_NOT_NULL:\n return null;\n }\n}\n\nfunction getStringInputs(\n selectedCondition: StringCondition,\n handleValueChange: (e: unknown) => void,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case StringCondition.IS_NULL:\n case StringCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className=\"form-control\"\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction getDateInputs(\n selectedCondition: DateCondition,\n handleValueChange: (e: unknown) => void,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className=\"form-control\"\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction getBooleanInputs(): null {\n return null;\n}\n\nfunction getCharInputs(\n selectedCondition: CharCondition,\n handleValueChange: (e: unknown) => void,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case CharCondition.IS_NULL:\n case CharCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className=\"form-control\"\n maxLength={1}\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction ConditionEditor(props: ConditionEditorProps): JSX.Element {\n const { column, config, dh, onChange = DEFAULT_CALLBACK } = props;\n const selectedColumnType = column.type;\n const [prevColumnType, setPrevColumnType] = useState(selectedColumnType);\n const [selectedCondition, setCondition] = useState(config.condition);\n const [conditionValue, setValue] = useState(config.value);\n const [startValue, setStartValue] = useState(config.start);\n const [endValue, setEndValue] = useState(config.end);\n\n if (selectedColumnType !== prevColumnType) {\n // Column type changed, reset condition and value fields\n setCondition(getDefaultConditionForType(selectedColumnType));\n setValue(getDefaultValueForType(selectedColumnType));\n setStartValue(undefined);\n setEndValue(undefined);\n setPrevColumnType(selectedColumnType);\n }\n\n const conditions = useMemo(() => {\n if (selectedColumnType === undefined) {\n return [];\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return numberConditionOptions;\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return charConditions;\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return stringConditions;\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return dateConditions;\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return booleanConditions;\n }\n }, [selectedColumnType]);\n\n const handleConditionChange = useCallback((value: string) => {\n log.debug('handleConditionChange', value);\n setCondition(value as Condition);\n }, []);\n\n const handleValueChange = useCallback(e => {\n const { value } = e.target;\n log.debug('handleValueChange', value);\n setValue(value);\n }, []);\n\n const handleStartValueChange = useCallback(e => {\n const { value } = e.target;\n log.debug('handleStartValueChange', value);\n setStartValue(value);\n }, []);\n\n const handleEndValueChange = useCallback(e => {\n const { value } = e.target;\n log.debug('handleEndValueChange', value);\n setEndValue(value);\n }, []);\n\n useEffect(\n function changeCondition() {\n let isValid = true;\n\n if (selectedCondition === undefined) {\n log.debug(\n 'Unable to create formatting rule. Condition is not selected.'\n );\n isValid = false;\n } else if (\n TableUtils.isNumberType(column.type) &&\n !isNumberConditionValid(\n selectedCondition as NumberCondition,\n conditionValue,\n startValue,\n endValue\n )\n ) {\n log.debug(\n 'Unable to create formatting rule. Invalid value',\n conditionValue\n );\n isValid = false;\n } else if (\n TableUtils.isDateType(column.type) &&\n !isDateConditionValid(\n dh,\n selectedCondition as DateCondition,\n conditionValue\n )\n ) {\n log.debug(\n 'Unable to create formatting rule. Invalid date condition',\n conditionValue\n );\n isValid = false;\n }\n\n onChange(\n {\n condition: selectedCondition,\n value: conditionValue,\n start: startValue,\n end: endValue,\n },\n isValid\n );\n },\n [\n onChange,\n column.type,\n dh,\n selectedCondition,\n conditionValue,\n startValue,\n endValue,\n ]\n );\n\n const conditionInputs = useMemo(() => {\n if (selectedColumnType === undefined) {\n // Column not selected\n return null;\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return getNumberInputs(\n selectedCondition as NumberCondition,\n handleValueChange,\n handleStartValueChange,\n handleEndValueChange,\n conditionValue,\n startValue,\n endValue\n );\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return getCharInputs(\n selectedCondition as CharCondition,\n handleValueChange,\n conditionValue\n );\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return getStringInputs(\n selectedCondition as StringCondition,\n handleValueChange,\n conditionValue\n );\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return getDateInputs(\n selectedCondition as DateCondition,\n handleValueChange,\n conditionValue\n );\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return getBooleanInputs();\n }\n }, [\n selectedColumnType,\n selectedCondition,\n conditionValue,\n startValue,\n endValue,\n handleValueChange,\n handleStartValueChange,\n handleEndValueChange,\n ]);\n\n return (\n <div className=\"condition-editor mb-2\">\n <Select\n value={selectedCondition}\n data-testid=\"condition-select\"\n className=\"custom-select mb-2\"\n onChange={handleConditionChange}\n >\n {conditions}\n </Select>\n {conditionInputs}\n </div>\n );\n}\n\nexport default ConditionEditor;\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { dh as DhType } from '@deephaven/jsapi-types';
2
- import { FormattingRule, ModelColumn } from './ConditionalFormattingUtils';
2
+ import { type FormattingRule, type ModelColumn } from './ConditionalFormattingUtils';
3
3
  import './ConditionalFormatEditor.scss';
4
4
  export type SaveCallback = (rule: FormattingRule) => void;
5
5
  export type UpdateCallback = (rule?: FormattingRule) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalFormatEditor.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ConditionalFormatEditor.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAK3D,OAAO,EAGL,cAAc,EAEd,WAAW,EACZ,MAAM,8BAA8B,CAAC;AACtC,OAAO,gCAAgC,CAAC;AAIxC,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AAExC,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,OAAO,MAAM,CAAC;IAClB,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAwBD,iBAAS,uBAAuB,CAC9B,KAAK,EAAE,4BAA4B,GAClC,GAAG,CAAC,OAAO,CAyGb;AAED,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"ConditionalFormatEditor.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ConditionalFormatEditor.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAK3D,OAAO,EAGL,KAAK,cAAc,EAEnB,KAAK,WAAW,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,gCAAgC,CAAC;AAIxC,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AAExC,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,OAAO,MAAM,CAAC;IAClB,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAwBD,iBAAS,uBAAuB,CAC9B,KAAK,EAAE,4BAA4B,GAClC,GAAG,CAAC,OAAO,CAyGb;AAED,eAAe,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalFormatEditor.js","names":["React","useCallback","useState","classNames","Button","Log","FormatColumnWhereIcon","FormatRowWhereIcon","ColumnFormatEditor","RowFormatEditor","FormatterType","isSupportedColumn","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_CALLBACK","undefined","getFormatterTypeIcon","option","CONDITIONAL","ROWS","getFormatterTypeLabel","formatterTypes","ConditionalFormatEditor","props","_defaultRule$type","columns","originalColumns","dh","onSave","onUpdate","onCancel","rule","defaultRule","filter","selectedFormatter","setFormatter","type","setRule","isValid","setIsValid","handleCancel","handleSave","error","handleFormatterChange","value","debug","handleRuleChange","ruleConfig","isRuleValid","updatedRule","config","className","children","htmlFor","map","index","active","onClick","onChange","kind","disabled"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button } from '@deephaven/components';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\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 dh: typeof DhType;\n columns: readonly ModelColumn[];\n rule?: FormattingRule;\n onCancel?: CancelCallback;\n onSave?: SaveCallback;\n onUpdate?: UpdateCallback;\n}\n\nconst DEFAULT_CALLBACK = (): void => 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 dh,\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 dh={dh}\n config={rule?.config}\n onChange={handleRuleChange}\n />\n )}\n {selectedFormatter === FormatterType.ROWS && (\n <RowFormatEditor\n columns={columns}\n config={rule?.config}\n dh={dh}\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","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_CALLBACK","undefined","getFormatterTypeIcon","option","CONDITIONAL","ROWS","getFormatterTypeLabel","formatterTypes","ConditionalFormatEditor","props","_defaultRule$type","columns","originalColumns","dh","onSave","onUpdate","onCancel","rule","defaultRule","filter","selectedFormatter","setFormatter","type","setRule","isValid","setIsValid","handleCancel","handleSave","error","handleFormatterChange","value","debug","handleRuleChange","ruleConfig","isRuleValid","updatedRule","config","className","children","htmlFor","map","index","active","onClick","onChange","kind","disabled"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button } from '@deephaven/components';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { FormatColumnWhereIcon, FormatRowWhereIcon } from '../icons';\nimport ColumnFormatEditor from './ColumnFormatEditor';\nimport RowFormatEditor from './RowFormatEditor';\nimport {\n type BaseFormatConfig,\n FormatterType,\n type FormattingRule,\n isSupportedColumn,\n type 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 dh: typeof DhType;\n columns: readonly ModelColumn[];\n rule?: FormattingRule;\n onCancel?: CancelCallback;\n onSave?: SaveCallback;\n onUpdate?: UpdateCallback;\n}\n\nconst DEFAULT_CALLBACK = (): void => 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 dh,\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 dh={dh}\n config={rule?.config}\n onChange={handleRuleChange}\n />\n )}\n {selectedFormatter === FormatterType.ROWS && (\n <RowFormatEditor\n columns={columns}\n config={rule?.config}\n dh={dh}\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":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AACpD,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,MAAM,QAAQ,uBAAuB;AAE9C,OAAOC,GAAG,MAAM,gBAAgB;AAAC,SACxBC,qBAAqB,EAAEC,kBAAkB;AAAA,OAC3CC,kBAAkB;AAAA,OAClBC,eAAe;AAAA,SAGpBC,aAAa,EAEbC,iBAAiB;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAKnB,IAAMC,GAAG,GAAGX,GAAG,CAACY,MAAM,CAAC,yBAAyB,CAAC;AAiBjD,IAAMC,gBAAgB,GAAGA,CAAA,KAAYC,SAAS;AAE9C,SAASC,oBAAoBA,CAACC,MAAqB,EAA2B;EAC5E,QAAQA,MAAM;IACZ,KAAKX,aAAa,CAACY,WAAW;MAC5B,oBAAOT,IAAA,CAACP,qBAAqB,IAAE,CAAC;IAClC,KAAKI,aAAa,CAACa,IAAI;MACrB,oBAAOV,IAAA,CAACN,kBAAkB,IAAE,CAAC;EACjC;AACF;AAEA,SAASiB,qBAAqBA,CAACH,MAAqB,EAAU;EAC5D,QAAQA,MAAM;IACZ,KAAKX,aAAa,CAACY,WAAW;MAC5B,OAAO,aAAa;IACtB,KAAKZ,aAAa,CAACa,IAAI;MACrB,OAAO,MAAM;EACjB;AACF;AAEA,IAAME,cAAc,GAAG,CAACf,aAAa,CAACY,WAAW,EAAEZ,aAAa,CAACa,IAAI,CAAC;AAEtE,SAASG,uBAAuBA,CAC9BC,KAAmC,EACtB;EAAA,IAAAC,iBAAA;EACb,IAAM;IACJC,OAAO,EAAEC,eAAe;IACxBC,EAAE;IACFC,MAAM,GAAGd,gBAAgB;IACzBe,QAAQ,GAAGf,gBAAgB;IAC3BgB,QAAQ,GAAGhB,gBAAgB;IAC3BiB,IAAI,EAAEC;EACR,CAAC,GAAGT,KAAK;EAET,IAAME,OAAO,GAAGC,eAAe,CAACO,MAAM,CAAC1B,iBAAiB,CAAC;EAEzD,IAAM,CAAC2B,iBAAiB,EAAEC,YAAY,CAAC,GAAGrC,QAAQ,EAAA0B,iBAAA,GAChDQ,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEI,IAAI,cAAAZ,iBAAA,cAAAA,iBAAA,GAAIH,cAAc,CAAC,CAAC,CACvC,CAAC;EACD,IAAM,CAACU,IAAI,EAAEM,OAAO,CAAC,GAAGvC,QAAQ,CAACkC,WAAW,CAAC;EAC7C,IAAM,CAACM,OAAO,EAAEC,UAAU,CAAC,GAAGzC,QAAQ,CAAC,KAAK,CAAC;EAE7C,IAAM0C,YAAY,GAAG3C,WAAW,CAAC,MAAM;IACrCiC,QAAQ,CAAC,CAAC;EACZ,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEd,IAAMW,UAAU,GAAG5C,WAAW,CAAC,MAAM;IACnC,IAAIkC,IAAI,KAAKhB,SAAS,EAAE;MACtBH,GAAG,CAAC8B,KAAK,CAAC,sBAAsB,CAAC;MACjC;IACF;IACAd,MAAM,CAACG,IAAI,CAAC;EACd,CAAC,EAAE,CAACH,MAAM,EAAEG,IAAI,CAAC,CAAC;EAElB,IAAMY,qBAAqB,GAAG9C,WAAW,CAAC+C,KAAK,IAAI;IACjDhC,GAAG,CAACiC,KAAK,CAAC,uBAAuB,EAAED,KAAK,CAAC;IACzCT,YAAY,CAACS,KAAK,CAAC;EACrB,CAAC,EAAE,EAAE,CAAC;EAEN,IAAME,gBAAgB,GAAGjD,WAAW,CAClC,CAACkD,UAAU,EAAEC,WAAoB,KAAK;IACpCpC,GAAG,CAACiC,KAAK,CAAC,kBAAkB,EAAEE,UAAU,EAAEC,WAAW,EAAEd,iBAAiB,CAAC;IACzE,IAAMe,WAAW,GAAG;MAClBb,IAAI,EAAEF,iBAAiB;MACvBgB,MAAM,EAAEH;IACV,CAAC;IACDV,OAAO,CAACY,WAAW,CAAC;IACpBV,UAAU,CAACS,WAAW,CAAC;IACvBnB,QAAQ,CAACmB,WAAW,GAAGC,WAAW,GAAGlC,SAAS,CAAC;EACjD,CAAC,EACD,CAACc,QAAQ,EAAEK,iBAAiB,CAC9B,CAAC;EAED,oBACEvB,KAAA;IAAKwC,SAAS,EAAC,gCAAgC;IAAAC,QAAA,gBAC7CzC,KAAA;MAAKwC,SAAS,EAAC,MAAM;MAAAC,QAAA,gBACnB3C,IAAA;QAAO0C,SAAS,EAAC,MAAM;QAACE,OAAO,EAAC,kBAAkB;QAAAD,QAAA,EAAC;MAEnD,CAAO,CAAC,eAER3C,IAAA;QAAK0C,SAAS,EAAC,gBAAgB;QAAAC,QAAA,EAC5B/B,cAAc,CAACiC,GAAG,CAAC,CAAClB,IAAI,EAAEmB,KAAK,kBAC9B9C,IAAA;UAAgB0C,SAAS,EAAC,gBAAgB;UAAAC,QAAA,eACxCzC,KAAA;YACEyB,IAAI,EAAC,QAAQ;YACbe,SAAS,EAAEpD,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE;cAC7DyD,MAAM,EAAEpB,IAAI,KAAKF;YACnB,CAAC,CAAE;YACH,cAAYqB,KAAM;YAClBE,OAAO,EAAEA,CAAA,KAAMd,qBAAqB,CAACP,IAAI,CAAE;YAAAgB,QAAA,GAE1CpC,oBAAoB,CAACoB,IAAI,CAAC,EAC1BhB,qBAAqB,CAACgB,IAAI,CAAC;UAAA,CACtB;QAAC,GAXDA,IAYL,CACN;MAAC,CACC,CAAC;IAAA,CACH,CAAC,EACLF,iBAAiB,KAAK5B,aAAa,CAACY,WAAW,iBAC9CT,IAAA,CAACL,kBAAkB;MACjBqB,OAAO,EAAEA,OAAQ;MACjBE,EAAE,EAAEA,EAAG;MACPuB,MAAM,EAAEnB,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB,MAAO;MACrBQ,QAAQ,EAAEZ;IAAiB,CAC5B,CACF,EACAZ,iBAAiB,KAAK5B,aAAa,CAACa,IAAI,iBACvCV,IAAA,CAACJ,eAAe;MACdoB,OAAO,EAAEA,OAAQ;MACjByB,MAAM,EAAEnB,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB,MAAO;MACrBvB,EAAE,EAAEA,EAAG;MACP+B,QAAQ,EAAEZ;IAAiB,CAC5B,CACF,eACDrC,IAAA,SAAK,CAAC,eACNE,KAAA;MAAKwC,SAAS,EAAC,iCAAiC;MAAAC,QAAA,gBAC9C3C,IAAA,CAACT,MAAM;QAAC2D,IAAI,EAAC,WAAW;QAACF,OAAO,EAAEjB,YAAa;QAACW,SAAS,EAAC,MAAM;QAAAC,QAAA,EAAC;MAEjE,CAAQ,CAAC,eACT3C,IAAA,CAACT,MAAM;QACL2D,IAAI,EAAC,SAAS;QACdF,OAAO,EAAEhB,UAAW;QACpBmB,QAAQ,EAAE7B,IAAI,KAAKhB,SAAS,IAAI,CAACuB,OAAQ;QAAAc,QAAA,EAC1C;MAED,CAAQ,CAAC;IAAA,CACN,CAAC;EAAA,CACH,CAAC;AAEV;AAEA,eAAe9B,uBAAuB"}
@@ -1,5 +1,5 @@
1
1
  import type { dh as DhType } from '@deephaven/jsapi-types';
2
- import { BaseFormatConfig } from './ConditionalFormattingUtils';
2
+ import { type BaseFormatConfig } from './ConditionalFormattingUtils';
3
3
  export declare function makeTernaryFormatRule(config: BaseFormatConfig, prevRule: string): string | undefined;
4
4
  export declare function makeRowFormatColumn(dh: typeof DhType, rule: string): DhType.CustomColumn;
5
5
  export declare function makeColumnFormatColumn(col: DhType.Column, rule: string): DhType.CustomColumn;
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalFormattingAPIUtils.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAGjB,MAAM,8BAA8B,CAAC;AAMtC,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,SAAS,CAOpB;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,OAAO,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,YAAY,CAErB;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,YAAY,CAErB"}
1
+ {"version":3,"file":"ConditionalFormattingAPIUtils.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,8BAA8B,CAAC;AAMtC,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,SAAS,CAOpB;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,OAAO,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,YAAY,CAErB;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,YAAY,CAErB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalFormattingAPIUtils.js","names":["getConditionDBString","getStyleDBString","makeTernaryFormatRule","config","prevRule","styleDBString","undefined","conditionDBString","concat","makeRowFormatColumn","dh","rule","Column","formatRowColor","makeColumnFormatColumn","col","formatColor"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.ts"],"sourcesContent":["import type { dh as DhType } from '@deephaven/jsapi-types';\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(\n dh: typeof DhType,\n rule: string\n): DhType.CustomColumn {\n return dh.Column.formatRowColor(rule);\n}\n\nexport function makeColumnFormatColumn(\n col: DhType.Column,\n rule: string\n): DhType.CustomColumn {\n return col.formatColor(rule);\n}\n"],"mappings":"SAGEA,oBAAoB,EACpBC,gBAAgB,2CAGlB;AACA;AACA;AAEA,OAAO,SAASC,qBAAqBA,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,UAAAK,MAAA,CAAUD,iBAAiB,SAAAC,MAAA,CAAMH,aAAa,SAAAG,MAAA,CAAMJ,QAAQ;AAC9D;AAEA,OAAO,SAASK,mBAAmBA,CACjCC,EAAiB,EACjBC,IAAY,EACS;EACrB,OAAOD,EAAE,CAACE,MAAM,CAACC,cAAc,CAACF,IAAI,CAAC;AACvC;AAEA,OAAO,SAASG,sBAAsBA,CACpCC,GAAkB,EAClBJ,IAAY,EACS;EACrB,OAAOI,GAAG,CAACC,WAAW,CAACL,IAAI,CAAC;AAC9B"}
1
+ {"version":3,"file":"ConditionalFormattingAPIUtils.js","names":["getConditionDBString","getStyleDBString","makeTernaryFormatRule","config","prevRule","styleDBString","undefined","conditionDBString","concat","makeRowFormatColumn","dh","rule","Column","formatRowColor","makeColumnFormatColumn","col","formatColor"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.ts"],"sourcesContent":["import type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type 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(\n dh: typeof DhType,\n rule: string\n): DhType.CustomColumn {\n return dh.Column.formatRowColor(rule);\n}\n\nexport function makeColumnFormatColumn(\n col: DhType.Column,\n rule: string\n): DhType.CustomColumn {\n return col.formatColor(rule);\n}\n"],"mappings":"SAGEA,oBAAoB,EACpBC,gBAAgB,2CAGlB;AACA;AACA;AAEA,OAAO,SAASC,qBAAqBA,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,UAAAK,MAAA,CAAUD,iBAAiB,SAAAC,MAAA,CAAMH,aAAa,SAAAG,MAAA,CAAMJ,QAAQ;AAC9D;AAEA,OAAO,SAASK,mBAAmBA,CACjCC,EAAiB,EACjBC,IAAY,EACS;EACrB,OAAOD,EAAE,CAACE,MAAM,CAACC,cAAc,CAACF,IAAI,CAAC;AACvC;AAEA,OAAO,SAASG,sBAAsBA,CACpCC,GAAkB,EAClBJ,IAAY,EACS;EACrB,OAAOI,GAAG,CAACC,WAAW,CAACL,IAAI,CAAC;AAC9B"}
@@ -1,6 +1,6 @@
1
1
  import './ConditionalFormattingMenu.scss';
2
- import { FormattingRule } from './ConditionalFormattingUtils';
3
- import { ColumnName } from '../../CommonTypes';
2
+ import { type FormattingRule } from './ConditionalFormattingUtils';
3
+ import { type ColumnName } from '../../CommonTypes';
4
4
  export type ChangeCallback = (rules: readonly FormattingRule[]) => void;
5
5
  export type SelectCallback = (index: number) => void;
6
6
  export type CreateCallback = () => void;
@@ -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,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,KAAK,IAAI,CAAC;AAExE,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AAExC,MAAM,MAAM,8BAA8B,GAAG;IAC3C,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IACjC,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
+ {"version":3,"file":"ConditionalFormattingMenu.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingMenu.tsx"],"names":[],"mappings":"AAaA,OAAO,kCAAkC,CAAC;AAC1C,OAAO,EAEL,KAAK,cAAc,EAQpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,KAAK,IAAI,CAAC;AAExE,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AAExC,MAAM,MAAM,8BAA8B,GAAG;IAC3C,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IACjC,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 +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","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_CALLBACK","undefined","getRuleValue","config","column","type","isNumberType","condition","IS_NULL","IS_NOT_NULL","concat","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","className","children","onDragStart","startDragging","onDragEnd","droppableId","provided","snapshot","_objectSpread","ref","innerRef","droppableProps","dragging","draggingFromThisWith","length","map","draggableId","disableInteractiveElementBlocking","role","tabIndex","onClick","isDragging","draggableProps","style","backgroundColor","color","ROWS","kind","icon","tooltip","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: readonly FormattingRule[]) => void;\n\nexport type SelectCallback = (index: number) => void;\n\nexport type CreateCallback = () => void;\n\nexport type ConditionalFormattingMenuProps = {\n rules: readonly FormattingRule[];\n selectedColumn?: ColumnName;\n onChange?: ChangeCallback;\n onCreate?: CreateCallback;\n onSelect?: SelectCallback;\n};\n\nconst DEFAULT_CALLBACK = (): void => 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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"}
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","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_CALLBACK","undefined","getRuleValue","config","column","type","isNumberType","condition","IS_NULL","IS_NOT_NULL","concat","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","className","children","onDragStart","startDragging","onDragEnd","droppableId","provided","snapshot","_objectSpread","ref","innerRef","droppableProps","dragging","draggingFromThisWith","length","map","draggableId","disableInteractiveElementBlocking","role","tabIndex","onClick","isDragging","draggableProps","style","backgroundColor","color","ROWS","kind","icon","tooltip","dragHandleProps","placeholder"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingMenu.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport {\n DragDropContext,\n Draggable,\n Droppable,\n type 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 type BaseFormatConfig,\n type FormattingRule,\n FormatterType,\n getBackgroundForStyleConfig,\n getColorForStyleConfig,\n getShortLabelForConditionType,\n NumberCondition,\n StringCondition,\n DateCondition,\n} from './ConditionalFormattingUtils';\nimport { type ColumnName } from '../../CommonTypes';\n\nconst log = Log.module('ConditionalFormattingMenu');\n\nexport type ChangeCallback = (rules: readonly FormattingRule[]) => void;\n\nexport type SelectCallback = (index: number) => void;\n\nexport type CreateCallback = () => void;\n\nexport type ConditionalFormattingMenuProps = {\n rules: readonly FormattingRule[];\n selectedColumn?: ColumnName;\n onChange?: ChangeCallback;\n onCreate?: CreateCallback;\n onSelect?: SelectCallback;\n};\n\nconst DEFAULT_CALLBACK = (): void => 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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"}
@@ -1,5 +1,5 @@
1
1
  import type { dh as DhType } from '@deephaven/jsapi-types';
2
- import { ColumnName } from '../../CommonTypes';
2
+ import { type ColumnName } from '../../CommonTypes';
3
3
  export type ModelColumn = {
4
4
  name: string;
5
5
  type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalFormattingUtils.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConditionalFormattingUtils.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingUtils.ts"],"names":[],"mappings":"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"}