@deephaven/iris-grid 0.50.1-beta.5 → 0.51.1-alpha-theme-fix.1
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.d.ts +2 -2
- package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.d.ts +4 -4
- package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts +4 -4
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js.map +1 -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.js +12 -0
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCellRendererUtils.js.map +1 -1
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridDataBarCellRenderer.js.map +1 -1
- package/dist/IrisGridIcons.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.d.ts +2 -3
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +138 -0
- 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.map +1 -1
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +9 -0
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTextCellRenderer.js.map +1 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.js +3 -0
- 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 +6 -1
- 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.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +5 -0
- 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/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/DownloadServiceWorkerUtils.js.map +1 -1
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/RollupRows.d.ts +4 -4
- package/dist/sidebar/RollupRows.d.ts.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 +5 -0
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.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.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.d.ts +4 -4
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts +7 -7
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts.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.d.ts +7 -5
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts.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.d.ts +5 -3
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts.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.d.ts +5 -5
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts.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":"IrisGridSortMouseHandler.js","names":["ContextActionUtils","GridMouseHandler","IrisGridSortMouseHandler","constructor","irisGrid","column","getColumnFromGridPoint","gridPoint","row","columnHeaderDepth","onDown","onClick","grid","event","addToExisting","isModifierKeyDown","toggleSort"],"sources":["../../src/mousehandlers/IrisGridSortMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { ContextActionUtils } from '@deephaven/components';\nimport {\n Grid,\n GridMouseEvent,\n GridMouseHandler,\n GridPoint,\n GridRangeIndex,\n EventHandlerResult,\n} from '@deephaven/grid';\nimport type { IrisGrid } from '../IrisGrid';\n\n/**\n * Used to handle sorting on column header clicks\n */\nclass IrisGridSortMouseHandler extends GridMouseHandler {\n constructor(irisGrid: IrisGrid) {\n super();\n\n this.column = null;\n this.irisGrid = irisGrid;\n }\n\n irisGrid: IrisGrid;\n\n column: GridRangeIndex;\n\n getColumnFromGridPoint(gridPoint: GridPoint): GridRangeIndex {\n const { column, row, columnHeaderDepth } = gridPoint;\n if (column !== null && row === null && columnHeaderDepth === 0) {\n return column;\n }\n\n return null;\n }\n\n // We need to remember where the down started, because the canvas element will trigger a click whereever mouseUp is\n onDown(gridPoint: GridPoint): EventHandlerResult {\n this.column = this.getColumnFromGridPoint(gridPoint);\n return false;\n }\n\n onClick(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n const column = this.getColumnFromGridPoint(gridPoint);\n if (column != null && column === this.column) {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.irisGrid.toggleSort(column, addToExisting);\n return true;\n }\n\n return false;\n }\n}\n\nexport default IrisGridSortMouseHandler;\n"],"mappings":";;;AAAA;AACA,SAASA,kBAAkB,QAAQ,uBAAuB;AAC1D,SAGEC,gBAAgB,QAIX,iBAAiB;AAGxB;AACA;AACA;AACA,MAAMC,wBAAwB,SAASD,gBAAgB,CAAC;EACtDE,
|
|
1
|
+
{"version":3,"file":"IrisGridSortMouseHandler.js","names":["ContextActionUtils","GridMouseHandler","IrisGridSortMouseHandler","constructor","irisGrid","_defineProperty","column","getColumnFromGridPoint","gridPoint","row","columnHeaderDepth","onDown","onClick","grid","event","addToExisting","isModifierKeyDown","toggleSort"],"sources":["../../src/mousehandlers/IrisGridSortMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { ContextActionUtils } from '@deephaven/components';\nimport {\n Grid,\n GridMouseEvent,\n GridMouseHandler,\n GridPoint,\n GridRangeIndex,\n EventHandlerResult,\n} from '@deephaven/grid';\nimport type { IrisGrid } from '../IrisGrid';\n\n/**\n * Used to handle sorting on column header clicks\n */\nclass IrisGridSortMouseHandler extends GridMouseHandler {\n constructor(irisGrid: IrisGrid) {\n super();\n\n this.column = null;\n this.irisGrid = irisGrid;\n }\n\n irisGrid: IrisGrid;\n\n column: GridRangeIndex;\n\n getColumnFromGridPoint(gridPoint: GridPoint): GridRangeIndex {\n const { column, row, columnHeaderDepth } = gridPoint;\n if (column !== null && row === null && columnHeaderDepth === 0) {\n return column;\n }\n\n return null;\n }\n\n // We need to remember where the down started, because the canvas element will trigger a click whereever mouseUp is\n onDown(gridPoint: GridPoint): EventHandlerResult {\n this.column = this.getColumnFromGridPoint(gridPoint);\n return false;\n }\n\n onClick(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n const column = this.getColumnFromGridPoint(gridPoint);\n if (column != null && column === this.column) {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.irisGrid.toggleSort(column, addToExisting);\n return true;\n }\n\n return false;\n }\n}\n\nexport default IrisGridSortMouseHandler;\n"],"mappings":";;;AAAA;AACA,SAASA,kBAAkB,QAAQ,uBAAuB;AAC1D,SAGEC,gBAAgB,QAIX,iBAAiB;AAGxB;AACA;AACA;AACA,MAAMC,wBAAwB,SAASD,gBAAgB,CAAC;EACtDE,WAAWA,CAACC,QAAkB,EAAE;IAC9B,KAAK,CAAC,CAAC;IAACC,eAAA;IAAAA,eAAA;IAER,IAAI,CAACC,MAAM,GAAG,IAAI;IAClB,IAAI,CAACF,QAAQ,GAAGA,QAAQ;EAC1B;EAMAG,sBAAsBA,CAACC,SAAoB,EAAkB;IAC3D,IAAM;MAAEF,MAAM;MAAEG,GAAG;MAAEC;IAAkB,CAAC,GAAGF,SAAS;IACpD,IAAIF,MAAM,KAAK,IAAI,IAAIG,GAAG,KAAK,IAAI,IAAIC,iBAAiB,KAAK,CAAC,EAAE;MAC9D,OAAOJ,MAAM;IACf;IAEA,OAAO,IAAI;EACb;;EAEA;EACAK,MAAMA,CAACH,SAAoB,EAAsB;IAC/C,IAAI,CAACF,MAAM,GAAG,IAAI,CAACC,sBAAsB,CAACC,SAAS,CAAC;IACpD,OAAO,KAAK;EACd;EAEAI,OAAOA,CACLJ,SAAoB,EACpBK,IAAU,EACVC,KAAqB,EACD;IACpB,IAAMR,MAAM,GAAG,IAAI,CAACC,sBAAsB,CAACC,SAAS,CAAC;IACrD,IAAIF,MAAM,IAAI,IAAI,IAAIA,MAAM,KAAK,IAAI,CAACA,MAAM,EAAE;MAC5C,IAAMS,aAAa,GAAGf,kBAAkB,CAACgB,iBAAiB,CAACF,KAAK,CAAC;MACjE,IAAI,CAACV,QAAQ,CAACa,UAAU,CAACX,MAAM,EAAES,aAAa,CAAC;MAC/C,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;AACF;AAEA,eAAeb,wBAAwB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridTokenMouseHandler.js","names":["getOrThrow","GridMouseHandler","GridUtils","isLinkToken","isTokenBoxCellRenderer","deepEqual","IrisGridTokenMouseHandler","constructor","irisGrid","destroyTooltip","setState","linkHoverTooltipProps","isHoveringLink","gridPoint","grid","column","row","x","y","renderer","metrics","props","model","currentLinkBox","undefined","modelRows","modelColumns","modelRow","modelColumn","renderType","renderTypeForCell","cellRenderer","getCellRenderer","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 getOrThrow,\n Grid,\n GridMouseHandler,\n GridPoint,\n GridUtils,\n isLinkToken,\n TokenBox,\n isTokenBoxCellRenderer,\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, props } = grid;\n const { model } = props;\n\n if (column == null || row == null || metrics == null) {\n this.currentLinkBox = undefined;\n return false;\n }\n\n const { modelRows, modelColumns } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n\n const renderType = model.renderTypeForCell(modelColumn, modelRow);\n const cellRenderer = renderer.getCellRenderer(renderType);\n if (!isTokenBoxCellRenderer(cellRenderer)) {\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 = cellRenderer.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":";;;AAAA,SAEEA,UAAU,EAEVC,gBAAgB,EAEhBC,SAAS,EACTC,WAAW,EAEXC,sBAAsB,QACjB,iBAAiB;AACxB,OAAOC,SAAS,MAAM,YAAY;AAGlC,MAAMC,yBAAyB,SAASL,gBAAgB,CAAC;EAGvD;;EAGAM,
|
|
1
|
+
{"version":3,"file":"IrisGridTokenMouseHandler.js","names":["getOrThrow","GridMouseHandler","GridUtils","isLinkToken","isTokenBoxCellRenderer","deepEqual","IrisGridTokenMouseHandler","constructor","irisGrid","_defineProperty","destroyTooltip","setState","linkHoverTooltipProps","isHoveringLink","gridPoint","grid","column","row","x","y","renderer","metrics","props","model","currentLinkBox","undefined","modelRows","modelColumns","modelRow","modelColumn","renderType","renderTypeForCell","cellRenderer","getCellRenderer","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 getOrThrow,\n Grid,\n GridMouseHandler,\n GridPoint,\n GridUtils,\n isLinkToken,\n TokenBox,\n isTokenBoxCellRenderer,\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, props } = grid;\n const { model } = props;\n\n if (column == null || row == null || metrics == null) {\n this.currentLinkBox = undefined;\n return false;\n }\n\n const { modelRows, modelColumns } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n\n const renderType = model.renderTypeForCell(modelColumn, modelRow);\n const cellRenderer = renderer.getCellRenderer(renderType);\n if (!isTokenBoxCellRenderer(cellRenderer)) {\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 = cellRenderer.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,6 +1,11 @@
|
|
|
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
|
+
|
|
4
9
|
class PendingMouseHandler extends GridMouseHandler {
|
|
5
10
|
constructor(irisGrid) {
|
|
6
11
|
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;;AAGhD;AACA;AACA;;AAKA,MAAMC,mBAAmB,SAASJ,gBAAgB,CAAC;EACjDK,WAAWA,CAACC,QAAkB,EAAE;IAC9B,KAAK,CAAC,CAAC;IAEP,IAAI,CAACA,QAAQ,GAAGA,QAAQ;EAC1B;EAEAC,OAAOA,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,CACpD,CAAC;AAEX,eAAe;EAAEJ;AAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
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;AAAA;AAY3B,SAASC,
|
|
1
|
+
{"version":3,"file":"AdvancedSettingsMenu.js","names":["React","Menu","AdvancedSettingsType","jsx","_jsx","AdvancedSettingsMenu","_ref","items","onChange","undefined","Array","from","entries","map","_ref2","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;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAY3B,SAASC,oBAAoBA,CAAAC,IAAA,EAGc;EAAA,IAHb;IAC5BC,KAAK;IACLC,QAAQ,EAARA,SAAQ,GAAGA,CAAA,KAAMC;EACQ,CAAC,GAAAH,IAAA;EAC1B,oBACEF,IAAA,CAACH,IAAI;IACHM,KAAK,EAAEG,KAAK,CAACC,IAAI,CAACJ,KAAK,CAACK,OAAO,CAAC,CAAC,CAAC,CAACC,GAAG,CACpCC,KAAA;MAAA,IAAC,CAACC,GAAG,EAAEC,IAAI,CAAC,GAAAF,KAAA;MAAA,OAAyB;QACnCG,KAAK,EAAEZ,oBAAoB,CAACa,8BAA8B,CAACH,GAAG,CAAC;QAC/DC,IAAI;QACJR,QAAQ,EAAGW,KAAc,IAAKX,SAAQ,CAACO,GAAG,EAAEI,KAAK;MACnD,CAAC;IAAA,CACH;EAAE,CACH,CAAC;AAEN;AAEAd,oBAAoB,CAACa,8BAA8B,GACjDH,GAAyB,IACd;EACX,QAAQA,GAAG;IACT,KAAKb,oBAAoB,CAACkB,wCAAwC;MAChE,OAAO,wEAAwE;IACjF,KAAKlB,oBAAoB,CAACmB,8BAA8B;MACtD,OAAO,sFAAsF;EACjG;AACF,CAAC;AAED,eAAehB,oBAAoB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilder.js","names":["React","PureComponent","classNames","FontAwesomeIcon","Button","RadioGroup","RadioItem","vsLink","dhUnlink","dhTable","dhNewCircleLargeFilled","vsCircleLargeFilled","vsTrash","Log","shortid","BarIcon","HistogramIcon","LineIcon","PieIcon","ScatterIcon","log","module","ChartBuilder","getMaxSeriesCount","dh","type","plot","SeriesPlotStyle","PIE","HISTOGRAM","makeSeriesItem","value","id","generate","makeDefaultSeriesItems","columns","maxSeriesCount","length","name","getDefaultXAxis","constructor","props","handleAddSeries","bind","handleLinkStateChange","handleReset","handleSeriesChange","handleSeriesDeleteClick","handleSubmit","handleTypeClick","handleXAxisChange","sendChange","model","getTypes","xAxis","seriesItems","state","isLinked","LINE","BAR","SCATTER","getTypeName","getTypeIcon","getXAxisLabel","getSeriesLabel","setState","newSeriesItems","push","event","target","index","getAttribute","intIndex","parseInt","changeEvent","splice","preventDefault","onSubmit","series","map","item","debug2","slice","onChange","render","xAxisLabel","seriesLabel","isSeriesVisible","isAddSeriesVisible","chartType","key","active","column","seriesItem","i"],"sources":["../../src/sidebar/ChartBuilder.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, RadioGroup, RadioItem } from '@deephaven/components';\nimport {\n vsLink,\n dhUnlink,\n dhTable,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsTrash,\n} from '@deephaven/icons';\nimport type {\n Column,\n dh as DhType,\n SeriesPlotStyle,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport shortid from 'shortid';\nimport {\n BarIcon,\n HistogramIcon,\n LineIcon,\n PieIcon,\n ScatterIcon,\n} from './icons';\nimport './ChartBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('ChartBuilder');\n\nexport type ChartBuilderSettings = {\n type: SeriesPlotStyle;\n series: string[];\n xAxis: string;\n isLinked: boolean;\n};\nexport type SeriesItem = {\n id: string;\n value: string;\n};\n\ninterface ChartBuilderProps {\n model: IrisGridModel;\n onSubmit: (obj: ChartBuilderSettings) => void;\n onChange: (obj: ChartBuilderSettings) => void;\n}\ninterface ChartBuilderState {\n /** The selected chart type */\n type: SeriesPlotStyle;\n\n /** Array of column names of the series to display */\n seriesItems: readonly SeriesItem[];\n\n /** The column name to use as the x-axis */\n xAxis: string;\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: boolean;\n}\n/**\n * Form for configuring all the settings when creating a console.\n */\nclass ChartBuilder extends PureComponent<ChartBuilderProps, ChartBuilderState> {\n static getMaxSeriesCount(dh: DhType, type: SeriesPlotStyle): number {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 1;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 0;\n default:\n return 100;\n }\n }\n\n static makeSeriesItem(value: string): SeriesItem {\n return { id: shortid.generate(), value };\n }\n\n static makeDefaultSeriesItems(\n dh: DhType,\n type: SeriesPlotStyle,\n columns: readonly Column[]\n ): SeriesItem[] {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n if (maxSeriesCount === 0 || columns == null || columns.length === 0) {\n return [];\n }\n\n const value = columns.length > 1 ? columns[1].name : columns[0].name;\n return [ChartBuilder.makeSeriesItem(value)];\n }\n\n static getDefaultXAxis(\n type: SeriesPlotStyle,\n columns: readonly Column[]\n ): string | null {\n if (columns != null && columns.length > 0) {\n return columns[0].name;\n }\n\n return null;\n }\n\n constructor(props: ChartBuilderProps) {\n super(props);\n\n this.handleAddSeries = this.handleAddSeries.bind(this);\n this.handleLinkStateChange = this.handleLinkStateChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSeriesChange = this.handleSeriesChange.bind(this);\n this.handleSeriesDeleteClick = this.handleSeriesDeleteClick.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleTypeClick = this.handleTypeClick.bind(this);\n this.handleXAxisChange = this.handleXAxisChange.bind(this);\n this.sendChange = this.sendChange.bind(this);\n\n const { model } = props;\n const { columns, dh } = model;\n\n const type = this.getTypes()[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n\n this.state = {\n /** The selected chart type */\n type,\n\n /** Array of column names of the series to display */\n seriesItems,\n\n /** The column name to use as the x-axis */\n xAxis,\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: true,\n };\n }\n\n getTypes(): SeriesPlotStyle[] {\n const { model } = this.props;\n const { dh } = model;\n return [\n dh.plot.SeriesPlotStyle.LINE,\n dh.plot.SeriesPlotStyle.BAR,\n dh.plot.SeriesPlotStyle.SCATTER,\n dh.plot.SeriesPlotStyle.PIE,\n // IDS-6808: Disable Histogram in Chart Builder until we pipe histogram creation through the API\n // dh.plot.SeriesPlotStyle.HISTOGRAM,\n ];\n }\n\n /**\n * Converts the provided chart type into a readable type.\n * Just replaces underscores with spaces and capitals the first letter of each word.\n */\n getTypeName(type: SeriesPlotStyle): string | SeriesPlotStyle {\n const { model } = this.props;\n const { dh } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return 'Line';\n case dh.plot.SeriesPlotStyle.BAR:\n return 'Bar';\n case dh.plot.SeriesPlotStyle.SCATTER:\n return 'Scatter';\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Pie';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Histogram';\n default:\n return type;\n }\n }\n\n getTypeIcon(type: SeriesPlotStyle): React.ReactElement | null {\n const { model } = this.props;\n const { dh } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return <LineIcon />;\n case dh.plot.SeriesPlotStyle.BAR:\n return <BarIcon />;\n case dh.plot.SeriesPlotStyle.SCATTER:\n return <ScatterIcon />;\n case dh.plot.SeriesPlotStyle.PIE:\n return <PieIcon />;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return <HistogramIcon />;\n default:\n return null;\n }\n }\n\n getXAxisLabel(type: SeriesPlotStyle): string {\n const { model } = this.props;\n const { dh } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Labels';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Data';\n default:\n return 'X-Axis';\n }\n }\n\n getSeriesLabel(type: SeriesPlotStyle): string {\n const { model } = this.props;\n const { dh } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Values';\n default:\n return 'Series';\n }\n }\n\n handleAddSeries(): void {\n this.setState(state => {\n const { seriesItems } = state;\n const newSeriesItems = [...seriesItems];\n\n const { model } = this.props;\n const { columns } = model;\n newSeriesItems.push({\n id: shortid.generate(),\n value: columns[0].name,\n });\n\n return { seriesItems: newSeriesItems };\n }, this.sendChange);\n }\n\n handleLinkStateChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ isLinked: event.target.value === 'true' }, this.sendChange);\n }\n\n handleReset(): void {\n const { model } = this.props;\n const { columns, dh } = model;\n\n const type = this.getTypes()[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n const isLinked = true;\n\n this.setState({ type, seriesItems, xAxis, isLinked }, this.sendChange);\n }\n\n handleSeriesChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n const index = event.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems[intIndex].value = value;\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSeriesDeleteClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent =\n event as unknown as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n const { seriesItems } = state;\n const newSeriesItems = [...seriesItems];\n\n newSeriesItems.splice(intIndex, 1);\n\n return { seriesItems: newSeriesItems };\n }, this.sendChange);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n event.preventDefault();\n\n const { onSubmit } = this.props;\n const { type, seriesItems, xAxis, isLinked } = this.state;\n const series = seriesItems.map(item => item.value);\n onSubmit({\n type,\n series,\n xAxis,\n isLinked,\n });\n }\n\n handleTypeClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent =\n event as unknown as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n const type = this.getTypes()[intIndex];\n\n log.debug2('handleTypeSelect', type);\n\n this.setState(state => {\n const { model } = this.props;\n const { dh } = model;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n let { seriesItems } = state;\n seriesItems = seriesItems.slice(0, maxSeriesCount);\n if (seriesItems.length === 0 && maxSeriesCount > 0) {\n const { columns } = model;\n seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n }\n\n return { type, seriesItems };\n }, this.sendChange);\n }\n\n handleXAxisChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const xAxis = event.target.value;\n log.debug2('x-axis change', xAxis);\n\n this.setState({ xAxis }, this.sendChange);\n }\n\n sendChange(): void {\n const { onChange } = this.props;\n const { isLinked, type, seriesItems, xAxis } = this.state;\n const series = seriesItems.map(item => item.value);\n\n onChange({ type, series, xAxis, isLinked });\n }\n\n render(): JSX.Element {\n const { model } = this.props;\n const { columns, dh } = model;\n const { seriesItems, type, xAxis, isLinked } = this.state;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n const xAxisLabel = this.getXAxisLabel(type);\n const seriesLabel = this.getSeriesLabel(type);\n const isSeriesVisible = seriesItems.length > 0;\n const isAddSeriesVisible = seriesItems.length < maxSeriesCount;\n\n return (\n <div className=\"chart-builder\">\n <form onSubmit={this.handleSubmit}>\n <div className=\"form-row\">\n <label>Select Chart Type</label>\n <div className=\"form-row\">\n {this.getTypes().map((chartType, index) => {\n const key = chartType as unknown as React.Key;\n return (\n <div key={key} className=\"col col-chart-type\">\n <button\n type=\"button\"\n className={classNames(\n 'btn',\n 'btn-icon',\n 'btn-chart-type',\n {\n active: chartType === type,\n }\n )}\n data-index={index}\n onClick={this.handleTypeClick}\n >\n {this.getTypeIcon(chartType)}\n {this.getTypeName(chartType)}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n <hr />\n <div className=\"form-row form-inline\">\n <label className=\"col-2 label-left\">{xAxisLabel}</label>\n <select\n className=\"form-control custom-select select-x-axis col\"\n value={xAxis}\n onChange={this.handleXAxisChange}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name}>\n {column.name}\n </option>\n ))}\n </select>\n </div>\n {isSeriesVisible && <hr />}\n {seriesItems.map((seriesItem, i) => (\n <div\n className=\"form-row form-inline form-series-item\"\n key={seriesItem.id}\n data-testid={`form-series-item-${i}`}\n >\n <label className=\"col-2 label-left\">\n {i === 0 ? seriesLabel : ''}\n </label>\n <select\n className=\"form-control custom-select select-series col\"\n value={seriesItem.value}\n onChange={this.handleSeriesChange}\n data-testid={`select-series-item-${i}`}\n data-index={i}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name} data-index={i}>\n {column.name}\n </option>\n ))}\n </select>\n {seriesItems.length > 1 && (\n <Button\n kind=\"ghost\"\n className=\"btn-delete-series ml-2 px-2\"\n data-index={i}\n data-testid={`delete-series-${i}`}\n onClick={this.handleSeriesDeleteClick}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n )}\n </div>\n ))}\n {isAddSeriesVisible && (\n <div className=\"form-row\">\n <div className=\"col-2\" />\n <Button\n kind=\"ghost\"\n className=\"btn-add-series mt-1\"\n onClick={this.handleAddSeries}\n icon={dhNewCircleLargeFilled}\n >\n Add Series\n </Button>\n </div>\n )}\n <div className=\"form-row chart-builder-link\">\n <label className=\"col-2 label-right\">\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={dhTable}\n icon={vsCircleLargeFilled}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon\n icon={isLinked ? vsLink : dhUnlink}\n transform=\"grow-2 right-8 down-6\"\n />\n </div>\n </label>\n <RadioGroup\n onChange={this.handleLinkStateChange}\n value={`${isLinked}`}\n >\n <RadioItem value=\"true\">Sync State</RadioItem>\n <RadioItem value=\"false\">Freeze State</RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-row\">\n <div className=\"col-2 label-right\" />\n <div className=\"col chart-builder-link-info\">\n {isLinked\n ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.'\n : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.'}\n </div>\n </div>\n <div\n className={classNames('form-row', 'justify-content-end', 'my-3')}\n >\n <Button\n kind=\"secondary\"\n className=\"btn-reset\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n <Button kind=\"primary\" type=\"submit\" className=\"btn-submit\">\n Create\n </Button>\n </div>\n </form>\n </div>\n );\n }\n}\n\nexport default ChartBuilder;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChartBuilder.js","names":["React","PureComponent","classNames","FontAwesomeIcon","Button","RadioGroup","RadioItem","vsLink","dhUnlink","dhTable","dhNewCircleLargeFilled","vsCircleLargeFilled","vsTrash","Log","shortid","BarIcon","HistogramIcon","LineIcon","PieIcon","ScatterIcon","jsx","_jsx","jsxs","_jsxs","log","module","ChartBuilder","getMaxSeriesCount","dh","type","plot","SeriesPlotStyle","PIE","HISTOGRAM","makeSeriesItem","value","id","generate","makeDefaultSeriesItems","columns","maxSeriesCount","length","name","getDefaultXAxis","constructor","props","handleAddSeries","bind","handleLinkStateChange","handleReset","handleSeriesChange","handleSeriesDeleteClick","handleSubmit","handleTypeClick","handleXAxisChange","sendChange","model","getTypes","xAxis","seriesItems","state","isLinked","LINE","BAR","SCATTER","getTypeName","getTypeIcon","getXAxisLabel","getSeriesLabel","setState","newSeriesItems","push","event","target","index","getAttribute","intIndex","parseInt","changeEvent","splice","preventDefault","onSubmit","series","map","item","debug2","slice","onChange","render","xAxisLabel","seriesLabel","isSeriesVisible","isAddSeriesVisible","className","children","chartType","key","active","onClick","column","seriesItem","i","concat","kind","icon","tooltip","mask","transform"],"sources":["../../src/sidebar/ChartBuilder.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, RadioGroup, RadioItem } from '@deephaven/components';\nimport {\n vsLink,\n dhUnlink,\n dhTable,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsTrash,\n} from '@deephaven/icons';\nimport type {\n Column,\n dh as DhType,\n SeriesPlotStyle,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport shortid from 'shortid';\nimport {\n BarIcon,\n HistogramIcon,\n LineIcon,\n PieIcon,\n ScatterIcon,\n} from './icons';\nimport './ChartBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('ChartBuilder');\n\nexport type ChartBuilderSettings = {\n type: SeriesPlotStyle;\n series: string[];\n xAxis: string;\n isLinked: boolean;\n};\nexport type SeriesItem = {\n id: string;\n value: string;\n};\n\ninterface ChartBuilderProps {\n model: IrisGridModel;\n onSubmit: (obj: ChartBuilderSettings) => void;\n onChange: (obj: ChartBuilderSettings) => void;\n}\ninterface ChartBuilderState {\n /** The selected chart type */\n type: SeriesPlotStyle;\n\n /** Array of column names of the series to display */\n seriesItems: readonly SeriesItem[];\n\n /** The column name to use as the x-axis */\n xAxis: string;\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: boolean;\n}\n/**\n * Form for configuring all the settings when creating a console.\n */\nclass ChartBuilder extends PureComponent<ChartBuilderProps, ChartBuilderState> {\n static getMaxSeriesCount(dh: DhType, type: SeriesPlotStyle): number {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 1;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 0;\n default:\n return 100;\n }\n }\n\n static makeSeriesItem(value: string): SeriesItem {\n return { id: shortid.generate(), value };\n }\n\n static makeDefaultSeriesItems(\n dh: DhType,\n type: SeriesPlotStyle,\n columns: readonly Column[]\n ): SeriesItem[] {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n if (maxSeriesCount === 0 || columns == null || columns.length === 0) {\n return [];\n }\n\n const value = columns.length > 1 ? columns[1].name : columns[0].name;\n return [ChartBuilder.makeSeriesItem(value)];\n }\n\n static getDefaultXAxis(\n type: SeriesPlotStyle,\n columns: readonly Column[]\n ): string | null {\n if (columns != null && columns.length > 0) {\n return columns[0].name;\n }\n\n return null;\n }\n\n constructor(props: ChartBuilderProps) {\n super(props);\n\n this.handleAddSeries = this.handleAddSeries.bind(this);\n this.handleLinkStateChange = this.handleLinkStateChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSeriesChange = this.handleSeriesChange.bind(this);\n this.handleSeriesDeleteClick = this.handleSeriesDeleteClick.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleTypeClick = this.handleTypeClick.bind(this);\n this.handleXAxisChange = this.handleXAxisChange.bind(this);\n this.sendChange = this.sendChange.bind(this);\n\n const { model } = props;\n const { columns, dh } = model;\n\n const type = this.getTypes()[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n\n this.state = {\n /** The selected chart type */\n type,\n\n /** Array of column names of the series to display */\n seriesItems,\n\n /** The column name to use as the x-axis */\n xAxis,\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: true,\n };\n }\n\n getTypes(): SeriesPlotStyle[] {\n const { model } = this.props;\n const { dh } = model;\n return [\n dh.plot.SeriesPlotStyle.LINE,\n dh.plot.SeriesPlotStyle.BAR,\n dh.plot.SeriesPlotStyle.SCATTER,\n dh.plot.SeriesPlotStyle.PIE,\n // IDS-6808: Disable Histogram in Chart Builder until we pipe histogram creation through the API\n // dh.plot.SeriesPlotStyle.HISTOGRAM,\n ];\n }\n\n /**\n * Converts the provided chart type into a readable type.\n * Just replaces underscores with spaces and capitals the first letter of each word.\n */\n getTypeName(type: SeriesPlotStyle): string | SeriesPlotStyle {\n const { model } = this.props;\n const { dh } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return 'Line';\n case dh.plot.SeriesPlotStyle.BAR:\n return 'Bar';\n case dh.plot.SeriesPlotStyle.SCATTER:\n return 'Scatter';\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Pie';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Histogram';\n default:\n return type;\n }\n }\n\n getTypeIcon(type: SeriesPlotStyle): React.ReactElement | null {\n const { model } = this.props;\n const { dh } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return <LineIcon />;\n case dh.plot.SeriesPlotStyle.BAR:\n return <BarIcon />;\n case dh.plot.SeriesPlotStyle.SCATTER:\n return <ScatterIcon />;\n case dh.plot.SeriesPlotStyle.PIE:\n return <PieIcon />;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return <HistogramIcon />;\n default:\n return null;\n }\n }\n\n getXAxisLabel(type: SeriesPlotStyle): string {\n const { model } = this.props;\n const { dh } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Labels';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Data';\n default:\n return 'X-Axis';\n }\n }\n\n getSeriesLabel(type: SeriesPlotStyle): string {\n const { model } = this.props;\n const { dh } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Values';\n default:\n return 'Series';\n }\n }\n\n handleAddSeries(): void {\n this.setState(state => {\n const { seriesItems } = state;\n const newSeriesItems = [...seriesItems];\n\n const { model } = this.props;\n const { columns } = model;\n newSeriesItems.push({\n id: shortid.generate(),\n value: columns[0].name,\n });\n\n return { seriesItems: newSeriesItems };\n }, this.sendChange);\n }\n\n handleLinkStateChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ isLinked: event.target.value === 'true' }, this.sendChange);\n }\n\n handleReset(): void {\n const { model } = this.props;\n const { columns, dh } = model;\n\n const type = this.getTypes()[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n const isLinked = true;\n\n this.setState({ type, seriesItems, xAxis, isLinked }, this.sendChange);\n }\n\n handleSeriesChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n const index = event.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems[intIndex].value = value;\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSeriesDeleteClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent =\n event as unknown as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n const { seriesItems } = state;\n const newSeriesItems = [...seriesItems];\n\n newSeriesItems.splice(intIndex, 1);\n\n return { seriesItems: newSeriesItems };\n }, this.sendChange);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n event.preventDefault();\n\n const { onSubmit } = this.props;\n const { type, seriesItems, xAxis, isLinked } = this.state;\n const series = seriesItems.map(item => item.value);\n onSubmit({\n type,\n series,\n xAxis,\n isLinked,\n });\n }\n\n handleTypeClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent =\n event as unknown as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n const type = this.getTypes()[intIndex];\n\n log.debug2('handleTypeSelect', type);\n\n this.setState(state => {\n const { model } = this.props;\n const { dh } = model;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n let { seriesItems } = state;\n seriesItems = seriesItems.slice(0, maxSeriesCount);\n if (seriesItems.length === 0 && maxSeriesCount > 0) {\n const { columns } = model;\n seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n }\n\n return { type, seriesItems };\n }, this.sendChange);\n }\n\n handleXAxisChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const xAxis = event.target.value;\n log.debug2('x-axis change', xAxis);\n\n this.setState({ xAxis }, this.sendChange);\n }\n\n sendChange(): void {\n const { onChange } = this.props;\n const { isLinked, type, seriesItems, xAxis } = this.state;\n const series = seriesItems.map(item => item.value);\n\n onChange({ type, series, xAxis, isLinked });\n }\n\n render(): JSX.Element {\n const { model } = this.props;\n const { columns, dh } = model;\n const { seriesItems, type, xAxis, isLinked } = this.state;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n const xAxisLabel = this.getXAxisLabel(type);\n const seriesLabel = this.getSeriesLabel(type);\n const isSeriesVisible = seriesItems.length > 0;\n const isAddSeriesVisible = seriesItems.length < maxSeriesCount;\n\n return (\n <div className=\"chart-builder\">\n <form onSubmit={this.handleSubmit}>\n <div className=\"form-row\">\n <label>Select Chart Type</label>\n <div className=\"form-row\">\n {this.getTypes().map((chartType, index) => {\n const key = chartType as unknown as React.Key;\n return (\n <div key={key} className=\"col col-chart-type\">\n <button\n type=\"button\"\n className={classNames(\n 'btn',\n 'btn-icon',\n 'btn-chart-type',\n {\n active: chartType === type,\n }\n )}\n data-index={index}\n onClick={this.handleTypeClick}\n >\n {this.getTypeIcon(chartType)}\n {this.getTypeName(chartType)}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n <hr />\n <div className=\"form-row form-inline\">\n <label className=\"col-2 label-left\">{xAxisLabel}</label>\n <select\n className=\"form-control custom-select select-x-axis col\"\n value={xAxis}\n onChange={this.handleXAxisChange}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name}>\n {column.name}\n </option>\n ))}\n </select>\n </div>\n {isSeriesVisible && <hr />}\n {seriesItems.map((seriesItem, i) => (\n <div\n className=\"form-row form-inline form-series-item\"\n key={seriesItem.id}\n data-testid={`form-series-item-${i}`}\n >\n <label className=\"col-2 label-left\">\n {i === 0 ? seriesLabel : ''}\n </label>\n <select\n className=\"form-control custom-select select-series col\"\n value={seriesItem.value}\n onChange={this.handleSeriesChange}\n data-testid={`select-series-item-${i}`}\n data-index={i}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name} data-index={i}>\n {column.name}\n </option>\n ))}\n </select>\n {seriesItems.length > 1 && (\n <Button\n kind=\"ghost\"\n className=\"btn-delete-series ml-2 px-2\"\n data-index={i}\n data-testid={`delete-series-${i}`}\n onClick={this.handleSeriesDeleteClick}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n )}\n </div>\n ))}\n {isAddSeriesVisible && (\n <div className=\"form-row\">\n <div className=\"col-2\" />\n <Button\n kind=\"ghost\"\n className=\"btn-add-series mt-1\"\n onClick={this.handleAddSeries}\n icon={dhNewCircleLargeFilled}\n >\n Add Series\n </Button>\n </div>\n )}\n <div className=\"form-row chart-builder-link\">\n <label className=\"col-2 label-right\">\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={dhTable}\n icon={vsCircleLargeFilled}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon\n icon={isLinked ? vsLink : dhUnlink}\n transform=\"grow-2 right-8 down-6\"\n />\n </div>\n </label>\n <RadioGroup\n onChange={this.handleLinkStateChange}\n value={`${isLinked}`}\n >\n <RadioItem value=\"true\">Sync State</RadioItem>\n <RadioItem value=\"false\">Freeze State</RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-row\">\n <div className=\"col-2 label-right\" />\n <div className=\"col chart-builder-link-info\">\n {isLinked\n ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.'\n : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.'}\n </div>\n </div>\n <div\n className={classNames('form-row', 'justify-content-end', 'my-3')}\n >\n <Button\n kind=\"secondary\"\n className=\"btn-reset\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n <Button kind=\"primary\" type=\"submit\" className=\"btn-submit\">\n Create\n </Button>\n </div>\n </form>\n </div>\n );\n }\n}\n\nexport default ChartBuilder;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAQ,OAAO;AAC5C,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,EAAEC,UAAU,EAAEC,SAAS,QAAQ,uBAAuB;AACrE,SACEC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,sBAAsB,EACtBC,mBAAmB,EACnBC,OAAO,QACF,kBAAkB;AAMzB,OAAOC,GAAG,MAAM,gBAAgB;AAChC,OAAOC,OAAO,MAAM,SAAS;AAAC,SAE5BC,OAAO,EACPC,aAAa,EACbC,QAAQ,EACRC,OAAO,EACPC,WAAW;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAKb,IAAMC,GAAG,GAAGX,GAAG,CAACY,MAAM,CAAC,cAAc,CAAC;AA+BtC;AACA;AACA;AACA,MAAMC,YAAY,SAASzB,aAAa,CAAuC;EAC7E,OAAO0B,iBAAiBA,CAACC,EAAU,EAAEC,IAAqB,EAAU;IAClE,QAAQA,IAAI;MACV,KAAKD,EAAE,CAACE,IAAI,CAACC,eAAe,CAACC,GAAG;QAC9B,OAAO,CAAC;MACV,KAAKJ,EAAE,CAACE,IAAI,CAACC,eAAe,CAACE,SAAS;QACpC,OAAO,CAAC;MACV;QACE,OAAO,GAAG;IACd;EACF;EAEA,OAAOC,cAAcA,CAACC,KAAa,EAAc;IAC/C,OAAO;MAAEC,EAAE,EAAEtB,OAAO,CAACuB,QAAQ,CAAC,CAAC;MAAEF;IAAM,CAAC;EAC1C;EAEA,OAAOG,sBAAsBA,CAC3BV,EAAU,EACVC,IAAqB,EACrBU,OAA0B,EACZ;IACd,IAAMC,cAAc,GAAGd,YAAY,CAACC,iBAAiB,CAACC,EAAE,EAAEC,IAAI,CAAC;IAC/D,IAAIW,cAAc,KAAK,CAAC,IAAID,OAAO,IAAI,IAAI,IAAIA,OAAO,CAACE,MAAM,KAAK,CAAC,EAAE;MACnE,OAAO,EAAE;IACX;IAEA,IAAMN,KAAK,GAAGI,OAAO,CAACE,MAAM,GAAG,CAAC,GAAGF,OAAO,CAAC,CAAC,CAAC,CAACG,IAAI,GAAGH,OAAO,CAAC,CAAC,CAAC,CAACG,IAAI;IACpE,OAAO,CAAChB,YAAY,CAACQ,cAAc,CAACC,KAAK,CAAC,CAAC;EAC7C;EAEA,OAAOQ,eAAeA,CACpBd,IAAqB,EACrBU,OAA0B,EACX;IACf,IAAIA,OAAO,IAAI,IAAI,IAAIA,OAAO,CAACE,MAAM,GAAG,CAAC,EAAE;MACzC,OAAOF,OAAO,CAAC,CAAC,CAAC,CAACG,IAAI;IACxB;IAEA,OAAO,IAAI;EACb;EAEAE,WAAWA,CAACC,KAAwB,EAAE;IACpC,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,eAAe,GAAG,IAAI,CAACA,eAAe,CAACC,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACC,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACD,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACE,WAAW,GAAG,IAAI,CAACA,WAAW,CAACF,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACG,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACH,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACI,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACJ,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACK,YAAY,GAAG,IAAI,CAACA,YAAY,CAACL,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACM,eAAe,GAAG,IAAI,CAACA,eAAe,CAACN,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACO,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACP,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACQ,UAAU,GAAG,IAAI,CAACA,UAAU,CAACR,IAAI,CAAC,IAAI,CAAC;IAE5C,IAAM;MAAES;IAAM,CAAC,GAAGX,KAAK;IACvB,IAAM;MAAEN,OAAO;MAAEX;IAAG,CAAC,GAAG4B,KAAK;IAE7B,IAAM3B,IAAI,GAAG,IAAI,CAAC4B,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAMC,KAAK,GAAGhC,YAAY,CAACiB,eAAe,CAACd,IAAI,EAAEU,OAAO,CAAW;IACnE,IAAMoB,WAAW,GAAGjC,YAAY,CAACY,sBAAsB,CAACV,EAAE,EAAEC,IAAI,EAAEU,OAAO,CAAC;IAE1E,IAAI,CAACqB,KAAK,GAAG;MACX;MACA/B,IAAI;MAEJ;MACA8B,WAAW;MAEX;MACAD,KAAK;MAEL;MACAG,QAAQ,EAAE;IACZ,CAAC;EACH;EAEAJ,QAAQA,CAAA,EAAsB;IAC5B,IAAM;MAAED;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEjB;IAAG,CAAC,GAAG4B,KAAK;IACpB,OAAO,CACL5B,EAAE,CAACE,IAAI,CAACC,eAAe,CAAC+B,IAAI,EAC5BlC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACgC,GAAG,EAC3BnC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACiC,OAAO,EAC/BpC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACC;IACxB;IACA;IAAA,CACD;EACH;;EAEA;AACF;AACA;AACA;EACEiC,WAAWA,CAACpC,IAAqB,EAA4B;IAC3D,IAAM;MAAE2B;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEjB;IAAG,CAAC,GAAG4B,KAAK;IACpB,QAAQ3B,IAAI;MACV,KAAKD,EAAE,CAACE,IAAI,CAACC,eAAe,CAAC+B,IAAI;QAC/B,OAAO,MAAM;MACf,KAAKlC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACgC,GAAG;QAC9B,OAAO,KAAK;MACd,KAAKnC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACiC,OAAO;QAClC,OAAO,SAAS;MAClB,KAAKpC,EAAE,CAACE,IAAI,CAACC,eAAe,CAACC,GAAG;QAC9B,OAAO,KAAK;MACd,KAAKJ,EAAE,CAACE,IAAI,CAACC,eAAe,CAACE,SAAS;QACpC,OAAO,WAAW;MACpB;QACE,OAAOJ,IAAI;IACf;EACF;EAEAqC,WAAWA,CAACrC,IAAqB,EAA6B;IAC5D,IAAM;MAAE2B;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEjB;IAAG,CAAC,GAAG4B,KAAK;IACpB,QAAQ3B,IAAI;MACV,KAAKD,EAAE,CAACE,IAAI,CAACC,eAAe,CAAC+B,IAAI;QAC/B,oBAAOzC,IAAA,CAACJ,QAAQ,IAAE,CAAC;MACrB,KAAKW,EAAE,CAACE,IAAI,CAACC,eAAe,CAACgC,GAAG;QAC9B,oBAAO1C,IAAA,CAACN,OAAO,IAAE,CAAC;MACpB,KAAKa,EAAE,CAACE,IAAI,CAACC,eAAe,CAACiC,OAAO;QAClC,oBAAO3C,IAAA,CAACF,WAAW,IAAE,CAAC;MACxB,KAAKS,EAAE,CAACE,IAAI,CAACC,eAAe,CAACC,GAAG;QAC9B,oBAAOX,IAAA,CAACH,OAAO,IAAE,CAAC;MACpB,KAAKU,EAAE,CAACE,IAAI,CAACC,eAAe,CAACE,SAAS;QACpC,oBAAOZ,IAAA,CAACL,aAAa,IAAE,CAAC;MAC1B;QACE,OAAO,IAAI;IACf;EACF;EAEAmD,aAAaA,CAACtC,IAAqB,EAAU;IAC3C,IAAM;MAAE2B;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEjB;IAAG,CAAC,GAAG4B,KAAK;IACpB,QAAQ3B,IAAI;MACV,KAAKD,EAAE,CAACE,IAAI,CAACC,eAAe,CAACC,GAAG;QAC9B,OAAO,QAAQ;MACjB,KAAKJ,EAAE,CAACE,IAAI,CAACC,eAAe,CAACE,SAAS;QACpC,OAAO,MAAM;MACf;QACE,OAAO,QAAQ;IACnB;EACF;EAEAmC,cAAcA,CAACvC,IAAqB,EAAU;IAC5C,IAAM;MAAE2B;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEjB;IAAG,CAAC,GAAG4B,KAAK;IACpB,QAAQ3B,IAAI;MACV,KAAKD,EAAE,CAACE,IAAI,CAACC,eAAe,CAACC,GAAG;QAC9B,OAAO,QAAQ;MACjB;QACE,OAAO,QAAQ;IACnB;EACF;EAEAc,eAAeA,CAAA,EAAS;IACtB,IAAI,CAACuB,QAAQ,CAACT,KAAK,IAAI;MACrB,IAAM;QAAED;MAAY,CAAC,GAAGC,KAAK;MAC7B,IAAMU,cAAc,GAAG,CAAC,GAAGX,WAAW,CAAC;MAEvC,IAAM;QAAEH;MAAM,CAAC,GAAG,IAAI,CAACX,KAAK;MAC5B,IAAM;QAAEN;MAAQ,CAAC,GAAGiB,KAAK;MACzBc,cAAc,CAACC,IAAI,CAAC;QAClBnC,EAAE,EAAEtB,OAAO,CAACuB,QAAQ,CAAC,CAAC;QACtBF,KAAK,EAAEI,OAAO,CAAC,CAAC,CAAC,CAACG;MACpB,CAAC,CAAC;MAEF,OAAO;QAAEiB,WAAW,EAAEW;MAAe,CAAC;IACxC,CAAC,EAAE,IAAI,CAACf,UAAU,CAAC;EACrB;EAEAP,qBAAqBA,CAACwB,KAA0C,EAAQ;IACtE,IAAI,CAACH,QAAQ,CAAC;MAAER,QAAQ,EAAEW,KAAK,CAACC,MAAM,CAACtC,KAAK,KAAK;IAAO,CAAC,EAAE,IAAI,CAACoB,UAAU,CAAC;EAC7E;EAEAN,WAAWA,CAAA,EAAS;IAClB,IAAM;MAAEO;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEN,OAAO;MAAEX;IAAG,CAAC,GAAG4B,KAAK;IAE7B,IAAM3B,IAAI,GAAG,IAAI,CAAC4B,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAMC,KAAK,GAAGhC,YAAY,CAACiB,eAAe,CAACd,IAAI,EAAEU,OAAO,CAAW;IACnE,IAAMoB,WAAW,GAAGjC,YAAY,CAACY,sBAAsB,CAACV,EAAE,EAAEC,IAAI,EAAEU,OAAO,CAAC;IAC1E,IAAMsB,QAAQ,GAAG,IAAI;IAErB,IAAI,CAACQ,QAAQ,CAAC;MAAExC,IAAI;MAAE8B,WAAW;MAAED,KAAK;MAAEG;IAAS,CAAC,EAAE,IAAI,CAACN,UAAU,CAAC;EACxE;EAEAL,kBAAkBA,CAACsB,KAA2C,EAAQ;IACpE,IAAM;MAAErC;IAAM,CAAC,GAAGqC,KAAK,CAACC,MAAM;IAC9B,IAAMC,KAAK,GAAGF,KAAK,CAACC,MAAM,CAACE,YAAY,CAAC,YAAY,CAAW;IAC/D,IAAMC,QAAQ,GAAGC,QAAQ,CAACH,KAAK,EAAE,EAAE,CAAC;IAEpC,IAAI,CAACL,QAAQ,CAACT,KAAK,IAAI;MACrB,IAAI;QAAED;MAAY,CAAC,GAAGC,KAAK;MAE3BD,WAAW,GAAG,CAAC,GAAGA,WAAW,CAAC;MAC9BA,WAAW,CAACiB,QAAQ,CAAC,CAACzC,KAAK,GAAGA,KAAK;MAEnC,OAAO;QAAEwB;MAAY,CAAC;IACxB,CAAC,EAAE,IAAI,CAACJ,UAAU,CAAC;EACrB;EAEAJ,uBAAuBA,CAACqB,KAA0C,EAAQ;IACxE,IAAMM,WAAW,GACfN,KAAwD;IAC1D,IAAME,KAAK,GAAGI,WAAW,CAACL,MAAM,CAACE,YAAY,CAAC,YAAY,CAAW;IACrE,IAAMC,QAAQ,GAAGC,QAAQ,CAACH,KAAK,EAAE,EAAE,CAAC;IAEpC,IAAI,CAACL,QAAQ,CAACT,KAAK,IAAI;MACrB,IAAM;QAAED;MAAY,CAAC,GAAGC,KAAK;MAC7B,IAAMU,cAAc,GAAG,CAAC,GAAGX,WAAW,CAAC;MAEvCW,cAAc,CAACS,MAAM,CAACH,QAAQ,EAAE,CAAC,CAAC;MAElC,OAAO;QAAEjB,WAAW,EAAEW;MAAe,CAAC;IACxC,CAAC,EAAE,IAAI,CAACf,UAAU,CAAC;EACrB;EAEAH,YAAYA,CAACoB,KAAuC,EAAQ;IAC1DA,KAAK,CAACQ,cAAc,CAAC,CAAC;IAEtB,IAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACpC,KAAK;IAC/B,IAAM;MAAEhB,IAAI;MAAE8B,WAAW;MAAED,KAAK;MAAEG;IAAS,CAAC,GAAG,IAAI,CAACD,KAAK;IACzD,IAAMsB,MAAM,GAAGvB,WAAW,CAACwB,GAAG,CAACC,IAAI,IAAIA,IAAI,CAACjD,KAAK,CAAC;IAClD8C,QAAQ,CAAC;MACPpD,IAAI;MACJqD,MAAM;MACNxB,KAAK;MACLG;IACF,CAAC,CAAC;EACJ;EAEAR,eAAeA,CAACmB,KAA0C,EAAQ;IAChE,IAAMM,WAAW,GACfN,KAAwD;IAC1D,IAAME,KAAK,GAAGI,WAAW,CAACL,MAAM,CAACE,YAAY,CAAC,YAAY,CAAW;IACrE,IAAMC,QAAQ,GAAGC,QAAQ,CAACH,KAAK,EAAE,EAAE,CAAC;IAEpC,IAAM7C,IAAI,GAAG,IAAI,CAAC4B,QAAQ,CAAC,CAAC,CAACmB,QAAQ,CAAC;IAEtCpD,GAAG,CAAC6D,MAAM,CAAC,kBAAkB,EAAExD,IAAI,CAAC;IAEpC,IAAI,CAACwC,QAAQ,CAACT,KAAK,IAAI;MACrB,IAAM;QAAEJ;MAAM,CAAC,GAAG,IAAI,CAACX,KAAK;MAC5B,IAAM;QAAEjB;MAAG,CAAC,GAAG4B,KAAK;MACpB,IAAMhB,cAAc,GAAGd,YAAY,CAACC,iBAAiB,CAACC,EAAE,EAAEC,IAAI,CAAC;MAC/D,IAAI;QAAE8B;MAAY,CAAC,GAAGC,KAAK;MAC3BD,WAAW,GAAGA,WAAW,CAAC2B,KAAK,CAAC,CAAC,EAAE9C,cAAc,CAAC;MAClD,IAAImB,WAAW,CAAClB,MAAM,KAAK,CAAC,IAAID,cAAc,GAAG,CAAC,EAAE;QAClD,IAAM;UAAED;QAAQ,CAAC,GAAGiB,KAAK;QACzBG,WAAW,GAAGjC,YAAY,CAACY,sBAAsB,CAACV,EAAE,EAAEC,IAAI,EAAEU,OAAO,CAAC;MACtE;MAEA,OAAO;QAAEV,IAAI;QAAE8B;MAAY,CAAC;IAC9B,CAAC,EAAE,IAAI,CAACJ,UAAU,CAAC;EACrB;EAEAD,iBAAiBA,CAACkB,KAA2C,EAAQ;IACnE,IAAMd,KAAK,GAAGc,KAAK,CAACC,MAAM,CAACtC,KAAK;IAChCX,GAAG,CAAC6D,MAAM,CAAC,eAAe,EAAE3B,KAAK,CAAC;IAElC,IAAI,CAACW,QAAQ,CAAC;MAAEX;IAAM,CAAC,EAAE,IAAI,CAACH,UAAU,CAAC;EAC3C;EAEAA,UAAUA,CAAA,EAAS;IACjB,IAAM;MAAEgC;IAAS,CAAC,GAAG,IAAI,CAAC1C,KAAK;IAC/B,IAAM;MAAEgB,QAAQ;MAAEhC,IAAI;MAAE8B,WAAW;MAAED;IAAM,CAAC,GAAG,IAAI,CAACE,KAAK;IACzD,IAAMsB,MAAM,GAAGvB,WAAW,CAACwB,GAAG,CAACC,IAAI,IAAIA,IAAI,CAACjD,KAAK,CAAC;IAElDoD,QAAQ,CAAC;MAAE1D,IAAI;MAAEqD,MAAM;MAAExB,KAAK;MAAEG;IAAS,CAAC,CAAC;EAC7C;EAEA2B,MAAMA,CAAA,EAAgB;IACpB,IAAM;MAAEhC;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEN,OAAO;MAAEX;IAAG,CAAC,GAAG4B,KAAK;IAC7B,IAAM;MAAEG,WAAW;MAAE9B,IAAI;MAAE6B,KAAK;MAAEG;IAAS,CAAC,GAAG,IAAI,CAACD,KAAK;IACzD,IAAMpB,cAAc,GAAGd,YAAY,CAACC,iBAAiB,CAACC,EAAE,EAAEC,IAAI,CAAC;IAC/D,IAAM4D,UAAU,GAAG,IAAI,CAACtB,aAAa,CAACtC,IAAI,CAAC;IAC3C,IAAM6D,WAAW,GAAG,IAAI,CAACtB,cAAc,CAACvC,IAAI,CAAC;IAC7C,IAAM8D,eAAe,GAAGhC,WAAW,CAAClB,MAAM,GAAG,CAAC;IAC9C,IAAMmD,kBAAkB,GAAGjC,WAAW,CAAClB,MAAM,GAAGD,cAAc;IAE9D,oBACEnB,IAAA;MAAKwE,SAAS,EAAC,eAAe;MAAAC,QAAA,eAC5BvE,KAAA;QAAM0D,QAAQ,EAAE,IAAI,CAAC7B,YAAa;QAAA0C,QAAA,gBAChCvE,KAAA;UAAKsE,SAAS,EAAC,UAAU;UAAAC,QAAA,gBACvBzE,IAAA;YAAAyE,QAAA,EAAO;UAAiB,CAAO,CAAC,eAChCzE,IAAA;YAAKwE,SAAS,EAAC,UAAU;YAAAC,QAAA,EACtB,IAAI,CAACrC,QAAQ,CAAC,CAAC,CAAC0B,GAAG,CAAC,CAACY,SAAS,EAAErB,KAAK,KAAK;cACzC,IAAMsB,GAAG,GAAGD,SAAiC;cAC7C,oBACE1E,IAAA;gBAAewE,SAAS,EAAC,oBAAoB;gBAAAC,QAAA,eAC3CvE,KAAA;kBACEM,IAAI,EAAC,QAAQ;kBACbgE,SAAS,EAAE3F,UAAU,CACnB,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB;oBACE+F,MAAM,EAAEF,SAAS,KAAKlE;kBACxB,CACF,CAAE;kBACF,cAAY6C,KAAM;kBAClBwB,OAAO,EAAE,IAAI,CAAC7C,eAAgB;kBAAAyC,QAAA,GAE7B,IAAI,CAAC5B,WAAW,CAAC6B,SAAS,CAAC,EAC3B,IAAI,CAAC9B,WAAW,CAAC8B,SAAS,CAAC;gBAAA,CACtB;cAAC,GAhBDC,GAiBL,CAAC;YAEV,CAAC;UAAC,CACC,CAAC;QAAA,CACH,CAAC,eACN3E,IAAA,SAAK,CAAC,eACNE,KAAA;UAAKsE,SAAS,EAAC,sBAAsB;UAAAC,QAAA,gBACnCzE,IAAA;YAAOwE,SAAS,EAAC,kBAAkB;YAAAC,QAAA,EAAEL;UAAU,CAAQ,CAAC,eACxDpE,IAAA;YACEwE,SAAS,EAAC,8CAA8C;YACxD1D,KAAK,EAAEuB,KAAM;YACb6B,QAAQ,EAAE,IAAI,CAACjC,iBAAkB;YAAAwC,QAAA,EAEhCvD,OAAO,CAAC4C,GAAG,CAACgB,MAAM,iBACjB9E,IAAA;cAA0Bc,KAAK,EAAEgE,MAAM,CAACzD,IAAK;cAAAoD,QAAA,EAC1CK,MAAM,CAACzD;YAAI,GADDyD,MAAM,CAACzD,IAEZ,CACT;UAAC,CACI,CAAC;QAAA,CACN,CAAC,EACLiD,eAAe,iBAAItE,IAAA,SAAK,CAAC,EACzBsC,WAAW,CAACwB,GAAG,CAAC,CAACiB,UAAU,EAAEC,CAAC,kBAC7B9E,KAAA;UACEsE,SAAS,EAAC,uCAAuC;UAEjD,mCAAAS,MAAA,CAAiCD,CAAC,CAAG;UAAAP,QAAA,gBAErCzE,IAAA;YAAOwE,SAAS,EAAC,kBAAkB;YAAAC,QAAA,EAChCO,CAAC,KAAK,CAAC,GAAGX,WAAW,GAAG;UAAE,CACtB,CAAC,eACRrE,IAAA;YACEwE,SAAS,EAAC,8CAA8C;YACxD1D,KAAK,EAAEiE,UAAU,CAACjE,KAAM;YACxBoD,QAAQ,EAAE,IAAI,CAACrC,kBAAmB;YAClC,qCAAAoD,MAAA,CAAmCD,CAAC,CAAG;YACvC,cAAYA,CAAE;YAAAP,QAAA,EAEbvD,OAAO,CAAC4C,GAAG,CAACgB,MAAM,iBACjB9E,IAAA;cAA0Bc,KAAK,EAAEgE,MAAM,CAACzD,IAAK;cAAC,cAAY2D,CAAE;cAAAP,QAAA,EACzDK,MAAM,CAACzD;YAAI,GADDyD,MAAM,CAACzD,IAEZ,CACT;UAAC,CACI,CAAC,EACRiB,WAAW,CAAClB,MAAM,GAAG,CAAC,iBACrBpB,IAAA,CAACjB,MAAM;YACLmG,IAAI,EAAC,OAAO;YACZV,SAAS,EAAC,6BAA6B;YACvC,cAAYQ,CAAE;YACd,gCAAAC,MAAA,CAA8BD,CAAC,CAAG;YAClCH,OAAO,EAAE,IAAI,CAAC/C,uBAAwB;YACtCqD,IAAI,EAAE5F,OAAQ;YACd6F,OAAO,EAAC;UAAQ,CACjB,CACF;QAAA,GA7BIL,UAAU,CAAChE,EA8Bb,CACN,CAAC,EACDwD,kBAAkB,iBACjBrE,KAAA;UAAKsE,SAAS,EAAC,UAAU;UAAAC,QAAA,gBACvBzE,IAAA;YAAKwE,SAAS,EAAC;UAAO,CAAE,CAAC,eACzBxE,IAAA,CAACjB,MAAM;YACLmG,IAAI,EAAC,OAAO;YACZV,SAAS,EAAC,qBAAqB;YAC/BK,OAAO,EAAE,IAAI,CAACpD,eAAgB;YAC9B0D,IAAI,EAAE9F,sBAAuB;YAAAoF,QAAA,EAC9B;UAED,CAAQ,CAAC;QAAA,CACN,CACN,eACDvE,KAAA;UAAKsE,SAAS,EAAC,6BAA6B;UAAAC,QAAA,gBAC1CzE,IAAA;YAAOwE,SAAS,EAAC,mBAAmB;YAAAC,QAAA,eAClCvE,KAAA;cAAKsE,SAAS,EAAC,iBAAiB;cAAAC,QAAA,gBAC9BzE,IAAA,CAAClB,eAAe;gBACduG,IAAI,EAAEjG,OAAQ;gBACd+F,IAAI,EAAE7F,mBAAoB;gBAC1BgG,SAAS,EAAC;cAAgB,CAC3B,CAAC,eACFtF,IAAA,CAAClB,eAAe;gBACdqG,IAAI,EAAE3C,QAAQ,GAAGtD,MAAM,GAAGC,QAAS;gBACnCmG,SAAS,EAAC;cAAuB,CAClC,CAAC;YAAA,CACC;UAAC,CACD,CAAC,eACRpF,KAAA,CAAClB,UAAU;YACTkF,QAAQ,EAAE,IAAI,CAACvC,qBAAsB;YACrCb,KAAK,KAAAmE,MAAA,CAAKzC,QAAQ,CAAG;YAAAiC,QAAA,gBAErBzE,IAAA,CAACf,SAAS;cAAC6B,KAAK,EAAC,MAAM;cAAA2D,QAAA,EAAC;YAAU,CAAW,CAAC,eAC9CzE,IAAA,CAACf,SAAS;cAAC6B,KAAK,EAAC,OAAO;cAAA2D,QAAA,EAAC;YAAY,CAAW,CAAC;UAAA,CACvC,CAAC;QAAA,CACV,CAAC,eACNvE,KAAA;UAAKsE,SAAS,EAAC,UAAU;UAAAC,QAAA,gBACvBzE,IAAA;YAAKwE,SAAS,EAAC;UAAmB,CAAE,CAAC,eACrCxE,IAAA;YAAKwE,SAAS,EAAC,6BAA6B;YAAAC,QAAA,EACzCjC,QAAQ,GACL,8GAA8G,GAC9G;UAA4I,CAC7I,CAAC;QAAA,CACH,CAAC,eACNtC,KAAA;UACEsE,SAAS,EAAE3F,UAAU,CAAC,UAAU,EAAE,qBAAqB,EAAE,MAAM,CAAE;UAAA4F,QAAA,gBAEjEzE,IAAA,CAACjB,MAAM;YACLmG,IAAI,EAAC,WAAW;YAChBV,SAAS,EAAC,WAAW;YACrBK,OAAO,EAAE,IAAI,CAACjD,WAAY;YAAA6C,QAAA,EAC3B;UAED,CAAQ,CAAC,eACTzE,IAAA,CAACjB,MAAM;YAACmG,IAAI,EAAC,SAAS;YAAC1E,IAAI,EAAC,QAAQ;YAACgE,SAAS,EAAC,YAAY;YAAAC,QAAA,EAAC;UAE5D,CAAQ,CAAC;QAAA,CACN,CAAC;MAAA,CACF;IAAC,CACJ,CAAC;EAEV;AACF;AAEA,eAAepE,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","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 (\n this.container?.querySelectorAll('.btn-drag-handle')[\n focusEditorIndex\n ] as HTMLButtonElement\n ).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n (\n this.container?.querySelector('.btn-add-column') as HTMLButtonElement\n )?.focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n (\n this.container?.querySelectorAll(`.custom-column-input`)[\n nextFocusIndex\n ] as HTMLInputElement\n ).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 className=\"loading-spinner-vertical-align\" />\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","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","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","children","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","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 (\n this.container?.querySelectorAll('.btn-drag-handle')[\n focusEditorIndex\n ] as HTMLButtonElement\n ).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n (\n this.container?.querySelector('.btn-add-column') as HTMLButtonElement\n )?.focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n (\n this.container?.querySelectorAll(`.custom-column-input`)[\n nextFocusIndex\n ] as HTMLInputElement\n ).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 className=\"loading-spinner-vertical-align\" />\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 +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","eventKey","name","inputIndex","formula","onChange","onDeleteColumn","onTabInEditor","invalid","isDuplicate","isValidName","isValidColumnName","handleFormulaEditorContentChanged","formulaValue","undefined","replace","provided","snapshot","dragging","isDragging","innerRef","draggableProps","event","target","
|
|
1
|
+
{"version":3,"file":"CustomColumnInput.js","names":["React","useCallback","classNames","Draggable","Button","vsTrash","vsGripper","DbNameValidator","InputEditor","jsx","_jsx","jsxs","_jsxs","INPUT_TYPE","Object","freeze","NAME","FORMULA","EMPTY_FN","CustomColumnInput","_ref","eventKey","name","inputIndex","formula","onChange","onDeleteColumn","onTabInEditor","invalid","isDuplicate","isValidName","isValidColumnName","handleFormulaEditorContentChanged","formulaValue","undefined","replace","draggableId","index","disableInteractiveElementBlocking","children","provided","snapshot","_objectSpread","className","dragging","isDragging","ref","innerRef","draggableProps","placeholder","value","event","target","kind","onClick","icon","tooltip","dragHandleProps","editorSettings","language","editorIndex","onContentChanged","onTab"],"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 = (): void => {\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 placeholder=\"Column Formula\"\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":"DownloadServiceWorkerUtils.js","names":["Log","log","module","DownloadServiceWorkerUtils","register","url","serviceWorkerRegistration","unregisterSW","navigator","serviceWorker","then","reg","update","info","catch","err","error","getServiceWorker","swReg","active","Error","unregister"],"sources":["../../src/sidebar/DownloadServiceWorkerUtils.ts"],"sourcesContent":["import Log from '@deephaven/log';\n\nconst log = Log.module('DownloadServiceWorkerUtils');\n\nclass DownloadServiceWorkerUtils {\n static serviceWorkerRegistration: ServiceWorkerRegistration | null = null;\n\n /**\n * Register the download service worker at the specified URL\n * Will unregister any existing service worker if register is called multiple times\n * @param url The URL of the service worker file\n */\n static register(url: URL): void {\n if (DownloadServiceWorkerUtils.serviceWorkerRegistration) {\n DownloadServiceWorkerUtils.unregisterSW();\n }\n\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker\n .register(url)\n .then(reg => {\n reg.update();\n DownloadServiceWorkerUtils.serviceWorkerRegistration = reg;\n log.info('Registering service worker on ', url, reg);\n })\n .catch(err => {\n log.error('Failed to register service worker', err);\n });\n } else {\n log.info('Service worker is not supported.');\n }\n }\n\n static async getServiceWorker(): Promise<ServiceWorker> {\n if ('serviceWorker' in navigator) {\n const swReg = DownloadServiceWorkerUtils.serviceWorkerRegistration;\n if (swReg && swReg.active) {\n log.info('Download service worker is active.');\n return swReg.active;\n }\n throw new Error('Can not find download service worker.');\n }\n throw new Error('Download service worker is not available.');\n }\n\n static unregisterSW(): void {\n DownloadServiceWorkerUtils.serviceWorkerRegistration?.unregister();\n }\n}\n\nexport default DownloadServiceWorkerUtils;\n"],"mappings":";;;;;AAAA,OAAOA,GAAG,MAAM,gBAAgB;AAEhC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,4BAA4B,CAAC;AAEpD,MAAMC,0BAA0B,CAAC;EAG/B;AACF;AACA;AACA;AACA;EACE,OAAOC,
|
|
1
|
+
{"version":3,"file":"DownloadServiceWorkerUtils.js","names":["Log","log","module","DownloadServiceWorkerUtils","register","url","serviceWorkerRegistration","unregisterSW","navigator","serviceWorker","then","reg","update","info","catch","err","error","getServiceWorker","_asyncToGenerator","swReg","active","Error","_DownloadServiceWorke","unregister","_defineProperty"],"sources":["../../src/sidebar/DownloadServiceWorkerUtils.ts"],"sourcesContent":["import Log from '@deephaven/log';\n\nconst log = Log.module('DownloadServiceWorkerUtils');\n\nclass DownloadServiceWorkerUtils {\n static serviceWorkerRegistration: ServiceWorkerRegistration | null = null;\n\n /**\n * Register the download service worker at the specified URL\n * Will unregister any existing service worker if register is called multiple times\n * @param url The URL of the service worker file\n */\n static register(url: URL): void {\n if (DownloadServiceWorkerUtils.serviceWorkerRegistration) {\n DownloadServiceWorkerUtils.unregisterSW();\n }\n\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker\n .register(url)\n .then(reg => {\n reg.update();\n DownloadServiceWorkerUtils.serviceWorkerRegistration = reg;\n log.info('Registering service worker on ', url, reg);\n })\n .catch(err => {\n log.error('Failed to register service worker', err);\n });\n } else {\n log.info('Service worker is not supported.');\n }\n }\n\n static async getServiceWorker(): Promise<ServiceWorker> {\n if ('serviceWorker' in navigator) {\n const swReg = DownloadServiceWorkerUtils.serviceWorkerRegistration;\n if (swReg && swReg.active) {\n log.info('Download service worker is active.');\n return swReg.active;\n }\n throw new Error('Can not find download service worker.');\n }\n throw new Error('Download service worker is not available.');\n }\n\n static unregisterSW(): void {\n DownloadServiceWorkerUtils.serviceWorkerRegistration?.unregister();\n }\n}\n\nexport default DownloadServiceWorkerUtils;\n"],"mappings":";;;;;AAAA,OAAOA,GAAG,MAAM,gBAAgB;AAEhC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,4BAA4B,CAAC;AAEpD,MAAMC,0BAA0B,CAAC;EAG/B;AACF;AACA;AACA;AACA;EACE,OAAOC,QAAQA,CAACC,GAAQ,EAAQ;IAC9B,IAAIF,0BAA0B,CAACG,yBAAyB,EAAE;MACxDH,0BAA0B,CAACI,YAAY,CAAC,CAAC;IAC3C;IAEA,IAAI,eAAe,IAAIC,SAAS,EAAE;MAChCA,SAAS,CAACC,aAAa,CACpBL,QAAQ,CAACC,GAAG,CAAC,CACbK,IAAI,CAACC,GAAG,IAAI;QACXA,GAAG,CAACC,MAAM,CAAC,CAAC;QACZT,0BAA0B,CAACG,yBAAyB,GAAGK,GAAG;QAC1DV,GAAG,CAACY,IAAI,CAAC,gCAAgC,EAAER,GAAG,EAAEM,GAAG,CAAC;MACtD,CAAC,CAAC,CACDG,KAAK,CAACC,GAAG,IAAI;QACZd,GAAG,CAACe,KAAK,CAAC,mCAAmC,EAAED,GAAG,CAAC;MACrD,CAAC,CAAC;IACN,CAAC,MAAM;MACLd,GAAG,CAACY,IAAI,CAAC,kCAAkC,CAAC;IAC9C;EACF;EAEA,OAAaI,gBAAgBA,CAAA,EAA2B;IAAA,OAAAC,iBAAA;MACtD,IAAI,eAAe,IAAIV,SAAS,EAAE;QAChC,IAAMW,KAAK,GAAGhB,0BAA0B,CAACG,yBAAyB;QAClE,IAAIa,KAAK,IAAIA,KAAK,CAACC,MAAM,EAAE;UACzBnB,GAAG,CAACY,IAAI,CAAC,oCAAoC,CAAC;UAC9C,OAAOM,KAAK,CAACC,MAAM;QACrB;QACA,MAAM,IAAIC,KAAK,CAAC,uCAAuC,CAAC;MAC1D;MACA,MAAM,IAAIA,KAAK,CAAC,2CAA2C,CAAC;IAAC;EAC/D;EAEA,OAAOd,YAAYA,CAAA,EAAS;IAAA,IAAAe,qBAAA;IAC1B,CAAAA,qBAAA,GAAAnB,0BAA0B,CAACG,yBAAyB,cAAAgB,qBAAA,uBAApDA,qBAAA,CAAsDC,UAAU,CAAC,CAAC;EACpE;AACF;AAACC,eAAA,CA5CKrB,0BAA0B,+BACuC,IAAI;AA6C3E,eAAeA,0BAA0B"}
|
|
@@ -1 +1 @@
|
|
|
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","className","invalid","placeholder","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 className?: string;\n placeholder?: string;\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 class InputEditor extends Component<InputEditorProps, InputEditorState> {\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 { className, invalid, placeholder = '', value } = this.props;\n const { isEditorFocused, isEditorEmpty } = this.state;\n return (\n <div\n className={classNames(\n 'input-editor-wrapper',\n {\n focused: isEditorFocused,\n invalid,\n },\n className\n )}\n role=\"presentation\"\n onClick={this.handleContainerClick}\n >\n <div\n className=\"editor-container\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n data-testid=\"custom-column-formula\"\n />\n {isEditorEmpty && !value && placeholder.length > 0 && (\n <div className=\"editor-placeholder text-muted\">{placeholder}</div>\n )}\n </div>\n );\n }\n}\n\nexport default InputEditor;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InputEditor.js","names":["React","Component","monaco","classNames","jsx","_jsx","jsxs","_jsxs","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","className","invalid","placeholder","focused","role","onClick","children","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 className?: string;\n placeholder?: string;\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 class InputEditor extends Component<InputEditorProps, InputEditorState> {\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 { className, invalid, placeholder = '', value } = this.props;\n const { isEditorFocused, isEditorEmpty } = this.state;\n return (\n <div\n className={classNames(\n 'input-editor-wrapper',\n {\n focused: isEditorFocused,\n invalid,\n },\n className\n )}\n role=\"presentation\"\n onClick={this.handleContainerClick}\n >\n <div\n className=\"editor-container\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n data-testid=\"custom-column-formula\"\n />\n {isEditorEmpty && !value && placeholder.length > 0 && (\n <div className=\"editor-placeholder text-muted\">{placeholder}</div>\n )}\n </div>\n );\n }\n}\n\nexport default InputEditor;\n"],"mappings":"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"}
|
|
@@ -20,9 +20,9 @@ interface RollupRowsProps {
|
|
|
20
20
|
config: UIRollupConfig | null;
|
|
21
21
|
}
|
|
22
22
|
interface RollupRowsState {
|
|
23
|
-
ungroupedSelectedRanges: Range[];
|
|
23
|
+
ungroupedSelectedRanges: readonly Range[];
|
|
24
24
|
columns: ColumnName[];
|
|
25
|
-
groupedSelectedRanges: Range[];
|
|
25
|
+
groupedSelectedRanges: readonly Range[];
|
|
26
26
|
searchFilter: string;
|
|
27
27
|
showConstituents: boolean;
|
|
28
28
|
showNonAggregatedColumns: boolean;
|
|
@@ -57,8 +57,8 @@ declare class RollupRows extends Component<RollupRowsProps, RollupRowsState> {
|
|
|
57
57
|
handleDragStart(e: DragStart): void;
|
|
58
58
|
handleDragEnd(e: DropResult): void;
|
|
59
59
|
handleUngroupedSelect(itemIndex: number): void;
|
|
60
|
-
handleUngroupedSelectionChange(ungroupedSelectedRanges: Range[]): void;
|
|
61
|
-
handleGroupedSelectionChange(groupedSelectedRanges: Range[]): void;
|
|
60
|
+
handleUngroupedSelectionChange(ungroupedSelectedRanges: readonly Range[]): void;
|
|
61
|
+
handleGroupedSelectionChange(groupedSelectedRanges: readonly Range[]): void;
|
|
62
62
|
handleDeleteClicked(index: number): void;
|
|
63
63
|
handleShowConstituentsChange(): void;
|
|
64
64
|
handleShowNonAggregatedColumnsChange(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RollupRows.d.ts","sourceRoot":"","sources":["../../src/sidebar/RollupRows.tsx"],"names":[],"mappings":";AACA,OAAc,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG/E,OAAO,EAEL,iBAAiB,EACjB,SAAS,EAET,UAAU,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,iBAAiB,EAIjB,KAAK,EACL,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAc,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,OAAO,MAAM,UAAU,CAAC;AAI/B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAO5C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,wBAAwB,EAAE,OAAO,CAAC;IAClC,mBAAmB,EAAE,IAAI,CAAC;CAC3B;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,CAAC,YAAY,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;CAC/B;AAED,UAAU,eAAe;IACvB,uBAAuB,EAAE,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"RollupRows.d.ts","sourceRoot":"","sources":["../../src/sidebar/RollupRows.tsx"],"names":[],"mappings":"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"}
|