@deephaven/iris-grid 0.46.1-beta.2 → 0.46.1-beta.4

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 (99) hide show
  1. package/dist/AdvancedFilterCreator.js +122 -102
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorFilterItem.js +47 -38
  4. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.js +52 -40
  6. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValueList.js +35 -28
  8. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  9. package/dist/ColumnStatistics.js +74 -54
  10. package/dist/ColumnStatistics.js.map +1 -1
  11. package/dist/CrossColumnSearch.js +113 -90
  12. package/dist/CrossColumnSearch.js.map +1 -1
  13. package/dist/FilterInputField.js +42 -35
  14. package/dist/FilterInputField.js.map +1 -1
  15. package/dist/GotoRow.js +226 -193
  16. package/dist/GotoRow.js.map +1 -1
  17. package/dist/IrisGrid.js +371 -344
  18. package/dist/IrisGrid.js.map +1 -1
  19. package/dist/IrisGridBottomBar.js +11 -8
  20. package/dist/IrisGridBottomBar.js.map +1 -1
  21. package/dist/IrisGridCellOverflowModal.js +56 -50
  22. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  23. package/dist/IrisGridCopyHandler.js +34 -24
  24. package/dist/IrisGridCopyHandler.js.map +1 -1
  25. package/dist/IrisGridPartitionSelector.js +59 -46
  26. package/dist/IrisGridPartitionSelector.js.map +1 -1
  27. package/dist/PartitionSelectorSearch.js +43 -36
  28. package/dist/PartitionSelectorSearch.js.map +1 -1
  29. package/dist/PendingDataBottomBar.js +34 -22
  30. package/dist/PendingDataBottomBar.js.map +1 -1
  31. package/dist/ToastBottomBar.js +5 -3
  32. package/dist/ToastBottomBar.js.map +1 -1
  33. package/dist/format-context-menus/CustomFormatAction.js +34 -25
  34. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  35. package/dist/format-context-menus/FormatContextMenuUtils.js +2 -1
  36. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  37. package/dist/mousehandlers/IrisGridContextMenuHandler.js +50 -36
  38. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  39. package/dist/sidebar/AdvancedSettingsMenu.js +2 -1
  40. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  41. package/dist/sidebar/ChartBuilder.js +134 -107
  42. package/dist/sidebar/ChartBuilder.js.map +1 -1
  43. package/dist/sidebar/CustomColumnBuilder.js +70 -48
  44. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  45. package/dist/sidebar/CustomColumnInput.js +66 -53
  46. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  47. package/dist/sidebar/InputEditor.js +15 -11
  48. package/dist/sidebar/InputEditor.js.map +1 -1
  49. package/dist/sidebar/RollupRows.js +130 -103
  50. package/dist/sidebar/RollupRows.js.map +1 -1
  51. package/dist/sidebar/SelectDistinctBuilder.js +49 -39
  52. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  53. package/dist/sidebar/TableCsvExporter.js +178 -128
  54. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  55. package/dist/sidebar/aggregations/AggregationEdit.js +67 -57
  56. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  57. package/dist/sidebar/aggregations/Aggregations.js +86 -63
  58. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  59. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +30 -22
  60. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  61. package/dist/sidebar/conditional-formatting/ConditionEditor.js +52 -47
  62. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  63. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +52 -42
  64. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  65. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +90 -67
  66. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  67. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +30 -22
  68. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  69. package/dist/sidebar/conditional-formatting/StyleEditor.js +70 -58
  70. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  71. package/dist/sidebar/icons/BarIcon.js +21 -12
  72. package/dist/sidebar/icons/BarIcon.js.map +1 -1
  73. package/dist/sidebar/icons/FormatColumnWhereIcon.js +38 -30
  74. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
  75. package/dist/sidebar/icons/FormatRowWhereIcon.js +32 -24
  76. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
  77. package/dist/sidebar/icons/HistogramIcon.js +21 -12
  78. package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
  79. package/dist/sidebar/icons/LineIcon.js +24 -15
  80. package/dist/sidebar/icons/LineIcon.js.map +1 -1
  81. package/dist/sidebar/icons/PieIcon.js +21 -12
  82. package/dist/sidebar/icons/PieIcon.js.map +1 -1
  83. package/dist/sidebar/icons/ScatterIcon.js +71 -62
  84. package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
  85. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +129 -121
  86. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  87. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +121 -87
  88. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
  89. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +40 -26
  90. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  91. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +17 -14
  92. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  93. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +34 -28
  94. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -1
  95. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +2 -2
  96. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  97. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +8 -7
  98. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
  99. package/package.json +15 -15
@@ -7,6 +7,8 @@ import Log from '@deephaven/log';
7
7
  import shortid from 'shortid';
8
8
  import { BarIcon, HistogramIcon, LineIcon, PieIcon, ScatterIcon } from "./icons/index.js";
9
9
  import "./ChartBuilder.css";
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ import { jsxs as _jsxs } from "react/jsx-runtime";
10
12
  var log = Log.module('ChartBuilder');
11
13
  /**
12
14
  * Form for configuring all the settings when creating a console.
@@ -122,15 +124,15 @@ class ChartBuilder extends PureComponent {
122
124
  } = model;
123
125
  switch (type) {
124
126
  case dh.plot.SeriesPlotStyle.LINE:
125
- return /*#__PURE__*/React.createElement(LineIcon, null);
127
+ return /*#__PURE__*/_jsx(LineIcon, {});
126
128
  case dh.plot.SeriesPlotStyle.BAR:
127
- return /*#__PURE__*/React.createElement(BarIcon, null);
129
+ return /*#__PURE__*/_jsx(BarIcon, {});
128
130
  case dh.plot.SeriesPlotStyle.SCATTER:
129
- return /*#__PURE__*/React.createElement(ScatterIcon, null);
131
+ return /*#__PURE__*/_jsx(ScatterIcon, {});
130
132
  case dh.plot.SeriesPlotStyle.PIE:
131
- return /*#__PURE__*/React.createElement(PieIcon, null);
133
+ return /*#__PURE__*/_jsx(PieIcon, {});
132
134
  case dh.plot.SeriesPlotStyle.HISTOGRAM:
133
- return /*#__PURE__*/React.createElement(HistogramIcon, null);
135
+ return /*#__PURE__*/_jsx(HistogramIcon, {});
134
136
  default:
135
137
  return null;
136
138
  }
