@deephaven/iris-grid 0.26.2-beta.0 → 0.26.2-beta.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 +3 -1
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js +3 -1
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +3 -1
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +3 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js +3 -1
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js +3 -1
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CrossColumnSearch.js +3 -1
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js +3 -1
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.js +9 -7
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCopyHandler.js +3 -1
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridModel.js +3 -1
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js +3 -1
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.js +3 -1
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js +3 -1
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.js +3 -1
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +9 -7
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js +3 -1
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTreeTableModel.js +3 -1
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.js +5 -3
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/MissingKeyError.js +3 -1
- package/dist/MissingKeyError.js.map +1 -1
- package/dist/PartitionSelectorSearch.js +3 -1
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/TableViewportUpdater.js +3 -1
- package/dist/TableViewportUpdater.js.map +1 -1
- package/dist/TreeTableViewportUpdater.js +3 -1
- package/dist/TreeTableViewportUpdater.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js +3 -1
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/format-context-menus/DateTimeFormatContextMenu.js +3 -1
- package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.js +3 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.js +3 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
- package/dist/key-handlers/ClearFilterKeyHandler.js +3 -1
- package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js +3 -1
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js +3 -1
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +3 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +3 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +3 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +7 -5
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +3 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js +3 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js +3 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js +3 -1
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +3 -1
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +3 -1
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.js +3 -1
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/RollupRows.js +3 -1
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +3 -1
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +3 -1
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.js +3 -1
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js +3 -1
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js +3 -1
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +3 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js +3 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js +2 -2
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +5 -3
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +3 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +3 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +3 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +3 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +3 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +3 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +3 -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":"ChartBuilder.js","names":["React","PureComponent","classNames","FontAwesomeIcon","Button","RadioGroup","RadioItem","vsLink","dhUnlink","dhTable","dhNewCircleLargeFilled","vsCircleLargeFilled","vsTrash","dh","Log","shortid","BarIcon","HistogramIcon","LineIcon","PieIcon","ScatterIcon","log","module","ChartBuilder","getTypeName","type","plot","SeriesPlotStyle","LINE","BAR","SCATTER","PIE","HISTOGRAM","getTypeIcon","getMaxSeriesCount","getXAxisLabel","getSeriesLabel","makeSeriesItem","value","id","generate","makeDefaultSeriesItems","columns","maxSeriesCount","length","name","getDefaultXAxis","constructor","props","handleAddSeries","bind","handleLinkStateChange","handleReset","handleSeriesChange","handleSeriesDeleteClick","handleSubmit","handleTypeClick","handleXAxisChange","sendChange","model","types","xAxis","seriesItems","state","isLinked","setState","push","event","target","index","getAttribute","intIndex","parseInt","changeEvent","splice","preventDefault","onSubmit","series","map","item","debug2","slice","onChange","render","xAxisLabel","seriesLabel","isSeriesVisible","isAddSeriesVisible","chartType","key","active","column","seriesItem","i"],"sources":["../../src/sidebar/ChartBuilder.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, RadioGroup, RadioItem } from '@deephaven/components';\nimport {\n vsLink,\n dhUnlink,\n dhTable,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsTrash,\n} from '@deephaven/icons';\nimport dh, { Column, SeriesPlotStyle } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport shortid from 'shortid';\nimport {\n BarIcon,\n HistogramIcon,\n LineIcon,\n PieIcon,\n ScatterIcon,\n} from './icons';\nimport './ChartBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('ChartBuilder');\n\nexport type ChartBuilderSettings = {\n type: SeriesPlotStyle;\n series: unknown;\n xAxis: string;\n isLinked: boolean;\n};\nexport type SeriesItem = {\n id: string;\n value: string;\n};\n\ninterface ChartBuilderProps {\n model: IrisGridModel;\n onSubmit: (obj: ChartBuilderSettings) => void;\n onChange: (obj: ChartBuilderSettings) => void;\n}\ninterface ChartBuilderState {\n /** The selected chart type */\n type: SeriesPlotStyle;\n\n /** Array of column names of the series to display */\n seriesItems: SeriesItem[];\n\n /** The column name to use as the x-axis */\n xAxis: string;\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: boolean;\n}\n/**\n * Form for configuring all the settings when creating a console.\n */\nclass ChartBuilder extends PureComponent<ChartBuilderProps, ChartBuilderState> {\n static types = [\n dh.plot.SeriesPlotStyle.LINE,\n dh.plot.SeriesPlotStyle.BAR,\n dh.plot.SeriesPlotStyle.SCATTER,\n dh.plot.SeriesPlotStyle.PIE,\n // IDS-6808: Disable Histogram in Chart Builder until we pipe histogram creation through the API\n // dh.plot.SeriesPlotStyle.HISTOGRAM,\n ];\n\n /**\n * Converts the provided chart type into a readable type.\n * Just replaces underscores with spaces and capitals the first letter of each word.\n */\n static getTypeName(type: SeriesPlotStyle): string | SeriesPlotStyle {\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return 'Line';\n case dh.plot.SeriesPlotStyle.BAR:\n return 'Bar';\n case dh.plot.SeriesPlotStyle.SCATTER:\n return 'Scatter';\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Pie';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Histogram';\n default:\n return type;\n }\n }\n\n static getTypeIcon(type: SeriesPlotStyle): React.ReactElement | null {\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return <LineIcon />;\n case dh.plot.SeriesPlotStyle.BAR:\n return <BarIcon />;\n case dh.plot.SeriesPlotStyle.SCATTER:\n return <ScatterIcon />;\n case dh.plot.SeriesPlotStyle.PIE:\n return <PieIcon />;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return <HistogramIcon />;\n default:\n return null;\n }\n }\n\n static getMaxSeriesCount(type: SeriesPlotStyle): number {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 1;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 0;\n default:\n return 100;\n }\n }\n\n static getXAxisLabel(type: SeriesPlotStyle): string {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Labels';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Data';\n default:\n return 'X-Axis';\n }\n }\n\n static getSeriesLabel(type: SeriesPlotStyle): string {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Values';\n default:\n return 'Series';\n }\n }\n\n static makeSeriesItem(value: string): SeriesItem {\n return { id: shortid.generate(), value };\n }\n\n static makeDefaultSeriesItems(\n type: SeriesPlotStyle,\n columns: Column[]\n ): SeriesItem[] {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n if (maxSeriesCount === 0 || columns == null || columns.length === 0) {\n return [];\n }\n\n const value = columns.length > 1 ? columns[1].name : columns[0].name;\n return [ChartBuilder.makeSeriesItem(value)];\n }\n\n static getDefaultXAxis(\n type: SeriesPlotStyle,\n columns: Column[]\n ): string | null {\n if (columns != null && columns.length > 0) {\n return columns[0].name;\n }\n\n return null;\n }\n\n constructor(props: ChartBuilderProps) {\n super(props);\n\n this.handleAddSeries = this.handleAddSeries.bind(this);\n this.handleLinkStateChange = this.handleLinkStateChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSeriesChange = this.handleSeriesChange.bind(this);\n this.handleSeriesDeleteClick = this.handleSeriesDeleteClick.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleTypeClick = this.handleTypeClick.bind(this);\n this.handleXAxisChange = this.handleXAxisChange.bind(this);\n this.sendChange = this.sendChange.bind(this);\n\n const { model } = props;\n const { columns } = model;\n\n const type = ChartBuilder.types[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n\n this.state = {\n /** The selected chart type */\n type,\n\n /** Array of column names of the series to display */\n seriesItems,\n\n /** The column name to use as the x-axis */\n xAxis,\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: true,\n };\n }\n\n handleAddSeries(): void {\n this.setState(state => {\n let { seriesItems } = state;\n seriesItems = [...seriesItems];\n\n const { model } = this.props;\n const { columns } = model;\n seriesItems.push({\n id: shortid.generate(),\n value: columns[0].name,\n });\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleLinkStateChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ isLinked: event.target.value === 'true' }, this.sendChange);\n }\n\n handleReset(): void {\n const { model } = this.props;\n const { columns } = model;\n\n const type = ChartBuilder.types[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n const isLinked = true;\n\n this.setState({ type, seriesItems, xAxis, isLinked }, this.sendChange);\n }\n\n handleSeriesChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n const index = event.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems[intIndex].value = value;\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSeriesDeleteClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems.splice(intIndex, 1);\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n event.preventDefault();\n\n const { onSubmit } = this.props;\n const { type, seriesItems, xAxis, isLinked } = this.state;\n const series = seriesItems.map(item => item.value);\n onSubmit({\n type: (`${type}` as unknown) as SeriesPlotStyle,\n series,\n xAxis,\n isLinked,\n });\n }\n\n handleTypeClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n const type = ChartBuilder.types[intIndex];\n\n log.debug2('handleTypeSelect', type);\n\n this.setState(state => {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n let { seriesItems } = state;\n seriesItems = seriesItems.slice(0, maxSeriesCount);\n if (seriesItems.length === 0 && maxSeriesCount > 0) {\n const { model } = this.props;\n const { columns } = model;\n seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n }\n\n return { type, seriesItems };\n }, this.sendChange);\n }\n\n handleXAxisChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const xAxis = event.target.value;\n log.debug2('x-axis change', xAxis);\n\n this.setState({ xAxis }, this.sendChange);\n }\n\n sendChange(): void {\n const { onChange } = this.props;\n const { isLinked, type, seriesItems, xAxis } = this.state;\n const series = seriesItems.map(item => item.value);\n\n onChange({ type, series, xAxis, isLinked });\n }\n\n render(): JSX.Element {\n const { model } = this.props;\n const { columns } = model;\n const { seriesItems, type, xAxis, isLinked } = this.state;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n const xAxisLabel = ChartBuilder.getXAxisLabel(type);\n const seriesLabel = ChartBuilder.getSeriesLabel(type);\n const isSeriesVisible = seriesItems.length > 0;\n const isAddSeriesVisible = seriesItems.length < maxSeriesCount;\n\n return (\n <div className=\"chart-builder\">\n <form onSubmit={this.handleSubmit}>\n <div className=\"form-row\">\n <label>Select Chart Type</label>\n <div className=\"form-row\">\n {ChartBuilder.types.map((chartType, index) => {\n const key = (chartType as unknown) as React.Key;\n return (\n <div key={key} className=\"col col-chart-type\">\n <button\n type=\"button\"\n className={classNames(\n 'btn',\n 'btn-icon',\n 'btn-chart-type',\n {\n active: chartType === type,\n }\n )}\n data-index={index}\n onClick={this.handleTypeClick}\n >\n {ChartBuilder.getTypeIcon(chartType)}\n {ChartBuilder.getTypeName(chartType)}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n <hr />\n <div className=\"form-row form-inline\">\n <label className=\"col-2 label-left\">{xAxisLabel}</label>\n <select\n className=\"form-control custom-select select-x-axis col\"\n value={xAxis}\n onChange={this.handleXAxisChange}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name}>\n {column.name}\n </option>\n ))}\n </select>\n </div>\n {isSeriesVisible && <hr />}\n {seriesItems.map((seriesItem, i) => (\n <div\n className=\"form-row form-inline form-series-item\"\n key={seriesItem.id}\n data-testid={`form-series-item-${i}`}\n >\n <label className=\"col-2 label-left\">\n {i === 0 ? seriesLabel : ''}\n </label>\n <select\n className=\"form-control custom-select select-series col\"\n value={seriesItem.value}\n onChange={this.handleSeriesChange}\n data-testid={`select-series-item-${i}`}\n data-index={i}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name} data-index={i}>\n {column.name}\n </option>\n ))}\n </select>\n {seriesItems.length > 1 && (\n <Button\n kind=\"ghost\"\n className=\"btn-delete-series ml-2 px-2\"\n data-index={i}\n data-testid={`delete-series-${i}`}\n onClick={this.handleSeriesDeleteClick}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n )}\n </div>\n ))}\n {isAddSeriesVisible && (\n <div className=\"form-row\">\n <div className=\"col-2\" />\n <Button\n kind=\"ghost\"\n className=\"btn-add-series mt-1\"\n onClick={this.handleAddSeries}\n icon={dhNewCircleLargeFilled}\n >\n Add Series\n </Button>\n </div>\n )}\n <div className=\"form-row chart-builder-link\">\n <label className=\"col-2 label-right\">\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={dhTable}\n icon={vsCircleLargeFilled}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon\n icon={isLinked ? vsLink : dhUnlink}\n transform=\"grow-2 right-8 down-6\"\n />\n </div>\n </label>\n <RadioGroup\n onChange={this.handleLinkStateChange}\n value={`${isLinked}`}\n >\n <RadioItem value=\"true\">Sync State</RadioItem>\n <RadioItem value=\"false\">Freeze State</RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-row\">\n <div className=\"col-2 label-right\" />\n <div className=\"col chart-builder-link-info\">\n {isLinked\n ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.'\n : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.'}\n </div>\n </div>\n <div\n className={classNames('form-row', 'justify-content-end', 'my-3')}\n >\n <Button\n kind=\"secondary\"\n className=\"btn-reset\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n <Button kind=\"primary\" type=\"submit\" className=\"btn-submit\">\n Create\n </Button>\n </div>\n </form>\n </div>\n );\n }\n}\n\nexport default ChartBuilder;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChartBuilder.js","names":["React","PureComponent","classNames","FontAwesomeIcon","Button","RadioGroup","RadioItem","vsLink","dhUnlink","dhTable","dhNewCircleLargeFilled","vsCircleLargeFilled","vsTrash","dh","Log","shortid","BarIcon","HistogramIcon","LineIcon","PieIcon","ScatterIcon","log","module","ChartBuilder","getTypeName","type","plot","SeriesPlotStyle","LINE","BAR","SCATTER","PIE","HISTOGRAM","getTypeIcon","getMaxSeriesCount","getXAxisLabel","getSeriesLabel","makeSeriesItem","value","id","generate","makeDefaultSeriesItems","columns","maxSeriesCount","length","name","getDefaultXAxis","constructor","props","handleAddSeries","bind","handleLinkStateChange","handleReset","handleSeriesChange","handleSeriesDeleteClick","handleSubmit","handleTypeClick","handleXAxisChange","sendChange","model","types","xAxis","seriesItems","state","isLinked","setState","push","event","target","index","getAttribute","intIndex","parseInt","changeEvent","splice","preventDefault","onSubmit","series","map","item","debug2","slice","onChange","render","xAxisLabel","seriesLabel","isSeriesVisible","isAddSeriesVisible","chartType","key","active","column","seriesItem","i"],"sources":["../../src/sidebar/ChartBuilder.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, RadioGroup, RadioItem } from '@deephaven/components';\nimport {\n vsLink,\n dhUnlink,\n dhTable,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsTrash,\n} from '@deephaven/icons';\nimport dh, { Column, SeriesPlotStyle } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport shortid from 'shortid';\nimport {\n BarIcon,\n HistogramIcon,\n LineIcon,\n PieIcon,\n ScatterIcon,\n} from './icons';\nimport './ChartBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('ChartBuilder');\n\nexport type ChartBuilderSettings = {\n type: SeriesPlotStyle;\n series: unknown;\n xAxis: string;\n isLinked: boolean;\n};\nexport type SeriesItem = {\n id: string;\n value: string;\n};\n\ninterface ChartBuilderProps {\n model: IrisGridModel;\n onSubmit: (obj: ChartBuilderSettings) => void;\n onChange: (obj: ChartBuilderSettings) => void;\n}\ninterface ChartBuilderState {\n /** The selected chart type */\n type: SeriesPlotStyle;\n\n /** Array of column names of the series to display */\n seriesItems: SeriesItem[];\n\n /** The column name to use as the x-axis */\n xAxis: string;\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: boolean;\n}\n/**\n * Form for configuring all the settings when creating a console.\n */\nclass ChartBuilder extends PureComponent<ChartBuilderProps, ChartBuilderState> {\n static types = [\n dh.plot.SeriesPlotStyle.LINE,\n dh.plot.SeriesPlotStyle.BAR,\n dh.plot.SeriesPlotStyle.SCATTER,\n dh.plot.SeriesPlotStyle.PIE,\n // IDS-6808: Disable Histogram in Chart Builder until we pipe histogram creation through the API\n // dh.plot.SeriesPlotStyle.HISTOGRAM,\n ];\n\n /**\n * Converts the provided chart type into a readable type.\n * Just replaces underscores with spaces and capitals the first letter of each word.\n */\n static getTypeName(type: SeriesPlotStyle): string | SeriesPlotStyle {\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return 'Line';\n case dh.plot.SeriesPlotStyle.BAR:\n return 'Bar';\n case dh.plot.SeriesPlotStyle.SCATTER:\n return 'Scatter';\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Pie';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Histogram';\n default:\n return type;\n }\n }\n\n static getTypeIcon(type: SeriesPlotStyle): React.ReactElement | null {\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return <LineIcon />;\n case dh.plot.SeriesPlotStyle.BAR:\n return <BarIcon />;\n case dh.plot.SeriesPlotStyle.SCATTER:\n return <ScatterIcon />;\n case dh.plot.SeriesPlotStyle.PIE:\n return <PieIcon />;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return <HistogramIcon />;\n default:\n return null;\n }\n }\n\n static getMaxSeriesCount(type: SeriesPlotStyle): number {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 1;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 0;\n default:\n return 100;\n }\n }\n\n static getXAxisLabel(type: SeriesPlotStyle): string {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Labels';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Data';\n default:\n return 'X-Axis';\n }\n }\n\n static getSeriesLabel(type: SeriesPlotStyle): string {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Values';\n default:\n return 'Series';\n }\n }\n\n static makeSeriesItem(value: string): SeriesItem {\n return { id: shortid.generate(), value };\n }\n\n static makeDefaultSeriesItems(\n type: SeriesPlotStyle,\n columns: Column[]\n ): SeriesItem[] {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n if (maxSeriesCount === 0 || columns == null || columns.length === 0) {\n return [];\n }\n\n const value = columns.length > 1 ? columns[1].name : columns[0].name;\n return [ChartBuilder.makeSeriesItem(value)];\n }\n\n static getDefaultXAxis(\n type: SeriesPlotStyle,\n columns: Column[]\n ): string | null {\n if (columns != null && columns.length > 0) {\n return columns[0].name;\n }\n\n return null;\n }\n\n constructor(props: ChartBuilderProps) {\n super(props);\n\n this.handleAddSeries = this.handleAddSeries.bind(this);\n this.handleLinkStateChange = this.handleLinkStateChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSeriesChange = this.handleSeriesChange.bind(this);\n this.handleSeriesDeleteClick = this.handleSeriesDeleteClick.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleTypeClick = this.handleTypeClick.bind(this);\n this.handleXAxisChange = this.handleXAxisChange.bind(this);\n this.sendChange = this.sendChange.bind(this);\n\n const { model } = props;\n const { columns } = model;\n\n const type = ChartBuilder.types[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n\n this.state = {\n /** The selected chart type */\n type,\n\n /** Array of column names of the series to display */\n seriesItems,\n\n /** The column name to use as the x-axis */\n xAxis,\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: true,\n };\n }\n\n handleAddSeries(): void {\n this.setState(state => {\n let { seriesItems } = state;\n seriesItems = [...seriesItems];\n\n const { model } = this.props;\n const { columns } = model;\n seriesItems.push({\n id: shortid.generate(),\n value: columns[0].name,\n });\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleLinkStateChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ isLinked: event.target.value === 'true' }, this.sendChange);\n }\n\n handleReset(): void {\n const { model } = this.props;\n const { columns } = model;\n\n const type = ChartBuilder.types[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n const isLinked = true;\n\n this.setState({ type, seriesItems, xAxis, isLinked }, this.sendChange);\n }\n\n handleSeriesChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n const index = event.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems[intIndex].value = value;\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSeriesDeleteClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems.splice(intIndex, 1);\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n event.preventDefault();\n\n const { onSubmit } = this.props;\n const { type, seriesItems, xAxis, isLinked } = this.state;\n const series = seriesItems.map(item => item.value);\n onSubmit({\n type: (`${type}` as unknown) as SeriesPlotStyle,\n series,\n xAxis,\n isLinked,\n });\n }\n\n handleTypeClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n const type = ChartBuilder.types[intIndex];\n\n log.debug2('handleTypeSelect', type);\n\n this.setState(state => {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n let { seriesItems } = state;\n seriesItems = seriesItems.slice(0, maxSeriesCount);\n if (seriesItems.length === 0 && maxSeriesCount > 0) {\n const { model } = this.props;\n const { columns } = model;\n seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n }\n\n return { type, seriesItems };\n }, this.sendChange);\n }\n\n handleXAxisChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const xAxis = event.target.value;\n log.debug2('x-axis change', xAxis);\n\n this.setState({ xAxis }, this.sendChange);\n }\n\n sendChange(): void {\n const { onChange } = this.props;\n const { isLinked, type, seriesItems, xAxis } = this.state;\n const series = seriesItems.map(item => item.value);\n\n onChange({ type, series, xAxis, isLinked });\n }\n\n render(): JSX.Element {\n const { model } = this.props;\n const { columns } = model;\n const { seriesItems, type, xAxis, isLinked } = this.state;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n const xAxisLabel = ChartBuilder.getXAxisLabel(type);\n const seriesLabel = ChartBuilder.getSeriesLabel(type);\n const isSeriesVisible = seriesItems.length > 0;\n const isAddSeriesVisible = seriesItems.length < maxSeriesCount;\n\n return (\n <div className=\"chart-builder\">\n <form onSubmit={this.handleSubmit}>\n <div className=\"form-row\">\n <label>Select Chart Type</label>\n <div className=\"form-row\">\n {ChartBuilder.types.map((chartType, index) => {\n const key = (chartType as unknown) as React.Key;\n return (\n <div key={key} className=\"col col-chart-type\">\n <button\n type=\"button\"\n className={classNames(\n 'btn',\n 'btn-icon',\n 'btn-chart-type',\n {\n active: chartType === type,\n }\n )}\n data-index={index}\n onClick={this.handleTypeClick}\n >\n {ChartBuilder.getTypeIcon(chartType)}\n {ChartBuilder.getTypeName(chartType)}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n <hr />\n <div className=\"form-row form-inline\">\n <label className=\"col-2 label-left\">{xAxisLabel}</label>\n <select\n className=\"form-control custom-select select-x-axis col\"\n value={xAxis}\n onChange={this.handleXAxisChange}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name}>\n {column.name}\n </option>\n ))}\n </select>\n </div>\n {isSeriesVisible && <hr />}\n {seriesItems.map((seriesItem, i) => (\n <div\n className=\"form-row form-inline form-series-item\"\n key={seriesItem.id}\n data-testid={`form-series-item-${i}`}\n >\n <label className=\"col-2 label-left\">\n {i === 0 ? seriesLabel : ''}\n </label>\n <select\n className=\"form-control custom-select select-series col\"\n value={seriesItem.value}\n onChange={this.handleSeriesChange}\n data-testid={`select-series-item-${i}`}\n data-index={i}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name} data-index={i}>\n {column.name}\n </option>\n ))}\n </select>\n {seriesItems.length > 1 && (\n <Button\n kind=\"ghost\"\n className=\"btn-delete-series ml-2 px-2\"\n data-index={i}\n data-testid={`delete-series-${i}`}\n onClick={this.handleSeriesDeleteClick}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n )}\n </div>\n ))}\n {isAddSeriesVisible && (\n <div className=\"form-row\">\n <div className=\"col-2\" />\n <Button\n kind=\"ghost\"\n className=\"btn-add-series mt-1\"\n onClick={this.handleAddSeries}\n icon={dhNewCircleLargeFilled}\n >\n Add Series\n </Button>\n </div>\n )}\n <div className=\"form-row chart-builder-link\">\n <label className=\"col-2 label-right\">\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={dhTable}\n icon={vsCircleLargeFilled}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon\n icon={isLinked ? vsLink : dhUnlink}\n transform=\"grow-2 right-8 down-6\"\n />\n </div>\n </label>\n <RadioGroup\n onChange={this.handleLinkStateChange}\n value={`${isLinked}`}\n >\n <RadioItem value=\"true\">Sync State</RadioItem>\n <RadioItem value=\"false\">Freeze State</RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-row\">\n <div className=\"col-2 label-right\" />\n <div className=\"col chart-builder-link-info\">\n {isLinked\n ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.'\n : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.'}\n </div>\n </div>\n <div\n className={classNames('form-row', 'justify-content-end', 'my-3')}\n >\n <Button\n kind=\"secondary\"\n className=\"btn-reset\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n <Button kind=\"primary\" type=\"submit\" className=\"btn-submit\">\n Create\n </Button>\n </div>\n </form>\n </div>\n );\n }\n}\n\nexport default ChartBuilder;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAQ,OAAO;AAC5C,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,EAAEC,UAAU,EAAEC,SAAS,QAAQ,uBAAuB;AACrE,SACEC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,sBAAsB,EACtBC,mBAAmB,EACnBC,OAAO,QACF,kBAAkB;AACzB,OAAOC,EAAE,MAAmC,uBAAuB;AACnE,OAAOC,GAAG,MAAM,gBAAgB;AAChC,OAAOC,OAAO,MAAM,SAAS;AAAC,SAE5BC,OAAO,EACPC,aAAa,EACbC,QAAQ,EACRC,OAAO,EACPC,WAAW;AAAA;AAKb,IAAMC,GAAG,GAAGP,GAAG,CAACQ,MAAM,CAAC,cAAc,CAAC;AA+BtC;AACA;AACA;AACA,MAAMC,YAAY,SAAStB,aAAa,CAAuC;EAU7E;AACF;AACA;AACA;EACE,OAAOuB,WAAW,CAACC,IAAqB,EAA4B;IAClE,QAAQA,IAAI;MACV,KAAKZ,EAAE,CAACa,IAAI,CAACC,eAAe,CAACC,IAAI;QAC/B,OAAO,MAAM;MACf,KAAKf,EAAE,CAACa,IAAI,CAACC,eAAe,CAACE,GAAG;QAC9B,OAAO,KAAK;MACd,KAAKhB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACG,OAAO;QAClC,OAAO,SAAS;MAClB,KAAKjB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACI,GAAG;QAC9B,OAAO,KAAK;MACd,KAAKlB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACK,SAAS;QACpC,OAAO,WAAW;MACpB;QACE,OAAOP,IAAI;IAAC;EAElB;EAEA,OAAOQ,WAAW,CAACR,IAAqB,EAA6B;IACnE,QAAQA,IAAI;MACV,KAAKZ,EAAE,CAACa,IAAI,CAACC,eAAe,CAACC,IAAI;QAC/B,oBAAO,oBAAC,QAAQ,OAAG;MACrB,KAAKf,EAAE,CAACa,IAAI,CAACC,eAAe,CAACE,GAAG;QAC9B,oBAAO,oBAAC,OAAO,OAAG;MACpB,KAAKhB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACG,OAAO;QAClC,oBAAO,oBAAC,WAAW,OAAG;MACxB,KAAKjB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACI,GAAG;QAC9B,oBAAO,oBAAC,OAAO,OAAG;MACpB,KAAKlB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACK,SAAS;QACpC,oBAAO,oBAAC,aAAa,OAAG;MAC1B;QACE,OAAO,IAAI;IAAC;EAElB;EAEA,OAAOE,iBAAiB,CAACT,IAAqB,EAAU;IACtD,QAAQA,IAAI;MACV,KAAKZ,EAAE,CAACa,IAAI,CAACC,eAAe,CAACI,GAAG;QAC9B,OAAO,CAAC;MACV,KAAKlB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACK,SAAS;QACpC,OAAO,CAAC;MACV;QACE,OAAO,GAAG;IAAC;EAEjB;EAEA,OAAOG,aAAa,CAACV,IAAqB,EAAU;IAClD,QAAQA,IAAI;MACV,KAAKZ,EAAE,CAACa,IAAI,CAACC,eAAe,CAACI,GAAG;QAC9B,OAAO,QAAQ;MACjB,KAAKlB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACK,SAAS;QACpC,OAAO,MAAM;MACf;QACE,OAAO,QAAQ;IAAC;EAEtB;EAEA,OAAOI,cAAc,CAACX,IAAqB,EAAU;IACnD,QAAQA,IAAI;MACV,KAAKZ,EAAE,CAACa,IAAI,CAACC,eAAe,CAACI,GAAG;QAC9B,OAAO,QAAQ;MACjB;QACE,OAAO,QAAQ;IAAC;EAEtB;EAEA,OAAOM,cAAc,CAACC,KAAa,EAAc;IAC/C,OAAO;MAAEC,EAAE,EAAExB,OAAO,CAACyB,QAAQ,EAAE;MAAEF;IAAM,CAAC;EAC1C;EAEA,OAAOG,sBAAsB,CAC3BhB,IAAqB,EACrBiB,OAAiB,EACH;IACd,IAAMC,cAAc,GAAGpB,YAAY,CAACW,iBAAiB,CAACT,IAAI,CAAC;IAC3D,IAAIkB,cAAc,KAAK,CAAC,IAAID,OAAO,IAAI,IAAI,IAAIA,OAAO,CAACE,MAAM,KAAK,CAAC,EAAE;MACnE,OAAO,EAAE;IACX;IAEA,IAAMN,KAAK,GAAGI,OAAO,CAACE,MAAM,GAAG,CAAC,GAAGF,OAAO,CAAC,CAAC,CAAC,CAACG,IAAI,GAAGH,OAAO,CAAC,CAAC,CAAC,CAACG,IAAI;IACpE,OAAO,CAACtB,YAAY,CAACc,cAAc,CAACC,KAAK,CAAC,CAAC;EAC7C;EAEA,OAAOQ,eAAe,CACpBrB,IAAqB,EACrBiB,OAAiB,EACF;IACf,IAAIA,OAAO,IAAI,IAAI,IAAIA,OAAO,CAACE,MAAM,GAAG,CAAC,EAAE;MACzC,OAAOF,OAAO,CAAC,CAAC,CAAC,CAACG,IAAI;IACxB;IAEA,OAAO,IAAI;EACb;EAEAE,WAAW,CAACC,KAAwB,EAAE;IACpC,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,eAAe,GAAG,IAAI,CAACA,eAAe,CAACC,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACC,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACD,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACE,WAAW,GAAG,IAAI,CAACA,WAAW,CAACF,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACG,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACH,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACI,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACJ,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACK,YAAY,GAAG,IAAI,CAACA,YAAY,CAACL,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACM,eAAe,GAAG,IAAI,CAACA,eAAe,CAACN,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACO,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACP,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACQ,UAAU,GAAG,IAAI,CAACA,UAAU,CAACR,IAAI,CAAC,IAAI,CAAC;IAE5C,IAAM;MAAES;IAAM,CAAC,GAAGX,KAAK;IACvB,IAAM;MAAEN;IAAQ,CAAC,GAAGiB,KAAK;IAEzB,IAAMlC,IAAI,GAAGF,YAAY,CAACqC,KAAK,CAAC,CAAC,CAAC;IAClC,IAAMC,KAAK,GAAGtC,YAAY,CAACuB,eAAe,CAACrB,IAAI,EAAEiB,OAAO,CAAW;IACnE,IAAMoB,WAAW,GAAGvC,YAAY,CAACkB,sBAAsB,CAAChB,IAAI,EAAEiB,OAAO,CAAC;IAEtE,IAAI,CAACqB,KAAK,GAAG;MACX;MACAtC,IAAI;MAEJ;MACAqC,WAAW;MAEX;MACAD,KAAK;MAEL;MACAG,QAAQ,EAAE;IACZ,CAAC;EACH;EAEAf,eAAe,GAAS;IACtB,IAAI,CAACgB,QAAQ,CAACF,KAAK,IAAI;MACrB,IAAI;QAAED;MAAY,CAAC,GAAGC,KAAK;MAC3BD,WAAW,GAAG,CAAC,GAAGA,WAAW,CAAC;MAE9B,IAAM;QAAEH;MAAM,CAAC,GAAG,IAAI,CAACX,KAAK;MAC5B,IAAM;QAAEN;MAAQ,CAAC,GAAGiB,KAAK;MACzBG,WAAW,CAACI,IAAI,CAAC;QACf3B,EAAE,EAAExB,OAAO,CAACyB,QAAQ,EAAE;QACtBF,KAAK,EAAEI,OAAO,CAAC,CAAC,CAAC,CAACG;MACpB,CAAC,CAAC;MAEF,OAAO;QAAEiB;MAAY,CAAC;IACxB,CAAC,EAAE,IAAI,CAACJ,UAAU,CAAC;EACrB;EAEAP,qBAAqB,CAACgB,KAA0C,EAAQ;IACtE,IAAI,CAACF,QAAQ,CAAC;MAAED,QAAQ,EAAEG,KAAK,CAACC,MAAM,CAAC9B,KAAK,KAAK;IAAO,CAAC,EAAE,IAAI,CAACoB,UAAU,CAAC;EAC7E;EAEAN,WAAW,GAAS;IAClB,IAAM;MAAEO;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEN;IAAQ,CAAC,GAAGiB,KAAK;IAEzB,IAAMlC,IAAI,GAAGF,YAAY,CAACqC,KAAK,CAAC,CAAC,CAAC;IAClC,IAAMC,KAAK,GAAGtC,YAAY,CAACuB,eAAe,CAACrB,IAAI,EAAEiB,OAAO,CAAW;IACnE,IAAMoB,WAAW,GAAGvC,YAAY,CAACkB,sBAAsB,CAAChB,IAAI,EAAEiB,OAAO,CAAC;IACtE,IAAMsB,QAAQ,GAAG,IAAI;IAErB,IAAI,CAACC,QAAQ,CAAC;MAAExC,IAAI;MAAEqC,WAAW;MAAED,KAAK;MAAEG;IAAS,CAAC,EAAE,IAAI,CAACN,UAAU,CAAC;EACxE;EAEAL,kBAAkB,CAACc,KAA2C,EAAQ;IACpE,IAAM;MAAE7B;IAAM,CAAC,GAAG6B,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,CAACJ,QAAQ,CAACF,KAAK,IAAI;MACrB,IAAI;QAAED;MAAY,CAAC,GAAGC,KAAK;MAE3BD,WAAW,GAAG,CAAC,GAAGA,WAAW,CAAC;MAC9BA,WAAW,CAACS,QAAQ,CAAC,CAACjC,KAAK,GAAGA,KAAK;MAEnC,OAAO;QAAEwB;MAAY,CAAC;IACxB,CAAC,EAAE,IAAI,CAACJ,UAAU,CAAC;EACrB;EAEAJ,uBAAuB,CAACa,KAA0C,EAAQ;IACxE,IAAMM,WAAW,GAAIN,KAAyD;IAC9E,IAAME,KAAK,GAAGI,WAAW,CAACL,MAAM,CAACE,YAAY,CAAC,YAAY,CAAW;IACrE,IAAMC,QAAQ,GAAGC,QAAQ,CAACH,KAAK,EAAE,EAAE,CAAC;IAEpC,IAAI,CAACJ,QAAQ,CAACF,KAAK,IAAI;MACrB,IAAI;QAAED;MAAY,CAAC,GAAGC,KAAK;MAE3BD,WAAW,GAAG,CAAC,GAAGA,WAAW,CAAC;MAC9BA,WAAW,CAACY,MAAM,CAACH,QAAQ,EAAE,CAAC,CAAC;MAE/B,OAAO;QAAET;MAAY,CAAC;IACxB,CAAC,EAAE,IAAI,CAACJ,UAAU,CAAC;EACrB;EAEAH,YAAY,CAACY,KAAuC,EAAQ;IAC1DA,KAAK,CAACQ,cAAc,EAAE;IAEtB,IAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAAC5B,KAAK;IAC/B,IAAM;MAAEvB,IAAI;MAAEqC,WAAW;MAAED,KAAK;MAAEG;IAAS,CAAC,GAAG,IAAI,CAACD,KAAK;IACzD,IAAMc,MAAM,GAAGf,WAAW,CAACgB,GAAG,CAACC,IAAI,IAAIA,IAAI,CAACzC,KAAK,CAAC;IAClDsC,QAAQ,CAAC;MACPnD,IAAI,YAAMA,IAAI,CAAiC;MAC/CoD,MAAM;MACNhB,KAAK;MACLG;IACF,CAAC,CAAC;EACJ;EAEAR,eAAe,CAACW,KAA0C,EAAQ;IAChE,IAAMM,WAAW,GAAIN,KAAyD;IAC9E,IAAME,KAAK,GAAGI,WAAW,CAACL,MAAM,CAACE,YAAY,CAAC,YAAY,CAAW;IACrE,IAAMC,QAAQ,GAAGC,QAAQ,CAACH,KAAK,EAAE,EAAE,CAAC;IAEpC,IAAM5C,IAAI,GAAGF,YAAY,CAACqC,KAAK,CAACW,QAAQ,CAAC;IAEzClD,GAAG,CAAC2D,MAAM,CAAC,kBAAkB,EAAEvD,IAAI,CAAC;IAEpC,IAAI,CAACwC,QAAQ,CAACF,KAAK,IAAI;MACrB,IAAMpB,cAAc,GAAGpB,YAAY,CAACW,iBAAiB,CAACT,IAAI,CAAC;MAC3D,IAAI;QAAEqC;MAAY,CAAC,GAAGC,KAAK;MAC3BD,WAAW,GAAGA,WAAW,CAACmB,KAAK,CAAC,CAAC,EAAEtC,cAAc,CAAC;MAClD,IAAImB,WAAW,CAAClB,MAAM,KAAK,CAAC,IAAID,cAAc,GAAG,CAAC,EAAE;QAClD,IAAM;UAAEgB;QAAM,CAAC,GAAG,IAAI,CAACX,KAAK;QAC5B,IAAM;UAAEN;QAAQ,CAAC,GAAGiB,KAAK;QACzBG,WAAW,GAAGvC,YAAY,CAACkB,sBAAsB,CAAChB,IAAI,EAAEiB,OAAO,CAAC;MAClE;MAEA,OAAO;QAAEjB,IAAI;QAAEqC;MAAY,CAAC;IAC9B,CAAC,EAAE,IAAI,CAACJ,UAAU,CAAC;EACrB;EAEAD,iBAAiB,CAACU,KAA2C,EAAQ;IACnE,IAAMN,KAAK,GAAGM,KAAK,CAACC,MAAM,CAAC9B,KAAK;IAChCjB,GAAG,CAAC2D,MAAM,CAAC,eAAe,EAAEnB,KAAK,CAAC;IAElC,IAAI,CAACI,QAAQ,CAAC;MAAEJ;IAAM,CAAC,EAAE,IAAI,CAACH,UAAU,CAAC;EAC3C;EAEAA,UAAU,GAAS;IACjB,IAAM;MAAEwB;IAAS,CAAC,GAAG,IAAI,CAAClC,KAAK;IAC/B,IAAM;MAAEgB,QAAQ;MAAEvC,IAAI;MAAEqC,WAAW;MAAED;IAAM,CAAC,GAAG,IAAI,CAACE,KAAK;IACzD,IAAMc,MAAM,GAAGf,WAAW,CAACgB,GAAG,CAACC,IAAI,IAAIA,IAAI,CAACzC,KAAK,CAAC;IAElD4C,QAAQ,CAAC;MAAEzD,IAAI;MAAEoD,MAAM;MAAEhB,KAAK;MAAEG;IAAS,CAAC,CAAC;EAC7C;EAEAmB,MAAM,GAAgB;IACpB,IAAM;MAAExB;IAAM,CAAC,GAAG,IAAI,CAACX,KAAK;IAC5B,IAAM;MAAEN;IAAQ,CAAC,GAAGiB,KAAK;IACzB,IAAM;MAAEG,WAAW;MAAErC,IAAI;MAAEoC,KAAK;MAAEG;IAAS,CAAC,GAAG,IAAI,CAACD,KAAK;IACzD,IAAMpB,cAAc,GAAGpB,YAAY,CAACW,iBAAiB,CAACT,IAAI,CAAC;IAC3D,IAAM2D,UAAU,GAAG7D,YAAY,CAACY,aAAa,CAACV,IAAI,CAAC;IACnD,IAAM4D,WAAW,GAAG9D,YAAY,CAACa,cAAc,CAACX,IAAI,CAAC;IACrD,IAAM6D,eAAe,GAAGxB,WAAW,CAAClB,MAAM,GAAG,CAAC;IAC9C,IAAM2C,kBAAkB,GAAGzB,WAAW,CAAClB,MAAM,GAAGD,cAAc;IAE9D,oBACE;MAAK,SAAS,EAAC;IAAe,gBAC5B;MAAM,QAAQ,EAAE,IAAI,CAACY;IAAa,gBAChC;MAAK,SAAS,EAAC;IAAU,gBACvB,mCAAO,mBAAiB,CAAQ,eAChC;MAAK,SAAS,EAAC;IAAU,GACtBhC,YAAY,CAACqC,KAAK,CAACkB,GAAG,CAAC,CAACU,SAAS,EAAEnB,KAAK,KAAK;MAC5C,IAAMoB,GAAG,GAAID,SAAkC;MAC/C,oBACE;QAAK,GAAG,EAAEC,GAAI;QAAC,SAAS,EAAC;MAAoB,gBAC3C;QACE,IAAI,EAAC,QAAQ;QACb,SAAS,EAAEvF,UAAU,CACnB,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB;UACEwF,MAAM,EAAEF,SAAS,KAAK/D;QACxB,CAAC,CACD;QACF,cAAY4C,KAAM;QAClB,OAAO,EAAE,IAAI,CAACb;MAAgB,GAE7BjC,YAAY,CAACU,WAAW,CAACuD,SAAS,CAAC,EACnCjE,YAAY,CAACC,WAAW,CAACgE,SAAS,CAAC,CAC7B,CACL;IAEV,CAAC,CAAC,CACE,CACF,eACN,+BAAM,eACN;MAAK,SAAS,EAAC;IAAsB,gBACnC;MAAO,SAAS,EAAC;IAAkB,GAAEJ,UAAU,CAAS,eACxD;MACE,SAAS,EAAC,8CAA8C;MACxD,KAAK,EAAEvB,KAAM;MACb,QAAQ,EAAE,IAAI,CAACJ;IAAkB,GAEhCf,OAAO,CAACoC,GAAG,CAACa,MAAM,iBACjB;MAAQ,GAAG,EAAEA,MAAM,CAAC9C,IAAK;MAAC,KAAK,EAAE8C,MAAM,CAAC9C;IAAK,GAC1C8C,MAAM,CAAC9C,IAAI,CAEf,CAAC,CACK,CACL,EACLyC,eAAe,iBAAI,+BAAM,EACzBxB,WAAW,CAACgB,GAAG,CAAC,CAACc,UAAU,EAAEC,CAAC,kBAC7B;MACE,SAAS,EAAC,uCAAuC;MACjD,GAAG,EAAED,UAAU,CAACrD,EAAG;MACnB,0CAAiCsD,CAAC;IAAG,gBAErC;MAAO,SAAS,EAAC;IAAkB,GAChCA,CAAC,KAAK,CAAC,GAAGR,WAAW,GAAG,EAAE,CACrB,eACR;MACE,SAAS,EAAC,8CAA8C;MACxD,KAAK,EAAEO,UAAU,CAACtD,KAAM;MACxB,QAAQ,EAAE,IAAI,CAACe,kBAAmB;MAClC,4CAAmCwC,CAAC,CAAG;MACvC,cAAYA;IAAE,GAEbnD,OAAO,CAACoC,GAAG,CAACa,MAAM,iBACjB;MAAQ,GAAG,EAAEA,MAAM,CAAC9C,IAAK;MAAC,KAAK,EAAE8C,MAAM,CAAC9C,IAAK;MAAC,cAAYgD;IAAE,GACzDF,MAAM,CAAC9C,IAAI,CAEf,CAAC,CACK,EACRiB,WAAW,CAAClB,MAAM,GAAG,CAAC,iBACrB,oBAAC,MAAM;MACL,IAAI,EAAC,OAAO;MACZ,SAAS,EAAC,6BAA6B;MACvC,cAAYiD,CAAE;MACd,uCAA8BA,CAAC,CAAG;MAClC,OAAO,EAAE,IAAI,CAACvC,uBAAwB;MACtC,IAAI,EAAE1C,OAAQ;MACd,OAAO,EAAC;IAAQ,EAEnB,CAEJ,CAAC,EACD2E,kBAAkB,iBACjB;MAAK,SAAS,EAAC;IAAU,gBACvB;MAAK,SAAS,EAAC;IAAO,EAAG,eACzB,oBAAC,MAAM;MACL,IAAI,EAAC,OAAO;MACZ,SAAS,EAAC,qBAAqB;MAC/B,OAAO,EAAE,IAAI,CAACtC,eAAgB;MAC9B,IAAI,EAAEvC;IAAuB,GAC9B,YAED,CAAS,CAEZ,eACD;MAAK,SAAS,EAAC;IAA6B,gBAC1C;MAAO,SAAS,EAAC;IAAmB,gBAClC;MAAK,SAAS,EAAC;IAAiB,gBAC9B,oBAAC,eAAe;MACd,IAAI,EAAED,OAAQ;MACd,IAAI,EAAEE,mBAAoB;MAC1B,SAAS,EAAC;IAAgB,EAC1B,eACF,oBAAC,eAAe;MACd,IAAI,EAAEqD,QAAQ,GAAGzD,MAAM,GAAGC,QAAS;MACnC,SAAS,EAAC;IAAuB,EACjC,CACE,CACA,eACR,oBAAC,UAAU;MACT,QAAQ,EAAE,IAAI,CAAC2C,qBAAsB;MACrC,KAAK,YAAKa,QAAQ;IAAG,gBAErB,oBAAC,SAAS;MAAC,KAAK,EAAC;IAAM,GAAC,YAAU,CAAY,eAC9C,oBAAC,SAAS;MAAC,KAAK,EAAC;IAAO,GAAC,cAAY,CAAY,CACtC,CACT,eACN;MAAK,SAAS,EAAC;IAAU,gBACvB;MAAK,SAAS,EAAC;IAAmB,EAAG,eACrC;MAAK,SAAS,EAAC;IAA6B,GACzCA,QAAQ,GACL,8GAA8G,GAC9G,4IAA4I,CAC5I,CACF,eACN;MACE,SAAS,EAAE9D,UAAU,CAAC,UAAU,EAAE,qBAAqB,EAAE,MAAM;IAAE,gBAEjE,oBAAC,MAAM;MACL,IAAI,EAAC,WAAW;MAChB,SAAS,EAAC,WAAW;MACrB,OAAO,EAAE,IAAI,CAACkD;IAAY,GAC3B,OAED,CAAS,eACT,oBAAC,MAAM;MAAC,IAAI,EAAC,SAAS;MAAC,IAAI,EAAC,QAAQ;MAAC,SAAS,EAAC;IAAY,GAAC,QAE5D,CAAS,CACL,CACD,CACH;EAEV;AACF;AAAC,gBAzZK7B,YAAY,WACD,CACbV,EAAE,CAACa,IAAI,CAACC,eAAe,CAACC,IAAI,EAC5Bf,EAAE,CAACa,IAAI,CAACC,eAAe,CAACE,GAAG,EAC3BhB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACG,OAAO,EAC/BjB,EAAE,CAACa,IAAI,CAACC,eAAe,CAACI;AACxB;AACA;AAAA,CACD;;AAmZH,eAAeR,YAAY"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
2
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
3
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
4
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
6
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
5
7
|
import React, { Component } from 'react';
|
|
6
8
|
import classNames from 'classnames';
|
|
7
9
|
import shortid from 'shortid';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomColumnBuilder.js","names":["React","Component","classNames","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","Button","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsWarning","vsPass","CustomColumnInput","IrisGridModel","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","inputs","key","find","input","findIndex","handleAddColumnClick","bind","handleSaveClick","handleInputChange","handleDeleteColumn","handleCustomColumnUpdated","handleRequestFailed","handleDragEnd","resetRequestFailed","handleEditorTabNavigation","state","isCustomColumnApplying","errorMessage","hasRequestFailed","isSuccessShowing","container","successButtonTimer","componentDidMount","customColumns","parseCustomColumns","startListening","componentWillUnmount","stopListening","clearTimeout","resetErrorMessage","setState","model","addEventListener","EVENT","COLUMNS_CHANGED","UPDATED","REQUEST_FAILED","removeEventListener","length","customColumnInputs","map","customColumn","split","newInputs","push","customColumnIndex","getInputIndex","splice","type","value","customColumnInput","getInput","newCustomInput","setTimeout","SUCCESS_SHOW_DURATION","event","customEvent","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","querySelectorAll","focus","nextFocusIndex","onSave","forEach","renderInputs","renderSaveButton","saveText","render","onCancel","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder","undefined"],"sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';\nimport CustomColumnInput from './CustomColumnInput';\nimport './CustomColumnBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nexport type CustomColumnKey = 'eventKey' | 'name' | 'formula';\n\ntype Input = {\n eventKey: string;\n name: string;\n formula: string;\n};\ninterface CustomColumnBuilderProps {\n model: IrisGridModel;\n customColumns: string[];\n onSave: (columns: string[]) => void;\n onCancel: () => void;\n}\n\ninterface CustomColumnBuilderState {\n inputs: Input[];\n isCustomColumnApplying: boolean;\n errorMessage: ReactElement | null;\n hasRequestFailed: boolean;\n isSuccessShowing: boolean;\n}\nclass CustomColumnBuilder extends Component<\n CustomColumnBuilderProps,\n CustomColumnBuilderState\n> {\n static SUCCESS_SHOW_DURATION = 750;\n\n static defaultProps = {\n customColumns: [],\n onSave: (): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static makeCustomColumnInputEventKey(): string {\n return shortid.generate();\n }\n\n static createCustomColumnInput(): Input {\n return {\n eventKey: shortid.generate(),\n name: '',\n formula: '',\n };\n }\n\n constructor(props: CustomColumnBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleSaveClick = this.handleSaveClick.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleCustomColumnUpdated = this.handleCustomColumnUpdated.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.resetRequestFailed = this.resetRequestFailed.bind(this);\n\n this.handleEditorTabNavigation = this.handleEditorTabNavigation.bind(this);\n\n this.state = {\n inputs: [],\n isCustomColumnApplying: false,\n errorMessage: null,\n hasRequestFailed: false,\n isSuccessShowing: false,\n };\n this.container = null;\n this.successButtonTimer = null;\n }\n\n componentDidMount(): void {\n const { customColumns } = this.props;\n this.parseCustomColumns(customColumns);\n this.startListening();\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n if (this.successButtonTimer) {\n clearTimeout(this.successButtonTimer);\n }\n }\n\n container: HTMLDivElement | null;\n\n successButtonTimer: ReturnType<typeof setTimeout> | null;\n\n getInput = memoize((inputs: Input[], key: string) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs: Input[], key: string) =>\n inputs.findIndex(input => input.eventKey === key)\n );\n\n resetErrorMessage(): void {\n this.setState({ errorMessage: null });\n }\n\n startListening(): void {\n const { model } = this.props;\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListening(): void {\n const { model } = this.props;\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n parseCustomColumns(customColumns: string[]): void {\n if (customColumns.length > 0) {\n const customColumnInputs = customColumns.map(customColumn => {\n const input = customColumn.split(/=(.+)/, 2);\n return {\n eventKey: CustomColumnBuilder.makeCustomColumnInputEventKey(),\n name: input[0],\n formula: input[1],\n };\n });\n this.setState({ inputs: customColumnInputs });\n } else {\n this.setState({\n inputs: [CustomColumnBuilder.createCustomColumnInput()],\n });\n }\n }\n\n handleAddColumnClick(): void {\n const { inputs } = this.state;\n const newInputs = [...inputs];\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleDeleteColumn(eventKey: string): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1);\n if (newInputs.length === 0) {\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n }\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleInputChange(\n eventKey: string,\n type: CustomColumnKey,\n value: string\n ): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const customColumnInput = this.getInput(inputs, eventKey);\n\n const newCustomInput = { ...customColumnInput } as Input;\n newCustomInput[type] = value;\n\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1, newCustomInput);\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleCustomColumnUpdated(): void {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState(\n { isCustomColumnApplying: false, isSuccessShowing: true },\n () => {\n this.successButtonTimer = setTimeout(\n () => this.setState({ isSuccessShowing: false }),\n CustomColumnBuilder.SUCCESS_SHOW_DURATION\n );\n }\n );\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n\n this.setState({\n isCustomColumnApplying: false,\n errorMessage: (\n <>\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Failed to apply custom columns.\n </p>\n <div className=\"error-box\">\n {customEvent.detail.errorMessage}\n <br />\n Table configuration:{' '}\n {JSON.stringify(customEvent.detail.configuration)}\n </div>\n </>\n ),\n hasRequestFailed: true,\n });\n }\n\n handleDragEnd(result: DropResult): void {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (!result.destination) {\n return;\n }\n const { inputs } = this.state;\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const newInputs = [...inputs];\n const sourceInput = inputs[sourceIndex];\n\n newInputs.splice(sourceIndex, 1);\n newInputs.splice(destinationIndex, 0, sourceInput);\n\n this.setState({ inputs: newInputs });\n }\n\n handleEditorTabNavigation(focusEditorIndex: number, shiftKey: boolean): void {\n const { inputs } = this.state;\n // focus on drag handle\n if (shiftKey) {\n (this.container?.querySelectorAll(`.btn-drag-handle`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n (this.container?.querySelectorAll(`.btn-add-column`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n (this.container?.querySelectorAll(`.custom-column-input`)[\n nextFocusIndex\n ] as HTMLInputElement).focus();\n }\n }\n\n handleSaveClick(): void {\n const { onSave } = this.props;\n const { inputs, isCustomColumnApplying } = this.state;\n if (isCustomColumnApplying) {\n return;\n }\n const customColumns = [] as string[];\n inputs.forEach(input => {\n const { name, formula } = input;\n if (name && formula) {\n customColumns.push(`${name}=${formula}`);\n }\n });\n this.resetErrorMessage();\n this.setState({ isCustomColumnApplying: true });\n onSave(customColumns);\n }\n\n resetRequestFailed(): void {\n this.setState(({ hasRequestFailed }) => {\n if (hasRequestFailed) {\n return { hasRequestFailed: false };\n }\n return null;\n });\n }\n\n renderInputs(): ReactElement[] {\n const { inputs, hasRequestFailed } = this.state;\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n return (\n <CustomColumnInput\n key={eventKey}\n inputIndex={index}\n eventKey={eventKey}\n name={name}\n formula={formula}\n onChange={this.handleInputChange}\n onDeleteColumn={this.handleDeleteColumn}\n onTabInEditor={this.handleEditorTabNavigation}\n invalid={hasRequestFailed}\n />\n );\n });\n }\n\n renderSaveButton(): ReactElement {\n const { inputs, isCustomColumnApplying, isSuccessShowing } = this.state;\n const saveText = inputs.length > 1 ? 'Save Columns' : 'Save Column';\n\n return (\n <Button\n kind={isSuccessShowing ? 'success' : 'primary'}\n className={classNames('btn-apply', {\n 'btn-spinner': isCustomColumnApplying,\n })}\n disabled={isSuccessShowing || isCustomColumnApplying}\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Applying</span>\n <span className=\"btn-hover-content\">Applying</span>\n </span>\n )}\n {!isSuccessShowing && !isCustomColumnApplying && saveText}\n {isSuccessShowing && (\n <>\n <FontAwesomeIcon icon={vsPass} /> Success\n </>\n )}\n </Button>\n );\n }\n\n render(): ReactElement {\n const { onCancel } = this.props;\n const { errorMessage } = this.state;\n return (\n <div\n role=\"presentation\"\n className=\"custom-column-builder-container\"\n ref={container => {\n this.container = container;\n }}\n onClick={this.resetRequestFailed}\n onFocus={this.resetRequestFailed}\n >\n <hr />\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={this.handleDragEnd}\n >\n <Droppable droppableId=\"droppable-custom-columns\">\n {(provided, snapshot) => (\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith,\n })}\n >\n {this.renderInputs()}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n <div className=\"pt-1 px-3\">\n <Button\n kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n icon={dhNewCircleLargeFilled}\n >\n Add Another Column\n </Button>\n </div>\n\n <div className=\"custom-column-builder-footer\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n\n <div className=\"d-flex justify-content-end\">\n <Button kind=\"secondary\" className=\"mr-2\" onClick={onCancel}>\n Cancel\n </Button>\n {this.renderSaveButton()}\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomColumnBuilder;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CustomColumnBuilder.js","names":["React","Component","classNames","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","Button","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsWarning","vsPass","CustomColumnInput","IrisGridModel","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","inputs","key","find","input","findIndex","handleAddColumnClick","bind","handleSaveClick","handleInputChange","handleDeleteColumn","handleCustomColumnUpdated","handleRequestFailed","handleDragEnd","resetRequestFailed","handleEditorTabNavigation","state","isCustomColumnApplying","errorMessage","hasRequestFailed","isSuccessShowing","container","successButtonTimer","componentDidMount","customColumns","parseCustomColumns","startListening","componentWillUnmount","stopListening","clearTimeout","resetErrorMessage","setState","model","addEventListener","EVENT","COLUMNS_CHANGED","UPDATED","REQUEST_FAILED","removeEventListener","length","customColumnInputs","map","customColumn","split","newInputs","push","customColumnIndex","getInputIndex","splice","type","value","customColumnInput","getInput","newCustomInput","setTimeout","SUCCESS_SHOW_DURATION","event","customEvent","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","querySelectorAll","focus","nextFocusIndex","onSave","forEach","renderInputs","renderSaveButton","saveText","render","onCancel","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder","undefined"],"sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';\nimport CustomColumnInput from './CustomColumnInput';\nimport './CustomColumnBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nexport type CustomColumnKey = 'eventKey' | 'name' | 'formula';\n\ntype Input = {\n eventKey: string;\n name: string;\n formula: string;\n};\ninterface CustomColumnBuilderProps {\n model: IrisGridModel;\n customColumns: string[];\n onSave: (columns: string[]) => void;\n onCancel: () => void;\n}\n\ninterface CustomColumnBuilderState {\n inputs: Input[];\n isCustomColumnApplying: boolean;\n errorMessage: ReactElement | null;\n hasRequestFailed: boolean;\n isSuccessShowing: boolean;\n}\nclass CustomColumnBuilder extends Component<\n CustomColumnBuilderProps,\n CustomColumnBuilderState\n> {\n static SUCCESS_SHOW_DURATION = 750;\n\n static defaultProps = {\n customColumns: [],\n onSave: (): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static makeCustomColumnInputEventKey(): string {\n return shortid.generate();\n }\n\n static createCustomColumnInput(): Input {\n return {\n eventKey: shortid.generate(),\n name: '',\n formula: '',\n };\n }\n\n constructor(props: CustomColumnBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleSaveClick = this.handleSaveClick.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleCustomColumnUpdated = this.handleCustomColumnUpdated.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.resetRequestFailed = this.resetRequestFailed.bind(this);\n\n this.handleEditorTabNavigation = this.handleEditorTabNavigation.bind(this);\n\n this.state = {\n inputs: [],\n isCustomColumnApplying: false,\n errorMessage: null,\n hasRequestFailed: false,\n isSuccessShowing: false,\n };\n this.container = null;\n this.successButtonTimer = null;\n }\n\n componentDidMount(): void {\n const { customColumns } = this.props;\n this.parseCustomColumns(customColumns);\n this.startListening();\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n if (this.successButtonTimer) {\n clearTimeout(this.successButtonTimer);\n }\n }\n\n container: HTMLDivElement | null;\n\n successButtonTimer: ReturnType<typeof setTimeout> | null;\n\n getInput = memoize((inputs: Input[], key: string) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs: Input[], key: string) =>\n inputs.findIndex(input => input.eventKey === key)\n );\n\n resetErrorMessage(): void {\n this.setState({ errorMessage: null });\n }\n\n startListening(): void {\n const { model } = this.props;\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListening(): void {\n const { model } = this.props;\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n parseCustomColumns(customColumns: string[]): void {\n if (customColumns.length > 0) {\n const customColumnInputs = customColumns.map(customColumn => {\n const input = customColumn.split(/=(.+)/, 2);\n return {\n eventKey: CustomColumnBuilder.makeCustomColumnInputEventKey(),\n name: input[0],\n formula: input[1],\n };\n });\n this.setState({ inputs: customColumnInputs });\n } else {\n this.setState({\n inputs: [CustomColumnBuilder.createCustomColumnInput()],\n });\n }\n }\n\n handleAddColumnClick(): void {\n const { inputs } = this.state;\n const newInputs = [...inputs];\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleDeleteColumn(eventKey: string): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1);\n if (newInputs.length === 0) {\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n }\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleInputChange(\n eventKey: string,\n type: CustomColumnKey,\n value: string\n ): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const customColumnInput = this.getInput(inputs, eventKey);\n\n const newCustomInput = { ...customColumnInput } as Input;\n newCustomInput[type] = value;\n\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1, newCustomInput);\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleCustomColumnUpdated(): void {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState(\n { isCustomColumnApplying: false, isSuccessShowing: true },\n () => {\n this.successButtonTimer = setTimeout(\n () => this.setState({ isSuccessShowing: false }),\n CustomColumnBuilder.SUCCESS_SHOW_DURATION\n );\n }\n );\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n\n this.setState({\n isCustomColumnApplying: false,\n errorMessage: (\n <>\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Failed to apply custom columns.\n </p>\n <div className=\"error-box\">\n {customEvent.detail.errorMessage}\n <br />\n Table configuration:{' '}\n {JSON.stringify(customEvent.detail.configuration)}\n </div>\n </>\n ),\n hasRequestFailed: true,\n });\n }\n\n handleDragEnd(result: DropResult): void {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (!result.destination) {\n return;\n }\n const { inputs } = this.state;\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const newInputs = [...inputs];\n const sourceInput = inputs[sourceIndex];\n\n newInputs.splice(sourceIndex, 1);\n newInputs.splice(destinationIndex, 0, sourceInput);\n\n this.setState({ inputs: newInputs });\n }\n\n handleEditorTabNavigation(focusEditorIndex: number, shiftKey: boolean): void {\n const { inputs } = this.state;\n // focus on drag handle\n if (shiftKey) {\n (this.container?.querySelectorAll(`.btn-drag-handle`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n (this.container?.querySelectorAll(`.btn-add-column`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n (this.container?.querySelectorAll(`.custom-column-input`)[\n nextFocusIndex\n ] as HTMLInputElement).focus();\n }\n }\n\n handleSaveClick(): void {\n const { onSave } = this.props;\n const { inputs, isCustomColumnApplying } = this.state;\n if (isCustomColumnApplying) {\n return;\n }\n const customColumns = [] as string[];\n inputs.forEach(input => {\n const { name, formula } = input;\n if (name && formula) {\n customColumns.push(`${name}=${formula}`);\n }\n });\n this.resetErrorMessage();\n this.setState({ isCustomColumnApplying: true });\n onSave(customColumns);\n }\n\n resetRequestFailed(): void {\n this.setState(({ hasRequestFailed }) => {\n if (hasRequestFailed) {\n return { hasRequestFailed: false };\n }\n return null;\n });\n }\n\n renderInputs(): ReactElement[] {\n const { inputs, hasRequestFailed } = this.state;\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n return (\n <CustomColumnInput\n key={eventKey}\n inputIndex={index}\n eventKey={eventKey}\n name={name}\n formula={formula}\n onChange={this.handleInputChange}\n onDeleteColumn={this.handleDeleteColumn}\n onTabInEditor={this.handleEditorTabNavigation}\n invalid={hasRequestFailed}\n />\n );\n });\n }\n\n renderSaveButton(): ReactElement {\n const { inputs, isCustomColumnApplying, isSuccessShowing } = this.state;\n const saveText = inputs.length > 1 ? 'Save Columns' : 'Save Column';\n\n return (\n <Button\n kind={isSuccessShowing ? 'success' : 'primary'}\n className={classNames('btn-apply', {\n 'btn-spinner': isCustomColumnApplying,\n })}\n disabled={isSuccessShowing || isCustomColumnApplying}\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Applying</span>\n <span className=\"btn-hover-content\">Applying</span>\n </span>\n )}\n {!isSuccessShowing && !isCustomColumnApplying && saveText}\n {isSuccessShowing && (\n <>\n <FontAwesomeIcon icon={vsPass} /> Success\n </>\n )}\n </Button>\n );\n }\n\n render(): ReactElement {\n const { onCancel } = this.props;\n const { errorMessage } = this.state;\n return (\n <div\n role=\"presentation\"\n className=\"custom-column-builder-container\"\n ref={container => {\n this.container = container;\n }}\n onClick={this.resetRequestFailed}\n onFocus={this.resetRequestFailed}\n >\n <hr />\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={this.handleDragEnd}\n >\n <Droppable droppableId=\"droppable-custom-columns\">\n {(provided, snapshot) => (\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith,\n })}\n >\n {this.renderInputs()}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n <div className=\"pt-1 px-3\">\n <Button\n kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n icon={dhNewCircleLargeFilled}\n >\n Add Another Column\n </Button>\n </div>\n\n <div className=\"custom-column-builder-footer\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n\n <div className=\"d-flex justify-content-end\">\n <Button kind=\"secondary\" className=\"mr-2\" onClick={onCancel}>\n Cancel\n </Button>\n {this.renderSaveButton()}\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomColumnBuilder;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
3
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
4
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
3
5
|
import React, { PureComponent } from 'react';
|
|
4
6
|
import classNames from 'classnames';
|
|
5
7
|
import { Draggable } from 'react-beautiful-dnd';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomColumnInput.js","names":["React","PureComponent","classNames","Draggable","FontAwesomeIcon","Button","Tooltip","vsTrash","vsGripper","InputEditor","CustomColumnInput","constructor","props","handleFormulaEditorContentChanged","bind","formulaValue","onChange","eventKey","undefined","replace","INPUT_TYPE","FORMULA","render","name","formula","onDeleteColumn","inputIndex","onTabInEditor","invalid","provided","snapshot","dragging","isDragging","innerRef","draggableProps","event","NAME","target","value","dragHandleProps","language"],"sources":["../../src/sidebar/CustomColumnInput.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, Tooltip } from '@deephaven/components';\nimport { vsTrash, vsGripper } from '@deephaven/icons';\nimport InputEditor from './InputEditor';\nimport { CustomColumnKey } from './CustomColumnBuilder';\n\ninterface 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}\nclass CustomColumnInput extends PureComponent<\n CustomColumnInputProps,\n Record<string, never>\n> {\n static INPUT_TYPE = {\n NAME: 'name',\n FORMULA: 'formula',\n };\n\n static defaultProps = {\n name: '',\n inputIndex: 0,\n formula: '',\n onChange: (): void => undefined,\n onDeleteColumn: (): void => undefined,\n onTabInEditor: (): void => undefined,\n invalid: false,\n };\n\n constructor(props: CustomColumnInputProps) {\n super(props);\n this.handleFormulaEditorContentChanged = this.handleFormulaEditorContentChanged.bind(\n this\n );\n }\n\n handleFormulaEditorContentChanged(formulaValue?: string): void {\n const { onChange, eventKey } = this.props;\n if (formulaValue !== undefined && formulaValue !== '') {\n formulaValue.replace(/(\\r\\n|\\n|\\r)/gm, ''); // remove line break\n onChange(\n eventKey,\n CustomColumnInput.INPUT_TYPE.FORMULA as CustomColumnKey,\n formulaValue\n );\n }\n }\n\n render(): ReactElement {\n const {\n eventKey,\n name,\n formula,\n onChange,\n onDeleteColumn,\n inputIndex,\n onTabInEditor,\n invalid,\n } = this.props;\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=\"d-flex flex-row pb-3 custom-column-name\">\n <input\n className={classNames('form-control custom-column-input', {\n 'is-invalid': invalid,\n })}\n placeholder=\"Column Name\"\n value={name}\n onChange={event => {\n onChange(\n eventKey,\n CustomColumnInput.INPUT_TYPE.NAME as CustomColumnKey,\n event.target.value\n );\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 type=\"button\"\n className=\"btn btn-link btn-link-icon px-2 btn-drag-handle\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n <Tooltip>Drag column to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </button>\n </div>\n <InputEditor\n editorSettings={{ language: 'deephavenDb' }}\n editorIndex={inputIndex}\n value={formula}\n onContentChanged={this.handleFormulaEditorContentChanged}\n onTab={onTabInEditor}\n invalid={invalid}\n />\n </div>\n <hr />\n </div>\n )}\n </Draggable>\n );\n }\n}\n\nexport default CustomColumnInput;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"CustomColumnInput.js","names":["React","PureComponent","classNames","Draggable","FontAwesomeIcon","Button","Tooltip","vsTrash","vsGripper","InputEditor","CustomColumnInput","constructor","props","handleFormulaEditorContentChanged","bind","formulaValue","onChange","eventKey","undefined","replace","INPUT_TYPE","FORMULA","render","name","formula","onDeleteColumn","inputIndex","onTabInEditor","invalid","provided","snapshot","dragging","isDragging","innerRef","draggableProps","event","NAME","target","value","dragHandleProps","language"],"sources":["../../src/sidebar/CustomColumnInput.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, Tooltip } from '@deephaven/components';\nimport { vsTrash, vsGripper } from '@deephaven/icons';\nimport InputEditor from './InputEditor';\nimport { CustomColumnKey } from './CustomColumnBuilder';\n\ninterface 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}\nclass CustomColumnInput extends PureComponent<\n CustomColumnInputProps,\n Record<string, never>\n> {\n static INPUT_TYPE = {\n NAME: 'name',\n FORMULA: 'formula',\n };\n\n static defaultProps = {\n name: '',\n inputIndex: 0,\n formula: '',\n onChange: (): void => undefined,\n onDeleteColumn: (): void => undefined,\n onTabInEditor: (): void => undefined,\n invalid: false,\n };\n\n constructor(props: CustomColumnInputProps) {\n super(props);\n this.handleFormulaEditorContentChanged = this.handleFormulaEditorContentChanged.bind(\n this\n );\n }\n\n handleFormulaEditorContentChanged(formulaValue?: string): void {\n const { onChange, eventKey } = this.props;\n if (formulaValue !== undefined && formulaValue !== '') {\n formulaValue.replace(/(\\r\\n|\\n|\\r)/gm, ''); // remove line break\n onChange(\n eventKey,\n CustomColumnInput.INPUT_TYPE.FORMULA as CustomColumnKey,\n formulaValue\n );\n }\n }\n\n render(): ReactElement {\n const {\n eventKey,\n name,\n formula,\n onChange,\n onDeleteColumn,\n inputIndex,\n onTabInEditor,\n invalid,\n } = this.props;\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=\"d-flex flex-row pb-3 custom-column-name\">\n <input\n className={classNames('form-control custom-column-input', {\n 'is-invalid': invalid,\n })}\n placeholder=\"Column Name\"\n value={name}\n onChange={event => {\n onChange(\n eventKey,\n CustomColumnInput.INPUT_TYPE.NAME as CustomColumnKey,\n event.target.value\n );\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 type=\"button\"\n className=\"btn btn-link btn-link-icon px-2 btn-drag-handle\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n <Tooltip>Drag column to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </button>\n </div>\n <InputEditor\n editorSettings={{ language: 'deephavenDb' }}\n editorIndex={inputIndex}\n value={formula}\n onContentChanged={this.handleFormulaEditorContentChanged}\n onTab={onTabInEditor}\n invalid={invalid}\n />\n </div>\n <hr />\n </div>\n )}\n </Draggable>\n );\n }\n}\n\nexport default CustomColumnInput;\n"],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
2
2
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
3
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
3
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
4
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
5
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
4
6
|
import React, { Component } from 'react';
|
|
5
7
|
import * as monaco from 'monaco-editor';
|
|
6
8
|
import classNames from 'classnames';
|
|
@@ -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","onDidChangeModelContent","onDidFocusEditorText","onDidBlurEditorText","dispose","undefined","onContentChanged","getValue","setState","length","focus","event","onTab","editorIndex","key","shiftKey","render","invalid","focused"],"sources":["../../src/sidebar/InputEditor.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport * as monaco from 'monaco-editor';\nimport classNames from 'classnames';\nimport './InputEditor.scss';\n\ninterface InputEditorProps {\n value: string;\n onContentChanged: (value?: string) => void;\n editorSettings: Partial<monaco.editor.IStandaloneEditorConstructionOptions>;\n editorIndex: number;\n onTab: (editorIndex: number, shiftKey: boolean) => void;\n invalid: boolean;\n}\n\ninterface InputEditorState {\n isEditorFocused: boolean;\n isEditorEmpty: boolean;\n}\n/**\n * A monaco editor that looks like an general input\n */\n\nexport default class InputEditor extends Component<\n InputEditorProps,\n InputEditorState\n> {\n static defaultProps = {\n value: '',\n onContentChanged: (): void => undefined,\n editorSettings: {},\n editorIndex: 0,\n onTab: (): void => undefined,\n invalid: false,\n };\n\n constructor(props: InputEditorProps) {\n super(props);\n\n this.handleContentChanged = this.handleContentChanged.bind(this);\n this.handleEditorFocus = this.handleEditorFocus.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleContainerClick = this.handleContainerClick.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n\n this.state = {\n isEditorFocused: false,\n isEditorEmpty: true,\n };\n this.editorContainer = null;\n }\n\n componentDidMount(): void {\n this.initEditor();\n }\n\n componentWillUnmount(): void {\n this.destroyEditor();\n }\n\n editorContainer: HTMLDivElement | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n initEditor(): void {\n const { value, editorSettings } = this.props;\n const inputEditorSettings = {\n copyWithSyntaxHighlighting: 'false',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'groovyDB',\n lineDecorationsWidth: 8,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n scrollBeyondLastLine: false,\n padding: {\n top: 6,\n bottom: 6,\n },\n tabCompletion: 'off',\n useTabStops: true,\n value,\n wordWrap: 'on',\n automaticLayout: true,\n ...editorSettings,\n } as monaco.editor.IStandaloneEditorConstructionOptions;\n if (!this.editorContainer) {\n throw new Error('editorContainer is null');\n }\n this.editor = monaco.editor.create(\n this.editorContainer,\n inputEditorSettings\n );\n this.editor.layout();\n\n // disable tab to spaces in this editor to improve tab navigation\n this.editor.getModel()?.updateOptions({ tabSize: 0 });\n\n 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 !== '' && 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 if (value === undefined || value === '') {\n throw new Error('value is undefined');\n }\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: React.KeyboardEvent<HTMLDivElement>): void {\n const { onTab, editorIndex } = this.props;\n if (event.key === 'Tab') {\n onTab(editorIndex, event.shiftKey);\n }\n }\n\n render(): ReactElement {\n const { value, invalid } = this.props;\n const { isEditorFocused, isEditorEmpty } = this.state;\n return (\n <div\n className={classNames('input-editor-wrapper', {\n focused: isEditorFocused,\n invalid,\n })}\n onKeyDown={this.handleKeyDown}\n role=\"presentation\"\n onClick={this.handleContainerClick}\n >\n <div\n className=\"editor-container\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n {isEditorEmpty && !value && (\n <div className=\"editor-placeholder text-muted\">Column Formula</div>\n )}\n </div>\n );\n }\n}\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAsB,OAAO;AACtD,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAOC,UAAU,MAAM,YAAY;AAAC;AAgBpC;AACA;AACA;;AAEA,eAAe,MAAMC,WAAW,SAASH,SAAS,CAGhD;EAUAI,WAAW,CAACC,KAAuB,EAAE;IACnC,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA;IAEb,IAAI,CAACC,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACC,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACD,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACE,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACF,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACG,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACH,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACI,aAAa,GAAG,IAAI,CAACA,aAAa,CAACJ,IAAI,CAAC,IAAI,CAAC;IAElD,IAAI,CAACK,KAAK,GAAG;MACXC,eAAe,EAAE,KAAK;MACtBC,aAAa,EAAE;IACjB,CAAC;IACD,IAAI,CAACC,eAAe,GAAG,IAAI;EAC7B;EAEAC,iBAAiB,GAAS;IACxB,IAAI,CAACC,UAAU,EAAE;EACnB;EAEAC,oBAAoB,GAAS;IAC3B,IAAI,CAACC,aAAa,EAAE;EACtB;EAMAF,UAAU,GAAS;IAAA;IACjB,IAAM;MAAEG,KAAK;MAAEC;IAAe,CAAC,GAAG,IAAI,CAAChB,KAAK;IAC5C,IAAMiB,mBAAmB;MACvBC,0BAA0B,EAAE,OAAO;MACnCC,oBAAoB,EAAE,IAAI;MAC1BC,OAAO,EAAE,KAAK;MACdC,UAAU,EAAE,WAAW;MACvBC,WAAW,EAAE,KAAK;MAClBC,QAAQ,EAAE,UAAU;MACpBC,oBAAoB,EAAE,CAAC;MACvBC,WAAW,EAAE,KAAK;MAClBC,OAAO,EAAE;QAAEC,OAAO,EAAE;MAAM,CAAC;MAC3BC,mBAAmB,EAAE,MAAM;MAC3BC,SAAS,EAAE;QACTC,SAAS,EAAE,CAAC;QACZC,UAAU,EAAE,QAAQ;QACpBC,uBAAuB,EAAE;MAC3B,CAAC;MACDC,oBAAoB,EAAE,KAAK;MAC3BC,OAAO,EAAE;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE;MACV,CAAC;MACDC,aAAa,EAAE,KAAK;MACpBC,WAAW,EAAE,IAAI;MACjBvB,KAAK;MACLwB,QAAQ,EAAE,IAAI;MACdC,eAAe,EAAE;IAAI,GAClBxB,cAAc,CACoC;IACvD,IAAI,CAAC,IAAI,CAACN,eAAe,EAAE;MACzB,MAAM,IAAI+B,KAAK,CAAC,yBAAyB,CAAC;IAC5C;IACA,IAAI,CAACC,MAAM,GAAG9C,MAAM,CAAC8C,MAAM,CAACC,MAAM,CAChC,IAAI,CAACjC,eAAe,EACpBO,mBAAmB,CACpB;IACD,IAAI,CAACyB,MAAM,CAACE,MAAM,EAAE;;IAEpB;IACA,6BAAI,CAACF,MAAM,CAACG,QAAQ,EAAE,0DAAtB,sBAAwBC,aAAa,CAAC;MAAEC,OAAO,EAAE;IAAE,CAAC,CAAC;IAErD,IAAI,CAACL,MAAM,CAACM,uBAAuB,CAAC,IAAI,CAAC/C,oBAAoB,CAAC;IAC9D,IAAI,CAACyC,MAAM,CAACO,oBAAoB,CAAC,IAAI,CAAC9C,iBAAiB,CAAC;IACxD,IAAI,CAACuC,MAAM,CAACQ,mBAAmB,CAAC,IAAI,CAAC9C,gBAAgB,CAAC;EACxD;EAEAU,aAAa,GAAS;IAAA;IACpB,oBAAI,CAAC4B,MAAM,iDAAX,aAAaS,OAAO,EAAE;IACtB,IAAI,CAACT,MAAM,GAAGU,SAAS;EACzB;EAEAnD,oBAAoB,GAAS;IAAA;IAC3B,IAAM;MAAEoD;IAAiB,CAAC,GAAG,IAAI,CAACrD,KAAK;IACvC,IAAMe,KAAK,oBAAG,IAAI,CAAC2B,MAAM,2EAAX,cAAaG,QAAQ,EAAE,0DAAvB,sBAAyBS,QAAQ,EAAE;IACjD,IAAIvC,KAAK,KAAK,EAAE,IAAIA,KAAK,KAAKqC,SAAS,EAAE;MACvC,IAAI,CAACG,QAAQ,CAAC;QAAE9C,aAAa,EAAEM,KAAK,CAACyC,MAAM,KAAK;MAAE,CAAC,CAAC;IACtD;IACAH,gBAAgB,CAACtC,KAAK,CAAC;EACzB;EAEAZ,iBAAiB,GAAS;IACxB,IAAI,CAACoD,QAAQ,CAAC;MAAE/C,eAAe,EAAE;IAAK,CAAC,CAAC;EAC1C;EAEAJ,gBAAgB,GAAS;IAAA;IACvB,IAAMW,KAAK,oBAAG,IAAI,CAAC2B,MAAM,2EAAX,cAAaG,QAAQ,EAAE,0DAAvB,sBAAyBS,QAAQ,EAAE;IACjD,IAAIvC,KAAK,KAAKqC,SAAS,IAAIrC,KAAK,KAAK,EAAE,EAAE;MACvC,MAAM,IAAI0B,KAAK,CAAC,oBAAoB,CAAC;IACvC;IACA,IAAI,CAACc,QAAQ,CAAC;MACZ9C,aAAa,EAAEM,KAAK,CAACyC,MAAM,KAAK,CAAC;MACjChD,eAAe,EAAE;IACnB,CAAC,CAAC;EACJ;;EAEA;EACAH,oBAAoB,GAAS;IAAA;IAC3B,IAAM;MAAEG;IAAgB,CAAC,GAAG,IAAI,CAACD,KAAK;IACtC,IAAIC,eAAe,EAAE;MACnB;IACF;IACA,qBAAI,CAACkC,MAAM,kDAAX,cAAae,KAAK,EAAE;EACtB;EAEAnD,aAAa,CAACoD,KAA0C,EAAQ;IAC9D,IAAM;MAAEC,KAAK;MAAEC;IAAY,CAAC,GAAG,IAAI,CAAC5D,KAAK;IACzC,IAAI0D,KAAK,CAACG,GAAG,KAAK,KAAK,EAAE;MACvBF,KAAK,CAACC,WAAW,EAAEF,KAAK,CAACI,QAAQ,CAAC;IACpC;EACF;EAEAC,MAAM,GAAiB;IACrB,IAAM;MAAEhD,KAAK;MAAEiD;IAAQ,CAAC,GAAG,IAAI,CAAChE,KAAK;IACrC,IAAM;MAAEQ,eAAe;MAAEC;IAAc,CAAC,GAAG,IAAI,CAACF,KAAK;IACrD,oBACE;MACE,SAAS,EAAEV,UAAU,CAAC,sBAAsB,EAAE;QAC5CoE,OAAO,EAAEzD,eAAe;QACxBwD;MACF,CAAC,CAAE;MACH,SAAS,EAAE,IAAI,CAAC1D,aAAc;MAC9B,IAAI,EAAC,cAAc;MACnB,OAAO,EAAE,IAAI,CAACD;IAAqB,gBAEnC;MACE,SAAS,EAAC,kBAAkB;MAC5B,GAAG,EAAEK,eAAe,IAAI;QACtB,IAAI,CAACA,eAAe,GAAGA,eAAe;MACxC;IAAE,EACF,EACDD,aAAa,IAAI,CAACM,KAAK,iBACtB;MAAK,SAAS,EAAC;IAA+B,oBAC/C,CACG;EAEV;AACF;AAAC,gBA9JoBjB,WAAW,kBAIR;EACpBiB,KAAK,EAAE,EAAE;EACTsC,gBAAgB,EAAE,MAAYD,SAAS;EACvCpC,cAAc,EAAE,CAAC,CAAC;EAClB4C,WAAW,EAAE,CAAC;EACdD,KAAK,EAAE,MAAYP,SAAS;EAC5BY,OAAO,EAAE;AACX,CAAC"}
|
|
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","onDidChangeModelContent","onDidFocusEditorText","onDidBlurEditorText","dispose","undefined","onContentChanged","getValue","setState","length","focus","event","onTab","editorIndex","key","shiftKey","render","invalid","focused"],"sources":["../../src/sidebar/InputEditor.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport * as monaco from 'monaco-editor';\nimport classNames from 'classnames';\nimport './InputEditor.scss';\n\ninterface InputEditorProps {\n value: string;\n onContentChanged: (value?: string) => void;\n editorSettings: Partial<monaco.editor.IStandaloneEditorConstructionOptions>;\n editorIndex: number;\n onTab: (editorIndex: number, shiftKey: boolean) => void;\n invalid: boolean;\n}\n\ninterface InputEditorState {\n isEditorFocused: boolean;\n isEditorEmpty: boolean;\n}\n/**\n * A monaco editor that looks like an general input\n */\n\nexport default class InputEditor extends Component<\n InputEditorProps,\n InputEditorState\n> {\n static defaultProps = {\n value: '',\n onContentChanged: (): void => undefined,\n editorSettings: {},\n editorIndex: 0,\n onTab: (): void => undefined,\n invalid: false,\n };\n\n constructor(props: InputEditorProps) {\n super(props);\n\n this.handleContentChanged = this.handleContentChanged.bind(this);\n this.handleEditorFocus = this.handleEditorFocus.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleContainerClick = this.handleContainerClick.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n\n this.state = {\n isEditorFocused: false,\n isEditorEmpty: true,\n };\n this.editorContainer = null;\n }\n\n componentDidMount(): void {\n this.initEditor();\n }\n\n componentWillUnmount(): void {\n this.destroyEditor();\n }\n\n editorContainer: HTMLDivElement | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n initEditor(): void {\n const { value, editorSettings } = this.props;\n const inputEditorSettings = {\n copyWithSyntaxHighlighting: 'false',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'groovyDB',\n lineDecorationsWidth: 8,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n scrollBeyondLastLine: false,\n padding: {\n top: 6,\n bottom: 6,\n },\n tabCompletion: 'off',\n useTabStops: true,\n value,\n wordWrap: 'on',\n automaticLayout: true,\n ...editorSettings,\n } as monaco.editor.IStandaloneEditorConstructionOptions;\n if (!this.editorContainer) {\n throw new Error('editorContainer is null');\n }\n this.editor = monaco.editor.create(\n this.editorContainer,\n inputEditorSettings\n );\n this.editor.layout();\n\n // disable tab to spaces in this editor to improve tab navigation\n this.editor.getModel()?.updateOptions({ tabSize: 0 });\n\n 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 !== '' && 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 if (value === undefined || value === '') {\n throw new Error('value is undefined');\n }\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: React.KeyboardEvent<HTMLDivElement>): void {\n const { onTab, editorIndex } = this.props;\n if (event.key === 'Tab') {\n onTab(editorIndex, event.shiftKey);\n }\n }\n\n render(): ReactElement {\n const { value, invalid } = this.props;\n const { isEditorFocused, isEditorEmpty } = this.state;\n return (\n <div\n className={classNames('input-editor-wrapper', {\n focused: isEditorFocused,\n invalid,\n })}\n onKeyDown={this.handleKeyDown}\n role=\"presentation\"\n onClick={this.handleContainerClick}\n >\n <div\n className=\"editor-container\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n {isEditorEmpty && !value && (\n <div className=\"editor-placeholder text-muted\">Column Formula</div>\n )}\n </div>\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
3
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
4
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
3
5
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
4
6
|
import React, { Component } from 'react';
|
|
5
7
|
import classNames from 'classnames';
|