@deephaven/iris-grid 0.37.4-logout.17 → 0.37.4-logout.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js +2 -1
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.css +3 -1
- package/dist/IrisGrid.css.map +1 -1
- package/dist/IrisGrid.js +3 -10
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCopyHandler.js +4 -3
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.js +0 -138
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.js +6 -5
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +0 -6
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTheme.module.css +2 -1
- package/dist/IrisGridTheme.module.css.map +1 -1
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.js +0 -3
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/MissingKeyError.js.map +1 -1
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/TableViewportUpdater.js +0 -3
- package/dist/TableViewportUpdater.js.map +1 -1
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/TreeTableViewportUpdater.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
- package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js +2 -1
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +0 -5
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/sidebar/AdvancedSettings.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsType.js +3 -3
- package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/OptionType.js +3 -3
- package/dist/sidebar/OptionType.js.map +1 -1
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.js +0 -4
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js +3 -3
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationOperation.js +3 -3
- package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +21 -21
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/icons/BarIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
- package/dist/sidebar/icons/LineIcon.js.map +1 -1
- package/dist/sidebar/icons/PieIcon.js.map +1 -1
- package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridTokenMouseHandler.js","names":["GridMouseHandler","GridUtils","isLinkToken","deepEqual","IrisGridTokenMouseHandler","constructor","irisGrid","
|
|
1
|
+
{"version":3,"file":"IrisGridTokenMouseHandler.js","names":["GridMouseHandler","GridUtils","isLinkToken","deepEqual","IrisGridTokenMouseHandler","constructor","irisGrid","destroyTooltip","setState","linkHoverTooltipProps","isHoveringLink","gridPoint","grid","column","row","x","y","renderer","metrics","currentLinkBox","undefined","x1","left","y1","top","x2","right","y2","bottom","renderState","updateRenderState","tokensInCell","getTokenBoxesForVisibleCell","i","length","token","translatedTokenBox","translateTokenBox","setCursor","cursor","stopPropagation","preventDefault","onMove","isUserHoveringLink","state","href","width","height","newProps","linkHoverDisplayValue","onDown","onContextMenu","onWheel","onLeave"],"sources":["../../src/mousehandlers/IrisGridTokenMouseHandler.ts"],"sourcesContent":["import {\n EventHandlerResult,\n Grid,\n GridMouseHandler,\n GridPoint,\n GridUtils,\n isLinkToken,\n TokenBox,\n} from '@deephaven/grid';\nimport deepEqual from 'deep-equal';\nimport IrisGrid from '../IrisGrid';\n\nclass IrisGridTokenMouseHandler extends GridMouseHandler {\n private irisGrid: IrisGrid;\n\n // Stores the current hovered token box if it exists with translated coordinates\n private currentLinkBox?: TokenBox;\n\n constructor(irisGrid: IrisGrid) {\n super();\n\n this.irisGrid = irisGrid;\n }\n\n private destroyTooltip(): void {\n this.irisGrid.setState({ linkHoverTooltipProps: null });\n }\n\n isHoveringLink(gridPoint: GridPoint, grid: Grid): boolean {\n const { column, row, x, y } = gridPoint;\n const { renderer, metrics } = grid;\n\n if (column == null || row == null || metrics == null) {\n this.currentLinkBox = undefined;\n return false;\n }\n\n if (this.currentLinkBox != null) {\n const { x1: left, y1: top, x2: right, y2: bottom } = this.currentLinkBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n return true;\n }\n }\n\n const renderState = grid.updateRenderState();\n const tokensInCell = renderer.getTokenBoxesForVisibleCell(\n column,\n row,\n renderState\n );\n\n // Loop through each link and check if cursor is in bounds\n for (let i = 0; i < tokensInCell.length; i += 1) {\n if (isLinkToken(tokensInCell[i].token)) {\n const translatedTokenBox = GridUtils.translateTokenBox(\n tokensInCell[i],\n metrics\n );\n const { x1: left, x2: right, y1: top, y2: bottom } = translatedTokenBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n this.currentLinkBox = translatedTokenBox;\n return true;\n }\n }\n }\n\n // If this point is reached, that means the cursor was not hovering any of the links or there are no links\n this.currentLinkBox = undefined;\n return false;\n }\n\n private setCursor(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.isHoveringLink(gridPoint, grid)) {\n this.cursor = 'pointer';\n return { stopPropagation: false, preventDefault: false };\n }\n this.cursor = null;\n return false;\n }\n\n onMove(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n if (\n isUserHoveringLink &&\n this.currentLinkBox != null &&\n isLinkToken(this.currentLinkBox.token)\n ) {\n const { linkHoverTooltipProps } = this.irisGrid.state;\n if (this.currentLinkBox == null) {\n return false;\n }\n const { x1: left, y1: top, x2: right, y2: bottom } = this.currentLinkBox;\n const { href } = this.currentLinkBox.token;\n const width = right - left;\n const height = bottom - top;\n const newProps = { left, top: top + 1, width, height };\n if (!deepEqual(linkHoverTooltipProps, newProps)) {\n this.irisGrid.setState({\n linkHoverTooltipProps: newProps,\n linkHoverDisplayValue: href,\n });\n }\n } else {\n this.destroyTooltip();\n }\n\n return this.setCursor(gridPoint, grid);\n }\n\n onDown(): EventHandlerResult {\n this.destroyTooltip();\n return false;\n }\n\n onContextMenu(): EventHandlerResult {\n this.destroyTooltip();\n return false;\n }\n\n onWheel(): EventHandlerResult {\n this.destroyTooltip();\n return false;\n }\n\n onLeave(): EventHandlerResult {\n this.destroyTooltip();\n return false;\n }\n}\n\nexport default IrisGridTokenMouseHandler;\n"],"mappings":"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"}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
/* eslint class-methods-use-this: "off" */
|
|
2
2
|
import { GridMouseHandler, GridUtils, isEditableGridModel } from '@deephaven/grid';
|
|
3
3
|
import { assertNotNull } from '@deephaven/utils';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Handles sending data selected via double click
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
4
|
class PendingMouseHandler extends GridMouseHandler {
|
|
10
5
|
constructor(irisGrid) {
|
|
11
6
|
super();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PendingMouseHandler.js","names":["GridMouseHandler","GridUtils","isEditableGridModel","assertNotNull","PendingMouseHandler","constructor","irisGrid","onWheel","gridPoint","grid","wheelEvent","model","props","metrics","pendingRowCount","state","bottom","rowCount","rowHeight","deltaY","getScrollDelta","isEditable","setState","Math","ceil"],"sources":["../../src/mousehandlers/PendingMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport {\n Grid,\n GridMouseHandler,\n GridPoint,\n GridUtils,\n GridWheelEvent,\n isEditableGridModel,\n} from '@deephaven/grid';\nimport { assertNotNull } from '@deephaven/utils';\nimport IrisGrid from '../IrisGrid';\n\n/**\n * Handles sending data selected via double click\n */\n\ninterface PendingMouseHandler {\n irisGrid: IrisGrid;\n}\nclass PendingMouseHandler extends GridMouseHandler {\n constructor(irisGrid: IrisGrid) {\n super();\n\n this.irisGrid = irisGrid;\n }\n\n onWheel(gridPoint: GridPoint, grid: Grid, wheelEvent: GridWheelEvent): false {\n const { irisGrid } = this;\n const { model } = irisGrid.props;\n const { metrics, pendingRowCount } = irisGrid.state;\n assertNotNull(metrics);\n const { bottom, rowCount, rowHeight } = metrics;\n const { deltaY } = GridUtils.getScrollDelta(wheelEvent);\n if (\n isEditableGridModel(model) &&\n model.isEditable &&\n bottom >= rowCount - 1 &&\n deltaY > 0\n ) {\n // We add new rows onto the bottom, but we don't consume the event\n irisGrid.setState({\n pendingRowCount: pendingRowCount + Math.ceil(deltaY / rowHeight),\n });\n }\n return false;\n }\n}\n\nexport default PendingMouseHandler;\n"],"mappings":"AAAA;AACA,SAEEA,gBAAgB,EAEhBC,SAAS,EAETC,mBAAmB,QACd,iBAAiB;AACxB,SAASC,aAAa,QAAQ,kBAAkB
|
|
1
|
+
{"version":3,"file":"PendingMouseHandler.js","names":["GridMouseHandler","GridUtils","isEditableGridModel","assertNotNull","PendingMouseHandler","constructor","irisGrid","onWheel","gridPoint","grid","wheelEvent","model","props","metrics","pendingRowCount","state","bottom","rowCount","rowHeight","deltaY","getScrollDelta","isEditable","setState","Math","ceil"],"sources":["../../src/mousehandlers/PendingMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport {\n Grid,\n GridMouseHandler,\n GridPoint,\n GridUtils,\n GridWheelEvent,\n isEditableGridModel,\n} from '@deephaven/grid';\nimport { assertNotNull } from '@deephaven/utils';\nimport IrisGrid from '../IrisGrid';\n\n/**\n * Handles sending data selected via double click\n */\n\ninterface PendingMouseHandler {\n irisGrid: IrisGrid;\n}\nclass PendingMouseHandler extends GridMouseHandler {\n constructor(irisGrid: IrisGrid) {\n super();\n\n this.irisGrid = irisGrid;\n }\n\n onWheel(gridPoint: GridPoint, grid: Grid, wheelEvent: GridWheelEvent): false {\n const { irisGrid } = this;\n const { model } = irisGrid.props;\n const { metrics, pendingRowCount } = irisGrid.state;\n assertNotNull(metrics);\n const { bottom, rowCount, rowHeight } = metrics;\n const { deltaY } = GridUtils.getScrollDelta(wheelEvent);\n if (\n isEditableGridModel(model) &&\n model.isEditable &&\n bottom >= rowCount - 1 &&\n deltaY > 0\n ) {\n // We add new rows onto the bottom, but we don't consume the event\n irisGrid.setState({\n pendingRowCount: pendingRowCount + Math.ceil(deltaY / rowHeight),\n });\n }\n return false;\n }\n}\n\nexport default PendingMouseHandler;\n"],"mappings":"AAAA;AACA,SAEEA,gBAAgB,EAEhBC,SAAS,EAETC,mBAAmB,QACd,iBAAiB;AACxB,SAASC,aAAa,QAAQ,kBAAkB;AAUhD,MAAMC,mBAAmB,SAASJ,gBAAgB,CAAC;EACjDK,WAAW,CAACC,QAAkB,EAAE;IAC9B,KAAK,EAAE;IAEP,IAAI,CAACA,QAAQ,GAAGA,QAAQ;EAC1B;EAEAC,OAAO,CAACC,SAAoB,EAAEC,IAAU,EAAEC,UAA0B,EAAS;IAC3E,IAAM;MAAEJ;IAAS,CAAC,GAAG,IAAI;IACzB,IAAM;MAAEK;IAAM,CAAC,GAAGL,QAAQ,CAACM,KAAK;IAChC,IAAM;MAAEC,OAAO;MAAEC;IAAgB,CAAC,GAAGR,QAAQ,CAACS,KAAK;IACnDZ,aAAa,CAACU,OAAO,CAAC;IACtB,IAAM;MAAEG,MAAM;MAAEC,QAAQ;MAAEC;IAAU,CAAC,GAAGL,OAAO;IAC/C,IAAM;MAAEM;IAAO,CAAC,GAAGlB,SAAS,CAACmB,cAAc,CAACV,UAAU,CAAC;IACvD,IACER,mBAAmB,CAACS,KAAK,CAAC,IAC1BA,KAAK,CAACU,UAAU,IAChBL,MAAM,IAAIC,QAAQ,GAAG,CAAC,IACtBE,MAAM,GAAG,CAAC,EACV;MACA;MACAb,QAAQ,CAACgB,QAAQ,CAAC;QAChBR,eAAe,EAAEA,eAAe,GAAGS,IAAI,CAACC,IAAI,CAACL,MAAM,GAAGD,SAAS;MACjE,CAAC,CAAC;IACJ;IACA,OAAO,KAAK;EACd;AACF;AAEA,eAAed,mBAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedSettings.js","names":["AdvancedSettingsType","DEFAULTS","Object","freeze","FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS","LINK_CHANGE_CLEARS_ALL_FILTERS"],"sources":["../../src/sidebar/AdvancedSettings.ts"],"sourcesContent":["import AdvancedSettingsType from './AdvancedSettingsType';\n\nconst DEFAULTS = Object.freeze([\n [AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS, false],\n [AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS, false],\n] as const);\n\nexport default { DEFAULTS };\n"],"mappings":"OAAOA,oBAAoB;AAE3B,IAAMC,QAAQ,GAAGC,MAAM,CAACC,MAAM,CAAC,CAC7B,CAACH,oBAAoB,CAACI,wCAAwC,EAAE,KAAK,CAAC,EACtE,CAACJ,oBAAoB,CAACK,8BAA8B,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"AdvancedSettings.js","names":["AdvancedSettingsType","DEFAULTS","Object","freeze","FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS","LINK_CHANGE_CLEARS_ALL_FILTERS"],"sources":["../../src/sidebar/AdvancedSettings.ts"],"sourcesContent":["import AdvancedSettingsType from './AdvancedSettingsType';\n\nconst DEFAULTS = Object.freeze([\n [AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS, false],\n [AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS, false],\n] as const);\n\nexport default { DEFAULTS };\n"],"mappings":"OAAOA,oBAAoB;AAE3B,IAAMC,QAAQ,GAAGC,MAAM,CAACC,MAAM,CAAC,CAC7B,CAACH,oBAAoB,CAACI,wCAAwC,EAAE,KAAK,CAAC,EACtE,CAACJ,oBAAoB,CAACK,8BAA8B,EAAE,KAAK,CAAC,CAC7D,CAAU;AAEX,eAAe;EAAEJ;AAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedSettingsMenu.js","names":["React","Menu","AdvancedSettingsType","AdvancedSettingsMenu","
|
|
1
|
+
{"version":3,"file":"AdvancedSettingsMenu.js","names":["React","Menu","AdvancedSettingsType","AdvancedSettingsMenu","items","onChange","undefined","Array","from","entries","map","key","isOn","title","getAdvancedSettingsTitleForKey","value","FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS","LINK_CHANGE_CLEARS_ALL_FILTERS"],"sources":["../../src/sidebar/AdvancedSettingsMenu.tsx"],"sourcesContent":["import React from 'react';\nimport { Menu, SwitchMenuItemDef } from '@deephaven/components';\nimport AdvancedSettingsType from './AdvancedSettingsType';\n\nexport type AdvancedSettingsMenuCallback = (\n key: AdvancedSettingsType,\n isOn: boolean\n) => void;\n\nexport type AdvancedSettingsMenuProps = {\n items: Map<AdvancedSettingsType, boolean>;\n onChange?: AdvancedSettingsMenuCallback;\n};\n\nfunction AdvancedSettingsMenu({\n items,\n onChange = () => undefined,\n}: AdvancedSettingsMenuProps): JSX.Element {\n return (\n <Menu\n items={Array.from(items.entries()).map(\n ([key, isOn]): SwitchMenuItemDef => ({\n title: AdvancedSettingsMenu.getAdvancedSettingsTitleForKey(key),\n isOn,\n onChange: (value: boolean) => onChange(key, value),\n })\n )}\n />\n );\n}\n\nAdvancedSettingsMenu.getAdvancedSettingsTitleForKey = (\n key: AdvancedSettingsType\n): string => {\n switch (key) {\n case AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS:\n return 'Clear current table filters before applying new filters from a control';\n case AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS:\n return 'Clear current table filters before applying new filters from an incoming link filter';\n }\n};\n\nexport default AdvancedSettingsMenu;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAA2B,uBAAuB;AAAC,OACzDC,oBAAoB;AAY3B,SAASC,oBAAoB,OAGc;EAAA,IAHb;IAC5BC,KAAK;IACLC,QAAQ,EAARA,SAAQ,GAAG,MAAMC;EACQ,CAAC;EAC1B,oBACE,oBAAC,IAAI;IACH,KAAK,EAAEC,KAAK,CAACC,IAAI,CAACJ,KAAK,CAACK,OAAO,EAAE,CAAC,CAACC,GAAG,CACpC;MAAA,IAAC,CAACC,GAAG,EAAEC,IAAI,CAAC;MAAA,OAAyB;QACnCC,KAAK,EAAEV,oBAAoB,CAACW,8BAA8B,CAACH,GAAG,CAAC;QAC/DC,IAAI;QACJP,QAAQ,EAAGU,KAAc,IAAKV,SAAQ,CAACM,GAAG,EAAEI,KAAK;MACnD,CAAC;IAAA,CAAC;EACF,EACF;AAEN;AAEAZ,oBAAoB,CAACW,8BAA8B,GACjDH,GAAyB,IACd;EACX,QAAQA,GAAG;IACT,KAAKT,oBAAoB,CAACc,wCAAwC;MAChE,OAAO,wEAAwE;IACjF,KAAKd,oBAAoB,CAACe,8BAA8B;MACtD,OAAO,sFAAsF;EAAC;AAEpG,CAAC;AAED,eAAed,oBAAoB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
var AdvancedSettingsType
|
|
1
|
+
var AdvancedSettingsType;
|
|
2
|
+
(function (AdvancedSettingsType) {
|
|
2
3
|
AdvancedSettingsType["FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS"] = "filter-control-change-clears-all-filters";
|
|
3
4
|
AdvancedSettingsType["LINK_CHANGE_CLEARS_ALL_FILTERS"] = "link-change-clears-all-filters";
|
|
4
|
-
|
|
5
|
-
}(AdvancedSettingsType || {});
|
|
5
|
+
})(AdvancedSettingsType || (AdvancedSettingsType = {}));
|
|
6
6
|
export default AdvancedSettingsType;
|
|
7
7
|
//# sourceMappingURL=AdvancedSettingsType.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedSettingsType.js","names":["AdvancedSettingsType"],"sources":["../../src/sidebar/AdvancedSettingsType.ts"],"sourcesContent":["enum AdvancedSettingsType {\n FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS = 'filter-control-change-clears-all-filters',\n LINK_CHANGE_CLEARS_ALL_FILTERS = 'link-change-clears-all-filters',\n}\n\nexport default AdvancedSettingsType;\n"],"mappings":"IAAKA,oBAAoB,
|
|
1
|
+
{"version":3,"file":"AdvancedSettingsType.js","names":["AdvancedSettingsType"],"sources":["../../src/sidebar/AdvancedSettingsType.ts"],"sourcesContent":["enum AdvancedSettingsType {\n FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS = 'filter-control-change-clears-all-filters',\n LINK_CHANGE_CLEARS_ALL_FILTERS = 'link-change-clears-all-filters',\n}\n\nexport default AdvancedSettingsType;\n"],"mappings":"IAAKA,oBAAoB;AAAA,WAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;AAAA,GAApBA,oBAAoB,KAApBA,oBAAoB;AAKzB,eAAeA,oBAAoB"}
|
|
@@ -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","createElement","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","newSeriesItems","push","event","target","index","getAttribute","intIndex","parseInt","changeEvent","splice","preventDefault","onSubmit","series","map","item","concat","debug2","slice","onChange","render","xAxisLabel","seriesLabel","isSeriesVisible","isAddSeriesVisible","className","chartType","key","active","onClick","column","seriesItem","i","kind","icon","tooltip","mask","transform","_defineProperty"],"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: 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 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: readonly 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: 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 } = 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 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 } = 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 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: (`${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","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 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: 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 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: readonly 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: 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 } = 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 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 } = 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 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: (`${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":";;;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;AACzB,OAAOC,EAAE,MAAmC,uBAAuB;AACnE,OAAOC,GAAG,MAAM,gBAAgB;AAChC,OAAOC,OAAO,MAAM,SAAS;AAAC,SAE5BC,OAAO,EACPC,aAAa,EACbC,QAAQ,EACRC,OAAO,EACPC,WAAW;AAAA;AAKb,IAAMC,GAAG,GAAGP,GAAG,CAACQ,MAAM,CAAC,cAAc,CAAC;AA+BtC;AACA;AACA;AACA,MAAMC,YAAY,SAAStB,aAAa,CAAuC;EAU7E;AACF;AACA;AACA;EACE,OAAOuB,WAAW,CAACC,IAAqB,EAA4B;IAClE,QAAQA,IAAI;MACV,KAAKZ,EAAE,CAACa,IAAI,CAACC,eAAe,CAACC,IAAI;QAC/B,OAAO,MAAM;MACf,KAAKf,EAAE,CAACa,IAAI,CAACC,eAAe,CAACE,GAAG;QAC9B,OAAO,KAAK;MACd,KAAKhB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACG,OAAO;QAClC,OAAO,SAAS;MAClB,KAAKjB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACI,GAAG;QAC9B,OAAO,KAAK;MACd,KAAKlB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACK,SAAS;QACpC,OAAO,WAAW;MACpB;QACE,OAAOP,IAAI;IAAC;EAElB;EAEA,OAAOQ,WAAW,CAACR,IAAqB,EAA6B;IACnE,QAAQA,IAAI;MACV,KAAKZ,EAAE,CAACa,IAAI,CAACC,eAAe,CAACC,IAAI;QAC/B,oBAAO,oBAAC,QAAQ,OAAG;MACrB,KAAKf,EAAE,CAACa,IAAI,CAACC,eAAe,CAACE,GAAG;QAC9B,oBAAO,oBAAC,OAAO,OAAG;MACpB,KAAKhB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACG,OAAO;QAClC,oBAAO,oBAAC,WAAW,OAAG;MACxB,KAAKjB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACI,GAAG;QAC9B,oBAAO,oBAAC,OAAO,OAAG;MACpB,KAAKlB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACK,SAAS;QACpC,oBAAO,oBAAC,aAAa,OAAG;MAC1B;QACE,OAAO,IAAI;IAAC;EAElB;EAEA,OAAOE,iBAAiB,CAACT,IAAqB,EAAU;IACtD,QAAQA,IAAI;MACV,KAAKZ,EAAE,CAACa,IAAI,CAACC,eAAe,CAACI,GAAG;QAC9B,OAAO,CAAC;MACV,KAAKlB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACK,SAAS;QACpC,OAAO,CAAC;MACV;QACE,OAAO,GAAG;IAAC;EAEjB;EAEA,OAAOG,aAAa,CAACV,IAAqB,EAAU;IAClD,QAAQA,IAAI;MACV,KAAKZ,EAAE,CAACa,IAAI,CAACC,eAAe,CAACI,GAAG;QAC9B,OAAO,QAAQ;MACjB,KAAKlB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACK,SAAS;QACpC,OAAO,MAAM;MACf;QACE,OAAO,QAAQ;IAAC;EAEtB;EAEA,OAAOI,cAAc,CAACX,IAAqB,EAAU;IACnD,QAAQA,IAAI;MACV,KAAKZ,EAAE,CAACa,IAAI,CAACC,eAAe,CAACI,GAAG;QAC9B,OAAO,QAAQ;MACjB;QACE,OAAO,QAAQ;IAAC;EAEtB;EAEA,OAAOM,cAAc,CAACC,KAAa,EAAc;IAC/C,OAAO;MAAEC,EAAE,EAAExB,OAAO,CAACyB,QAAQ,EAAE;MAAEF;IAAM,CAAC;EAC1C;EAEA,OAAOG,sBAAsB,CAC3BhB,IAAqB,EACrBiB,OAA0B,EACZ;IACd,IAAMC,cAAc,GAAGpB,YAAY,CAACW,iBAAiB,CAACT,IAAI,CAAC;IAC3D,IAAIkB,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,CAACtB,YAAY,CAACc,cAAc,CAACC,KAAK,CAAC,CAAC;EAC7C;EAEA,OAAOQ,eAAe,CACpBrB,IAAqB,EACrBiB,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;IAAQ,CAAC,GAAGiB,KAAK;IAEzB,IAAMlC,IAAI,GAAGF,YAAY,CAACqC,KAAK,CAAC,CAAC,CAAC;IAClC,IAAMC,KAAK,GAAGtC,YAAY,CAACuB,eAAe,CAACrB,IAAI,EAAEiB,OAAO,CAAW;IACnE,IAAMoB,WAAW,GAAGvC,YAAY,CAACkB,sBAAsB,CAAChB,IAAI,EAAEiB,OAAO,CAAC;IAEtE,IAAI,CAACqB,KAAK,GAAG;MACX;MACAtC,IAAI;MAEJ;MACAqC,WAAW;MAEX;MACAD,KAAK;MAEL;MACAG,QAAQ,EAAE;IACZ,CAAC;EACH;EAEAf,eAAe,GAAS;IACtB,IAAI,CAACgB,QAAQ,CAACF,KAAK,IAAI;MACrB,IAAM;QAAED;MAAY,CAAC,GAAGC,KAAK;MAC7B,IAAMG,cAAc,GAAG,CAAC,GAAGJ,WAAW,CAAC;MAEvC,IAAM;QAAEH;MAAM,CAAC,GAAG,IAAI,CAACX,KAAK;MAC5B,IAAM;QAAEN;MAAQ,CAAC,GAAGiB,KAAK;MACzBO,cAAc,CAACC,IAAI,CAAC;QAClB5B,EAAE,EAAExB,OAAO,CAACyB,QAAQ,EAAE;QACtBF,KAAK,EAAEI,OAAO,CAAC,CAAC,CAAC,CAACG;MACpB,CAAC,CAAC;MAEF,OAAO;QAAEiB,WAAW,EAAEI;MAAe,CAAC;IACxC,CAAC,EAAE,IAAI,CAACR,UAAU,CAAC;EACrB;EAEAP,qBAAqB,CAACiB,KAA0C,EAAQ;IACtE,IAAI,CAACH,QAAQ,CAAC;MAAED,QAAQ,EAAEI,KAAK,CAACC,MAAM,CAAC/B,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;IAAQ,CAAC,GAAGiB,KAAK;IAEzB,IAAMlC,IAAI,GAAGF,YAAY,CAACqC,KAAK,CAAC,CAAC,CAAC;IAClC,IAAMC,KAAK,GAAGtC,YAAY,CAACuB,eAAe,CAACrB,IAAI,EAAEiB,OAAO,CAAW;IACnE,IAAMoB,WAAW,GAAGvC,YAAY,CAACkB,sBAAsB,CAAChB,IAAI,EAAEiB,OAAO,CAAC;IACtE,IAAMsB,QAAQ,GAAG,IAAI;IAErB,IAAI,CAACC,QAAQ,CAAC;MAAExC,IAAI;MAAEqC,WAAW;MAAED,KAAK;MAAEG;IAAS,CAAC,EAAE,IAAI,CAACN,UAAU,CAAC;EACxE;EAEAL,kBAAkB,CAACe,KAA2C,EAAQ;IACpE,IAAM;MAAE9B;IAAM,CAAC,GAAG8B,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,CAACF,KAAK,IAAI;MACrB,IAAI;QAAED;MAAY,CAAC,GAAGC,KAAK;MAE3BD,WAAW,GAAG,CAAC,GAAGA,WAAW,CAAC;MAC9BA,WAAW,CAACU,QAAQ,CAAC,CAAClC,KAAK,GAAGA,KAAK;MAEnC,OAAO;QAAEwB;MAAY,CAAC;IACxB,CAAC,EAAE,IAAI,CAACJ,UAAU,CAAC;EACrB;EAEAJ,uBAAuB,CAACc,KAA0C,EAAQ;IACxE,IAAMM,WAAW,GAAIN,KAAyD;IAC9E,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,CAACF,KAAK,IAAI;MACrB,IAAM;QAAED;MAAY,CAAC,GAAGC,KAAK;MAC7B,IAAMG,cAAc,GAAG,CAAC,GAAGJ,WAAW,CAAC;MAEvCI,cAAc,CAACS,MAAM,CAACH,QAAQ,EAAE,CAAC,CAAC;MAElC,OAAO;QAAEV,WAAW,EAAEI;MAAe,CAAC;IACxC,CAAC,EAAE,IAAI,CAACR,UAAU,CAAC;EACrB;EAEAH,YAAY,CAACa,KAAuC,EAAQ;IAC1DA,KAAK,CAACQ,cAAc,EAAE;IAEtB,IAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAAC7B,KAAK;IAC/B,IAAM;MAAEvB,IAAI;MAAEqC,WAAW;MAAED,KAAK;MAAEG;IAAS,CAAC,GAAG,IAAI,CAACD,KAAK;IACzD,IAAMe,MAAM,GAAGhB,WAAW,CAACiB,GAAG,CAACC,IAAI,IAAIA,IAAI,CAAC1C,KAAK,CAAC;IAClDuC,QAAQ,CAAC;MACPpD,IAAI,YAAMA,IAAI,CAAiC;MAC/CqD,MAAM;MACNjB,KAAK;MACLG;IACF,CAAC,CAAC;EACJ;EAEAR,eAAe,CAACY,KAA0C,EAAQ;IAChE,IAAMM,WAAW,GAAIN,KAAyD;IAC9E,IAAME,KAAK,GAAGI,WAAW,CAACL,MAAM,CAACE,YAAY,CAAC,YAAY,CAAW;IACrE,IAAMC,QAAQ,GAAGC,QAAQ,CAACH,KAAK,EAAE,EAAE,CAAC;IAEpC,IAAM7C,IAAI,GAAGF,YAAY,CAACqC,KAAK,CAACY,QAAQ,CAAC;IAEzCnD,GAAG,CAAC4D,MAAM,CAAC,kBAAkB,EAAExD,IAAI,CAAC;IAEpC,IAAI,CAACwC,QAAQ,CAACF,KAAK,IAAI;MACrB,IAAMpB,cAAc,GAAGpB,YAAY,CAACW,iBAAiB,CAACT,IAAI,CAAC;MAC3D,IAAI;QAAEqC;MAAY,CAAC,GAAGC,KAAK;MAC3BD,WAAW,GAAGA,WAAW,CAACoB,KAAK,CAAC,CAAC,EAAEvC,cAAc,CAAC;MAClD,IAAImB,WAAW,CAAClB,MAAM,KAAK,CAAC,IAAID,cAAc,GAAG,CAAC,EAAE;QAClD,IAAM;UAAEgB;QAAM,CAAC,GAAG,IAAI,CAACX,KAAK;QAC5B,IAAM;UAAEN;QAAQ,CAAC,GAAGiB,KAAK;QACzBG,WAAW,GAAGvC,YAAY,CAACkB,sBAAsB,CAAChB,IAAI,EAAEiB,OAAO,CAAC;MAClE;MAEA,OAAO;QAAEjB,IAAI;QAAEqC;MAAY,CAAC;IAC9B,CAAC,EAAE,IAAI,CAACJ,UAAU,CAAC;EACrB;EAEAD,iBAAiB,CAACW,KAA2C,EAAQ;IACnE,IAAMP,KAAK,GAAGO,KAAK,CAACC,MAAM,CAAC/B,KAAK;IAChCjB,GAAG,CAAC4D,MAAM,CAAC,eAAe,EAAEpB,KAAK,CAAC;IAElC,IAAI,CAACI,QAAQ,CAAC;MAAEJ;IAAM,CAAC,EAAE,IAAI,CAACH,UAAU,CAAC;EAC3C;EAEAA,UAAU,GAAS;IACjB,IAAM;MAAEyB;IAAS,CAAC,GAAG,IAAI,CAACnC,KAAK;IAC/B,IAAM;MAAEgB,QAAQ;MAAEvC,IAAI;MAAEqC,WAAW;MAAED;IAAM,CAAC,GAAG,IAAI,CAACE,KAAK;IACzD,IAAMe,MAAM,GAAGhB,WAAW,CAACiB,GAAG,CAACC,IAAI,IAAIA,IAAI,CAAC1C,KAAK,CAAC;IAElD6C,QAAQ,CAAC;MAAE1D,IAAI;MAAEqD,MAAM;MAAEjB,KAAK;MAAEG;IAAS,CAAC,CAAC;EAC7C;EAEAoB,MAAM,GAAgB;IACpB,IAAM;MAAEzB;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEN;IAAQ,CAAC,GAAGiB,KAAK;IACzB,IAAM;MAAEG,WAAW;MAAErC,IAAI;MAAEoC,KAAK;MAAEG;IAAS,CAAC,GAAG,IAAI,CAACD,KAAK;IACzD,IAAMpB,cAAc,GAAGpB,YAAY,CAACW,iBAAiB,CAACT,IAAI,CAAC;IAC3D,IAAM4D,UAAU,GAAG9D,YAAY,CAACY,aAAa,CAACV,IAAI,CAAC;IACnD,IAAM6D,WAAW,GAAG/D,YAAY,CAACa,cAAc,CAACX,IAAI,CAAC;IACrD,IAAM8D,eAAe,GAAGzB,WAAW,CAAClB,MAAM,GAAG,CAAC;IAC9C,IAAM4C,kBAAkB,GAAG1B,WAAW,CAAClB,MAAM,GAAGD,cAAc;IAE9D,oBACE;MAAK,SAAS,EAAC;IAAe,gBAC5B;MAAM,QAAQ,EAAE,IAAI,CAACY;IAAa,gBAChC;MAAK,SAAS,EAAC;IAAU,gBACvB,mCAAO,mBAAiB,CAAQ,eAChC;MAAK,SAAS,EAAC;IAAU,GACtBhC,YAAY,CAACqC,KAAK,CAACmB,GAAG,CAAC,CAACU,SAAS,EAAEnB,KAAK,KAAK;MAC5C,IAAMoB,GAAG,GAAID,SAAkC;MAC/C,oBACE;QAAK,GAAG,EAAEC,GAAI;QAAC,SAAS,EAAC;MAAoB,gBAC3C;QACE,IAAI,EAAC,QAAQ;QACb,SAAS,EAAExF,UAAU,CACnB,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB;UACEyF,MAAM,EAAEF,SAAS,KAAKhE;QACxB,CAAC,CACD;QACF,cAAY6C,KAAM;QAClB,OAAO,EAAE,IAAI,CAACd;MAAgB,GAE7BjC,YAAY,CAACU,WAAW,CAACwD,SAAS,CAAC,EACnClE,YAAY,CAACC,WAAW,CAACiE,SAAS,CAAC,CAC7B,CACL;IAEV,CAAC,CAAC,CACE,CACF,eACN,+BAAM,eACN;MAAK,SAAS,EAAC;IAAsB,gBACnC;MAAO,SAAS,EAAC;IAAkB,GAAEJ,UAAU,CAAS,eACxD;MACE,SAAS,EAAC,8CAA8C;MACxD,KAAK,EAAExB,KAAM;MACb,QAAQ,EAAE,IAAI,CAACJ;IAAkB,GAEhCf,OAAO,CAACqC,GAAG,CAACa,MAAM,iBACjB;MAAQ,GAAG,EAAEA,MAAM,CAAC/C,IAAK;MAAC,KAAK,EAAE+C,MAAM,CAAC/C;IAAK,GAC1C+C,MAAM,CAAC/C,IAAI,CAEf,CAAC,CACK,CACL,EACL0C,eAAe,iBAAI,+BAAM,EACzBzB,WAAW,CAACiB,GAAG,CAAC,CAACc,UAAU,EAAEC,CAAC,kBAC7B;MACE,SAAS,EAAC,uCAAuC;MACjD,GAAG,EAAED,UAAU,CAACtD,EAAG;MACnB,0CAAiCuD,CAAC;IAAG,gBAErC;MAAO,SAAS,EAAC;IAAkB,GAChCA,CAAC,KAAK,CAAC,GAAGR,WAAW,GAAG,EAAE,CACrB,eACR;MACE,SAAS,EAAC,8CAA8C;MACxD,KAAK,EAAEO,UAAU,CAACvD,KAAM;MACxB,QAAQ,EAAE,IAAI,CAACe,kBAAmB;MAClC,4CAAmCyC,CAAC,CAAG;MACvC,cAAYA;IAAE,GAEbpD,OAAO,CAACqC,GAAG,CAACa,MAAM,iBACjB;MAAQ,GAAG,EAAEA,MAAM,CAAC/C,IAAK;MAAC,KAAK,EAAE+C,MAAM,CAAC/C,IAAK;MAAC,cAAYiD;IAAE,GACzDF,MAAM,CAAC/C,IAAI,CAEf,CAAC,CACK,EACRiB,WAAW,CAAClB,MAAM,GAAG,CAAC,iBACrB,oBAAC,MAAM;MACL,IAAI,EAAC,OAAO;MACZ,SAAS,EAAC,6BAA6B;MACvC,cAAYkD,CAAE;MACd,uCAA8BA,CAAC,CAAG;MAClC,OAAO,EAAE,IAAI,CAACxC,uBAAwB;MACtC,IAAI,EAAE1C,OAAQ;MACd,OAAO,EAAC;IAAQ,EAEnB,CAEJ,CAAC,EACD4E,kBAAkB,iBACjB;MAAK,SAAS,EAAC;IAAU,gBACvB;MAAK,SAAS,EAAC;IAAO,EAAG,eACzB,oBAAC,MAAM;MACL,IAAI,EAAC,OAAO;MACZ,SAAS,EAAC,qBAAqB;MAC/B,OAAO,EAAE,IAAI,CAACvC,eAAgB;MAC9B,IAAI,EAAEvC;IAAuB,GAC9B,YAED,CAAS,CAEZ,eACD;MAAK,SAAS,EAAC;IAA6B,gBAC1C;MAAO,SAAS,EAAC;IAAmB,gBAClC;MAAK,SAAS,EAAC;IAAiB,gBAC9B,oBAAC,eAAe;MACd,IAAI,EAAED,OAAQ;MACd,IAAI,EAAEE,mBAAoB;MAC1B,SAAS,EAAC;IAAgB,EAC1B,eACF,oBAAC,eAAe;MACd,IAAI,EAAEqD,QAAQ,GAAGzD,MAAM,GAAGC,QAAS;MACnC,SAAS,EAAC;IAAuB,EACjC,CACE,CACA,eACR,oBAAC,UAAU;MACT,QAAQ,EAAE,IAAI,CAAC2C,qBAAsB;MACrC,KAAK,YAAKa,QAAQ;IAAG,gBAErB,oBAAC,SAAS;MAAC,KAAK,EAAC;IAAM,GAAC,YAAU,CAAY,eAC9C,oBAAC,SAAS;MAAC,KAAK,EAAC;IAAO,GAAC,cAAY,CAAY,CACtC,CACT,eACN;MAAK,SAAS,EAAC;IAAU,gBACvB;MAAK,SAAS,EAAC;IAAmB,EAAG,eACrC;MAAK,SAAS,EAAC;IAA6B,GACzCA,QAAQ,GACL,8GAA8G,GAC9G,4IAA4I,CAC5I,CACF,eACN;MACE,SAAS,EAAE9D,UAAU,CAAC,UAAU,EAAE,qBAAqB,EAAE,MAAM;IAAE,gBAEjE,oBAAC,MAAM;MACL,IAAI,EAAC,WAAW;MAChB,SAAS,EAAC,WAAW;MACrB,OAAO,EAAE,IAAI,CAACkD;IAAY,GAC3B,OAED,CAAS,eACT,oBAAC,MAAM;MAAC,IAAI,EAAC,SAAS;MAAC,IAAI,EAAC,QAAQ;MAAC,SAAS,EAAC;IAAY,GAAC,QAE5D,CAAS,CACL,CACD,CACH;EAEV;AACF;AAAC,gBAzZK7B,YAAY,WACD,CACbV,EAAE,CAACa,IAAI,CAACC,eAAe,CAACC,IAAI,EAC5Bf,EAAE,CAACa,IAAI,CAACC,eAAe,CAACE,GAAG,EAC3BhB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACG,OAAO,EAC/BjB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACI;AACxB;AACA;AAAA,CACD;;AAmZH,eAAeR,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomColumnBuilder.js","names":["React","Component","classNames","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","Button","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsWarning","vsPass","DbNameValidator","CustomColumnInput","IrisGridModel","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","_defineProperty","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","_objectSpread","setTimeout","SUCCESS_SHOW_DURATION","event","customEvent","createElement","Fragment","icon","className","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","_this$container","querySelectorAll","focus","_this$container2","_this$container2$quer","querySelector","_this$container3","nextFocusIndex","onSave","originalCustomColumns","forEach","concat","_ref","renderInputs","nameCount","Map","_ref2","_nameCount$get","set","get","_nameCount$get2","isDuplicate","inputIndex","onChange","onDeleteColumn","onTabInEditor","invalid","renderSaveButton","saveText","areNamesValid","every","_ref3","isValidColumnName","filteredNames","filter","_ref4","_ref5","areNamesUnique","Set","size","kind","disabled","onClick","render","onCancel","role","ref","onFocus","onDragStart","startDragging","onDragEnd","droppableId","provided","snapshot","_extends","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder"],"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 { DbNameValidator } from '@deephaven/utils';\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};\nexport interface CustomColumnBuilderProps {\n model: IrisGridModel;\n customColumns: readonly string[];\n onSave: (columns: readonly string[]) => void;\n onCancel: () => void;\n}\n\ninterface CustomColumnBuilderState {\n inputs: readonly 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 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: readonly Input[], key: string) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs: readonly 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: readonly 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?.querySelector(\n '.btn-add-column'\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, customColumns: originalCustomColumns } = 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({\n // If both are 0, then moving from no custom to no custom. The parent won't re-render to cancel the loading state\n isCustomColumnApplying:\n customColumns.length > 0 || originalCustomColumns.length > 0,\n });\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 const nameCount = new Map();\n inputs.forEach(({ name }) =>\n nameCount.set(name, (nameCount.get(name) ?? 0) + 1)\n );\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n const isDuplicate = (nameCount.get(name) ?? 0) > 1;\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 isDuplicate={isDuplicate}\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 const areNamesValid = inputs.every(\n ({ name }) => name === '' || DbNameValidator.isValidColumnName(name)\n );\n const filteredNames = inputs\n .filter(({ name }) => name !== '')\n .map(({ name }) => name);\n const areNamesUnique = new Set(filteredNames).size === filteredNames.length;\n\n return (\n <Button\n kind={isSuccessShowing ? 'success' : 'primary'}\n className={classNames('btn-apply', {\n 'btn-spinner': isCustomColumnApplying,\n })}\n disabled={\n isSuccessShowing ||\n isCustomColumnApplying ||\n !areNamesValid ||\n !areNamesUnique\n }\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-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(): JSX.Element {\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","DbNameValidator","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","querySelector","nextFocusIndex","onSave","originalCustomColumns","forEach","renderInputs","nameCount","Map","set","get","isDuplicate","renderSaveButton","saveText","areNamesValid","every","isValidColumnName","filteredNames","filter","areNamesUnique","Set","size","render","onCancel","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder"],"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 { DbNameValidator } from '@deephaven/utils';\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};\nexport interface CustomColumnBuilderProps {\n model: IrisGridModel;\n customColumns: readonly string[];\n onSave: (columns: readonly string[]) => void;\n onCancel: () => void;\n}\n\ninterface CustomColumnBuilderState {\n inputs: readonly 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 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: readonly Input[], key: string) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs: readonly 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: readonly 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?.querySelector(\n '.btn-add-column'\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, customColumns: originalCustomColumns } = 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({\n // If both are 0, then moving from no custom to no custom. The parent won't re-render to cancel the loading state\n isCustomColumnApplying:\n customColumns.length > 0 || originalCustomColumns.length > 0,\n });\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 const nameCount = new Map();\n inputs.forEach(({ name }) =>\n nameCount.set(name, (nameCount.get(name) ?? 0) + 1)\n );\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n const isDuplicate = (nameCount.get(name) ?? 0) > 1;\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 isDuplicate={isDuplicate}\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 const areNamesValid = inputs.every(\n ({ name }) => name === '' || DbNameValidator.isValidColumnName(name)\n );\n const filteredNames = inputs\n .filter(({ name }) => name !== '')\n .map(({ name }) => name);\n const areNamesUnique = new Set(filteredNames).size === filteredNames.length;\n\n return (\n <Button\n kind={isSuccessShowing ? 'success' : 'primary'}\n className={classNames('btn-apply', {\n 'btn-spinner': isCustomColumnApplying,\n })}\n disabled={\n isSuccessShowing ||\n isCustomColumnApplying ||\n !areNamesValid ||\n !areNamesUnique\n }\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-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(): JSX.Element {\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":";;;;;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAsB,OAAO;AACtD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,OAAO,MAAM,SAAS;AAC7B,OAAOC,OAAO,MAAM,aAAa;AACjC,SAASC,eAAe,EAAEC,SAAS,QAAoB,qBAAqB;AAC5E,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,EAAEC,SAAS,EAAEC,cAAc,QAAQ,uBAAuB;AACzE,SAASC,sBAAsB,EAAEC,SAAS,EAAEC,MAAM,QAAQ,kBAAkB;AAC5E,SAASC,eAAe,QAAQ,kBAAkB;AAAC,OAC5CC,iBAAiB;AAAA;AAAA,OAEjBC,aAAa;AAuBpB,MAAMC,mBAAmB,SAAShB,SAAS,CAGzC;EAGA,OAAOiB,6BAA6B,GAAW;IAC7C,OAAOf,OAAO,CAACgB,QAAQ,EAAE;EAC3B;EAEA,OAAOC,uBAAuB,GAAU;IACtC,OAAO;MACLC,QAAQ,EAAElB,OAAO,CAACgB,QAAQ,EAAE;MAC5BG,IAAI,EAAE,EAAE;MACRC,OAAO,EAAE;IACX,CAAC;EACH;EAEAC,WAAW,CAACC,KAA+B,EAAE;IAC3C,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA;IAAA,kCAyCJrB,OAAO,CAAC,CAACsB,MAAwB,EAAEC,GAAW,KACvDD,MAAM,CAACE,IAAI,CAACC,KAAK,IAAIA,KAAK,CAACR,QAAQ,KAAKM,GAAG,CAAC,CAC7C;IAAA,uCAEevB,OAAO,CAAC,CAACsB,MAAwB,EAAEC,GAAW,KAC5DD,MAAM,CAACI,SAAS,CAACD,KAAK,IAAIA,KAAK,CAACR,QAAQ,KAAKM,GAAG,CAAC,CAClD;IA7CC,IAAI,CAACI,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACC,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACC,eAAe,GAAG,IAAI,CAACA,eAAe,CAACD,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACE,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACF,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACG,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACH,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACI,yBAAyB,GAAG,IAAI,CAACA,yBAAyB,CAACJ,IAAI,CAAC,IAAI,CAAC;IAC1E,IAAI,CAACK,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACL,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACM,aAAa,GAAG,IAAI,CAACA,aAAa,CAACN,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACO,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACP,IAAI,CAAC,IAAI,CAAC;IAE5D,IAAI,CAACQ,yBAAyB,GAAG,IAAI,CAACA,yBAAyB,CAACR,IAAI,CAAC,IAAI,CAAC;IAE1E,IAAI,CAACS,KAAK,GAAG;MACXf,MAAM,EAAE,EAAE;MACVgB,sBAAsB,EAAE,KAAK;MAC7BC,YAAY,EAAE,IAAI;MAClBC,gBAAgB,EAAE,KAAK;MACvBC,gBAAgB,EAAE;IACpB,CAAC;IACD,IAAI,CAACC,SAAS,GAAG,IAAI;IACrB,IAAI,CAACC,kBAAkB,GAAG,IAAI;EAChC;EAEAC,iBAAiB,GAAS;IACxB,IAAM;MAAEC;IAAc,CAAC,GAAG,IAAI,CAACxB,KAAK;IACpC,IAAI,CAACyB,kBAAkB,CAACD,aAAa,CAAC;IACtC,IAAI,CAACE,cAAc,EAAE;EACvB;EAEAC,oBAAoB,GAAS;IAC3B,IAAI,CAACC,aAAa,EAAE;IACpB,IAAI,IAAI,CAACN,kBAAkB,EAAE;MAC3BO,YAAY,CAAC,IAAI,CAACP,kBAAkB,CAAC;IACvC;EACF;EAcAQ,iBAAiB,GAAS;IACxB,IAAI,CAACC,QAAQ,CAAC;MAAEb,YAAY,EAAE;IAAK,CAAC,CAAC;EACvC;EAEAQ,cAAc,GAAS;IACrB,IAAM;MAAEM;IAAM,CAAC,GAAG,IAAI,CAAChC,KAAK;IAC5BgC,KAAK,CAACC,gBAAgB,CACpB1C,aAAa,CAAC2C,KAAK,CAACC,eAAe,EACnC,IAAI,CAACxB,yBAAyB,CAC/B;IACDqB,KAAK,CAACC,gBAAgB,CACpB1C,aAAa,CAAC2C,KAAK,CAACE,OAAO,EAC3B,IAAI,CAACzB,yBAAyB,CAC/B;IACDqB,KAAK,CAACC,gBAAgB,CACpB1C,aAAa,CAAC2C,KAAK,CAACG,cAAc,EAClC,IAAI,CAACzB,mBAAmB,CACzB;EACH;EAEAgB,aAAa,GAAS;IACpB,IAAM;MAAEI;IAAM,CAAC,GAAG,IAAI,CAAChC,KAAK;IAC5BgC,KAAK,CAACM,mBAAmB,CACvB/C,aAAa,CAAC2C,KAAK,CAACC,eAAe,EACnC,IAAI,CAACxB,yBAAyB,CAC/B;IACDqB,KAAK,CAACM,mBAAmB,CACvB/C,aAAa,CAAC2C,KAAK,CAACE,OAAO,EAC3B,IAAI,CAACzB,yBAAyB,CAC/B;IACDqB,KAAK,CAACM,mBAAmB,CACvB/C,aAAa,CAAC2C,KAAK,CAACG,cAAc,EAClC,IAAI,CAACzB,mBAAmB,CACzB;EACH;EAEAa,kBAAkB,CAACD,aAAgC,EAAQ;IACzD,IAAIA,aAAa,CAACe,MAAM,GAAG,CAAC,EAAE;MAC5B,IAAMC,kBAAkB,GAAGhB,aAAa,CAACiB,GAAG,CAACC,YAAY,IAAI;QAC3D,IAAMtC,KAAK,GAAGsC,YAAY,CAACC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5C,OAAO;UACL/C,QAAQ,EAAEJ,mBAAmB,CAACC,6BAA6B,EAAE;UAC7DI,IAAI,EAAEO,KAAK,CAAC,CAAC,CAAC;UACdN,OAAO,EAAEM,KAAK,CAAC,CAAC;QAClB,CAAC;MACH,CAAC,CAAC;MACF,IAAI,CAAC2B,QAAQ,CAAC;QAAE9B,MAAM,EAAEuC;MAAmB,CAAC,CAAC;IAC/C,CAAC,MAAM;MACL,IAAI,CAACT,QAAQ,CAAC;QACZ9B,MAAM,EAAE,CAACT,mBAAmB,CAACG,uBAAuB,EAAE;MACxD,CAAC,CAAC;IACJ;EACF;EAEAW,oBAAoB,GAAS;IAC3B,IAAM;MAAEL;IAAO,CAAC,GAAG,IAAI,CAACe,KAAK;IAC7B,IAAM4B,SAAS,GAAG,CAAC,GAAG3C,MAAM,CAAC;IAC7B2C,SAAS,CAACC,IAAI,CAACrD,mBAAmB,CAACG,uBAAuB,EAAE,CAAC;IAC7D,IAAI,CAACoC,QAAQ,CAAC;MACZ9B,MAAM,EAAE2C;IACV,CAAC,CAAC;EACJ;EAEAlC,kBAAkB,CAACd,QAAgB,EAAQ;IACzC,IAAM;MAAEK;IAAO,CAAC,GAAG,IAAI,CAACe,KAAK;IAC7B,IAAM8B,iBAAiB,GAAG,IAAI,CAACC,aAAa,CAAC9C,MAAM,EAAEL,QAAQ,CAAC;IAC9D,IAAMgD,SAAS,GAAG,CAAC,GAAG3C,MAAM,CAAC;IAC7B2C,SAAS,CAACI,MAAM,CAACF,iBAAiB,EAAE,CAAC,CAAC;IACtC,IAAIF,SAAS,CAACL,MAAM,KAAK,CAAC,EAAE;MAC1BK,SAAS,CAACC,IAAI,CAACrD,mBAAmB,CAACG,uBAAuB,EAAE,CAAC;IAC/D;IACA,IAAI,CAACoC,QAAQ,CAAC;MACZ9B,MAAM,EAAE2C;IACV,CAAC,CAAC;EACJ;EAEAnC,iBAAiB,CACfb,QAAgB,EAChBqD,IAAqB,EACrBC,KAAa,EACP;IACN,IAAM;MAAEjD;IAAO,CAAC,GAAG,IAAI,CAACe,KAAK;IAC7B,IAAM8B,iBAAiB,GAAG,IAAI,CAACC,aAAa,CAAC9C,MAAM,EAAEL,QAAQ,CAAC;IAC9D,IAAMuD,iBAAiB,GAAG,IAAI,CAACC,QAAQ,CAACnD,MAAM,EAAEL,QAAQ,CAAC;IAEzD,IAAMyD,cAAc,qBAAQF,iBAAiB,CAAW;IACxDE,cAAc,CAACJ,IAAI,CAAC,GAAGC,KAAK;IAE5B,IAAMN,SAAS,GAAG,CAAC,GAAG3C,MAAM,CAAC;IAC7B2C,SAAS,CAACI,MAAM,CAACF,iBAAiB,EAAE,CAAC,EAAEO,cAAc,CAAC;IACtD,IAAI,CAACtB,QAAQ,CAAC;MACZ9B,MAAM,EAAE2C;IACV,CAAC,CAAC;EACJ;EAEAjC,yBAAyB,GAAS;IAChC,IAAM;MAAEM;IAAuB,CAAC,GAAG,IAAI,CAACD,KAAK;IAC7C,IAAI,CAACC,sBAAsB,EAAE;MAC3B;IACF;IACA,IAAI,CAACc,QAAQ,CACX;MAAEd,sBAAsB,EAAE,KAAK;MAAEG,gBAAgB,EAAE;IAAK,CAAC,EACzD,MAAM;MACJ,IAAI,CAACE,kBAAkB,GAAGgC,UAAU,CAClC,MAAM,IAAI,CAACvB,QAAQ,CAAC;QAAEX,gBAAgB,EAAE;MAAM,CAAC,CAAC,EAChD5B,mBAAmB,CAAC+D,qBAAqB,CAC1C;IACH,CAAC,CACF;EACH;EAEA3C,mBAAmB,CAAC4C,KAAY,EAAQ;IACtC,IAAMC,WAAW,GAAGD,KAAoB;IACxC,IAAM;MAAEvC;IAAuB,CAAC,GAAG,IAAI,CAACD,KAAK;IAC7C,IAAI,CAACC,sBAAsB,EAAE;MAC3B;IACF;IAEA,IAAI,CAACc,QAAQ,CAAC;MACZd,sBAAsB,EAAE,KAAK;MAC7BC,YAAY,eACV,uDACE,4CACE,oBAAC,eAAe;QAAC,IAAI,EAAE/B;MAAU,EAAG,oCACtC,CAAI,eACJ;QAAK,SAAS,EAAC;MAAW,GACvBsE,WAAW,CAACC,MAAM,CAACxC,YAAY,eAChC,+BAAM,wBACc,EAAC,GAAG,EACvByC,IAAI,CAACC,SAAS,CAACH,WAAW,CAACC,MAAM,CAACG,aAAa,CAAC,CAC7C,CAET;MACD1C,gBAAgB,EAAE;IACpB,CAAC,CAAC;EACJ;EAEAN,aAAa,CAACiD,MAAkB,EAAQ;IACtC9E,SAAS,CAAC+E,YAAY,EAAE;;IAExB;IACA,IAAI,CAACD,MAAM,CAACE,WAAW,EAAE;MACvB;IACF;IACA,IAAM;MAAE/D;IAAO,CAAC,GAAG,IAAI,CAACe,KAAK;IAC7B,IAAMiD,WAAW,GAAGH,MAAM,CAACI,MAAM,CAACC,KAAK;IACvC,IAAMC,gBAAgB,GAAGN,MAAM,CAACE,WAAW,CAACG,KAAK;IACjD,IAAMvB,SAAS,GAAG,CAAC,GAAG3C,MAAM,CAAC;IAC7B,IAAMoE,WAAW,GAAGpE,MAAM,CAACgE,WAAW,CAAC;IAEvCrB,SAAS,CAACI,MAAM,CAACiB,WAAW,EAAE,CAAC,CAAC;IAChCrB,SAAS,CAACI,MAAM,CAACoB,gBAAgB,EAAE,CAAC,EAAEC,WAAW,CAAC;IAElD,IAAI,CAACtC,QAAQ,CAAC;MAAE9B,MAAM,EAAE2C;IAAU,CAAC,CAAC;EACtC;EAEA7B,yBAAyB,CAACuD,gBAAwB,EAAEC,QAAiB,EAAQ;IAC3E,IAAM;MAAEtE;IAAO,CAAC,GAAG,IAAI,CAACe,KAAK;IAC7B;IACA,IAAIuD,QAAQ,EAAE;MAAA;MACZ,oBAAC,IAAI,CAAClD,SAAS,oDAAd,gBAAgBmD,gBAAgB,CAAC,kBAAkB,CAAC,CACnDF,gBAAgB,CACjB,EAAuBG,KAAK,EAAE;MAC/B;IACF;IACA,IAAIH,gBAAgB,KAAKrE,MAAM,CAACsC,MAAM,GAAG,CAAC,EAAE;MAAA;MAC1C,oBAAC,IAAI,CAAClB,SAAS,8EAAd,iBAAgBqD,aAAa,CAC5B,iBAAiB,CAClB,0DAFD,sBAEyBD,KAAK,EAAE;IAClC,CAAC,MAAM;MAAA;MACL;MACA,IAAME,cAAc,GAAGL,gBAAgB,GAAG,CAAC;MAC3C,qBAAC,IAAI,CAACjD,SAAS,qDAAd,iBAAgBmD,gBAAgB,wBAAwB,CACvDG,cAAc,CACf,EAAsBF,KAAK,EAAE;IAChC;EACF;EAEAjE,eAAe,GAAS;IACtB,IAAM;MAAEoE,MAAM;MAAEpD,aAAa,EAAEqD;IAAsB,CAAC,GAAG,IAAI,CAAC7E,KAAK;IACnE,IAAM;MAAEC,MAAM;MAAEgB;IAAuB,CAAC,GAAG,IAAI,CAACD,KAAK;IACrD,IAAIC,sBAAsB,EAAE;MAC1B;IACF;IACA,IAAMO,aAAa,GAAG,EAAc;IACpCvB,MAAM,CAAC6E,OAAO,CAAC1E,KAAK,IAAI;MACtB,IAAM;QAAEP,IAAI;QAAEC;MAAQ,CAAC,GAAGM,KAAK;MAC/B,IAAIP,IAAI,IAAIC,OAAO,EAAE;QACnB0B,aAAa,CAACqB,IAAI,WAAIhD,IAAI,cAAIC,OAAO,EAAG;MAC1C;IACF,CAAC,CAAC;IACF,IAAI,CAACgC,iBAAiB,EAAE;IACxB,IAAI,CAACC,QAAQ,CAAC;MACZ;MACAd,sBAAsB,EACpBO,aAAa,CAACe,MAAM,GAAG,CAAC,IAAIsC,qBAAqB,CAACtC,MAAM,GAAG;IAC/D,CAAC,CAAC;IACFqC,MAAM,CAACpD,aAAa,CAAC;EACvB;EAEAV,kBAAkB,GAAS;IACzB,IAAI,CAACiB,QAAQ,CAAC,QAA0B;MAAA,IAAzB;QAAEZ;MAAiB,CAAC;MACjC,IAAIA,gBAAgB,EAAE;QACpB,OAAO;UAAEA,gBAAgB,EAAE;QAAM,CAAC;MACpC;MACA,OAAO,IAAI;IACb,CAAC,CAAC;EACJ;EAEA4D,YAAY,GAAmB;IAC7B,IAAM;MAAE9E,MAAM;MAAEkB;IAAiB,CAAC,GAAG,IAAI,CAACH,KAAK;IAE/C,IAAMgE,SAAS,GAAG,IAAIC,GAAG,EAAE;IAC3BhF,MAAM,CAAC6E,OAAO,CAAC;MAAA;MAAA,IAAC;QAAEjF;MAAK,CAAC;MAAA,OACtBmF,SAAS,CAACE,GAAG,CAACrF,IAAI,EAAE,mBAACmF,SAAS,CAACG,GAAG,CAACtF,IAAI,CAAC,2DAAI,CAAC,IAAI,CAAC,CAAC;IAAA,EACpD;IAED,OAAOI,MAAM,CAACwC,GAAG,CAAC,CAACrC,KAAK,EAAE+D,KAAK,KAAK;MAAA;MAClC,IAAM;QAAEvE,QAAQ;QAAEC,IAAI;QAAEC;MAAQ,CAAC,GAAGM,KAAK;MACzC,IAAMgF,WAAW,GAAG,oBAACJ,SAAS,CAACG,GAAG,CAACtF,IAAI,CAAC,6DAAI,CAAC,IAAI,CAAC;MAClD,oBACE,oBAAC,iBAAiB;QAChB,GAAG,EAAED,QAAS;QACd,UAAU,EAAEuE,KAAM;QAClB,QAAQ,EAAEvE,QAAS;QACnB,IAAI,EAAEC,IAAK;QACX,OAAO,EAAEC,OAAQ;QACjB,QAAQ,EAAE,IAAI,CAACW,iBAAkB;QACjC,cAAc,EAAE,IAAI,CAACC,kBAAmB;QACxC,aAAa,EAAE,IAAI,CAACK,yBAA0B;QAC9C,OAAO,EAAEI,gBAAiB;QAC1B,WAAW,EAAEiE;MAAY,EACzB;IAEN,CAAC,CAAC;EACJ;EAEAC,gBAAgB,GAAiB;IAC/B,IAAM;MAAEpF,MAAM;MAAEgB,sBAAsB;MAAEG;IAAiB,CAAC,GAAG,IAAI,CAACJ,KAAK;IACvE,IAAMsE,QAAQ,GAAGrF,MAAM,CAACsC,MAAM,GAAG,CAAC,GAAG,cAAc,GAAG,aAAa;IACnE,IAAMgD,aAAa,GAAGtF,MAAM,CAACuF,KAAK,CAChC;MAAA,IAAC;QAAE3F;MAAK,CAAC;MAAA,OAAKA,IAAI,KAAK,EAAE,IAAIR,eAAe,CAACoG,iBAAiB,CAAC5F,IAAI,CAAC;IAAA,EACrE;IACD,IAAM6F,aAAa,GAAGzF,MAAM,CACzB0F,MAAM,CAAC;MAAA,IAAC;QAAE9F;MAAK,CAAC;MAAA,OAAKA,IAAI,KAAK,EAAE;IAAA,EAAC,CACjC4C,GAAG,CAAC;MAAA,IAAC;QAAE5C;MAAK,CAAC;MAAA,OAAKA,IAAI;IAAA,EAAC;IAC1B,IAAM+F,cAAc,GAAG,IAAIC,GAAG,CAACH,aAAa,CAAC,CAACI,IAAI,KAAKJ,aAAa,CAACnD,MAAM;IAE3E,oBACE,oBAAC,MAAM;MACL,IAAI,EAAEnB,gBAAgB,GAAG,SAAS,GAAG,SAAU;MAC/C,SAAS,EAAE3C,UAAU,CAAC,WAAW,EAAE;QACjC,aAAa,EAAEwC;MACjB,CAAC,CAAE;MACH,QAAQ,EACNG,gBAAgB,IAChBH,sBAAsB,IACtB,CAACsE,aAAa,IACd,CAACK,cACF;MACD,OAAO,EAAE,IAAI,CAACpF;IAAgB,GAE7BS,sBAAsB,iBACrB,+CACE,oBAAC,cAAc,OAAG,eAClB;MAAM,SAAS,EAAC;IAAoB,GAAC,UAAQ,CAAO,CAEvD,EACA,CAACG,gBAAgB,IAAI,CAACH,sBAAsB,IAAIqE,QAAQ,EACxDlE,gBAAgB,iBACf,uDACE,oBAAC,eAAe;MAAC,IAAI,EAAEhC;IAAO,EAAG,YACnC,CACD,CACM;EAEb;EAEA2G,MAAM,GAAgB;IACpB,IAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAAChG,KAAK;IAC/B,IAAM;MAAEkB;IAAa,CAAC,GAAG,IAAI,CAACF,KAAK;IACnC,oBACE;MACE,IAAI,EAAC,cAAc;MACnB,SAAS,EAAC,iCAAiC;MAC3C,GAAG,EAAEK,SAAS,IAAI;QAChB,IAAI,CAACA,SAAS,GAAGA,SAAS;MAC5B,CAAE;MACF,OAAO,EAAE,IAAI,CAACP,kBAAmB;MACjC,OAAO,EAAE,IAAI,CAACA;IAAmB,gBAEjC,+BAAM,eACN,oBAAC,eAAe;MACd,WAAW,EAAE9B,SAAS,CAACiH,aAAc;MACrC,SAAS,EAAE,IAAI,CAACpF;IAAc,gBAE9B,oBAAC,SAAS;MAAC,WAAW,EAAC;IAA0B,GAC9C,CAACqF,QAAQ,EAAEC,QAAQ,kBAClB;MACE,GAAG,EAAED,QAAQ,CAACE;MACd;IAAA,GACIF,QAAQ,CAACG,cAAc;MAC3B,SAAS,EAAE5H,UAAU,CAAC,qBAAqB,EAAE;QAC3C6H,QAAQ,EAAEH,QAAQ,CAACI;MACrB,CAAC;IAAE,IAEF,IAAI,CAACxB,YAAY,EAAE,EACnBmB,QAAQ,CAACM,WAAW,CAExB,CACS,CACI,eAElB;MAAK,SAAS,EAAC;IAAW,gBACxB,oBAAC,MAAM;MACL,IAAI,EAAC,OAAO;MACZ,SAAS,EAAC,gBAAgB;MAC1B,OAAO,EAAE,IAAI,CAAClG,oBAAqB;MACnC,IAAI,EAAEpB;IAAuB,GAC9B,oBAED,CAAS,CACL,eAEN;MAAK,SAAS,EAAC;IAA8B,GAC1CgC,YAAY,iBAAI;MAAK,SAAS,EAAC;IAAe,GAAEA,YAAY,CAAO,eAEpE;MAAK,SAAS,EAAC;IAA4B,gBACzC,oBAAC,MAAM;MAAC,IAAI,EAAC,WAAW;MAAC,SAAS,EAAC,MAAM;MAAC,OAAO,EAAE8E;IAAS,GAAC,QAE7D,CAAS,EACR,IAAI,CAACX,gBAAgB,EAAE,CACpB,CACF,CACF;EAEV;AACF;AAAC,gBArZK7F,mBAAmB,2BAIQ,GAAG;AAmZpC,eAAeA,mBAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomColumnInput.js","names":["React","useCallback","classNames","Draggable","Button","vsTrash","vsGripper","DbNameValidator","InputEditor","INPUT_TYPE","Object","freeze","NAME","FORMULA","EMPTY_FN","CustomColumnInput","
|
|
1
|
+
{"version":3,"file":"CustomColumnInput.js","names":["React","useCallback","classNames","Draggable","Button","vsTrash","vsGripper","DbNameValidator","InputEditor","INPUT_TYPE","Object","freeze","NAME","FORMULA","EMPTY_FN","CustomColumnInput","eventKey","name","inputIndex","formula","onChange","onDeleteColumn","onTabInEditor","invalid","isDuplicate","isValidName","isValidColumnName","handleFormulaEditorContentChanged","formulaValue","undefined","replace","provided","snapshot","dragging","isDragging","innerRef","draggableProps","event","target","value","dragHandleProps","language"],"sources":["../../src/sidebar/CustomColumnInput.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport classNames from 'classnames';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { Button } from '@deephaven/components';\nimport { vsTrash, vsGripper } from '@deephaven/icons';\nimport { DbNameValidator } from '@deephaven/utils';\nimport InputEditor from './InputEditor';\nimport { CustomColumnKey } from './CustomColumnBuilder';\n\nexport interface CustomColumnInputProps {\n eventKey: string;\n inputIndex: number;\n name: string;\n formula: string;\n onChange: (\n eventKey: string,\n inputType: CustomColumnKey,\n value: string\n ) => void;\n onDeleteColumn: (eventKey: string) => void;\n onTabInEditor: (editorIndex: number, shiftKey: boolean) => void;\n invalid: boolean;\n isDuplicate: boolean;\n}\n\nconst INPUT_TYPE = Object.freeze({\n NAME: 'name',\n FORMULA: 'formula',\n});\n\nconst EMPTY_FN = () => {\n // no-op\n};\n\nfunction CustomColumnInput({\n eventKey,\n name,\n inputIndex,\n formula,\n onChange,\n onDeleteColumn,\n onTabInEditor,\n invalid,\n isDuplicate,\n}: CustomColumnInputProps): JSX.Element {\n const isValidName = name === '' || DbNameValidator.isValidColumnName(name);\n const handleFormulaEditorContentChanged = useCallback(\n (formulaValue?: string) => {\n if (formulaValue !== undefined) {\n formulaValue.replace(/(\\r\\n|\\n|\\r)/gm, ''); // remove line break\n onChange(eventKey, INPUT_TYPE.FORMULA, formulaValue);\n }\n },\n [onChange, eventKey]\n );\n\n return (\n <Draggable\n draggableId={eventKey}\n index={inputIndex}\n disableInteractiveElementBlocking\n >\n {(provided, snapshot) => (\n <div\n className={classNames('draggable-container', {\n dragging: snapshot.isDragging,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n >\n <div className=\"custom-column-input-container\">\n <div className=\"pb-3\">\n <div className=\"d-flex flex-row custom-column-name\">\n <input\n className={classNames('form-control custom-column-input', {\n 'is-invalid': invalid || !isValidName || isDuplicate,\n })}\n placeholder=\"Column Name\"\n value={name}\n onChange={event => {\n onChange(eventKey, INPUT_TYPE.NAME, event.target.value);\n }}\n />\n <Button\n kind=\"ghost\"\n className=\"ml-1 px-2\"\n onClick={() => {\n onDeleteColumn(eventKey);\n }}\n icon={vsTrash}\n tooltip=\"Delete custom column\"\n />\n\n <Button\n kind=\"ghost\"\n className=\"btn-drag-handle\"\n onClick={EMPTY_FN}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n icon={vsGripper}\n tooltip=\"Drag column to re-order\"\n />\n </div>\n {(!isValidName || isDuplicate) && (\n <p className=\"validate-label-error text-danger mb-0 mt-2 pl-1\">\n {!isValidName ? 'Invalid name' : 'Duplicate name'}\n </p>\n )}\n </div>\n <InputEditor\n editorSettings={{ language: 'deephavenDb' }}\n editorIndex={inputIndex}\n value={formula}\n onContentChanged={handleFormulaEditorContentChanged}\n onTab={onTabInEditor}\n invalid={invalid}\n />\n </div>\n <hr />\n </div>\n )}\n </Draggable>\n );\n}\n\nexport default CustomColumnInput;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputEditor.js","names":["React","Component","monaco","classNames","InputEditor","constructor","props","_defineProperty","handleContentChanged","bind","handleEditorFocus","handleEditorBlur","handleContainerClick","handleKeyDown","state","isEditorFocused","isEditorEmpty","editorContainer","componentDidMount","initEditor","componentWillUnmount","destroyEditor","_this$editor$getModel","value","editorSettings","inputEditorSettings","_objectSpread","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","minimap","enabled","renderLineHighlight","scrollbar","arrowSize","horizontal","horizontalScrollbarSize","scrollBeyondLastLine","padding","top","bottom","tabCompletion","useTabStops","wordWrap","automaticLayout","Error","editor","create","layout","getModel","updateOptions","tabSize","onKeyDown","onDidChangeModelContent","onDidFocusEditorText","onDidBlurEditorText","_this$editor","dispose","undefined","_this$editor2","_this$editor2$getMode","onContentChanged","getValue","setState","length","_this$editor$getModel2","_this$editor3","_this$editor3$getMode","_this$editor4","focus","event","onTab","editorIndex","code","stopPropagation","preventDefault","shiftKey","render","invalid","createElement","className","focused","role","onClick","ref"],"sources":["../../src/sidebar/InputEditor.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport * as monaco from 'monaco-editor';\nimport classNames from 'classnames';\nimport './InputEditor.scss';\n\ninterface InputEditorProps {\n value: string;\n onContentChanged: (value?: string) => void;\n editorSettings: Partial<monaco.editor.IStandaloneEditorConstructionOptions>;\n editorIndex: number;\n onTab: (editorIndex: number, shiftKey: boolean) => void;\n invalid: boolean;\n}\n\ninterface InputEditorState {\n isEditorFocused: boolean;\n isEditorEmpty: boolean;\n}\n/**\n * A monaco editor that looks like an general input\n */\n\nexport default class InputEditor extends Component<\n InputEditorProps,\n InputEditorState\n> {\n static defaultProps = {\n value: '',\n onContentChanged: (): void => undefined,\n editorSettings: {},\n editorIndex: 0,\n onTab: (): void => undefined,\n invalid: false,\n };\n\n constructor(props: InputEditorProps) {\n super(props);\n\n this.handleContentChanged = this.handleContentChanged.bind(this);\n this.handleEditorFocus = this.handleEditorFocus.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleContainerClick = this.handleContainerClick.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n\n this.state = {\n isEditorFocused: false,\n isEditorEmpty: true,\n };\n this.editorContainer = null;\n }\n\n componentDidMount(): void {\n this.initEditor();\n }\n\n componentWillUnmount(): void {\n this.destroyEditor();\n }\n\n editorContainer: HTMLDivElement | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n initEditor(): void {\n const { value, editorSettings } = this.props;\n const inputEditorSettings = {\n copyWithSyntaxHighlighting: 'false',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'groovyDB',\n lineDecorationsWidth: 8,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n scrollBeyondLastLine: false,\n padding: {\n top: 6,\n bottom: 6,\n },\n tabCompletion: 'off',\n useTabStops: true,\n value,\n wordWrap: 'on',\n automaticLayout: true,\n ...editorSettings,\n } as monaco.editor.IStandaloneEditorConstructionOptions;\n if (!this.editorContainer) {\n throw new Error('editorContainer is null');\n }\n this.editor = monaco.editor.create(\n this.editorContainer,\n inputEditorSettings\n );\n this.editor.layout();\n\n // disable tab to spaces in this editor to improve tab navigation\n this.editor.getModel()?.updateOptions({ tabSize: 0 });\n\n // monaco does not propagate tab or enter events\n this.editor.onKeyDown(this.handleKeyDown);\n\n this.editor.onDidChangeModelContent(this.handleContentChanged);\n this.editor.onDidFocusEditorText(this.handleEditorFocus);\n this.editor.onDidBlurEditorText(this.handleEditorBlur);\n }\n\n destroyEditor(): void {\n this.editor?.dispose();\n this.editor = undefined;\n }\n\n handleContentChanged(): void {\n const { onContentChanged } = this.props;\n const value = this.editor?.getModel()?.getValue();\n if (value !== undefined) {\n this.setState({ isEditorEmpty: value.length === 0 });\n }\n onContentChanged(value);\n }\n\n handleEditorFocus(): void {\n this.setState({ isEditorFocused: true });\n }\n\n handleEditorBlur(): void {\n const value = this.editor?.getModel()?.getValue() ?? '';\n this.setState({\n isEditorEmpty: value.length === 0,\n isEditorFocused: false,\n });\n }\n\n // force editor to focus if clicked\n handleContainerClick(): void {\n const { isEditorFocused } = this.state;\n if (isEditorFocused) {\n return;\n }\n this.editor?.focus();\n }\n\n handleKeyDown(event: monaco.IKeyboardEvent): void {\n const { onTab, editorIndex } = this.props;\n if (event.code === 'Tab') {\n event.stopPropagation();\n event.preventDefault();\n onTab(editorIndex, event.shiftKey);\n }\n }\n\n render(): ReactElement {\n const { value, invalid } = this.props;\n const { isEditorFocused, isEditorEmpty } = this.state;\n return (\n <div\n className={classNames('input-editor-wrapper', {\n focused: isEditorFocused,\n invalid,\n })}\n role=\"presentation\"\n onClick={this.handleContainerClick}\n >\n <div\n className=\"editor-container\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n {isEditorEmpty && !value && (\n <div className=\"editor-placeholder text-muted\">Column Formula</div>\n )}\n </div>\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InputEditor.js","names":["React","Component","monaco","classNames","InputEditor","constructor","props","handleContentChanged","bind","handleEditorFocus","handleEditorBlur","handleContainerClick","handleKeyDown","state","isEditorFocused","isEditorEmpty","editorContainer","componentDidMount","initEditor","componentWillUnmount","destroyEditor","value","editorSettings","inputEditorSettings","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","minimap","enabled","renderLineHighlight","scrollbar","arrowSize","horizontal","horizontalScrollbarSize","scrollBeyondLastLine","padding","top","bottom","tabCompletion","useTabStops","wordWrap","automaticLayout","Error","editor","create","layout","getModel","updateOptions","tabSize","onKeyDown","onDidChangeModelContent","onDidFocusEditorText","onDidBlurEditorText","dispose","undefined","onContentChanged","getValue","setState","length","focus","event","onTab","editorIndex","code","stopPropagation","preventDefault","shiftKey","render","invalid","focused"],"sources":["../../src/sidebar/InputEditor.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport * as monaco from 'monaco-editor';\nimport classNames from 'classnames';\nimport './InputEditor.scss';\n\ninterface InputEditorProps {\n value: string;\n onContentChanged: (value?: string) => void;\n editorSettings: Partial<monaco.editor.IStandaloneEditorConstructionOptions>;\n editorIndex: number;\n onTab: (editorIndex: number, shiftKey: boolean) => void;\n invalid: boolean;\n}\n\ninterface InputEditorState {\n isEditorFocused: boolean;\n isEditorEmpty: boolean;\n}\n/**\n * A monaco editor that looks like an general input\n */\n\nexport default class InputEditor extends Component<\n InputEditorProps,\n InputEditorState\n> {\n static defaultProps = {\n value: '',\n onContentChanged: (): void => undefined,\n editorSettings: {},\n editorIndex: 0,\n onTab: (): void => undefined,\n invalid: false,\n };\n\n constructor(props: InputEditorProps) {\n super(props);\n\n this.handleContentChanged = this.handleContentChanged.bind(this);\n this.handleEditorFocus = this.handleEditorFocus.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleContainerClick = this.handleContainerClick.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n\n this.state = {\n isEditorFocused: false,\n isEditorEmpty: true,\n };\n this.editorContainer = null;\n }\n\n componentDidMount(): void {\n this.initEditor();\n }\n\n componentWillUnmount(): void {\n this.destroyEditor();\n }\n\n editorContainer: HTMLDivElement | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n initEditor(): void {\n const { value, editorSettings } = this.props;\n const inputEditorSettings = {\n copyWithSyntaxHighlighting: 'false',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'groovyDB',\n lineDecorationsWidth: 8,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n scrollBeyondLastLine: false,\n padding: {\n top: 6,\n bottom: 6,\n },\n tabCompletion: 'off',\n useTabStops: true,\n value,\n wordWrap: 'on',\n automaticLayout: true,\n ...editorSettings,\n } as monaco.editor.IStandaloneEditorConstructionOptions;\n if (!this.editorContainer) {\n throw new Error('editorContainer is null');\n }\n this.editor = monaco.editor.create(\n this.editorContainer,\n inputEditorSettings\n );\n this.editor.layout();\n\n // disable tab to spaces in this editor to improve tab navigation\n this.editor.getModel()?.updateOptions({ tabSize: 0 });\n\n // monaco does not propagate tab or enter events\n this.editor.onKeyDown(this.handleKeyDown);\n\n this.editor.onDidChangeModelContent(this.handleContentChanged);\n this.editor.onDidFocusEditorText(this.handleEditorFocus);\n this.editor.onDidBlurEditorText(this.handleEditorBlur);\n }\n\n destroyEditor(): void {\n this.editor?.dispose();\n this.editor = undefined;\n }\n\n handleContentChanged(): void {\n const { onContentChanged } = this.props;\n const value = this.editor?.getModel()?.getValue();\n if (value !== undefined) {\n this.setState({ isEditorEmpty: value.length === 0 });\n }\n onContentChanged(value);\n }\n\n handleEditorFocus(): void {\n this.setState({ isEditorFocused: true });\n }\n\n handleEditorBlur(): void {\n const value = this.editor?.getModel()?.getValue() ?? '';\n this.setState({\n isEditorEmpty: value.length === 0,\n isEditorFocused: false,\n });\n }\n\n // force editor to focus if clicked\n handleContainerClick(): void {\n const { isEditorFocused } = this.state;\n if (isEditorFocused) {\n return;\n }\n this.editor?.focus();\n }\n\n handleKeyDown(event: monaco.IKeyboardEvent): void {\n const { onTab, editorIndex } = this.props;\n if (event.code === 'Tab') {\n event.stopPropagation();\n event.preventDefault();\n onTab(editorIndex, event.shiftKey);\n }\n }\n\n render(): ReactElement {\n const { value, invalid } = this.props;\n const { isEditorFocused, isEditorEmpty } = this.state;\n return (\n <div\n className={classNames('input-editor-wrapper', {\n focused: isEditorFocused,\n invalid,\n })}\n role=\"presentation\"\n onClick={this.handleContainerClick}\n >\n <div\n className=\"editor-container\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n {isEditorEmpty && !value && (\n <div className=\"editor-placeholder text-muted\">Column Formula</div>\n )}\n </div>\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
var OptionType
|
|
1
|
+
var OptionType;
|
|
2
|
+
(function (OptionType) {
|
|
2
3
|
OptionType["ADVANCED_SETTINGS"] = "ADVANCED_SETTINGS";
|
|
3
4
|
OptionType["AGGREGATIONS"] = "AGGREGATIONS";
|
|
4
5
|
OptionType["AGGREGATION_EDIT"] = "AGGREGATIONS_EDIT";
|
|
@@ -13,7 +14,6 @@ var OptionType = /*#__PURE__*/function (OptionType) {
|
|
|
13
14
|
OptionType["CONDITIONAL_FORMATTING"] = "CONDITIONAL_FORMATTING";
|
|
14
15
|
OptionType["CONDITIONAL_FORMATTING_EDIT"] = "CONDITIONAL_FORMATTING_EDIT";
|
|
15
16
|
OptionType["GOTO"] = "GOTO";
|
|
16
|
-
|
|
17
|
-
}(OptionType || {});
|
|
17
|
+
})(OptionType || (OptionType = {}));
|
|
18
18
|
export default OptionType;
|
|
19
19
|
//# sourceMappingURL=OptionType.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OptionType.js","names":["OptionType"],"sources":["../../src/sidebar/OptionType.ts"],"sourcesContent":["enum OptionType {\n ADVANCED_SETTINGS = 'ADVANCED_SETTINGS',\n AGGREGATIONS = 'AGGREGATIONS',\n AGGREGATION_EDIT = 'AGGREGATIONS_EDIT',\n CHART_BUILDER = 'CHART_BUILDER',\n CUSTOM_COLUMN_BUILDER = 'CUSTOM_COLUMN_BUILDER',\n QUICK_FILTERS = 'QUICK_FILTERS',\n ROLLUP_ROWS = 'ROLLUP_ROWS',\n SEARCH_BAR = 'SEARCH_BAR',\n SELECT_DISTINCT = 'SELECT_DISTINCT',\n TABLE_EXPORTER = 'TABLE_EXPORTER',\n VISIBILITY_ORDERING_BUILDER = 'VISIBILITY_ORDERING_BUILDER',\n CONDITIONAL_FORMATTING = 'CONDITIONAL_FORMATTING',\n CONDITIONAL_FORMATTING_EDIT = 'CONDITIONAL_FORMATTING_EDIT',\n GOTO = 'GOTO',\n}\n\nexport default OptionType;\n"],"mappings":"IAAKA,UAAU,
|
|
1
|
+
{"version":3,"file":"OptionType.js","names":["OptionType"],"sources":["../../src/sidebar/OptionType.ts"],"sourcesContent":["enum OptionType {\n ADVANCED_SETTINGS = 'ADVANCED_SETTINGS',\n AGGREGATIONS = 'AGGREGATIONS',\n AGGREGATION_EDIT = 'AGGREGATIONS_EDIT',\n CHART_BUILDER = 'CHART_BUILDER',\n CUSTOM_COLUMN_BUILDER = 'CUSTOM_COLUMN_BUILDER',\n QUICK_FILTERS = 'QUICK_FILTERS',\n ROLLUP_ROWS = 'ROLLUP_ROWS',\n SEARCH_BAR = 'SEARCH_BAR',\n SELECT_DISTINCT = 'SELECT_DISTINCT',\n TABLE_EXPORTER = 'TABLE_EXPORTER',\n VISIBILITY_ORDERING_BUILDER = 'VISIBILITY_ORDERING_BUILDER',\n CONDITIONAL_FORMATTING = 'CONDITIONAL_FORMATTING',\n CONDITIONAL_FORMATTING_EDIT = 'CONDITIONAL_FORMATTING_EDIT',\n GOTO = 'GOTO',\n}\n\nexport default OptionType;\n"],"mappings":"IAAKA,UAAU;AAAA,WAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;AAAA,GAAVA,UAAU,KAAVA,UAAU;AAiBf,eAAeA,UAAU"}
|