@deephaven/iris-grid 0.22.3-embed-pandas.11 → 0.23.1-beta.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 (243) hide show
  1. package/dist/AdvancedFilterCreator.d.ts +1 -1
  2. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  3. package/dist/AdvancedFilterCreator.js +7 -65
  4. package/dist/AdvancedFilterCreator.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorFilterItem.d.ts +1 -1
  6. package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
  7. package/dist/AdvancedFilterCreatorFilterItem.js +0 -23
  8. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  9. package/dist/AdvancedFilterCreatorSelectValue.js +0 -52
  10. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  11. package/dist/AdvancedFilterCreatorSelectValueList.d.ts +1 -5
  12. package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
  13. package/dist/AdvancedFilterCreatorSelectValueList.js +2 -42
  14. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  15. package/dist/ColumnHeaderGroup.js +0 -11
  16. package/dist/ColumnHeaderGroup.js.map +1 -1
  17. package/dist/ColumnStatistics.d.ts +0 -2
  18. package/dist/ColumnStatistics.d.ts.map +1 -1
  19. package/dist/ColumnStatistics.js +8 -40
  20. package/dist/ColumnStatistics.js.map +1 -1
  21. package/dist/CommonTypes.d.ts +14 -14
  22. package/dist/CommonTypes.d.ts.map +1 -1
  23. package/dist/CrossColumnSearch.js +2 -23
  24. package/dist/CrossColumnSearch.js.map +1 -1
  25. package/dist/FilterInputField.js +2 -36
  26. package/dist/FilterInputField.js.map +1 -1
  27. package/dist/GotoRow.d.ts +1 -1
  28. package/dist/GotoRow.d.ts.map +1 -1
  29. package/dist/GotoRow.js +2 -7
  30. package/dist/GotoRow.js.map +1 -1
  31. package/dist/IrisGrid.d.ts +46 -40
  32. package/dist/IrisGrid.d.ts.map +1 -1
  33. package/dist/IrisGrid.js +84 -526
  34. package/dist/IrisGrid.js.map +1 -1
  35. package/dist/IrisGridBottomBar.d.ts +2 -2
  36. package/dist/IrisGridBottomBar.d.ts.map +1 -1
  37. package/dist/IrisGridBottomBar.js +2 -2
  38. package/dist/IrisGridBottomBar.js.map +1 -1
  39. package/dist/IrisGridCellOverflowModal.d.ts.map +1 -1
  40. package/dist/IrisGridCellOverflowModal.js +13 -46
  41. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  42. package/dist/IrisGridCopyHandler.d.ts +3 -3
  43. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  44. package/dist/IrisGridCopyHandler.js +6 -53
  45. package/dist/IrisGridCopyHandler.js.map +1 -1
  46. package/dist/IrisGridMetricCalculator.js +2 -12
  47. package/dist/IrisGridMetricCalculator.js.map +1 -1
  48. package/dist/IrisGridModel.d.ts +3 -3
  49. package/dist/IrisGridModel.d.ts.map +1 -1
  50. package/dist/IrisGridModel.js +32 -58
  51. package/dist/IrisGridModel.js.map +1 -1
  52. package/dist/IrisGridModelFactory.js +0 -7
  53. package/dist/IrisGridModelFactory.js.map +1 -1
  54. package/dist/IrisGridModelUpdater.js +0 -4
  55. package/dist/IrisGridModelUpdater.js.map +1 -1
  56. package/dist/IrisGridPartitionSelector.js +0 -23
  57. package/dist/IrisGridPartitionSelector.js.map +1 -1
  58. package/dist/IrisGridProxyModel.js +9 -153
  59. package/dist/IrisGridProxyModel.js.map +1 -1
  60. package/dist/IrisGridRenderer.d.ts +1 -1
  61. package/dist/IrisGridRenderer.d.ts.map +1 -1
  62. package/dist/IrisGridRenderer.js +41 -183
  63. package/dist/IrisGridRenderer.js.map +1 -1
  64. package/dist/IrisGridShortcuts.js.map +1 -1
  65. package/dist/IrisGridTableModel.d.ts +3 -3
  66. package/dist/IrisGridTableModel.d.ts.map +1 -1
  67. package/dist/IrisGridTableModel.js +10 -90
  68. package/dist/IrisGridTableModel.js.map +1 -1
  69. package/dist/IrisGridTableModelTemplate.d.ts +3 -3
  70. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  71. package/dist/IrisGridTableModelTemplate.js +70 -461
  72. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  73. package/dist/IrisGridTestUtils.js +0 -23
  74. package/dist/IrisGridTestUtils.js.map +1 -1
  75. package/dist/IrisGridTheme.d.ts +1 -1
  76. package/dist/IrisGridTheme.d.ts.map +1 -1
  77. package/dist/IrisGridTheme.js.map +1 -1
  78. package/dist/IrisGridTreeTableModel.js +3 -42
  79. package/dist/IrisGridTreeTableModel.js.map +1 -1
  80. package/dist/IrisGridUtils.d.ts +13 -7
  81. package/dist/IrisGridUtils.d.ts.map +1 -1
  82. package/dist/IrisGridUtils.js +98 -196
  83. package/dist/IrisGridUtils.js.map +1 -1
  84. package/dist/MissingKeyError.js +0 -7
  85. package/dist/MissingKeyError.js.map +1 -1
  86. package/dist/PartitionSelectorSearch.d.ts +2 -2
  87. package/dist/PartitionSelectorSearch.js +2 -48
  88. package/dist/PartitionSelectorSearch.js.map +1 -1
  89. package/dist/PendingDataBottomBar.d.ts +2 -2
  90. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  91. package/dist/PendingDataBottomBar.js +2 -7
  92. package/dist/PendingDataBottomBar.js.map +1 -1
  93. package/dist/TableViewportUpdater.d.ts +2 -2
  94. package/dist/TableViewportUpdater.d.ts.map +1 -1
  95. package/dist/TableViewportUpdater.js +3 -29
  96. package/dist/TableViewportUpdater.js.map +1 -1
  97. package/dist/ToastBottomBar.d.ts +2 -2
  98. package/dist/ToastBottomBar.d.ts.map +1 -1
  99. package/dist/ToastBottomBar.js +2 -4
  100. package/dist/ToastBottomBar.js.map +1 -1
  101. package/dist/TreeTableViewportUpdater.js +0 -21
  102. package/dist/TreeTableViewportUpdater.js.map +1 -1
  103. package/dist/format-context-menus/CustomFormatAction.d.ts +1 -1
  104. package/dist/format-context-menus/CustomFormatAction.d.ts.map +1 -1
  105. package/dist/format-context-menus/CustomFormatAction.js +4 -25
  106. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  107. package/dist/format-context-menus/DateTimeFormatContextMenu.js +0 -7
  108. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
  109. package/dist/format-context-menus/DecimalFormatContextMenu.js +0 -9
  110. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  111. package/dist/format-context-menus/FormatContextMenuUtils.js +3 -9
  112. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  113. package/dist/format-context-menus/IntegerFormatContextMenu.js +0 -8
  114. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  115. package/dist/format-context-menus/index.js.map +1 -1
  116. package/dist/index.d.ts +3 -3
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +3 -3
  119. package/dist/index.js.map +1 -1
  120. package/dist/key-handlers/ClearFilterKeyHandler.js +0 -8
  121. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
  122. package/dist/key-handlers/CopyKeyHandler.js +1 -10
  123. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  124. package/dist/key-handlers/ReverseKeyHandler.js +0 -11
  125. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  126. package/dist/key-handlers/index.js.map +1 -1
  127. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +2 -32
  128. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  129. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +4 -34
  130. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  131. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +0 -20
  132. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  133. package/dist/mousehandlers/IrisGridContextMenuHandler.js +17 -107
  134. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  135. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +0 -9
  136. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  137. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +0 -17
  138. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  139. package/dist/mousehandlers/IrisGridSortMouseHandler.js +2 -15
  140. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  141. package/dist/mousehandlers/PendingMouseHandler.js +0 -6
  142. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  143. package/dist/mousehandlers/index.js.map +1 -1
  144. package/dist/sidebar/AdvancedSettings.js.map +1 -1
  145. package/dist/sidebar/AdvancedSettingsMenu.d.ts +6 -6
  146. package/dist/sidebar/AdvancedSettingsMenu.d.ts.map +1 -1
  147. package/dist/sidebar/AdvancedSettingsMenu.js +2 -6
  148. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  149. package/dist/sidebar/AdvancedSettingsType.js +0 -2
  150. package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
  151. package/dist/sidebar/ChartBuilder.d.ts +2 -2
  152. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  153. package/dist/sidebar/ChartBuilder.js +2 -46
  154. package/dist/sidebar/ChartBuilder.js.map +1 -1
  155. package/dist/sidebar/CustomColumnBuilder.d.ts +2 -2
  156. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  157. package/dist/sidebar/CustomColumnBuilder.js +6 -58
  158. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  159. package/dist/sidebar/CustomColumnInput.js +4 -15
  160. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  161. package/dist/sidebar/InputEditor.js +5 -36
  162. package/dist/sidebar/InputEditor.js.map +1 -1
  163. package/dist/sidebar/OptionType.js +0 -2
  164. package/dist/sidebar/OptionType.js.map +1 -1
  165. package/dist/sidebar/RollupRows.d.ts +3 -3
  166. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  167. package/dist/sidebar/RollupRows.js +9 -65
  168. package/dist/sidebar/RollupRows.js.map +1 -1
  169. package/dist/sidebar/SelectDistinctBuilder.js +0 -13
  170. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  171. package/dist/sidebar/TableCsvExporter.css +3 -0
  172. package/dist/sidebar/TableCsvExporter.css.map +1 -1
  173. package/dist/sidebar/TableCsvExporter.d.ts +12 -6
  174. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  175. package/dist/sidebar/TableCsvExporter.js +88 -82
  176. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  177. package/dist/sidebar/TableSaver.d.ts +5 -3
  178. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  179. package/dist/sidebar/TableSaver.js +52 -132
  180. package/dist/sidebar/TableSaver.js.map +1 -1
  181. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +5 -4
  182. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  183. package/dist/sidebar/VisibilityOrderingBuilder.js +37 -116
  184. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  185. package/dist/sidebar/aggregations/AggregationEdit.d.ts +2 -2
  186. package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
  187. package/dist/sidebar/aggregations/AggregationEdit.js +2 -14
  188. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  189. package/dist/sidebar/aggregations/AggregationOperation.js +0 -2
  190. package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
  191. package/dist/sidebar/aggregations/AggregationUtils.js +2 -5
  192. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  193. package/dist/sidebar/aggregations/Aggregations.d.ts +4 -4
  194. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  195. package/dist/sidebar/aggregations/Aggregations.js +2 -12
  196. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  197. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +1 -1
  198. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  199. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +2 -16
  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 +2 -35
  204. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  205. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts +4 -4
  206. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  207. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -12
  208. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  209. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +0 -3
  210. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  211. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +5 -5
  212. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  213. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +16 -26
  214. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  215. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +3 -3
  216. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  217. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +9 -172
  218. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  219. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +1 -1
  220. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  221. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +2 -16
  222. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  223. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts +1 -1
  224. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts.map +1 -1
  225. package/dist/sidebar/conditional-formatting/StyleEditor.js +2 -12
  226. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  227. package/dist/sidebar/icons/BarIcon.js +0 -3
  228. package/dist/sidebar/icons/BarIcon.js.map +1 -1
  229. package/dist/sidebar/icons/FormatColumnWhereIcon.js +2 -5
  230. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
  231. package/dist/sidebar/icons/FormatRowWhereIcon.js +2 -5
  232. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
  233. package/dist/sidebar/icons/HistogramIcon.js +0 -3
  234. package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
  235. package/dist/sidebar/icons/LineIcon.js +0 -3
  236. package/dist/sidebar/icons/LineIcon.js.map +1 -1
  237. package/dist/sidebar/icons/PieIcon.js +0 -3
  238. package/dist/sidebar/icons/PieIcon.js.map +1 -1
  239. package/dist/sidebar/icons/ScatterIcon.js +0 -3
  240. package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
  241. package/dist/sidebar/icons/index.js.map +1 -1
  242. package/dist/sidebar/index.js.map +1 -1
  243. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"ChartBuilder.js","names":["React","PureComponent","classNames","FontAwesomeIcon","Button","RadioGroup","RadioItem","vsLink","dhUnlink","dhTable","dhNewCircleLargeFilled","vsCircleLargeFilled","vsTrash","dh","Log","shortid","BarIcon","HistogramIcon","LineIcon","PieIcon","ScatterIcon","log","module","ChartBuilder","getTypeName","type","plot","SeriesPlotStyle","LINE","BAR","SCATTER","PIE","HISTOGRAM","getTypeIcon","getMaxSeriesCount","getXAxisLabel","getSeriesLabel","makeSeriesItem","value","id","generate","makeDefaultSeriesItems","columns","maxSeriesCount","length","name","getDefaultXAxis","constructor","props","handleAddSeries","bind","handleLinkStateChange","handleReset","handleSeriesChange","handleSeriesDeleteClick","handleSubmit","handleTypeClick","handleXAxisChange","sendChange","model","types","xAxis","seriesItems","state","isLinked","setState","push","event","target","index","getAttribute","intIndex","parseInt","changeEvent","splice","preventDefault","onSubmit","series","map","item","debug2","slice","onChange","render","xAxisLabel","seriesLabel","isSeriesVisible","isAddSeriesVisible","chartType","key","active","column","seriesItem","i"],"sources":["../../src/sidebar/ChartBuilder.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, RadioGroup, RadioItem } from '@deephaven/components';\nimport {\n vsLink,\n dhUnlink,\n dhTable,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsTrash,\n} from '@deephaven/icons';\nimport dh, { Column, SeriesPlotStyle } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport shortid from 'shortid';\nimport {\n BarIcon,\n HistogramIcon,\n LineIcon,\n PieIcon,\n ScatterIcon,\n} from './icons';\nimport './ChartBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('ChartBuilder');\n\nexport type ChartBuilderSettings = {\n type: SeriesPlotStyle;\n series: unknown;\n xAxis: string;\n isLinked: boolean;\n};\nexport type SeriesItem = {\n id: string;\n value: string;\n};\n\ninterface ChartBuilderProps {\n model: IrisGridModel;\n onSubmit: (obj: ChartBuilderSettings) => void;\n onChange: (obj: ChartBuilderSettings) => void;\n}\ninterface ChartBuilderState {\n /** The selected chart type */\n type: SeriesPlotStyle;\n\n /** Array of column names of the series to display */\n seriesItems: SeriesItem[];\n\n /** The column name to use as the x-axis */\n xAxis: string;\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: boolean;\n}\n/**\n * Form for configuring all the settings when creating a console.\n */\nclass ChartBuilder extends PureComponent<ChartBuilderProps, ChartBuilderState> {\n static types = [\n dh.plot.SeriesPlotStyle.LINE,\n dh.plot.SeriesPlotStyle.BAR,\n dh.plot.SeriesPlotStyle.SCATTER,\n dh.plot.SeriesPlotStyle.PIE,\n // IDS-6808: Disable Histogram in Chart Builder until we pipe histogram creation through the API\n // dh.plot.SeriesPlotStyle.HISTOGRAM,\n ];\n\n /**\n * Converts the provided chart type into a readable type.\n * Just replaces underscores with spaces and capitals the first letter of each word.\n */\n static getTypeName(type: SeriesPlotStyle): string | SeriesPlotStyle {\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return 'Line';\n case dh.plot.SeriesPlotStyle.BAR:\n return 'Bar';\n case dh.plot.SeriesPlotStyle.SCATTER:\n return 'Scatter';\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Pie';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Histogram';\n default:\n return type;\n }\n }\n\n static getTypeIcon(type: SeriesPlotStyle): React.ReactElement | null {\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return <LineIcon />;\n case dh.plot.SeriesPlotStyle.BAR:\n return <BarIcon />;\n case dh.plot.SeriesPlotStyle.SCATTER:\n return <ScatterIcon />;\n case dh.plot.SeriesPlotStyle.PIE:\n return <PieIcon />;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return <HistogramIcon />;\n default:\n return null;\n }\n }\n\n static getMaxSeriesCount(type: SeriesPlotStyle): number {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 1;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 0;\n default:\n return 100;\n }\n }\n\n static getXAxisLabel(type: SeriesPlotStyle): string {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Labels';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Data';\n default:\n return 'X-Axis';\n }\n }\n\n static getSeriesLabel(type: SeriesPlotStyle): string {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Values';\n default:\n return 'Series';\n }\n }\n\n static makeSeriesItem(value: string): SeriesItem {\n return { id: shortid.generate(), value };\n }\n\n static makeDefaultSeriesItems(\n type: SeriesPlotStyle,\n columns: Column[]\n ): SeriesItem[] {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n if (maxSeriesCount === 0 || columns == null || columns.length === 0) {\n return [];\n }\n\n const value = columns.length > 1 ? columns[1].name : columns[0].name;\n return [ChartBuilder.makeSeriesItem(value)];\n }\n\n static getDefaultXAxis(\n type: SeriesPlotStyle,\n columns: Column[]\n ): string | null {\n if (columns != null && columns.length > 0) {\n return columns[0].name;\n }\n\n return null;\n }\n\n constructor(props: ChartBuilderProps) {\n super(props);\n\n this.handleAddSeries = this.handleAddSeries.bind(this);\n this.handleLinkStateChange = this.handleLinkStateChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSeriesChange = this.handleSeriesChange.bind(this);\n this.handleSeriesDeleteClick = this.handleSeriesDeleteClick.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleTypeClick = this.handleTypeClick.bind(this);\n this.handleXAxisChange = this.handleXAxisChange.bind(this);\n this.sendChange = this.sendChange.bind(this);\n\n const { model } = props;\n const { columns } = model;\n\n const type = ChartBuilder.types[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n\n this.state = {\n /** The selected chart type */\n type,\n\n /** Array of column names of the series to display */\n seriesItems,\n\n /** The column name to use as the x-axis */\n xAxis,\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: true,\n };\n }\n\n handleAddSeries(): void {\n this.setState(state => {\n let { seriesItems } = state;\n seriesItems = [...seriesItems];\n\n const { model } = this.props;\n const { columns } = model;\n seriesItems.push({\n id: shortid.generate(),\n value: columns[0].name,\n });\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleLinkStateChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ isLinked: event.target.value === 'true' }, this.sendChange);\n }\n\n handleReset(): void {\n const { model } = this.props;\n const { columns } = model;\n\n const type = ChartBuilder.types[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n const isLinked = true;\n\n this.setState({ type, seriesItems, xAxis, isLinked }, this.sendChange);\n }\n\n handleSeriesChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n const index = event.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems[intIndex].value = value;\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSeriesDeleteClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems.splice(intIndex, 1);\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n event.preventDefault();\n\n const { onSubmit } = this.props;\n const { type, seriesItems, xAxis, isLinked } = this.state;\n const series = seriesItems.map(item => item.value);\n onSubmit({\n type: (`${type}` as unknown) as SeriesPlotStyle,\n series,\n xAxis,\n isLinked,\n });\n }\n\n handleTypeClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n const type = ChartBuilder.types[intIndex];\n\n log.debug2('handleTypeSelect', type);\n\n this.setState(state => {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n let { seriesItems } = state;\n seriesItems = seriesItems.slice(0, maxSeriesCount);\n if (seriesItems.length === 0 && maxSeriesCount > 0) {\n const { model } = this.props;\n const { columns } = model;\n seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n }\n\n return { type, seriesItems };\n }, this.sendChange);\n }\n\n handleXAxisChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const xAxis = event.target.value;\n log.debug2('x-axis change', xAxis);\n\n this.setState({ xAxis }, this.sendChange);\n }\n\n sendChange(): void {\n const { onChange } = this.props;\n const { isLinked, type, seriesItems, xAxis } = this.state;\n const series = seriesItems.map(item => item.value);\n\n onChange({ type, series, xAxis, isLinked });\n }\n\n render(): JSX.Element {\n const { model } = this.props;\n const { columns } = model;\n const { seriesItems, type, xAxis, isLinked } = this.state;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n const xAxisLabel = ChartBuilder.getXAxisLabel(type);\n const seriesLabel = ChartBuilder.getSeriesLabel(type);\n const isSeriesVisible = seriesItems.length > 0;\n const isAddSeriesVisible = seriesItems.length < maxSeriesCount;\n\n return (\n <div className=\"chart-builder\">\n <form onSubmit={this.handleSubmit}>\n <div className=\"form-row\">\n <label>Select Chart Type</label>\n <div className=\"form-row\">\n {ChartBuilder.types.map((chartType, index) => {\n const key = (chartType as unknown) as React.Key;\n return (\n <div key={key} className=\"col col-chart-type\">\n <button\n type=\"button\"\n className={classNames(\n 'btn',\n 'btn-icon',\n 'btn-chart-type',\n {\n active: chartType === type,\n }\n )}\n data-index={index}\n onClick={this.handleTypeClick}\n >\n {ChartBuilder.getTypeIcon(chartType)}\n {ChartBuilder.getTypeName(chartType)}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n <hr />\n <div className=\"form-row form-inline\">\n <label className=\"col-2 label-left\">{xAxisLabel}</label>\n <select\n className=\"form-control custom-select select-x-axis col\"\n value={xAxis}\n onChange={this.handleXAxisChange}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name}>\n {column.name}\n </option>\n ))}\n </select>\n </div>\n {isSeriesVisible && <hr />}\n {seriesItems.map((seriesItem, i) => (\n <div\n className=\"form-row form-inline form-series-item\"\n key={seriesItem.id}\n data-testid={`form-series-item-${i}`}\n >\n <label className=\"col-2 label-left\">\n {i === 0 ? seriesLabel : ''}\n </label>\n <select\n className=\"form-control custom-select select-series col\"\n value={seriesItem.value}\n onChange={this.handleSeriesChange}\n data-testid={`select-series-item-${i}`}\n data-index={i}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name} data-index={i}>\n {column.name}\n </option>\n ))}\n </select>\n {seriesItems.length > 1 && (\n <Button\n kind=\"ghost\"\n className=\"btn-delete-series ml-2 px-2\"\n data-index={i}\n data-testid={`delete-series-${i}`}\n onClick={this.handleSeriesDeleteClick}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n )}\n </div>\n ))}\n {isAddSeriesVisible && (\n <div className=\"form-row\">\n <div className=\"col-2\" />\n <Button\n kind=\"ghost\"\n className=\"btn-add-series mt-1\"\n onClick={this.handleAddSeries}\n icon={dhNewCircleLargeFilled}\n >\n Add Series\n </Button>\n </div>\n )}\n <div className=\"form-row chart-builder-link\">\n <label className=\"col-2 label-right\">\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={dhTable}\n icon={vsCircleLargeFilled}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon\n icon={isLinked ? vsLink : dhUnlink}\n transform=\"grow-2 right-8 down-6\"\n />\n </div>\n </label>\n <RadioGroup\n onChange={this.handleLinkStateChange}\n value={`${isLinked}`}\n >\n <RadioItem value=\"true\">Sync State</RadioItem>\n <RadioItem value=\"false\">Freeze State</RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-row\">\n <div className=\"col-2 label-right\" />\n <div className=\"col chart-builder-link-info\">\n {isLinked\n ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.'\n : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.'}\n </div>\n </div>\n <div\n className={classNames('form-row', 'justify-content-end', 'my-3')}\n >\n <Button\n kind=\"secondary\"\n className=\"btn-reset\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n <Button kind=\"primary\" type=\"submit\" className=\"btn-submit\">\n Create\n </Button>\n </div>\n </form>\n </div>\n );\n }\n}\n\nexport default ChartBuilder;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ChartBuilder.js","names":["React","PureComponent","classNames","FontAwesomeIcon","Button","RadioGroup","RadioItem","vsLink","dhUnlink","dhTable","dhNewCircleLargeFilled","vsCircleLargeFilled","vsTrash","dh","Log","shortid","BarIcon","HistogramIcon","LineIcon","PieIcon","ScatterIcon","log","module","ChartBuilder","getTypeName","type","plot","SeriesPlotStyle","LINE","BAR","SCATTER","PIE","HISTOGRAM","getTypeIcon","getMaxSeriesCount","getXAxisLabel","getSeriesLabel","makeSeriesItem","value","id","generate","makeDefaultSeriesItems","columns","maxSeriesCount","length","name","getDefaultXAxis","constructor","props","handleAddSeries","bind","handleLinkStateChange","handleReset","handleSeriesChange","handleSeriesDeleteClick","handleSubmit","handleTypeClick","handleXAxisChange","sendChange","model","types","xAxis","seriesItems","state","isLinked","setState","push","event","target","index","getAttribute","intIndex","parseInt","changeEvent","splice","preventDefault","onSubmit","series","map","item","debug2","slice","onChange","render","xAxisLabel","seriesLabel","isSeriesVisible","isAddSeriesVisible","chartType","key","active","column","seriesItem","i"],"sources":["../../src/sidebar/ChartBuilder.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, RadioGroup, RadioItem } from '@deephaven/components';\nimport {\n vsLink,\n dhUnlink,\n dhTable,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsTrash,\n} from '@deephaven/icons';\nimport dh, { Column, SeriesPlotStyle } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport shortid from 'shortid';\nimport {\n BarIcon,\n HistogramIcon,\n LineIcon,\n PieIcon,\n ScatterIcon,\n} from './icons';\nimport './ChartBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('ChartBuilder');\n\nexport type ChartBuilderSettings = {\n type: SeriesPlotStyle;\n series: unknown;\n xAxis: string;\n isLinked: boolean;\n};\nexport type SeriesItem = {\n id: string;\n value: string;\n};\n\ninterface ChartBuilderProps {\n model: IrisGridModel;\n onSubmit: (obj: ChartBuilderSettings) => void;\n onChange: (obj: ChartBuilderSettings) => void;\n}\ninterface ChartBuilderState {\n /** The selected chart type */\n type: SeriesPlotStyle;\n\n /** Array of column names of the series to display */\n seriesItems: SeriesItem[];\n\n /** The column name to use as the x-axis */\n xAxis: string;\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: boolean;\n}\n/**\n * Form for configuring all the settings when creating a console.\n */\nclass ChartBuilder extends PureComponent<ChartBuilderProps, ChartBuilderState> {\n static types = [\n dh.plot.SeriesPlotStyle.LINE,\n dh.plot.SeriesPlotStyle.BAR,\n dh.plot.SeriesPlotStyle.SCATTER,\n dh.plot.SeriesPlotStyle.PIE,\n // IDS-6808: Disable Histogram in Chart Builder until we pipe histogram creation through the API\n // dh.plot.SeriesPlotStyle.HISTOGRAM,\n ];\n\n /**\n * Converts the provided chart type into a readable type.\n * Just replaces underscores with spaces and capitals the first letter of each word.\n */\n static getTypeName(type: SeriesPlotStyle): string | SeriesPlotStyle {\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return 'Line';\n case dh.plot.SeriesPlotStyle.BAR:\n return 'Bar';\n case dh.plot.SeriesPlotStyle.SCATTER:\n return 'Scatter';\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Pie';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Histogram';\n default:\n return type;\n }\n }\n\n static getTypeIcon(type: SeriesPlotStyle): React.ReactElement | null {\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return <LineIcon />;\n case dh.plot.SeriesPlotStyle.BAR:\n return <BarIcon />;\n case dh.plot.SeriesPlotStyle.SCATTER:\n return <ScatterIcon />;\n case dh.plot.SeriesPlotStyle.PIE:\n return <PieIcon />;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return <HistogramIcon />;\n default:\n return null;\n }\n }\n\n static getMaxSeriesCount(type: SeriesPlotStyle): number {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 1;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 0;\n default:\n return 100;\n }\n }\n\n static getXAxisLabel(type: SeriesPlotStyle): string {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Labels';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Data';\n default:\n return 'X-Axis';\n }\n }\n\n static getSeriesLabel(type: SeriesPlotStyle): string {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Values';\n default:\n return 'Series';\n }\n }\n\n static makeSeriesItem(value: string): SeriesItem {\n return { id: shortid.generate(), value };\n }\n\n static makeDefaultSeriesItems(\n type: SeriesPlotStyle,\n columns: Column[]\n ): SeriesItem[] {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n if (maxSeriesCount === 0 || columns == null || columns.length === 0) {\n return [];\n }\n\n const value = columns.length > 1 ? columns[1].name : columns[0].name;\n return [ChartBuilder.makeSeriesItem(value)];\n }\n\n static getDefaultXAxis(\n type: SeriesPlotStyle,\n columns: Column[]\n ): string | null {\n if (columns != null && columns.length > 0) {\n return columns[0].name;\n }\n\n return null;\n }\n\n constructor(props: ChartBuilderProps) {\n super(props);\n\n this.handleAddSeries = this.handleAddSeries.bind(this);\n this.handleLinkStateChange = this.handleLinkStateChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSeriesChange = this.handleSeriesChange.bind(this);\n this.handleSeriesDeleteClick = this.handleSeriesDeleteClick.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleTypeClick = this.handleTypeClick.bind(this);\n this.handleXAxisChange = this.handleXAxisChange.bind(this);\n this.sendChange = this.sendChange.bind(this);\n\n const { model } = props;\n const { columns } = model;\n\n const type = ChartBuilder.types[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n\n this.state = {\n /** The selected chart type */\n type,\n\n /** Array of column names of the series to display */\n seriesItems,\n\n /** The column name to use as the x-axis */\n xAxis,\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: true,\n };\n }\n\n handleAddSeries(): void {\n this.setState(state => {\n let { seriesItems } = state;\n seriesItems = [...seriesItems];\n\n const { model } = this.props;\n const { columns } = model;\n seriesItems.push({\n id: shortid.generate(),\n value: columns[0].name,\n });\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleLinkStateChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ isLinked: event.target.value === 'true' }, this.sendChange);\n }\n\n handleReset(): void {\n const { model } = this.props;\n const { columns } = model;\n\n const type = ChartBuilder.types[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n const isLinked = true;\n\n this.setState({ type, seriesItems, xAxis, isLinked }, this.sendChange);\n }\n\n handleSeriesChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n const index = event.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems[intIndex].value = value;\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSeriesDeleteClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems.splice(intIndex, 1);\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n event.preventDefault();\n\n const { onSubmit } = this.props;\n const { type, seriesItems, xAxis, isLinked } = this.state;\n const series = seriesItems.map(item => item.value);\n onSubmit({\n type: (`${type}` as unknown) as SeriesPlotStyle,\n series,\n xAxis,\n isLinked,\n });\n }\n\n handleTypeClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n const type = ChartBuilder.types[intIndex];\n\n log.debug2('handleTypeSelect', type);\n\n this.setState(state => {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n let { seriesItems } = state;\n seriesItems = seriesItems.slice(0, maxSeriesCount);\n if (seriesItems.length === 0 && maxSeriesCount > 0) {\n const { model } = this.props;\n const { columns } = model;\n seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n }\n\n return { type, seriesItems };\n }, this.sendChange);\n }\n\n handleXAxisChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const xAxis = event.target.value;\n log.debug2('x-axis change', xAxis);\n\n this.setState({ xAxis }, this.sendChange);\n }\n\n sendChange(): void {\n const { onChange } = this.props;\n const { isLinked, type, seriesItems, xAxis } = this.state;\n const series = seriesItems.map(item => item.value);\n\n onChange({ type, series, xAxis, isLinked });\n }\n\n render(): JSX.Element {\n const { model } = this.props;\n const { columns } = model;\n const { seriesItems, type, xAxis, isLinked } = this.state;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n const xAxisLabel = ChartBuilder.getXAxisLabel(type);\n const seriesLabel = ChartBuilder.getSeriesLabel(type);\n const isSeriesVisible = seriesItems.length > 0;\n const isAddSeriesVisible = seriesItems.length < maxSeriesCount;\n\n return (\n <div className=\"chart-builder\">\n <form onSubmit={this.handleSubmit}>\n <div className=\"form-row\">\n <label>Select Chart Type</label>\n <div className=\"form-row\">\n {ChartBuilder.types.map((chartType, index) => {\n const key = (chartType as unknown) as React.Key;\n return (\n <div key={key} className=\"col col-chart-type\">\n <button\n type=\"button\"\n className={classNames(\n 'btn',\n 'btn-icon',\n 'btn-chart-type',\n {\n active: chartType === type,\n }\n )}\n data-index={index}\n onClick={this.handleTypeClick}\n >\n {ChartBuilder.getTypeIcon(chartType)}\n {ChartBuilder.getTypeName(chartType)}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n <hr />\n <div className=\"form-row form-inline\">\n <label className=\"col-2 label-left\">{xAxisLabel}</label>\n <select\n className=\"form-control custom-select select-x-axis col\"\n value={xAxis}\n onChange={this.handleXAxisChange}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name}>\n {column.name}\n </option>\n ))}\n </select>\n </div>\n {isSeriesVisible && <hr />}\n {seriesItems.map((seriesItem, i) => (\n <div\n className=\"form-row form-inline form-series-item\"\n key={seriesItem.id}\n data-testid={`form-series-item-${i}`}\n >\n <label className=\"col-2 label-left\">\n {i === 0 ? seriesLabel : ''}\n </label>\n <select\n className=\"form-control custom-select select-series col\"\n value={seriesItem.value}\n onChange={this.handleSeriesChange}\n data-testid={`select-series-item-${i}`}\n data-index={i}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name} data-index={i}>\n {column.name}\n </option>\n ))}\n </select>\n {seriesItems.length > 1 && (\n <Button\n kind=\"ghost\"\n className=\"btn-delete-series ml-2 px-2\"\n data-index={i}\n data-testid={`delete-series-${i}`}\n onClick={this.handleSeriesDeleteClick}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n )}\n </div>\n ))}\n {isAddSeriesVisible && (\n <div className=\"form-row\">\n <div className=\"col-2\" />\n <Button\n kind=\"ghost\"\n className=\"btn-add-series mt-1\"\n onClick={this.handleAddSeries}\n icon={dhNewCircleLargeFilled}\n >\n Add Series\n </Button>\n </div>\n )}\n <div className=\"form-row chart-builder-link\">\n <label className=\"col-2 label-right\">\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={dhTable}\n icon={vsCircleLargeFilled}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon\n icon={isLinked ? vsLink : dhUnlink}\n transform=\"grow-2 right-8 down-6\"\n />\n </div>\n </label>\n <RadioGroup\n onChange={this.handleLinkStateChange}\n value={`${isLinked}`}\n >\n <RadioItem value=\"true\">Sync State</RadioItem>\n <RadioItem value=\"false\">Freeze State</RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-row\">\n <div className=\"col-2 label-right\" />\n <div className=\"col chart-builder-link-info\">\n {isLinked\n ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.'\n : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.'}\n </div>\n </div>\n <div\n className={classNames('form-row', 'justify-content-end', 'my-3')}\n >\n <Button\n kind=\"secondary\"\n className=\"btn-reset\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n <Button kind=\"primary\" type=\"submit\" className=\"btn-submit\">\n Create\n </Button>\n </div>\n </form>\n </div>\n );\n }\n}\n\nexport default ChartBuilder;\n"],"mappings":"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"}