@@ -335,108 +337,133 @@ class ChartBuilder extends PureComponent {
335
337
  var seriesLabel = this.getSeriesLabel(type);
336
338
  var isSeriesVisible = seriesItems.length > 0;
337
339
  var isAddSeriesVisible = seriesItems.length < maxSeriesCount;
338
- return /*#__PURE__*/React.createElement("div", {
339
- className: "chart-builder"
340
- }, /*#__PURE__*/React.createElement("form", {
341
- onSubmit: this.handleSubmit
342
- }, /*#__PURE__*/React.createElement("div", {
343
- className: "form-row"
344
- }, /*#__PURE__*/React.createElement("label", null, "Select Chart Type"), /*#__PURE__*/React.createElement("div", {
345
- className: "form-row"
346
- }, this.getTypes().map((chartType, index) => {
347
- var key = chartType;
348
- return /*#__PURE__*/React.createElement("div", {
349
- key: key,
350
- className: "col col-chart-type"
351
- }, /*#__PURE__*/React.createElement("button", {
352
- type: "button",
353
- className: classNames('btn', 'btn-icon', 'btn-chart-type', {
354
- active: chartType === type
355
- }),
356
- "data-index": index,
357
- onClick: this.handleTypeClick
358
- }, this.getTypeIcon(chartType), this.getTypeName(chartType)));
359
- }))), /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement("div", {
360
- className: "form-row form-inline"
361
- }, /*#__PURE__*/React.createElement("label", {
362
- className: "col-2 label-left"
363
- }, xAxisLabel), /*#__PURE__*/React.createElement("select", {
364
- className: "form-control custom-select select-x-axis col",
365
- value: xAxis,
366
- onChange: this.handleXAxisChange
367
- }, columns.map(column => /*#__PURE__*/React.createElement("option", {
368
- key: column.name,
369
- value: column.name
370
- }, column.name)))), isSeriesVisible && /*#__PURE__*/React.createElement("hr", null), seriesItems.map((seriesItem, i) => /*#__PURE__*/React.createElement("div", {
371
- className: "form-row form-inline form-series-item",
372
- key: seriesItem.id,
373
- "data-testid": "form-series-item-".concat(i)
374
- }, /*#__PURE__*/React.createElement("label", {
375
- className: "col-2 label-left"
376
- }, i === 0 ? seriesLabel : ''), /*#__PURE__*/React.createElement("select", {
377
- className: "form-control custom-select select-series col",
378
- value: seriesItem.value,
379
- onChange: this.handleSeriesChange,
380
- "data-testid": "select-series-item-".concat(i),
381
- "data-index": i
382
- }, columns.map(column => /*#__PURE__*/React.createElement("option", {
383
- key: column.name,
384
- value: column.name,
385
- "data-index": i
386
- }, column.name))), seriesItems.length > 1 && /*#__PURE__*/React.createElement(Button, {
387
- kind: "ghost",
388
- className: "btn-delete-series ml-2 px-2",
389
- "data-index": i,
390
- "data-testid": "delete-series-".concat(i),
391
- onClick: this.handleSeriesDeleteClick,
392
- icon: vsTrash,
393
- tooltip: "Delete"
394
- }))), isAddSeriesVisible && /*#__PURE__*/React.createElement("div", {
395
- className: "form-row"
396
- }, /*#__PURE__*/React.createElement("div", {
397
- className: "col-2"
398
- }), /*#__PURE__*/React.createElement(Button, {
399
- kind: "ghost",
400
- className: "btn-add-series mt-1",
401
- onClick: this.handleAddSeries,
402
- icon: dhNewCircleLargeFilled
403
- }, "Add Series")), /*#__PURE__*/React.createElement("div", {
404
- className: "form-row chart-builder-link"
405
- }, /*#__PURE__*/React.createElement("label", {
406
- className: "col-2 label-right"
407
- }, /*#__PURE__*/React.createElement("div", {
408
- className: "fa-md fa-layers"
409
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
410
- mask: dhTable,
411
- icon: vsCircleLargeFilled,
412
- transform: "right-5 down-5"
413
- }), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
414
- icon: isLinked ? vsLink : dhUnlink,
415
- transform: "grow-2 right-8 down-6"
416
- }))), /*#__PURE__*/React.createElement(RadioGroup, {
417
- onChange: this.handleLinkStateChange,
418
- value: "".concat(isLinked)
419
- }, /*#__PURE__*/React.createElement(RadioItem, {
420
- value: "true"
421
- }, "Sync State"), /*#__PURE__*/React.createElement(RadioItem, {
422
- value: "false"
423
- }, "Freeze State"))), /*#__PURE__*/React.createElement("div", {
424
- className: "form-row"
425
- }, /*#__PURE__*/React.createElement("div", {
426
- className: "col-2 label-right"
427
- }), /*#__PURE__*/React.createElement("div", {
428
- className: "col chart-builder-link-info"
429
- }, isLinked ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.' : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.')), /*#__PURE__*/React.createElement("div", {
430
- className: classNames('form-row', 'justify-content-end', 'my-3')
431
- }, /*#__PURE__*/React.createElement(Button, {
432
- kind: "secondary",
433
- className: "btn-reset",
434
- onClick: this.handleReset
435
- }, "Reset"), /*#__PURE__*/React.createElement(Button, {
436
- kind: "primary",
437
- type: "submit",
438
- className: "btn-submit"
439
- }, "Create"))));
340
+ return /*#__PURE__*/_jsx("div", {
341
+ className: "chart-builder",
342
+ children: /*#__PURE__*/_jsxs("form", {
343
+ onSubmit: this.handleSubmit,
344
+ children: [/*#__PURE__*/_jsxs("div", {
345
+ className: "form-row",
346
+ children: [/*#__PURE__*/_jsx("label", {
347
+ children: "Select Chart Type"
348
+ }), /*#__PURE__*/_jsx("div", {
349
+ className: "form-row",
350
+ children: this.getTypes().map((chartType, index) => {
351
+ var key = chartType;
352
+ return /*#__PURE__*/_jsx("div", {
353
+ className: "col col-chart-type",
354
+ children: /*#__PURE__*/_jsxs("button", {
355
+ type: "button",
356
+ className: classNames('btn', 'btn-icon', 'btn-chart-type', {
357
+ active: chartType === type
358
+ }),
359
+ "data-index": index,
360
+ onClick: this.handleTypeClick,
361
+ children: [this.getTypeIcon(chartType), this.getTypeName(chartType)]
362
+ })
363
+ }, key);
364
+ })
365
+ })]
366
+ }), /*#__PURE__*/_jsx("hr", {}), /*#__PURE__*/_jsxs("div", {
367
+ className: "form-row form-inline",
368
+ children: [/*#__PURE__*/_jsx("label", {
369
+ className: "col-2 label-left",
370
+ children: xAxisLabel
371
+ }), /*#__PURE__*/_jsx("select", {
372
+ className: "form-control custom-select select-x-axis col",
373
+ value: xAxis,
374
+ onChange: this.handleXAxisChange,
375
+ children: columns.map(column => /*#__PURE__*/_jsx("option", {
376
+ value: column.name,
377
+ children: column.name
378
+ }, column.name))
379
+ })]
380
+ }), isSeriesVisible && /*#__PURE__*/_jsx("hr", {}), seriesItems.map((seriesItem, i) => /*#__PURE__*/_jsxs("div", {
381
+ className: "form-row form-inline form-series-item",
382
+ "data-testid": "form-series-item-".concat(i),
383
+ children: [/*#__PURE__*/_jsx("label", {
384
+ className: "col-2 label-left",
385
+ children: i === 0 ? seriesLabel : ''
386
+ }), /*#__PURE__*/_jsx("select", {
387
+ className: "form-control custom-select select-series col",
388
+ value: seriesItem.value,
389
+ onChange: this.handleSeriesChange,
390
+ "data-testid": "select-series-item-".concat(i),
391
+ "data-index": i,
392
+ children: columns.map(column => /*#__PURE__*/_jsx("option", {
393
+ value: column.name,
394
+ "data-index": i,
395
+ children: column.name
396
+ }, column.name))
397
+ }), seriesItems.length > 1 && /*#__PURE__*/_jsx(Button, {
398
+ kind: "ghost",
399
+ className: "btn-delete-series ml-2 px-2",
400
+ "data-index": i,
401
+ "data-testid": "delete-series-".concat(i),
402
+ onClick: this.handleSeriesDeleteClick,
403
+ icon: vsTrash,
404
+ tooltip: "Delete"
405
+ })]
406
+ }, seriesItem.id)), isAddSeriesVisible && /*#__PURE__*/_jsxs("div", {
407
+ className: "form-row",
408
+ children: [/*#__PURE__*/_jsx("div", {
409
+ className: "col-2"
410
+ }), /*#__PURE__*/_jsx(Button, {
411
+ kind: "ghost",
412
+ className: "btn-add-series mt-1",
413
+ onClick: this.handleAddSeries,
414
+ icon: dhNewCircleLargeFilled,
415
+ children: "Add Series"
416
+ })]
417
+ }), /*#__PURE__*/_jsxs("div", {
418
+ className: "form-row chart-builder-link",
419
+ children: [/*#__PURE__*/_jsx("label", {
420
+ className: "col-2 label-right",
421
+ children: /*#__PURE__*/_jsxs("div", {
422
+ className: "fa-md fa-layers",
423
+ children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
424
+ mask: dhTable,
425
+ icon: vsCircleLargeFilled,
426
+ transform: "right-5 down-5"
427
+ }), /*#__PURE__*/_jsx(FontAwesomeIcon, {
428
+ icon: isLinked ? vsLink : dhUnlink,
429
+ transform: "grow-2 right-8 down-6"
430
+ })]
431
+ })
432
+ }), /*#__PURE__*/_jsxs(RadioGroup, {
433
+ onChange: this.handleLinkStateChange,
434
+ value: "".concat(isLinked),
435
+ children: [/*#__PURE__*/_jsx(RadioItem, {
436
+ value: "true",
437
+ children: "Sync State"
438
+ }), /*#__PURE__*/_jsx(RadioItem, {
439
+ value: "false",
440
+ children: "Freeze State"
441
+ })]
442
+ })]
443
+ }), /*#__PURE__*/_jsxs("div", {
444
+ className: "form-row",
445
+ children: [/*#__PURE__*/_jsx("div", {
446
+ className: "col-2 label-right"
447
+ }), /*#__PURE__*/_jsx("div", {
448
+ className: "col chart-builder-link-info",
449
+ children: isLinked ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.' : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.'
450
+ })]
451
+ }), /*#__PURE__*/_jsxs("div", {
452
+ className: classNames('form-row', 'justify-content-end', 'my-3'),
453
+ children: [/*#__PURE__*/_jsx(Button, {
454
+ kind: "secondary",
455
+ className: "btn-reset",
456
+ onClick: this.handleReset,
457
+ children: "Reset"
458
+ }), /*#__PURE__*/_jsx(Button, {
459
+ kind: "primary",
460
+ type: "submit",
461
+ className: "btn-submit",
462
+ children: "Create"
463
+ })]
464
+ })]
465
+ })
466
+ });
440
467
  }