@@ -2,8 +2,8 @@ import { Component, ReactElement } from 'react';
2
2
  import { DropResult } from 'react-beautiful-dnd';
3
3
  import './CustomColumnBuilder.scss';
4
4
  import IrisGridModel from '../IrisGridModel';
5
- export declare type CustomColumnKey = 'eventKey' | 'name' | 'formula';
6
- declare type Input = {
5
+ export type CustomColumnKey = 'eventKey' | 'name' | 'formula';
6
+ type Input = {
7
7
  eventKey: string;
8
8
  name: string;
9
9
  formula: string;
@@ -1 +1 @@
1
- {"version":3,"file":"CustomColumnBuilder.d.ts","sourceRoot":"","sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAIvD,OAAO,EAA8B,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAK7E,OAAO,4BAA4B,CAAC;AACpC,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAE7C,oBAAY,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9D,aAAK,KAAK,GAAG;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,UAAU,wBAAwB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,sBAAsB,EAAE,OAAO,CAAC;IAChC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AACD,cAAM,mBAAoB,SAAQ,SAAS,CACzC,wBAAwB,EACxB,wBAAwB,CACzB;IACC,MAAM,CAAC,qBAAqB,SAAO;IAEnC,MAAM,CAAC,YAAY;;sBAEL,IAAI;wBACF,IAAI;MAClB;IAEF,MAAM,CAAC,6BAA6B,IAAI,MAAM;IAI9C,MAAM,CAAC,uBAAuB,IAAI,KAAK;gBAQ3B,KAAK,EAAE,wBAAwB;IAyB3C,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAO5B,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IAEjC,kBAAkB,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IAEzD,QAAQ,WAAoB,KAAK,EAAE,OAAO,MAAM,uBAE9C;IAEF,aAAa,WAAoB,KAAK,EAAE,OAAO,MAAM,YAEnD;IAEF,iBAAiB,IAAI,IAAI;IAIzB,cAAc,IAAI,IAAI;IAgBtB,aAAa,IAAI,IAAI;IAgBrB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAkBjD,oBAAoB,IAAI,IAAI;IAS5B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa1C,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,GACZ,IAAI;IAeP,yBAAyB,IAAI,IAAI;IAgBjC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA0BvC,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAmBvC,yBAAyB,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAsB5E,eAAe,IAAI,IAAI;IAkBvB,kBAAkB,IAAI,IAAI;IAS1B,YAAY,IAAI,YAAY,EAAE;IAqB9B,gBAAgB,IAAI,YAAY;IA8BhC,MAAM,IAAI,YAAY;CA2DvB;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"CustomColumnBuilder.d.ts","sourceRoot":"","sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAIvD,OAAO,EAA8B,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAK7E,OAAO,4BAA4B,CAAC;AACpC,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAE7C,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9D,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,UAAU,wBAAwB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,sBAAsB,EAAE,OAAO,CAAC;IAChC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AACD,cAAM,mBAAoB,SAAQ,SAAS,CACzC,wBAAwB,EACxB,wBAAwB,CACzB;IACC,MAAM,CAAC,qBAAqB,SAAO;IAEnC,MAAM,CAAC,YAAY;;sBAEL,IAAI;wBACF,IAAI;MAClB;IAEF,MAAM,CAAC,6BAA6B,IAAI,MAAM;IAI9C,MAAM,CAAC,uBAAuB,IAAI,KAAK;gBAQ3B,KAAK,EAAE,wBAAwB;IAyB3C,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAO5B,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IAEjC,kBAAkB,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IAEzD,QAAQ,WAAoB,KAAK,EAAE,OAAO,MAAM,uBAE9C;IAEF,aAAa,WAAoB,KAAK,EAAE,OAAO,MAAM,YAEnD;IAEF,iBAAiB,IAAI,IAAI;IAIzB,cAAc,IAAI,IAAI;IAgBtB,aAAa,IAAI,IAAI;IAgBrB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAkBjD,oBAAoB,IAAI,IAAI;IAS5B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa1C,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,GACZ,IAAI;IAeP,yBAAyB,IAAI,IAAI;IAgBjC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA0BvC,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAmBvC,yBAAyB,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAsB5E,eAAe,IAAI,IAAI;IAkBvB,kBAAkB,IAAI,IAAI;IAS1B,YAAY,IAAI,YAAY,EAAE;IAqB9B,gBAAgB,IAAI,YAAY;IA8BhC,MAAM,IAAI,YAAY;CA2DvB;AAED,eAAe,mBAAmB,CAAC"}
@@ -1,11 +1,7 @@
1
1
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
-
3
2
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
-
5
3
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
-
7
4
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
-
9
5
  import React, { Component } from 'react';
10
6
  import classNames from 'classnames';
11
7
  import shortid from 'shortid';
@@ -17,12 +13,10 @@ import { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';
17
13
  import CustomColumnInput from "./CustomColumnInput.js";
18
14
  import "./CustomColumnBuilder.css";
19
15
  import IrisGridModel from "../IrisGridModel.js";
20
-
21
16
  class CustomColumnBuilder extends Component {
22
17
  static makeCustomColumnInputEventKey() {
23
18
  return shortid.generate();
24
19
  }
25
-
26
20
  static createCustomColumnInput() {
27
21
  return {
28
22
  eventKey: shortid.generate(),
@@ -30,18 +24,12 @@ class CustomColumnBuilder extends Component {
30
24
  formula: ''
31
25
  };
32
26
  }
33
-
34
27
  constructor(props) {
35
28
  super(props);
36
-
37
29
  _defineProperty(this, "container", void 0);
38
-
39
30
  _defineProperty(this, "successButtonTimer", void 0);
40
-
41
31
  _defineProperty(this, "getInput", memoize((inputs, key) => inputs.find(input => input.eventKey === key)));
42
-
43
32
  _defineProperty(this, "getInputIndex", memoize((inputs, key) => inputs.findIndex(input => input.eventKey === key)));
44
-
45
33
  this.handleAddColumnClick = this.handleAddColumnClick.bind(this);
46
34
  this.handleSaveClick = this.handleSaveClick.bind(this);
47
35
  this.handleInputChange = this.handleInputChange.bind(this);
@@ -61,7 +49,6 @@ class CustomColumnBuilder extends Component {
61
49
  this.container = null;
62
50
  this.successButtonTimer = null;
63
51
  }
64
-
65
52
  componentDidMount() {
66
53
  var {
67
54
  customColumns
@@ -69,21 +56,17 @@ class CustomColumnBuilder extends Component {
69
56
  this.parseCustomColumns(customColumns);
70
57
  this.startListening();
71
58
  }
72
-
73
59
  componentWillUnmount() {
74
60
  this.stopListening();
75
-
76
61
  if (this.successButtonTimer) {
77
62
  clearTimeout(this.successButtonTimer);
78
63
  }
79
64
  }
80
-
81
65
  resetErrorMessage() {
82
66
  this.setState({
83
67
  errorMessage: null
84
68
  });
85
69
  }
86
-
87
70
  startListening() {
88
71
  var {
89
72
  model
@@ -92,7 +75,6 @@ class CustomColumnBuilder extends Component {
92
75
  model.addEventListener(IrisGridModel.EVENT.UPDATED, this.handleCustomColumnUpdated);
93
76
  model.addEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);
94
77
  }
95
-
96
78
  stopListening() {
97
79
  var {
98
80
  model
@@ -101,7 +83,6 @@ class CustomColumnBuilder extends Component {
101
83
  model.removeEventListener(IrisGridModel.EVENT.UPDATED, this.handleCustomColumnUpdated);
102
84
  model.removeEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);
103
85
  }
104
-
105
86
  parseCustomColumns(customColumns) {
106
87
  if (customColumns.length > 0) {
107
88
  var customColumnInputs = customColumns.map(customColumn => {
@@ -121,7 +102,6 @@ class CustomColumnBuilder extends Component {
121
102
  });
122
103
  }
123
104
  }
124
-
125
105
  handleAddColumnClick() {
126
106
  var {
127
107
  inputs
@@ -132,7 +112,6 @@ class CustomColumnBuilder extends Component {
132
112
  inputs: newInputs
133
113
  });
134
114
  }
135
-
136
115
  handleDeleteColumn(eventKey) {
137
116
  var {
138
117
  inputs
@@ -140,25 +119,20 @@ class CustomColumnBuilder extends Component {
140
119
  var customColumnIndex = this.getInputIndex(inputs, eventKey);
141
120
  var newInputs = [...inputs];
142
121
  newInputs.splice(customColumnIndex, 1);
143
-
144
122
  if (newInputs.length === 0) {
145
123
  newInputs.push(CustomColumnBuilder.createCustomColumnInput());
146
124
  }
147
-
148
125
  this.setState({
149
126
  inputs: newInputs
150
127
  });
151
128
  }
152
-
153
129
  handleInputChange(eventKey, type, value) {
154
130
  var {
155
131
  inputs
156
132
  } = this.state;
157
133
  var customColumnIndex = this.getInputIndex(inputs, eventKey);
158
134
  var customColumnInput = this.getInput(inputs, eventKey);
159
-
160
135
  var newCustomInput = _objectSpread({}, customColumnInput);
161
-
162
136
  newCustomInput[type] = value;
163
137
  var newInputs = [...inputs];
164
138
  newInputs.splice(customColumnIndex, 1, newCustomInput);
@@ -166,16 +140,13 @@ class CustomColumnBuilder extends Component {
166
140
  inputs: newInputs
167
141
  });
168
142
  }
169
-
170
143
  handleCustomColumnUpdated() {
171
144
  var {
172
145
  isCustomColumnApplying
173
146
  } = this.state;
174
-
175
147
  if (!isCustomColumnApplying) {
176
148
  return;
177
149
  }
178
-
179
150
  this.setState({
180
151
  isCustomColumnApplying: false,
181
152
  isSuccessShowing: true
@@ -185,17 +156,14 @@ class CustomColumnBuilder extends Component {
185
156
  }), CustomColumnBuilder.SUCCESS_SHOW_DURATION);
186
157
  });
187
158
  }
188
-
189
159
  handleRequestFailed(event) {
190
160
  var customEvent = event;
191
161
  var {
192
162
  isCustomColumnApplying
193
163
  } = this.state;
194
-
195
164
  if (!isCustomColumnApplying) {
196
165
  return;
197
166
  }
198
-
199
167
  this.setState({
200
168
  isCustomColumnApplying: false,
201
169
  errorMessage: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
@@ -206,14 +174,13 @@ class CustomColumnBuilder extends Component {
206
174
  hasRequestFailed: true
207
175
  });
208
176
  }
209
-
210
177
  handleDragEnd(result) {
211
- DragUtils.stopDragging(); // if dropped outside the list
178
+ DragUtils.stopDragging();
212
179
 
180
+ // if dropped outside the list
213
181
  if (!result.destination) {
214
182
  return;
215
183
  }
216
-
217
184
  var {
218
185
  inputs
219
186
  } = this.state;
@@ -227,32 +194,26 @@ class CustomColumnBuilder extends Component {
227
194
  inputs: newInputs
228
195
  });
229
196
  }
230
-
231
197
  handleEditorTabNavigation(focusEditorIndex, shiftKey) {
232
198
  var {
233
199
  inputs
234
- } = this.state; // focus on drag handle
235
-
200
+ } = this.state;
201
+ // focus on drag handle
236
202
  if (shiftKey) {
237
203
  var _this$container;
238
-
239
204
  ((_this$container = this.container) === null || _this$container === void 0 ? void 0 : _this$container.querySelectorAll(".btn-drag-handle")[focusEditorIndex]).focus();
240
205
  return;
241
206
  }
242
-
243
207
  if (focusEditorIndex === inputs.length - 1) {
244
208
  var _this$container2;
245
-
246
209
  ((_this$container2 = this.container) === null || _this$container2 === void 0 ? void 0 : _this$container2.querySelectorAll(".btn-add-column")[focusEditorIndex]).focus();
247
210
  } else {
248
211
  var _this$container3;
249
-
250
212
  // focus on next column name input
251
213
  var nextFocusIndex = focusEditorIndex + 1;
252
214
  ((_this$container3 = this.container) === null || _this$container3 === void 0 ? void 0 : _this$container3.querySelectorAll(".custom-column-input")[nextFocusIndex]).focus();
253
215
  }
254
216
  }
255
-
256
217
  handleSaveClick() {
257
218
  var {
258
219
  onSave
@@ -261,18 +222,15 @@ class CustomColumnBuilder extends Component {
261
222
  inputs,
262
223
  isCustomColumnApplying
263
224
  } = this.state;
264
-
265
225
  if (isCustomColumnApplying) {
266
226
  return;
267
227
  }
268
-
269
228
  var customColumns = [];
270
229
  inputs.forEach(input => {
271
230
  var {
272
231
  name,
273
232
  formula
274
233
  } = input;
275
-
276
234
  if (name && formula) {
277
235
  customColumns.push("".concat(name, "=").concat(formula));
278
236
  }
@@ -283,23 +241,19 @@ class CustomColumnBuilder extends Component {
283
241
  });
284
242
  onSave(customColumns);
285
243
  }
286
-
287
244
  resetRequestFailed() {
288
245
  this.setState(_ref => {
289
246
  var {
290
247
  hasRequestFailed
291
248
  } = _ref;
292
-
293
249
  if (hasRequestFailed) {
294
250
  return {
295
251
  hasRequestFailed: false
296
252
  };
297
253
  }
298
-
299
254
  return null;
300
255
  });
301
256
  }
302
-
303
257
  renderInputs() {
304
258
  var {
305
259
  inputs,
@@ -324,7 +278,6 @@ class CustomColumnBuilder extends Component {
324
278
  });
325
279
  });
326
280
  }
327
-
328
281
  renderSaveButton() {
329
282
  var {
330
283
  inputs,
@@ -347,7 +300,6 @@ class CustomColumnBuilder extends Component {
347
300
  icon: vsPass
348
301
  }), " Success"));
349
302
  }
350
-
351
303
  render() {
352
304
  var {
353
305
  onCancel
@@ -369,8 +321,8 @@ class CustomColumnBuilder extends Component {
369
321
  }, /*#__PURE__*/React.createElement(Droppable, {
370
322
  droppableId: "droppable-custom-columns"
371
323
  }, (provided, snapshot) => /*#__PURE__*/React.createElement("div", _extends({
372
- ref: provided.innerRef // eslint-disable-next-line react/jsx-props-no-spreading
373
-
324
+ ref: provided.innerRef
325
+ // eslint-disable-next-line react/jsx-props-no-spreading
374
326
  }, provided.droppableProps, {
375
327
  className: classNames('droppable-container', {
376
328
  dragging: snapshot.draggingFromThisWith
@@ -394,16 +346,12 @@ class CustomColumnBuilder extends Component {
394
346
  onClick: onCancel
395
347
  }, "Cancel"), this.renderSaveButton())));
396
348
  }
397
-
398
349
  }
399
-
400
350
  _defineProperty(CustomColumnBuilder, "SUCCESS_SHOW_DURATION", 750);
401
-
402
351
  _defineProperty(CustomColumnBuilder, "defaultProps", {
403
352
  customColumns: [],
404
353
  onSave: () => undefined,
405
354
  onCancel: () => undefined
406
355
  });
407
-
408
356
  export default CustomColumnBuilder;
409
357
  //# sourceMappingURL=CustomColumnBuilder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomColumnBuilder.js","names":["React","Component","classNames","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","Button","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsWarning","vsPass","CustomColumnInput","IrisGridModel","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","inputs","key","find","input","findIndex","handleAddColumnClick","bind","handleSaveClick","handleInputChange","handleDeleteColumn","handleCustomColumnUpdated","handleRequestFailed","handleDragEnd","resetRequestFailed","handleEditorTabNavigation","state","isCustomColumnApplying","errorMessage","hasRequestFailed","isSuccessShowing","container","successButtonTimer","componentDidMount","customColumns","parseCustomColumns","startListening","componentWillUnmount","stopListening","clearTimeout","resetErrorMessage","setState","model","addEventListener","EVENT","COLUMNS_CHANGED","UPDATED","REQUEST_FAILED","removeEventListener","length","customColumnInputs","map","customColumn","split","newInputs","push","customColumnIndex","getInputIndex","splice","type","value","customColumnInput","getInput","newCustomInput","setTimeout","SUCCESS_SHOW_DURATION","event","customEvent","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","querySelectorAll","focus","nextFocusIndex","onSave","forEach","renderInputs","renderSaveButton","saveText","render","onCancel","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder","undefined"],"sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';\nimport CustomColumnInput from './CustomColumnInput';\nimport './CustomColumnBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nexport type CustomColumnKey = 'eventKey' | 'name' | 'formula';\n\ntype Input = {\n eventKey: string;\n name: string;\n formula: string;\n};\ninterface CustomColumnBuilderProps {\n model: IrisGridModel;\n customColumns: string[];\n onSave: (columns: string[]) => void;\n onCancel: () => void;\n}\n\ninterface CustomColumnBuilderState {\n inputs: Input[];\n isCustomColumnApplying: boolean;\n errorMessage: ReactElement | null;\n hasRequestFailed: boolean;\n isSuccessShowing: boolean;\n}\nclass CustomColumnBuilder extends Component<\n CustomColumnBuilderProps,\n CustomColumnBuilderState\n> {\n static SUCCESS_SHOW_DURATION = 750;\n\n static defaultProps = {\n customColumns: [],\n onSave: (): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static makeCustomColumnInputEventKey(): string {\n return shortid.generate();\n }\n\n static createCustomColumnInput(): Input {\n return {\n eventKey: shortid.generate(),\n name: '',\n formula: '',\n };\n }\n\n constructor(props: CustomColumnBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleSaveClick = this.handleSaveClick.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleCustomColumnUpdated = this.handleCustomColumnUpdated.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.resetRequestFailed = this.resetRequestFailed.bind(this);\n\n this.handleEditorTabNavigation = this.handleEditorTabNavigation.bind(this);\n\n this.state = {\n inputs: [],\n isCustomColumnApplying: false,\n errorMessage: null,\n hasRequestFailed: false,\n isSuccessShowing: false,\n };\n this.container = null;\n this.successButtonTimer = null;\n }\n\n componentDidMount(): void {\n const { customColumns } = this.props;\n this.parseCustomColumns(customColumns);\n this.startListening();\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n if (this.successButtonTimer) {\n clearTimeout(this.successButtonTimer);\n }\n }\n\n container: HTMLDivElement | null;\n\n successButtonTimer: ReturnType<typeof setTimeout> | null;\n\n getInput = memoize((inputs: Input[], key: string) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs: Input[], key: string) =>\n inputs.findIndex(input => input.eventKey === key)\n );\n\n resetErrorMessage(): void {\n this.setState({ errorMessage: null });\n }\n\n startListening(): void {\n const { model } = this.props;\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListening(): void {\n const { model } = this.props;\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n parseCustomColumns(customColumns: string[]): void {\n if (customColumns.length > 0) {\n const customColumnInputs = customColumns.map(customColumn => {\n const input = customColumn.split(/=(.+)/, 2);\n return {\n eventKey: CustomColumnBuilder.makeCustomColumnInputEventKey(),\n name: input[0],\n formula: input[1],\n };\n });\n this.setState({ inputs: customColumnInputs });\n } else {\n this.setState({\n inputs: [CustomColumnBuilder.createCustomColumnInput()],\n });\n }\n }\n\n handleAddColumnClick(): void {\n const { inputs } = this.state;\n const newInputs = [...inputs];\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleDeleteColumn(eventKey: string): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1);\n if (newInputs.length === 0) {\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n }\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleInputChange(\n eventKey: string,\n type: CustomColumnKey,\n value: string\n ): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const customColumnInput = this.getInput(inputs, eventKey);\n\n const newCustomInput = { ...customColumnInput } as Input;\n newCustomInput[type] = value;\n\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1, newCustomInput);\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleCustomColumnUpdated(): void {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState(\n { isCustomColumnApplying: false, isSuccessShowing: true },\n () => {\n this.successButtonTimer = setTimeout(\n () => this.setState({ isSuccessShowing: false }),\n CustomColumnBuilder.SUCCESS_SHOW_DURATION\n );\n }\n );\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n\n this.setState({\n isCustomColumnApplying: false,\n errorMessage: (\n <>\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Failed to apply custom columns.\n </p>\n <div className=\"error-box\">\n {customEvent.detail.errorMessage}\n <br />\n Table configuration:{' '}\n {JSON.stringify(customEvent.detail.configuration)}\n </div>\n </>\n ),\n hasRequestFailed: true,\n });\n }\n\n handleDragEnd(result: DropResult): void {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (!result.destination) {\n return;\n }\n const { inputs } = this.state;\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const newInputs = [...inputs];\n const sourceInput = inputs[sourceIndex];\n\n newInputs.splice(sourceIndex, 1);\n newInputs.splice(destinationIndex, 0, sourceInput);\n\n this.setState({ inputs: newInputs });\n }\n\n handleEditorTabNavigation(focusEditorIndex: number, shiftKey: boolean): void {\n const { inputs } = this.state;\n // focus on drag handle\n if (shiftKey) {\n (this.container?.querySelectorAll(`.btn-drag-handle`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n (this.container?.querySelectorAll(`.btn-add-column`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n (this.container?.querySelectorAll(`.custom-column-input`)[\n nextFocusIndex\n ] as HTMLInputElement).focus();\n }\n }\n\n handleSaveClick(): void {\n const { onSave } = this.props;\n const { inputs, isCustomColumnApplying } = this.state;\n if (isCustomColumnApplying) {\n return;\n }\n const customColumns = [] as string[];\n inputs.forEach(input => {\n const { name, formula } = input;\n if (name && formula) {\n customColumns.push(`${name}=${formula}`);\n }\n });\n this.resetErrorMessage();\n this.setState({ isCustomColumnApplying: true });\n onSave(customColumns);\n }\n\n resetRequestFailed(): void {\n this.setState(({ hasRequestFailed }) => {\n if (hasRequestFailed) {\n return { hasRequestFailed: false };\n }\n return null;\n });\n }\n\n renderInputs(): ReactElement[] {\n const { inputs, hasRequestFailed } = this.state;\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n return (\n <CustomColumnInput\n key={eventKey}\n inputIndex={index}\n eventKey={eventKey}\n name={name}\n formula={formula}\n onChange={this.handleInputChange}\n onDeleteColumn={this.handleDeleteColumn}\n onTabInEditor={this.handleEditorTabNavigation}\n invalid={hasRequestFailed}\n />\n );\n });\n }\n\n renderSaveButton(): ReactElement {\n const { inputs, isCustomColumnApplying, isSuccessShowing } = this.state;\n const saveText = inputs.length > 1 ? 'Save Columns' : 'Save Column';\n\n return (\n <Button\n kind={isSuccessShowing ? 'success' : 'primary'}\n className={classNames('btn-apply', {\n 'btn-spinner': isCustomColumnApplying,\n })}\n disabled={isSuccessShowing || isCustomColumnApplying}\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Applying</span>\n <span className=\"btn-hover-content\">Applying</span>\n </span>\n )}\n {!isSuccessShowing && !isCustomColumnApplying && saveText}\n {isSuccessShowing && (\n <>\n <FontAwesomeIcon icon={vsPass} /> Success\n </>\n )}\n </Button>\n );\n }\n\n render(): ReactElement {\n const { onCancel } = this.props;\n const { errorMessage } = this.state;\n return (\n <div\n role=\"presentation\"\n className=\"custom-column-builder-container\"\n ref={container => {\n this.container = container;\n }}\n onClick={this.resetRequestFailed}\n onFocus={this.resetRequestFailed}\n >\n <hr />\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={this.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 {this.renderInputs()}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n <div className=\"pt-1 px-3\">\n <Button\n kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n icon={dhNewCircleLargeFilled}\n >\n Add Another Column\n </Button>\n </div>\n\n <div className=\"custom-column-builder-footer\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n\n <div className=\"d-flex justify-content-end\">\n <Button kind=\"secondary\" className=\"mr-2\" onClick={onCancel}>\n Cancel\n </Button>\n {this.renderSaveButton()}\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomColumnBuilder;\n"],"mappings":"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"}
1
+ {"version":3,"file":"CustomColumnBuilder.js","names":["React","Component","classNames","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","Button","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsWarning","vsPass","CustomColumnInput","IrisGridModel","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","inputs","key","find","input","findIndex","handleAddColumnClick","bind","handleSaveClick","handleInputChange","handleDeleteColumn","handleCustomColumnUpdated","handleRequestFailed","handleDragEnd","resetRequestFailed","handleEditorTabNavigation","state","isCustomColumnApplying","errorMessage","hasRequestFailed","isSuccessShowing","container","successButtonTimer","componentDidMount","customColumns","parseCustomColumns","startListening","componentWillUnmount","stopListening","clearTimeout","resetErrorMessage","setState","model","addEventListener","EVENT","COLUMNS_CHANGED","UPDATED","REQUEST_FAILED","removeEventListener","length","customColumnInputs","map","customColumn","split","newInputs","push","customColumnIndex","getInputIndex","splice","type","value","customColumnInput","getInput","newCustomInput","setTimeout","SUCCESS_SHOW_DURATION","event","customEvent","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","querySelectorAll","focus","nextFocusIndex","onSave","forEach","renderInputs","renderSaveButton","saveText","render","onCancel","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder","undefined"],"sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';\nimport CustomColumnInput from './CustomColumnInput';\nimport './CustomColumnBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nexport type CustomColumnKey = 'eventKey' | 'name' | 'formula';\n\ntype Input = {\n eventKey: string;\n name: string;\n formula: string;\n};\ninterface CustomColumnBuilderProps {\n model: IrisGridModel;\n customColumns: string[];\n onSave: (columns: string[]) => void;\n onCancel: () => void;\n}\n\ninterface CustomColumnBuilderState {\n inputs: Input[];\n isCustomColumnApplying: boolean;\n errorMessage: ReactElement | null;\n hasRequestFailed: boolean;\n isSuccessShowing: boolean;\n}\nclass CustomColumnBuilder extends Component<\n CustomColumnBuilderProps,\n CustomColumnBuilderState\n> {\n static SUCCESS_SHOW_DURATION = 750;\n\n static defaultProps = {\n customColumns: [],\n onSave: (): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static makeCustomColumnInputEventKey(): string {\n return shortid.generate();\n }\n\n static createCustomColumnInput(): Input {\n return {\n eventKey: shortid.generate(),\n name: '',\n formula: '',\n };\n }\n\n constructor(props: CustomColumnBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleSaveClick = this.handleSaveClick.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleCustomColumnUpdated = this.handleCustomColumnUpdated.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.resetRequestFailed = this.resetRequestFailed.bind(this);\n\n this.handleEditorTabNavigation = this.handleEditorTabNavigation.bind(this);\n\n this.state = {\n inputs: [],\n isCustomColumnApplying: false,\n errorMessage: null,\n hasRequestFailed: false,\n isSuccessShowing: false,\n };\n this.container = null;\n this.successButtonTimer = null;\n }\n\n componentDidMount(): void {\n const { customColumns } = this.props;\n this.parseCustomColumns(customColumns);\n this.startListening();\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n if (this.successButtonTimer) {\n clearTimeout(this.successButtonTimer);\n }\n }\n\n container: HTMLDivElement | null;\n\n successButtonTimer: ReturnType<typeof setTimeout> | null;\n\n getInput = memoize((inputs: Input[], key: string) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs: Input[], key: string) =>\n inputs.findIndex(input => input.eventKey === key)\n );\n\n resetErrorMessage(): void {\n this.setState({ errorMessage: null });\n }\n\n startListening(): void {\n const { model } = this.props;\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListening(): void {\n const { model } = this.props;\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n parseCustomColumns(customColumns: string[]): void {\n if (customColumns.length > 0) {\n const customColumnInputs = customColumns.map(customColumn => {\n const input = customColumn.split(/=(.+)/, 2);\n return {\n eventKey: CustomColumnBuilder.makeCustomColumnInputEventKey(),\n name: input[0],\n formula: input[1],\n };\n });\n this.setState({ inputs: customColumnInputs });\n } else {\n this.setState({\n inputs: [CustomColumnBuilder.createCustomColumnInput()],\n });\n }\n }\n\n handleAddColumnClick(): void {\n const { inputs } = this.state;\n const newInputs = [...inputs];\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleDeleteColumn(eventKey: string): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1);\n if (newInputs.length === 0) {\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n }\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleInputChange(\n eventKey: string,\n type: CustomColumnKey,\n value: string\n ): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const customColumnInput = this.getInput(inputs, eventKey);\n\n const newCustomInput = { ...customColumnInput } as Input;\n newCustomInput[type] = value;\n\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1, newCustomInput);\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleCustomColumnUpdated(): void {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState(\n { isCustomColumnApplying: false, isSuccessShowing: true },\n () => {\n this.successButtonTimer = setTimeout(\n () => this.setState({ isSuccessShowing: false }),\n CustomColumnBuilder.SUCCESS_SHOW_DURATION\n );\n }\n );\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n\n this.setState({\n isCustomColumnApplying: false,\n errorMessage: (\n <>\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Failed to apply custom columns.\n </p>\n <div className=\"error-box\">\n {customEvent.detail.errorMessage}\n <br />\n Table configuration:{' '}\n {JSON.stringify(customEvent.detail.configuration)}\n </div>\n </>\n ),\n hasRequestFailed: true,\n });\n }\n\n handleDragEnd(result: DropResult): void {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (!result.destination) {\n return;\n }\n const { inputs } = this.state;\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const newInputs = [...inputs];\n const sourceInput = inputs[sourceIndex];\n\n newInputs.splice(sourceIndex, 1);\n newInputs.splice(destinationIndex, 0, sourceInput);\n\n this.setState({ inputs: newInputs });\n }\n\n handleEditorTabNavigation(focusEditorIndex: number, shiftKey: boolean): void {\n const { inputs } = this.state;\n // focus on drag handle\n if (shiftKey) {\n (this.container?.querySelectorAll(`.btn-drag-handle`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n (this.container?.querySelectorAll(`.btn-add-column`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n (this.container?.querySelectorAll(`.custom-column-input`)[\n nextFocusIndex\n ] as HTMLInputElement).focus();\n }\n }\n\n handleSaveClick(): void {\n const { onSave } = this.props;\n const { inputs, isCustomColumnApplying } = this.state;\n if (isCustomColumnApplying) {\n return;\n }\n const customColumns = [] as string[];\n inputs.forEach(input => {\n const { name, formula } = input;\n if (name && formula) {\n customColumns.push(`${name}=${formula}`);\n }\n });\n this.resetErrorMessage();\n this.setState({ isCustomColumnApplying: true });\n onSave(customColumns);\n }\n\n resetRequestFailed(): void {\n this.setState(({ hasRequestFailed }) => {\n if (hasRequestFailed) {\n return { hasRequestFailed: false };\n }\n return null;\n });\n }\n\n renderInputs(): ReactElement[] {\n const { inputs, hasRequestFailed } = this.state;\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n return (\n <CustomColumnInput\n key={eventKey}\n inputIndex={index}\n eventKey={eventKey}\n name={name}\n formula={formula}\n onChange={this.handleInputChange}\n onDeleteColumn={this.handleDeleteColumn}\n onTabInEditor={this.handleEditorTabNavigation}\n invalid={hasRequestFailed}\n />\n );\n });\n }\n\n renderSaveButton(): ReactElement {\n const { inputs, isCustomColumnApplying, isSuccessShowing } = this.state;\n const saveText = inputs.length > 1 ? 'Save Columns' : 'Save Column';\n\n return (\n <Button\n kind={isSuccessShowing ? 'success' : 'primary'}\n className={classNames('btn-apply', {\n 'btn-spinner': isCustomColumnApplying,\n })}\n disabled={isSuccessShowing || isCustomColumnApplying}\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Applying</span>\n <span className=\"btn-hover-content\">Applying</span>\n </span>\n )}\n {!isSuccessShowing && !isCustomColumnApplying && saveText}\n {isSuccessShowing && (\n <>\n <FontAwesomeIcon icon={vsPass} /> Success\n </>\n )}\n </Button>\n );\n }\n\n render(): ReactElement {\n const { onCancel } = this.props;\n const { errorMessage } = this.state;\n return (\n <div\n role=\"presentation\"\n className=\"custom-column-builder-container\"\n ref={container => {\n this.container = container;\n }}\n onClick={this.resetRequestFailed}\n onFocus={this.resetRequestFailed}\n >\n <hr />\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={this.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 {this.renderInputs()}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n <div className=\"pt-1 px-3\">\n <Button\n kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n icon={dhNewCircleLargeFilled}\n >\n Add Another Column\n </Button>\n </div>\n\n <div className=\"custom-column-builder-footer\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n\n <div className=\"d-flex justify-content-end\">\n <Button kind=\"secondary\" className=\"mr-2\" onClick={onCancel}>\n Cancel\n </Button>\n {this.renderSaveButton()}\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomColumnBuilder;\n"],"mappings":"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"}