441
468
  }
442
469
  export default ChartBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"ChartBuilder.js","names":["React","PureComponent","classNames","FontAwesomeIcon","Button","RadioGroup","RadioItem","vsLink","dhUnlink","dhTable","dhNewCircleLargeFilled","vsCircleLargeFilled","vsTrash","Log","shortid","BarIcon","HistogramIcon","LineIcon","PieIcon","ScatterIcon","log","module","ChartBuilder","getMaxSeriesCount","dh","type","plot","SeriesPlotStyle","PIE","HISTOGRAM","makeSeriesItem","value","id","generate","makeDefaultSeriesItems","columns","maxSeriesCount","length","name","getDefaultXAxis","constructor","props","handleAddSeries","bind","handleLinkStateChange","handleReset","handleSeriesChange","handleSeriesDeleteClick","handleSubmit","handleTypeClick","handleXAxisChange","sendChange","model","getTypes","xAxis","seriesItems","state","isLinked","LINE","BAR","SCATTER","getTypeName","getTypeIcon","getXAxisLabel","getSeriesLabel","setState","newSeriesItems","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 type {\n Column,\n dh as DhType,\n SeriesPlotStyle,\n} from '@deephaven/jsapi-types';\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: string[];\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: readonly 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 getMaxSeriesCount(dh: DhType, 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 makeSeriesItem(value: string): SeriesItem {\n return { id: shortid.generate(), value };\n }\n\n static makeDefaultSeriesItems(\n dh: DhType,\n type: SeriesPlotStyle,\n columns: readonly Column[]\n ): SeriesItem[] {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, 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: readonly 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, dh } = model;\n\n const type = this.getTypes()[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, 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 getTypes() {\n const { model } = this.props;\n const { dh } = model;\n return [\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 /**\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 getTypeName(type: SeriesPlotStyle): string | SeriesPlotStyle {\n const { model } = this.props;\n const { dh } = model;\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 getTypeIcon(type: SeriesPlotStyle): React.ReactElement | null {\n const { model } = this.props;\n const { dh } = model;\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 getXAxisLabel(type: SeriesPlotStyle): string {\n const { model } = this.props;\n const { dh } = model;\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 getSeriesLabel(type: SeriesPlotStyle): string {\n const { model } = this.props;\n const { dh } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Values';\n default:\n return 'Series';\n }\n }\n\n handleAddSeries(): void {\n this.setState(state => {\n const { seriesItems } = state;\n const newSeriesItems = [...seriesItems];\n\n const { model } = this.props;\n const { columns } = model;\n newSeriesItems.push({\n id: shortid.generate(),\n value: columns[0].name,\n });\n\n return { seriesItems: newSeriesItems };\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, dh } = model;\n\n const type = this.getTypes()[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, 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 =\n 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 const { seriesItems } = state;\n const newSeriesItems = [...seriesItems];\n\n newSeriesItems.splice(intIndex, 1);\n\n return { seriesItems: newSeriesItems };\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,\n series,\n xAxis,\n isLinked,\n });\n }\n\n handleTypeClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent =\n 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 = this.getTypes()[intIndex];\n\n log.debug2('handleTypeSelect', type);\n\n this.setState(state => {\n const { model } = this.props;\n const { dh } = model;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n let { seriesItems } = state;\n seriesItems = seriesItems.slice(0, maxSeriesCount);\n if (seriesItems.length === 0 && maxSeriesCount > 0) {\n const { columns } = model;\n seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, 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, dh } = model;\n const { seriesItems, type, xAxis, isLinked } = this.state;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n const xAxisLabel = this.getXAxisLabel(type);\n const seriesLabel = this.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 {this.getTypes().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 {this.getTypeIcon(chartType)}\n {this.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","Log","shortid","BarIcon","HistogramIcon","LineIcon","PieIcon","ScatterIcon","log","module","ChartBuilder","getMaxSeriesCount","dh","type","plot","SeriesPlotStyle","PIE","HISTOGRAM","makeSeriesItem","value","id","generate","makeDefaultSeriesItems","columns","maxSeriesCount","length","name","getDefaultXAxis","constructor","props","handleAddSeries","bind","handleLinkStateChange","handleReset","handleSeriesChange","handleSeriesDeleteClick","handleSubmit","handleTypeClick","handleXAxisChange","sendChange","model","getTypes","xAxis","seriesItems","state","isLinked","LINE","BAR","SCATTER","getTypeName","getTypeIcon","getXAxisLabel","getSeriesLabel","setState","newSeriesItems","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 type {\n Column,\n dh as DhType,\n SeriesPlotStyle,\n} from '@deephaven/jsapi-types';\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: string[];\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: readonly 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 getMaxSeriesCount(dh: DhType, 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 makeSeriesItem(value: string): SeriesItem {\n return { id: shortid.generate(), value };\n }\n\n static makeDefaultSeriesItems(\n dh: DhType,\n type: SeriesPlotStyle,\n columns: readonly Column[]\n ): SeriesItem[] {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, 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: readonly 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, dh } = model;\n\n const type = this.getTypes()[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, 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 getTypes() {\n const { model } = this.props;\n const { dh } = model;\n return [\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 /**\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 getTypeName(type: SeriesPlotStyle): string | SeriesPlotStyle {\n const { model } = this.props;\n const { dh } = model;\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 getTypeIcon(type: SeriesPlotStyle): React.ReactElement | null {\n const { model } = this.props;\n const { dh } = model;\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 getXAxisLabel(type: SeriesPlotStyle): string {\n const { model } = this.props;\n const { dh } = model;\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 getSeriesLabel(type: SeriesPlotStyle): string {\n const { model } = this.props;\n const { dh } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Values';\n default:\n return 'Series';\n }\n }\n\n handleAddSeries(): void {\n this.setState(state => {\n const { seriesItems } = state;\n const newSeriesItems = [...seriesItems];\n\n const { model } = this.props;\n const { columns } = model;\n newSeriesItems.push({\n id: shortid.generate(),\n value: columns[0].name,\n });\n\n return { seriesItems: newSeriesItems };\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, dh } = model;\n\n const type = this.getTypes()[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, 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 =\n 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 const { seriesItems } = state;\n const newSeriesItems = [...seriesItems];\n\n newSeriesItems.splice(intIndex, 1);\n\n return { seriesItems: newSeriesItems };\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,\n series,\n xAxis,\n isLinked,\n });\n }\n\n handleTypeClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent =\n 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 = this.getTypes()[intIndex];\n\n log.debug2('handleTypeSelect', type);\n\n this.setState(state => {\n const { model } = this.props;\n const { dh } = model;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n let { seriesItems } = state;\n seriesItems = seriesItems.slice(0, maxSeriesCount);\n if (seriesItems.length === 0 && maxSeriesCount > 0) {\n const { columns } = model;\n seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, 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, dh } = model;\n const { seriesItems, type, xAxis, isLinked } = this.state;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n const xAxisLabel = this.getXAxisLabel(type);\n const seriesLabel = this.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 {this.getTypes().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 {this.getTypeIcon(chartType)}\n {this.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":"AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAQ,OAAO;AAC5C,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,EAAEC,UAAU,EAAEC,SAAS,QAAQ,uBAAuB;AACrE,SACEC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,sBAAsB,EACtBC,mBAAmB,EACnBC,OAAO,QACF,kBAAkB;AAMzB,OAAOC,GAAG,MAAM,gBAAgB;AAChC,OAAOC,OAAO,MAAM,SAAS;AAAC,SAE5BC,OAAO,EACPC,aAAa,EACbC,QAAQ,EACRC,OAAO,EACPC,WAAW;AAAA;AAAA;AAAA;AAKb,IAAMC,GAAG,GAAGP,GAAG,CAACQ,MAAM,CAAC,cAAc,CAAC;AA+BtC;AACA;AACA;AACA,MAAMC,YAAY,SAASrB,aAAa,CAAuC;EAC7E,OAAOsB,iBAAiB,CAACC,EAAU,EAAEC,IAAqB,EAAU;IAClE,QAAQA,IAAI;MACV,KAAKD,EAAE,CAACE,IAAI,CAACC,eAAe,CAACC,GAAG;QAC9B,OAAO,CAAC;MACV,KAAKJ,EAAE,CAACE,IAAI,CAACC,eAAe,CAACE,SAAS;QACpC,OAAO,CAAC;MACV;QACE,OAAO,GAAG;IAAC;EAEjB;EAEA,OAAOC,cAAc,CAACC,KAAa,EAAc;IAC/C,OAAO;MAAEC,EAAE,EAAElB,OAAO,CAACmB,QAAQ,EAAE;MAAEF;IAAM,CAAC;EAC1C;EAEA,OAAOG,sBAAsB,CAC3BV,EAAU,EACVC,IAAqB,EACrBU,OAA0B,EACZ;IACd,IAAMC,cAAc,GAAGd,YAAY,CAACC,iBAAiB,CAACC,EAAE,EAAEC,IAAI,CAAC;IAC/D,IAAIW,cAAc,KAAK,CAAC,IAAID,OAAO,IAAI,IAAI,IAAIA,OAAO,CAACE,MAAM,KAAK,CAAC,EAAE;MACnE,OAAO,EAAE;IACX;IAEA,IAAMN,KAAK,GAAGI,OAAO,CAACE,MAAM,GAAG,CAAC,GAAGF,OAAO,CAAC,CAAC,CAAC,CAACG,IAAI,GAAGH,OAAO,CAAC,CAAC,CAAC,CAACG,IAAI;IACpE,OAAO,CAAChB,YAAY,CAACQ,cAAc,CAACC,KAAK,CAAC,CAAC;EAC7C;EAEA,OAAOQ,eAAe,CACpBd,IAAqB,EACrBU,OAA0B,EACX;IACf,IAAIA,OAAO,IAAI,IAAI,IAAIA,OAAO,CAACE,MAAM,GAAG,CAAC,EAAE;MACzC,OAAOF,OAAO,CAAC,CAAC,CAAC,CAACG,IAAI;IACxB;IAEA,OAAO,IAAI;EACb;EAEAE,WAAW,CAACC,KAAwB,EAAE;IACpC,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,eAAe,GAAG,IAAI,CAACA,eAAe,CAACC,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACC,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACD,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACE,WAAW,GAAG,IAAI,CAACA,WAAW,CAACF,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACG,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACH,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACI,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACJ,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACK,YAAY,GAAG,IAAI,CAACA,YAAY,CAACL,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACM,eAAe,GAAG,IAAI,CAACA,eAAe,CAACN,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACO,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACP,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACQ,UAAU,GAAG,IAAI,CAACA,UAAU,CAACR,IAAI,CAAC,IAAI,CAAC;IAE5C,IAAM;MAAES;IAAM,CAAC,GAAGX,KAAK;IACvB,IAAM;MAAEN,OAAO;MAAEX;IAAG,CAAC,GAAG4B,KAAK;IAE7B,IAAM3B,IAAI,GAAG,IAAI,CAAC4B,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC/B,IAAMC,KAAK,GAAGhC,YAAY,CAACiB,eAAe,CAACd,IAAI,EAAEU,OAAO,CAAW;IACnE,IAAMoB,WAAW,GAAGjC,YAAY,CAACY,sBAAsB,CAACV,EAAE,EAAEC,IAAI,EAAEU,OAAO,CAAC;IAE1E,IAAI,CAACqB,KAAK,GAAG;MACX;MACA/B,IAAI;MAEJ;MACA8B,WAAW;MAEX;MACAD,KAAK;MAEL;MACAG,QAAQ,EAAE;IACZ,CAAC;EACH;EAEAJ,QAAQ,GAAG;IACT,IAAM;MAAED;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEjB;IAAG,CAAC,GAAG4B,KAAK;IACpB,OAAO,CACL5B,EAAE,CAACE,IAAI,CAACC,eAAe,CAAC+B,IAAI,EAC5BlC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACgC,GAAG,EAC3BnC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACiC,OAAO,EAC/BpC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACC;IACxB;IACA;IAAA,CACD;EACH;;EAEA;AACF;AACA;AACA;EACEiC,WAAW,CAACpC,IAAqB,EAA4B;IAC3D,IAAM;MAAE2B;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEjB;IAAG,CAAC,GAAG4B,KAAK;IACpB,QAAQ3B,IAAI;MACV,KAAKD,EAAE,CAACE,IAAI,CAACC,eAAe,CAAC+B,IAAI;QAC/B,OAAO,MAAM;MACf,KAAKlC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACgC,GAAG;QAC9B,OAAO,KAAK;MACd,KAAKnC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACiC,OAAO;QAClC,OAAO,SAAS;MAClB,KAAKpC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACC,GAAG;QAC9B,OAAO,KAAK;MACd,KAAKJ,EAAE,CAACE,IAAI,CAACC,eAAe,CAACE,SAAS;QACpC,OAAO,WAAW;MACpB;QACE,OAAOJ,IAAI;IAAC;EAElB;EAEAqC,WAAW,CAACrC,IAAqB,EAA6B;IAC5D,IAAM;MAAE2B;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEjB;IAAG,CAAC,GAAG4B,KAAK;IACpB,QAAQ3B,IAAI;MACV,KAAKD,EAAE,CAACE,IAAI,CAACC,eAAe,CAAC+B,IAAI;QAC/B,oBAAO,KAAC,QAAQ,KAAG;MACrB,KAAKlC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACgC,GAAG;QAC9B,oBAAO,KAAC,OAAO,KAAG;MACpB,KAAKnC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACiC,OAAO;QAClC,oBAAO,KAAC,WAAW,KAAG;MACxB,KAAKpC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACC,GAAG;QAC9B,oBAAO,KAAC,OAAO,KAAG;MACpB,KAAKJ,EAAE,CAACE,IAAI,CAACC,eAAe,CAACE,SAAS;QACpC,oBAAO,KAAC,aAAa,KAAG;MAC1B;QACE,OAAO,IAAI;IAAC;EAElB;EAEAkC,aAAa,CAACtC,IAAqB,EAAU;IAC3C,IAAM;MAAE2B;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEjB;IAAG,CAAC,GAAG4B,KAAK;IACpB,QAAQ3B,IAAI;MACV,KAAKD,EAAE,CAACE,IAAI,CAACC,eAAe,CAACC,GAAG;QAC9B,OAAO,QAAQ;MACjB,KAAKJ,EAAE,CAACE,IAAI,CAACC,eAAe,CAACE,SAAS;QACpC,OAAO,MAAM;MACf;QACE,OAAO,QAAQ;IAAC;EAEtB;EAEAmC,cAAc,CAACvC,IAAqB,EAAU;IAC5C,IAAM;MAAE2B;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEjB;IAAG,CAAC,GAAG4B,KAAK;IACpB,QAAQ3B,IAAI;MACV,KAAKD,EAAE,CAACE,IAAI,CAACC,eAAe,CAACC,GAAG;QAC9B,OAAO,QAAQ;MACjB;QACE,OAAO,QAAQ;IAAC;EAEtB;EAEAc,eAAe,GAAS;IACtB,IAAI,CAACuB,QAAQ,CAACT,KAAK,IAAI;MACrB,IAAM;QAAED;MAAY,CAAC,GAAGC,KAAK;MAC7B,IAAMU,cAAc,GAAG,CAAC,GAAGX,WAAW,CAAC;MAEvC,IAAM;QAAEH;MAAM,CAAC,GAAG,IAAI,CAACX,KAAK;MAC5B,IAAM;QAAEN;MAAQ,CAAC,GAAGiB,KAAK;MACzBc,cAAc,CAACC,IAAI,CAAC;QAClBnC,EAAE,EAAElB,OAAO,CAACmB,QAAQ,EAAE;QACtBF,KAAK,EAAEI,OAAO,CAAC,CAAC,CAAC,CAACG;MACpB,CAAC,CAAC;MAEF,OAAO;QAAEiB,WAAW,EAAEW;MAAe,CAAC;IACxC,CAAC,EAAE,IAAI,CAACf,UAAU,CAAC;EACrB;EAEAP,qBAAqB,CAACwB,KAA0C,EAAQ;IACtE,IAAI,CAACH,QAAQ,CAAC;MAAER,QAAQ,EAAEW,KAAK,CAACC,MAAM,CAACtC,KAAK,KAAK;IAAO,CAAC,EAAE,IAAI,CAACoB,UAAU,CAAC;EAC7E;EAEAN,WAAW,GAAS;IAClB,IAAM;MAAEO;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEN,OAAO;MAAEX;IAAG,CAAC,GAAG4B,KAAK;IAE7B,IAAM3B,IAAI,GAAG,IAAI,CAAC4B,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC/B,IAAMC,KAAK,GAAGhC,YAAY,CAACiB,eAAe,CAACd,IAAI,EAAEU,OAAO,CAAW;IACnE,IAAMoB,WAAW,GAAGjC,YAAY,CAACY,sBAAsB,CAACV,EAAE,EAAEC,IAAI,EAAEU,OAAO,CAAC;IAC1E,IAAMsB,QAAQ,GAAG,IAAI;IAErB,IAAI,CAACQ,QAAQ,CAAC;MAAExC,IAAI;MAAE8B,WAAW;MAAED,KAAK;MAAEG;IAAS,CAAC,EAAE,IAAI,CAACN,UAAU,CAAC;EACxE;EAEAL,kBAAkB,CAACsB,KAA2C,EAAQ;IACpE,IAAM;MAAErC;IAAM,CAAC,GAAGqC,KAAK,CAACC,MAAM;IAC9B,IAAMC,KAAK,GAAGF,KAAK,CAACC,MAAM,CAACE,YAAY,CAAC,YAAY,CAAW;IAC/D,IAAMC,QAAQ,GAAGC,QAAQ,CAACH,KAAK,EAAE,EAAE,CAAC;IAEpC,IAAI,CAACL,QAAQ,CAACT,KAAK,IAAI;MACrB,IAAI;QAAED;MAAY,CAAC,GAAGC,KAAK;MAE3BD,WAAW,GAAG,CAAC,GAAGA,WAAW,CAAC;MAC9BA,WAAW,CAACiB,QAAQ,CAAC,CAACzC,KAAK,GAAGA,KAAK;MAEnC,OAAO;QAAEwB;MAAY,CAAC;IACxB,CAAC,EAAE,IAAI,CAACJ,UAAU,CAAC;EACrB;EAEAJ,uBAAuB,CAACqB,KAA0C,EAAQ;IACxE,IAAMM,WAAW,GACfN,KAAwD;IAC1D,IAAME,KAAK,GAAGI,WAAW,CAACL,MAAM,CAACE,YAAY,CAAC,YAAY,CAAW;IACrE,IAAMC,QAAQ,GAAGC,QAAQ,CAACH,KAAK,EAAE,EAAE,CAAC;IAEpC,IAAI,CAACL,QAAQ,CAACT,KAAK,IAAI;MACrB,IAAM;QAAED;MAAY,CAAC,GAAGC,KAAK;MAC7B,IAAMU,cAAc,GAAG,CAAC,GAAGX,WAAW,CAAC;MAEvCW,cAAc,CAACS,MAAM,CAACH,QAAQ,EAAE,CAAC,CAAC;MAElC,OAAO;QAAEjB,WAAW,EAAEW;MAAe,CAAC;IACxC,CAAC,EAAE,IAAI,CAACf,UAAU,CAAC;EACrB;EAEAH,YAAY,CAACoB,KAAuC,EAAQ;IAC1DA,KAAK,CAACQ,cAAc,EAAE;IAEtB,IAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACpC,KAAK;IAC/B,IAAM;MAAEhB,IAAI;MAAE8B,WAAW;MAAED,KAAK;MAAEG;IAAS,CAAC,GAAG,IAAI,CAACD,KAAK;IACzD,IAAMsB,MAAM,GAAGvB,WAAW,CAACwB,GAAG,CAACC,IAAI,IAAIA,IAAI,CAACjD,KAAK,CAAC;IAClD8C,QAAQ,CAAC;MACPpD,IAAI;MACJqD,MAAM;MACNxB,KAAK;MACLG;IACF,CAAC,CAAC;EACJ;EAEAR,eAAe,CAACmB,KAA0C,EAAQ;IAChE,IAAMM,WAAW,GACfN,KAAwD;IAC1D,IAAME,KAAK,GAAGI,WAAW,CAACL,MAAM,CAACE,YAAY,CAAC,YAAY,CAAW;IACrE,IAAMC,QAAQ,GAAGC,QAAQ,CAACH,KAAK,EAAE,EAAE,CAAC;IAEpC,IAAM7C,IAAI,GAAG,IAAI,CAAC4B,QAAQ,EAAE,CAACmB,QAAQ,CAAC;IAEtCpD,GAAG,CAAC6D,MAAM,CAAC,kBAAkB,EAAExD,IAAI,CAAC;IAEpC,IAAI,CAACwC,QAAQ,CAACT,KAAK,IAAI;MACrB,IAAM;QAAEJ;MAAM,CAAC,GAAG,IAAI,CAACX,KAAK;MAC5B,IAAM;QAAEjB;MAAG,CAAC,GAAG4B,KAAK;MACpB,IAAMhB,cAAc,GAAGd,YAAY,CAACC,iBAAiB,CAACC,EAAE,EAAEC,IAAI,CAAC;MAC/D,IAAI;QAAE8B;MAAY,CAAC,GAAGC,KAAK;MAC3BD,WAAW,GAAGA,WAAW,CAAC2B,KAAK,CAAC,CAAC,EAAE9C,cAAc,CAAC;MAClD,IAAImB,WAAW,CAAClB,MAAM,KAAK,CAAC,IAAID,cAAc,GAAG,CAAC,EAAE;QAClD,IAAM;UAAED;QAAQ,CAAC,GAAGiB,KAAK;QACzBG,WAAW,GAAGjC,YAAY,CAACY,sBAAsB,CAACV,EAAE,EAAEC,IAAI,EAAEU,OAAO,CAAC;MACtE;MAEA,OAAO;QAAEV,IAAI;QAAE8B;MAAY,CAAC;IAC9B,CAAC,EAAE,IAAI,CAACJ,UAAU,CAAC;EACrB;EAEAD,iBAAiB,CAACkB,KAA2C,EAAQ;IACnE,IAAMd,KAAK,GAAGc,KAAK,CAACC,MAAM,CAACtC,KAAK;IAChCX,GAAG,CAAC6D,MAAM,CAAC,eAAe,EAAE3B,KAAK,CAAC;IAElC,IAAI,CAACW,QAAQ,CAAC;MAAEX;IAAM,CAAC,EAAE,IAAI,CAACH,UAAU,CAAC;EAC3C;EAEAA,UAAU,GAAS;IACjB,IAAM;MAAEgC;IAAS,CAAC,GAAG,IAAI,CAAC1C,KAAK;IAC/B,IAAM;MAAEgB,QAAQ;MAAEhC,IAAI;MAAE8B,WAAW;MAAED;IAAM,CAAC,GAAG,IAAI,CAACE,KAAK;IACzD,IAAMsB,MAAM,GAAGvB,WAAW,CAACwB,GAAG,CAACC,IAAI,IAAIA,IAAI,CAACjD,KAAK,CAAC;IAElDoD,QAAQ,CAAC;MAAE1D,IAAI;MAAEqD,MAAM;MAAExB,KAAK;MAAEG;IAAS,CAAC,CAAC;EAC7C;EAEA2B,MAAM,GAAgB;IACpB,IAAM;MAAEhC;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEN,OAAO;MAAEX;IAAG,CAAC,GAAG4B,KAAK;IAC7B,IAAM;MAAEG,WAAW;MAAE9B,IAAI;MAAE6B,KAAK;MAAEG;IAAS,CAAC,GAAG,IAAI,CAACD,KAAK;IACzD,IAAMpB,cAAc,GAAGd,YAAY,CAACC,iBAAiB,CAACC,EAAE,EAAEC,IAAI,CAAC;IAC/D,IAAM4D,UAAU,GAAG,IAAI,CAACtB,aAAa,CAACtC,IAAI,CAAC;IAC3C,IAAM6D,WAAW,GAAG,IAAI,CAACtB,cAAc,CAACvC,IAAI,CAAC;IAC7C,IAAM8D,eAAe,GAAGhC,WAAW,CAAClB,MAAM,GAAG,CAAC;IAC9C,IAAMmD,kBAAkB,GAAGjC,WAAW,CAAClB,MAAM,GAAGD,cAAc;IAE9D,oBACE;MAAK,SAAS,EAAC,eAAe;MAAA,uBAC5B;QAAM,QAAQ,EAAE,IAAI,CAACY,YAAa;QAAA,wBAChC;UAAK,SAAS,EAAC,UAAU;UAAA,wBACvB;YAAA,UAAO;UAAiB,EAAQ,eAChC;YAAK,SAAS,EAAC,UAAU;YAAA,UACtB,IAAI,CAACK,QAAQ,EAAE,CAAC0B,GAAG,CAAC,CAACU,SAAS,EAAEnB,KAAK,KAAK;cACzC,IAAMoB,GAAG,GAAGD,SAAiC;cAC7C,oBACE;gBAAe,SAAS,EAAC,oBAAoB;gBAAA,uBAC3C;kBACE,IAAI,EAAC,QAAQ;kBACb,SAAS,EAAEvF,UAAU,CACnB,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB;oBACEyF,MAAM,EAAEF,SAAS,KAAKhE;kBACxB,CAAC,CACD;kBACF,cAAY6C,KAAM;kBAClB,OAAO,EAAE,IAAI,CAACrB,eAAgB;kBAAA,WAE7B,IAAI,CAACa,WAAW,CAAC2B,SAAS,CAAC,EAC3B,IAAI,CAAC5B,WAAW,CAAC4B,SAAS,CAAC;gBAAA;cACrB,GAhBDC,GAAG,CAiBP;YAEV,CAAC;UAAC,EACE;QAAA,EACF,eACN,cAAM,eACN;UAAK,SAAS,EAAC,sBAAsB;UAAA,wBACnC;YAAO,SAAS,EAAC,kBAAkB;YAAA,UAAEL;UAAU,EAAS,eACxD;YACE,SAAS,EAAC,8CAA8C;YACxD,KAAK,EAAE/B,KAAM;YACb,QAAQ,EAAE,IAAI,CAACJ,iBAAkB;YAAA,UAEhCf,OAAO,CAAC4C,GAAG,CAACa,MAAM,iBACjB;cAA0B,KAAK,EAAEA,MAAM,CAACtD,IAAK;cAAA,UAC1CsD,MAAM,CAACtD;YAAI,GADDsD,MAAM,CAACtD,IAAI,CAGzB;UAAC,EACK;QAAA,EACL,EACLiD,eAAe,iBAAI,cAAM,EACzBhC,WAAW,CAACwB,GAAG,CAAC,CAACc,UAAU,EAAEC,CAAC,kBAC7B;UACE,SAAS,EAAC,uCAAuC;UAEjD,0CAAiCA,CAAC,CAAG;UAAA,wBAErC;YAAO,SAAS,EAAC,kBAAkB;YAAA,UAChCA,CAAC,KAAK,CAAC,GAAGR,WAAW,GAAG;UAAE,EACrB,eACR;YACE,SAAS,EAAC,8CAA8C;YACxD,KAAK,EAAEO,UAAU,CAAC9D,KAAM;YACxB,QAAQ,EAAE,IAAI,CAACe,kBAAmB;YAClC,4CAAmCgD,CAAC,CAAG;YACvC,cAAYA,CAAE;YAAA,UAEb3D,OAAO,CAAC4C,GAAG,CAACa,MAAM,iBACjB;cAA0B,KAAK,EAAEA,MAAM,CAACtD,IAAK;cAAC,cAAYwD,CAAE;cAAA,UACzDF,MAAM,CAACtD;YAAI,GADDsD,MAAM,CAACtD,IAAI,CAGzB;UAAC,EACK,EACRiB,WAAW,CAAClB,MAAM,GAAG,CAAC,iBACrB,KAAC,MAAM;YACL,IAAI,EAAC,OAAO;YACZ,SAAS,EAAC,6BAA6B;YACvC,cAAYyD,CAAE;YACd,uCAA8BA,CAAC,CAAG;YAClC,OAAO,EAAE,IAAI,CAAC/C,uBAAwB;YACtC,IAAI,EAAEnC,OAAQ;YACd,OAAO,EAAC;UAAQ,EAEnB;QAAA,GA7BIiF,UAAU,CAAC7D,EAAE,CA+BrB,CAAC,EACDwD,kBAAkB,iBACjB;UAAK,SAAS,EAAC,UAAU;UAAA,wBACvB;YAAK,SAAS,EAAC;UAAO,EAAG,eACzB,KAAC,MAAM;YACL,IAAI,EAAC,OAAO;YACZ,SAAS,EAAC,qBAAqB;YAC/B,OAAO,EAAE,IAAI,CAAC9C,eAAgB;YAC9B,IAAI,EAAEhC,sBAAuB;YAAA,UAC9B;UAED,EAAS;QAAA,EAEZ,eACD;UAAK,SAAS,EAAC,6BAA6B;UAAA,wBAC1C;YAAO,SAAS,EAAC,mBAAmB;YAAA,uBAClC;cAAK,SAAS,EAAC,iBAAiB;cAAA,wBAC9B,KAAC,eAAe;gBACd,IAAI,EAAED,OAAQ;gBACd,IAAI,EAAEE,mBAAoB;gBAC1B,SAAS,EAAC;cAAgB,EAC1B,eACF,KAAC,eAAe;gBACd,IAAI,EAAE8C,QAAQ,GAAGlD,MAAM,GAAGC,QAAS;gBACnC,SAAS,EAAC;cAAuB,EACjC;YAAA;UACE,EACA,eACR,MAAC,UAAU;YACT,QAAQ,EAAE,IAAI,CAACoC,qBAAsB;YACrC,KAAK,YAAKa,QAAQ,CAAG;YAAA,wBAErB,KAAC,SAAS;cAAC,KAAK,EAAC,MAAM;cAAA,UAAC;YAAU,EAAY,eAC9C,KAAC,SAAS;cAAC,KAAK,EAAC,OAAO;cAAA,UAAC;YAAY,EAAY;UAAA,EACtC;QAAA,EACT,eACN;UAAK,SAAS,EAAC,UAAU;UAAA,wBACvB;YAAK,SAAS,EAAC;UAAmB,EAAG,eACrC;YAAK,SAAS,EAAC,6BAA6B;YAAA,UACzCA,QAAQ,GACL,8GAA8G,GAC9G;UAA4I,EAC5I;QAAA,EACF,eACN;UACE,SAAS,EAAEvD,UAAU,CAAC,UAAU,EAAE,qBAAqB,EAAE,MAAM,CAAE;UAAA,wBAEjE,KAAC,MAAM;YACL,IAAI,EAAC,WAAW;YAChB,SAAS,EAAC,WAAW;YACrB,OAAO,EAAE,IAAI,CAAC2C,WAAY;YAAA,UAC3B;UAED,EAAS,eACT,KAAC,MAAM;YAAC,IAAI,EAAC,SAAS;YAAC,IAAI,EAAC,QAAQ;YAAC,SAAS,EAAC,YAAY;YAAA,UAAC;UAE5D,EAAS;QAAA,EACL;MAAA;IACD,EACH;EAEV;AACF;AAEA,eAAevB,YAAY"}
@@ -1,4 +1,3 @@
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
1
  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; }
3
2
  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; }
4
3
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -16,6 +15,9 @@ import { DbNameValidator } from '@deephaven/utils';
16
15
  import CustomColumnInput from "./CustomColumnInput.js";
17
16
  import "./CustomColumnBuilder.css";
18
17
  import IrisGridModel from "../IrisGridModel.js";
18
+ import { jsx as _jsx } from "react/jsx-runtime";
19
+ import { jsxs as _jsxs } from "react/jsx-runtime";
20
+ import { Fragment as _Fragment } from "react/jsx-runtime";
19
21
  class CustomColumnBuilder extends Component {
20
22
  static makeCustomColumnInputEventKey() {
21
23
  return shortid.generate();
@@ -169,11 +171,16 @@ class CustomColumnBuilder extends Component {
169
171
  }
170
172
  this.setState({
171
173
  isCustomColumnApplying: false,
172
- errorMessage: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
173
- icon: vsWarning
174
- }), " Failed to apply custom columns."), /*#__PURE__*/React.createElement("div", {
175
- className: "error-box"
176
- }, customEvent.detail.errorMessage, /*#__PURE__*/React.createElement("br", null), "Table configuration:", ' ', JSON.stringify(customEvent.detail.configuration))),
174
+ errorMessage: /*#__PURE__*/_jsxs(_Fragment, {
175
+ children: [/*#__PURE__*/_jsxs("p", {
176
+ children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
177
+ icon: vsWarning
178
+ }), " Failed to apply custom columns."]
179
+ }), /*#__PURE__*/_jsxs("div", {
180
+ className: "error-box",
181
+ children: [customEvent.detail.errorMessage, /*#__PURE__*/_jsx("br", {}), "Table configuration:", ' ', JSON.stringify(customEvent.detail.configuration)]
182
+ })]
183
+ }),
177
184
  hasRequestFailed: true
178
185
  });
179
186
  }
@@ -280,8 +287,7 @@ class CustomColumnBuilder extends Component {
280
287
  formula
281
288
  } = input;
282
289
  var isDuplicate = ((_nameCount$get2 = nameCount.get(name)) !== null && _nameCount$get2 !== void 0 ? _nameCount$get2 : 0) > 1;
283
- return /*#__PURE__*/React.createElement(CustomColumnInput, {
284
- key: eventKey,
290
+ return /*#__PURE__*/_jsx(CustomColumnInput, {
285
291
  inputIndex: index,
286
292
  eventKey: eventKey,
287
293
  name: name,
@@ -291,7 +297,7 @@ class CustomColumnBuilder extends Component {
291
297
  onTabInEditor: this.handleEditorTabNavigation,
292
298
  invalid: hasRequestFailed,
293
299
  isDuplicate: isDuplicate
294
- });
300
+ }, eventKey);
295
301
  });
296
302
  }
297
303
  renderSaveButton() {
@@ -319,18 +325,24 @@ class CustomColumnBuilder extends Component {
319
325
  return name;
320
326
  });
321
327
  var areNamesUnique = new Set(filteredNames).size === filteredNames.length;
322
- return /*#__PURE__*/React.createElement(Button, {
328
+ return /*#__PURE__*/_jsxs(Button, {
323
329
  kind: isSuccessShowing ? 'success' : 'primary',
324
330
  className: classNames('btn-apply', {
325
331
  'btn-spinner': isCustomColumnApplying
326
332
  }),
327
333
  disabled: isSuccessShowing || isCustomColumnApplying || !areNamesValid || !areNamesUnique,
328
- onClick: this.handleSaveClick
329
- }, isCustomColumnApplying && /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(LoadingSpinner, null), /*#__PURE__*/React.createElement("span", {
330
- className: "btn-normal-content"
331
- }, "Applying")), !isSuccessShowing && !isCustomColumnApplying && saveText, isSuccessShowing && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
332
- icon: vsPass
333
- }), " Success"));
334
+ onClick: this.handleSaveClick,
335
+ children: [isCustomColumnApplying && /*#__PURE__*/_jsxs("span", {
336
+ children: [/*#__PURE__*/_jsx(LoadingSpinner, {}), /*#__PURE__*/_jsx("span", {
337
+ className: "btn-normal-content",
338
+ children: "Applying"
339
+ })]
340
+ }), !isSuccessShowing && !isCustomColumnApplying && saveText, isSuccessShowing && /*#__PURE__*/_jsxs(_Fragment, {
341
+ children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
342
+ icon: vsPass
343
+ }), " Success"]
344
+ })]
345
+ });
334
346
  }
335
347
  render() {
336
348
  var {
@@ -339,44 +351,54 @@ class CustomColumnBuilder extends Component {
339
351
  var {
340
352
  errorMessage
341
353
  } = this.state;
342
- return /*#__PURE__*/React.createElement("div", {
354
+ return /*#__PURE__*/_jsxs("div", {
343
355
  role: "presentation",
344
356
  className: "custom-column-builder-container",
345
357
  ref: container => {
346
358
  this.container = container;
347
359
  },
348
360
  onClick: this.resetRequestFailed,
349
- onFocus: this.resetRequestFailed
350
- }, /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement(DragDropContext, {
351
- onDragStart: DragUtils.startDragging,
352
- onDragEnd: this.handleDragEnd
353
- }, /*#__PURE__*/React.createElement(Droppable, {
354
- droppableId: "droppable-custom-columns"
355
- }, (provided, snapshot) => /*#__PURE__*/React.createElement("div", _extends({
356
- ref: provided.innerRef
357
- // eslint-disable-next-line react/jsx-props-no-spreading
358
- }, provided.droppableProps, {
359
- className: classNames('droppable-container', {
360
- dragging: snapshot.draggingFromThisWith
361
- })
362
- }), this.renderInputs(), provided.placeholder))), /*#__PURE__*/React.createElement("div", {
363
- className: "pt-1 px-3"
364
- }, /*#__PURE__*/React.createElement(Button, {
365
- kind: "ghost",
366
- className: "btn-add-column",
367
- onClick: this.handleAddColumnClick,
368
- icon: dhNewCircleLargeFilled
369
- }, "Add Another Column")), /*#__PURE__*/React.createElement("div", {
370
- className: "custom-column-builder-footer"
371
- }, errorMessage && /*#__PURE__*/React.createElement("div", {
372
- className: "error-message"
373
- }, errorMessage), /*#__PURE__*/React.createElement("div", {
374
- className: "d-flex justify-content-end"
375
- }, /*#__PURE__*/React.createElement(Button, {
376
- kind: "secondary",
377
- className: "mr-2",
378
- onClick: onCancel
379
- }, "Cancel"), this.renderSaveButton())));
361
+ onFocus: this.resetRequestFailed,
362
+ children: [/*#__PURE__*/_jsx("hr", {}), /*#__PURE__*/_jsx(DragDropContext, {
363
+ onDragStart: DragUtils.startDragging,
364
+ onDragEnd: this.handleDragEnd,
365
+ children: /*#__PURE__*/_jsx(Droppable, {
366
+ droppableId: "droppable-custom-columns",
367
+ children: (provided, snapshot) => /*#__PURE__*/_jsxs("div", _objectSpread(_objectSpread({
368
+ ref: provided.innerRef
369
+ // eslint-disable-next-line react/jsx-props-no-spreading
370
+ }, provided.droppableProps), {}, {
371
+ className: classNames('droppable-container', {
372
+ dragging: snapshot.draggingFromThisWith
373
+ }),
374
+ children: [this.renderInputs(), provided.placeholder]
375
+ }))
376
+ })
377
+ }), /*#__PURE__*/_jsx("div", {
378
+ className: "pt-1 px-3",
379
+ children: /*#__PURE__*/_jsx(Button, {
380
+ kind: "ghost",
381
+ className: "btn-add-column",
382
+ onClick: this.handleAddColumnClick,
383
+ icon: dhNewCircleLargeFilled,
384
+ children: "Add Another Column"
385
+ })
386
+ }), /*#__PURE__*/_jsxs("div", {
387
+ className: "custom-column-builder-footer",
388
+ children: [errorMessage && /*#__PURE__*/_jsx("div", {
389
+ className: "error-message",
390
+ children: errorMessage
391
+ }), /*#__PURE__*/_jsxs("div", {
392
+ className: "d-flex justify-content-end",
393
+ children: [/*#__PURE__*/_jsx(Button, {
394
+ kind: "secondary",
395
+ className: "mr-2",
396
+ onClick: onCancel,
397
+ children: "Cancel"
398
+ }), this.renderSaveButton()]
399
+ })]
400
+ })]
401
+ });
380
402
  }
381
403
  }
382
404
  _defineProperty(CustomColumnBuilder, "SUCCESS_SHOW_DURATION", 750);