@deephaven/iris-grid 0.38.1-beta.7 → 0.38.1-chart-refactor.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/AdvancedFilterCreator.d.ts +2 -1
  2. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  3. package/dist/AdvancedFilterCreator.js +1 -0
  4. package/dist/AdvancedFilterCreator.js.map +1 -1
  5. package/dist/IrisGrid.d.ts.map +1 -1
  6. package/dist/IrisGrid.js +31 -14
  7. package/dist/IrisGrid.js.map +1 -1
  8. package/dist/IrisGridModelFactory.d.ts.map +1 -1
  9. package/dist/IrisGridModelFactory.js +1 -1
  10. package/dist/IrisGridModelFactory.js.map +1 -1
  11. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  12. package/dist/IrisGridProxyModel.js +1 -1
  13. package/dist/IrisGridProxyModel.js.map +1 -1
  14. package/dist/IrisGridTableModel.d.ts.map +1 -1
  15. package/dist/IrisGridTableModel.js +1 -1
  16. package/dist/IrisGridTableModel.js.map +1 -1
  17. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  18. package/dist/IrisGridTableModelTemplate.js +7 -1
  19. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  20. package/dist/IrisGridTestUtils.d.ts +13 -11
  21. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  22. package/dist/IrisGridTestUtils.js +34 -27
  23. package/dist/IrisGridTestUtils.js.map +1 -1
  24. package/dist/IrisGridUtils.js +1 -1
  25. package/dist/IrisGridUtils.js.map +1 -1
  26. package/dist/format-context-menus/DecimalFormatContextMenu.d.ts +3 -1
  27. package/dist/format-context-menus/DecimalFormatContextMenu.d.ts.map +1 -1
  28. package/dist/format-context-menus/DecimalFormatContextMenu.js +3 -2
  29. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  30. package/dist/format-context-menus/IntegerFormatContextMenu.d.ts +3 -1
  31. package/dist/format-context-menus/IntegerFormatContextMenu.d.ts.map +1 -1
  32. package/dist/format-context-menus/IntegerFormatContextMenu.js +3 -2
  33. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  34. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  35. package/dist/mousehandlers/IrisGridContextMenuHandler.js +8 -4
  36. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  37. package/dist/sidebar/ChartBuilder.d.ts +1 -1
  38. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  39. package/dist/sidebar/ChartBuilder.js +1 -1
  40. package/dist/sidebar/ChartBuilder.js.map +1 -1
  41. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts +2 -0
  42. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  43. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +1 -0
  44. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  45. package/package.json +16 -16
@@ -1 +1 @@
1
- {"version":3,"file":"ChartBuilder.js","names":["React","PureComponent","classNames","FontAwesomeIcon","Button","RadioGroup","RadioItem","vsLink","dhUnlink","dhTable","dhNewCircleLargeFilled","vsCircleLargeFilled","vsTrash","Log","shortid","BarIcon","HistogramIcon","LineIcon","PieIcon","ScatterIcon","log","module","ChartBuilder","getMaxSeriesCount","dh","type","plot","SeriesPlotStyle","PIE","HISTOGRAM","makeSeriesItem","value","id","generate","makeDefaultSeriesItems","columns","maxSeriesCount","length","name","getDefaultXAxis","constructor","props","handleAddSeries","bind","handleLinkStateChange","handleReset","handleSeriesChange","handleSeriesDeleteClick","handleSubmit","handleTypeClick","handleXAxisChange","sendChange","model","getTypes","xAxis","seriesItems","state","isLinked","LINE","BAR","SCATTER","getTypeName","getTypeIcon","getXAxisLabel","getSeriesLabel","setState","newSeriesItems","push","event","target","index","getAttribute","intIndex","parseInt","changeEvent","splice","preventDefault","onSubmit","series","map","item","debug2","slice","onChange","render","xAxisLabel","seriesLabel","isSeriesVisible","isAddSeriesVisible","chartType","key","active","column","seriesItem","i"],"sources":["../../src/sidebar/ChartBuilder.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, RadioGroup, RadioItem } from '@deephaven/components';\nimport {\n vsLink,\n dhUnlink,\n dhTable,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsTrash,\n} from '@deephaven/icons';\nimport type {\n Column,\n dh as DhType,\n SeriesPlotStyle,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport shortid from 'shortid';\nimport {\n BarIcon,\n HistogramIcon,\n LineIcon,\n PieIcon,\n ScatterIcon,\n} from './icons';\nimport './ChartBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('ChartBuilder');\n\nexport type ChartBuilderSettings = {\n type: SeriesPlotStyle;\n series: unknown;\n xAxis: string;\n isLinked: boolean;\n};\nexport type SeriesItem = {\n id: string;\n value: string;\n};\n\ninterface ChartBuilderProps {\n dh: DhType;\n model: IrisGridModel;\n onSubmit: (obj: ChartBuilderSettings) => void;\n onChange: (obj: ChartBuilderSettings) => void;\n}\ninterface ChartBuilderState {\n /** The selected chart type */\n type: SeriesPlotStyle;\n\n /** Array of column names of the series to display */\n seriesItems: readonly SeriesItem[];\n\n /** The column name to use as the x-axis */\n xAxis: string;\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: boolean;\n}\n/**\n * Form for configuring all the settings when creating a console.\n */\nclass ChartBuilder extends PureComponent<ChartBuilderProps, ChartBuilderState> {\n static getMaxSeriesCount(dh: DhType, type: SeriesPlotStyle): number {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 1;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 0;\n default:\n return 100;\n }\n }\n\n static makeSeriesItem(value: string): SeriesItem {\n return { id: shortid.generate(), value };\n }\n\n static makeDefaultSeriesItems(\n dh: DhType,\n type: SeriesPlotStyle,\n columns: readonly Column[]\n ): SeriesItem[] {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n if (maxSeriesCount === 0 || columns == null || columns.length === 0) {\n return [];\n }\n\n const value = columns.length > 1 ? columns[1].name : columns[0].name;\n return [ChartBuilder.makeSeriesItem(value)];\n }\n\n static getDefaultXAxis(\n type: SeriesPlotStyle,\n columns: readonly Column[]\n ): string | null {\n if (columns != null && columns.length > 0) {\n return columns[0].name;\n }\n\n return null;\n }\n\n constructor(props: ChartBuilderProps) {\n super(props);\n\n this.handleAddSeries = this.handleAddSeries.bind(this);\n this.handleLinkStateChange = this.handleLinkStateChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSeriesChange = this.handleSeriesChange.bind(this);\n this.handleSeriesDeleteClick = this.handleSeriesDeleteClick.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleTypeClick = this.handleTypeClick.bind(this);\n this.handleXAxisChange = this.handleXAxisChange.bind(this);\n this.sendChange = this.sendChange.bind(this);\n\n const { dh, model } = props;\n const { columns } = model;\n\n const type = this.getTypes()[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n\n this.state = {\n /** The selected chart type */\n type,\n\n /** Array of column names of the series to display */\n seriesItems,\n\n /** The column name to use as the x-axis */\n xAxis,\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: true,\n };\n }\n\n getTypes() {\n const { dh } = this.props;\n return [\n dh.plot.SeriesPlotStyle.LINE,\n dh.plot.SeriesPlotStyle.BAR,\n dh.plot.SeriesPlotStyle.SCATTER,\n dh.plot.SeriesPlotStyle.PIE,\n // IDS-6808: Disable Histogram in Chart Builder until we pipe histogram creation through the API\n // dh.plot.SeriesPlotStyle.HISTOGRAM,\n ];\n }\n\n /**\n * Converts the provided chart type into a readable type.\n * Just replaces underscores with spaces and capitals the first letter of each word.\n */\n getTypeName(type: SeriesPlotStyle): string | SeriesPlotStyle {\n const { dh } = this.props;\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return 'Line';\n case dh.plot.SeriesPlotStyle.BAR:\n return 'Bar';\n case dh.plot.SeriesPlotStyle.SCATTER:\n return 'Scatter';\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Pie';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Histogram';\n default:\n return type;\n }\n }\n\n getTypeIcon(type: SeriesPlotStyle): React.ReactElement | null {\n const { dh } = this.props;\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return <LineIcon />;\n case dh.plot.SeriesPlotStyle.BAR:\n return <BarIcon />;\n case dh.plot.SeriesPlotStyle.SCATTER:\n return <ScatterIcon />;\n case dh.plot.SeriesPlotStyle.PIE:\n return <PieIcon />;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return <HistogramIcon />;\n default:\n return null;\n }\n }\n\n getXAxisLabel(type: SeriesPlotStyle): string {\n const { dh } = this.props;\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Labels';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Data';\n default:\n return 'X-Axis';\n }\n }\n\n getSeriesLabel(type: SeriesPlotStyle): string {\n const { dh } = this.props;\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Values';\n default:\n return 'Series';\n }\n }\n\n handleAddSeries(): void {\n this.setState(state => {\n const { seriesItems } = state;\n const newSeriesItems = [...seriesItems];\n\n const { model } = this.props;\n const { columns } = model;\n newSeriesItems.push({\n id: shortid.generate(),\n value: columns[0].name,\n });\n\n return { seriesItems: newSeriesItems };\n }, this.sendChange);\n }\n\n handleLinkStateChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ isLinked: event.target.value === 'true' }, this.sendChange);\n }\n\n handleReset(): void {\n const { dh, model } = this.props;\n const { columns } = model;\n\n const type = this.getTypes()[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n const isLinked = true;\n\n this.setState({ type, seriesItems, xAxis, isLinked }, this.sendChange);\n }\n\n handleSeriesChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n const index = event.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems[intIndex].value = value;\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSeriesDeleteClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n const { seriesItems } = state;\n const newSeriesItems = [...seriesItems];\n\n newSeriesItems.splice(intIndex, 1);\n\n return { seriesItems: newSeriesItems };\n }, this.sendChange);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n event.preventDefault();\n\n const { onSubmit } = this.props;\n const { type, seriesItems, xAxis, isLinked } = this.state;\n const series = seriesItems.map(item => item.value);\n onSubmit({\n type: (`${type}` as unknown) as SeriesPlotStyle,\n series,\n xAxis,\n isLinked,\n });\n }\n\n handleTypeClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n const type = this.getTypes()[intIndex];\n\n log.debug2('handleTypeSelect', type);\n\n this.setState(state => {\n const { dh, model } = this.props;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n let { seriesItems } = state;\n seriesItems = seriesItems.slice(0, maxSeriesCount);\n if (seriesItems.length === 0 && maxSeriesCount > 0) {\n const { columns } = model;\n seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n }\n\n return { type, seriesItems };\n }, this.sendChange);\n }\n\n handleXAxisChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const xAxis = event.target.value;\n log.debug2('x-axis change', xAxis);\n\n this.setState({ xAxis }, this.sendChange);\n }\n\n sendChange(): void {\n const { onChange } = this.props;\n const { isLinked, type, seriesItems, xAxis } = this.state;\n const series = seriesItems.map(item => item.value);\n\n onChange({ type, series, xAxis, isLinked });\n }\n\n render(): JSX.Element {\n const { dh, model } = this.props;\n const { columns } = model;\n const { seriesItems, type, xAxis, isLinked } = this.state;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n const xAxisLabel = this.getXAxisLabel(type);\n const seriesLabel = this.getSeriesLabel(type);\n const isSeriesVisible = seriesItems.length > 0;\n const isAddSeriesVisible = seriesItems.length < maxSeriesCount;\n\n return (\n <div className=\"chart-builder\">\n <form onSubmit={this.handleSubmit}>\n <div className=\"form-row\">\n <label>Select Chart Type</label>\n <div className=\"form-row\">\n {this.getTypes().map((chartType, index) => {\n const key = (chartType as unknown) as React.Key;\n return (\n <div key={key} className=\"col col-chart-type\">\n <button\n type=\"button\"\n className={classNames(\n 'btn',\n 'btn-icon',\n 'btn-chart-type',\n {\n active: chartType === type,\n }\n )}\n data-index={index}\n onClick={this.handleTypeClick}\n >\n {this.getTypeIcon(chartType)}\n {this.getTypeName(chartType)}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n <hr />\n <div className=\"form-row form-inline\">\n <label className=\"col-2 label-left\">{xAxisLabel}</label>\n <select\n className=\"form-control custom-select select-x-axis col\"\n value={xAxis}\n onChange={this.handleXAxisChange}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name}>\n {column.name}\n </option>\n ))}\n </select>\n </div>\n {isSeriesVisible && <hr />}\n {seriesItems.map((seriesItem, i) => (\n <div\n className=\"form-row form-inline form-series-item\"\n key={seriesItem.id}\n data-testid={`form-series-item-${i}`}\n >\n <label className=\"col-2 label-left\">\n {i === 0 ? seriesLabel : ''}\n </label>\n <select\n className=\"form-control custom-select select-series col\"\n value={seriesItem.value}\n onChange={this.handleSeriesChange}\n data-testid={`select-series-item-${i}`}\n data-index={i}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name} data-index={i}>\n {column.name}\n </option>\n ))}\n </select>\n {seriesItems.length > 1 && (\n <Button\n kind=\"ghost\"\n className=\"btn-delete-series ml-2 px-2\"\n data-index={i}\n data-testid={`delete-series-${i}`}\n onClick={this.handleSeriesDeleteClick}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n )}\n </div>\n ))}\n {isAddSeriesVisible && (\n <div className=\"form-row\">\n <div className=\"col-2\" />\n <Button\n kind=\"ghost\"\n className=\"btn-add-series mt-1\"\n onClick={this.handleAddSeries}\n icon={dhNewCircleLargeFilled}\n >\n Add Series\n </Button>\n </div>\n )}\n <div className=\"form-row chart-builder-link\">\n <label className=\"col-2 label-right\">\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={dhTable}\n icon={vsCircleLargeFilled}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon\n icon={isLinked ? vsLink : dhUnlink}\n transform=\"grow-2 right-8 down-6\"\n />\n </div>\n </label>\n <RadioGroup\n onChange={this.handleLinkStateChange}\n value={`${isLinked}`}\n >\n <RadioItem value=\"true\">Sync State</RadioItem>\n <RadioItem value=\"false\">Freeze State</RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-row\">\n <div className=\"col-2 label-right\" />\n <div className=\"col chart-builder-link-info\">\n {isLinked\n ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.'\n : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.'}\n </div>\n </div>\n <div\n className={classNames('form-row', 'justify-content-end', 'my-3')}\n >\n <Button\n kind=\"secondary\"\n className=\"btn-reset\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n <Button kind=\"primary\" type=\"submit\" className=\"btn-submit\">\n Create\n </Button>\n </div>\n </form>\n </div>\n );\n }\n}\n\nexport default ChartBuilder;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ChartBuilder.js","names":["React","PureComponent","classNames","FontAwesomeIcon","Button","RadioGroup","RadioItem","vsLink","dhUnlink","dhTable","dhNewCircleLargeFilled","vsCircleLargeFilled","vsTrash","Log","shortid","BarIcon","HistogramIcon","LineIcon","PieIcon","ScatterIcon","log","module","ChartBuilder","getMaxSeriesCount","dh","type","plot","SeriesPlotStyle","PIE","HISTOGRAM","makeSeriesItem","value","id","generate","makeDefaultSeriesItems","columns","maxSeriesCount","length","name","getDefaultXAxis","constructor","props","handleAddSeries","bind","handleLinkStateChange","handleReset","handleSeriesChange","handleSeriesDeleteClick","handleSubmit","handleTypeClick","handleXAxisChange","sendChange","model","getTypes","xAxis","seriesItems","state","isLinked","LINE","BAR","SCATTER","getTypeName","getTypeIcon","getXAxisLabel","getSeriesLabel","setState","newSeriesItems","push","event","target","index","getAttribute","intIndex","parseInt","changeEvent","splice","preventDefault","onSubmit","series","map","item","debug2","slice","onChange","render","xAxisLabel","seriesLabel","isSeriesVisible","isAddSeriesVisible","chartType","key","active","column","seriesItem","i"],"sources":["../../src/sidebar/ChartBuilder.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, RadioGroup, RadioItem } from '@deephaven/components';\nimport {\n vsLink,\n dhUnlink,\n dhTable,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsTrash,\n} from '@deephaven/icons';\nimport type {\n Column,\n dh as DhType,\n SeriesPlotStyle,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport shortid from 'shortid';\nimport {\n BarIcon,\n HistogramIcon,\n LineIcon,\n PieIcon,\n ScatterIcon,\n} from './icons';\nimport './ChartBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('ChartBuilder');\n\nexport type ChartBuilderSettings = {\n type: SeriesPlotStyle;\n series: string[];\n xAxis: string;\n isLinked: boolean;\n};\nexport type SeriesItem = {\n id: string;\n value: string;\n};\n\ninterface ChartBuilderProps {\n dh: DhType;\n model: IrisGridModel;\n onSubmit: (obj: ChartBuilderSettings) => void;\n onChange: (obj: ChartBuilderSettings) => void;\n}\ninterface ChartBuilderState {\n /** The selected chart type */\n type: SeriesPlotStyle;\n\n /** Array of column names of the series to display */\n seriesItems: readonly SeriesItem[];\n\n /** The column name to use as the x-axis */\n xAxis: string;\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: boolean;\n}\n/**\n * Form for configuring all the settings when creating a console.\n */\nclass ChartBuilder extends PureComponent<ChartBuilderProps, ChartBuilderState> {\n static getMaxSeriesCount(dh: DhType, type: SeriesPlotStyle): number {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 1;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 0;\n default:\n return 100;\n }\n }\n\n static makeSeriesItem(value: string): SeriesItem {\n return { id: shortid.generate(), value };\n }\n\n static makeDefaultSeriesItems(\n dh: DhType,\n type: SeriesPlotStyle,\n columns: readonly Column[]\n ): SeriesItem[] {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n if (maxSeriesCount === 0 || columns == null || columns.length === 0) {\n return [];\n }\n\n const value = columns.length > 1 ? columns[1].name : columns[0].name;\n return [ChartBuilder.makeSeriesItem(value)];\n }\n\n static getDefaultXAxis(\n type: SeriesPlotStyle,\n columns: readonly Column[]\n ): string | null {\n if (columns != null && columns.length > 0) {\n return columns[0].name;\n }\n\n return null;\n }\n\n constructor(props: ChartBuilderProps) {\n super(props);\n\n this.handleAddSeries = this.handleAddSeries.bind(this);\n this.handleLinkStateChange = this.handleLinkStateChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSeriesChange = this.handleSeriesChange.bind(this);\n this.handleSeriesDeleteClick = this.handleSeriesDeleteClick.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleTypeClick = this.handleTypeClick.bind(this);\n this.handleXAxisChange = this.handleXAxisChange.bind(this);\n this.sendChange = this.sendChange.bind(this);\n\n const { dh, model } = props;\n const { columns } = model;\n\n const type = this.getTypes()[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n\n this.state = {\n /** The selected chart type */\n type,\n\n /** Array of column names of the series to display */\n seriesItems,\n\n /** The column name to use as the x-axis */\n xAxis,\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: true,\n };\n }\n\n getTypes() {\n const { dh } = this.props;\n return [\n dh.plot.SeriesPlotStyle.LINE,\n dh.plot.SeriesPlotStyle.BAR,\n dh.plot.SeriesPlotStyle.SCATTER,\n dh.plot.SeriesPlotStyle.PIE,\n // IDS-6808: Disable Histogram in Chart Builder until we pipe histogram creation through the API\n // dh.plot.SeriesPlotStyle.HISTOGRAM,\n ];\n }\n\n /**\n * Converts the provided chart type into a readable type.\n * Just replaces underscores with spaces and capitals the first letter of each word.\n */\n getTypeName(type: SeriesPlotStyle): string | SeriesPlotStyle {\n const { dh } = this.props;\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return 'Line';\n case dh.plot.SeriesPlotStyle.BAR:\n return 'Bar';\n case dh.plot.SeriesPlotStyle.SCATTER:\n return 'Scatter';\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Pie';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Histogram';\n default:\n return type;\n }\n }\n\n getTypeIcon(type: SeriesPlotStyle): React.ReactElement | null {\n const { dh } = this.props;\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return <LineIcon />;\n case dh.plot.SeriesPlotStyle.BAR:\n return <BarIcon />;\n case dh.plot.SeriesPlotStyle.SCATTER:\n return <ScatterIcon />;\n case dh.plot.SeriesPlotStyle.PIE:\n return <PieIcon />;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return <HistogramIcon />;\n default:\n return null;\n }\n }\n\n getXAxisLabel(type: SeriesPlotStyle): string {\n const { dh } = this.props;\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Labels';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Data';\n default:\n return 'X-Axis';\n }\n }\n\n getSeriesLabel(type: SeriesPlotStyle): string {\n const { dh } = this.props;\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Values';\n default:\n return 'Series';\n }\n }\n\n handleAddSeries(): void {\n this.setState(state => {\n const { seriesItems } = state;\n const newSeriesItems = [...seriesItems];\n\n const { model } = this.props;\n const { columns } = model;\n newSeriesItems.push({\n id: shortid.generate(),\n value: columns[0].name,\n });\n\n return { seriesItems: newSeriesItems };\n }, this.sendChange);\n }\n\n handleLinkStateChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ isLinked: event.target.value === 'true' }, this.sendChange);\n }\n\n handleReset(): void {\n const { dh, model } = this.props;\n const { columns } = model;\n\n const type = this.getTypes()[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n const isLinked = true;\n\n this.setState({ type, seriesItems, xAxis, isLinked }, this.sendChange);\n }\n\n handleSeriesChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n const index = event.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems[intIndex].value = value;\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSeriesDeleteClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n const { seriesItems } = state;\n const newSeriesItems = [...seriesItems];\n\n newSeriesItems.splice(intIndex, 1);\n\n return { seriesItems: newSeriesItems };\n }, this.sendChange);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n event.preventDefault();\n\n const { onSubmit } = this.props;\n const { type, seriesItems, xAxis, isLinked } = this.state;\n const series = seriesItems.map(item => item.value);\n onSubmit({\n type,\n series,\n xAxis,\n isLinked,\n });\n }\n\n handleTypeClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n const type = this.getTypes()[intIndex];\n\n log.debug2('handleTypeSelect', type);\n\n this.setState(state => {\n const { dh, model } = this.props;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n let { seriesItems } = state;\n seriesItems = seriesItems.slice(0, maxSeriesCount);\n if (seriesItems.length === 0 && maxSeriesCount > 0) {\n const { columns } = model;\n seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n }\n\n return { type, seriesItems };\n }, this.sendChange);\n }\n\n handleXAxisChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const xAxis = event.target.value;\n log.debug2('x-axis change', xAxis);\n\n this.setState({ xAxis }, this.sendChange);\n }\n\n sendChange(): void {\n const { onChange } = this.props;\n const { isLinked, type, seriesItems, xAxis } = this.state;\n const series = seriesItems.map(item => item.value);\n\n onChange({ type, series, xAxis, isLinked });\n }\n\n render(): JSX.Element {\n const { dh, model } = this.props;\n const { columns } = model;\n const { seriesItems, type, xAxis, isLinked } = this.state;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n const xAxisLabel = this.getXAxisLabel(type);\n const seriesLabel = this.getSeriesLabel(type);\n const isSeriesVisible = seriesItems.length > 0;\n const isAddSeriesVisible = seriesItems.length < maxSeriesCount;\n\n return (\n <div className=\"chart-builder\">\n <form onSubmit={this.handleSubmit}>\n <div className=\"form-row\">\n <label>Select Chart Type</label>\n <div className=\"form-row\">\n {this.getTypes().map((chartType, index) => {\n const key = (chartType as unknown) as React.Key;\n return (\n <div key={key} className=\"col col-chart-type\">\n <button\n type=\"button\"\n className={classNames(\n 'btn',\n 'btn-icon',\n 'btn-chart-type',\n {\n active: chartType === type,\n }\n )}\n data-index={index}\n onClick={this.handleTypeClick}\n >\n {this.getTypeIcon(chartType)}\n {this.getTypeName(chartType)}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n <hr />\n <div className=\"form-row form-inline\">\n <label className=\"col-2 label-left\">{xAxisLabel}</label>\n <select\n className=\"form-control custom-select select-x-axis col\"\n value={xAxis}\n onChange={this.handleXAxisChange}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name}>\n {column.name}\n </option>\n ))}\n </select>\n </div>\n {isSeriesVisible && <hr />}\n {seriesItems.map((seriesItem, i) => (\n <div\n className=\"form-row form-inline form-series-item\"\n key={seriesItem.id}\n data-testid={`form-series-item-${i}`}\n >\n <label className=\"col-2 label-left\">\n {i === 0 ? seriesLabel : ''}\n </label>\n <select\n className=\"form-control custom-select select-series col\"\n value={seriesItem.value}\n onChange={this.handleSeriesChange}\n data-testid={`select-series-item-${i}`}\n data-index={i}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name} data-index={i}>\n {column.name}\n </option>\n ))}\n </select>\n {seriesItems.length > 1 && (\n <Button\n kind=\"ghost\"\n className=\"btn-delete-series ml-2 px-2\"\n data-index={i}\n data-testid={`delete-series-${i}`}\n onClick={this.handleSeriesDeleteClick}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n )}\n </div>\n ))}\n {isAddSeriesVisible && (\n <div className=\"form-row\">\n <div className=\"col-2\" />\n <Button\n kind=\"ghost\"\n className=\"btn-add-series mt-1\"\n onClick={this.handleAddSeries}\n icon={dhNewCircleLargeFilled}\n >\n Add Series\n </Button>\n </div>\n )}\n <div className=\"form-row chart-builder-link\">\n <label className=\"col-2 label-right\">\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={dhTable}\n icon={vsCircleLargeFilled}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon\n icon={isLinked ? vsLink : dhUnlink}\n transform=\"grow-2 right-8 down-6\"\n />\n </div>\n </label>\n <RadioGroup\n onChange={this.handleLinkStateChange}\n value={`${isLinked}`}\n >\n <RadioItem value=\"true\">Sync State</RadioItem>\n <RadioItem value=\"false\">Freeze State</RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-row\">\n <div className=\"col-2 label-right\" />\n <div className=\"col chart-builder-link-info\">\n {isLinked\n ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.'\n : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.'}\n </div>\n </div>\n <div\n className={classNames('form-row', 'justify-content-end', 'my-3')}\n >\n <Button\n kind=\"secondary\"\n className=\"btn-reset\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n <Button kind=\"primary\" type=\"submit\" className=\"btn-submit\">\n Create\n </Button>\n </div>\n </form>\n </div>\n );\n }\n}\n\nexport default ChartBuilder;\n"],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  /// <reference types="react" />
2
+ import type { dh as DhType } from '@deephaven/jsapi-types';
2
3
  import { FormattingRule, ModelColumn } from './ConditionalFormattingUtils';
3
4
  import './ConditionalFormatEditor.scss';
4
5
  export type SaveCallback = (rule: FormattingRule) => void;
5
6
  export type UpdateCallback = (rule?: FormattingRule) => void;
6
7
  export type CancelCallback = () => void;
7
8
  export interface ConditionalFormatEditorProps {
9
+ dh: DhType;
8
10
  columns: readonly ModelColumn[];
9
11
  rule?: FormattingRule;
10
12
  onCancel?: CancelCallback;
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalFormatEditor.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ConditionalFormatEditor.tsx"],"names":[],"mappings":";AAOA,OAAO,EAGL,cAAc,EAEd,WAAW,EACZ,MAAM,8BAA8B,CAAC;AACtC,OAAO,gCAAgC,CAAC;AAIxC,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AAExC,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAwBD,iBAAS,uBAAuB,CAC9B,KAAK,EAAE,4BAA4B,GAClC,GAAG,CAAC,OAAO,CAwGb;AAED,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"ConditionalFormatEditor.d.ts","sourceRoot":"","sources":["../../../src/sidebar/conditional-formatting/ConditionalFormatEditor.tsx"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAK3D,OAAO,EAGL,cAAc,EAEd,WAAW,EACZ,MAAM,8BAA8B,CAAC;AACtC,OAAO,gCAAgC,CAAC;AAIxC,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AAExC,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAwBD,iBAAS,uBAAuB,CAC9B,KAAK,EAAE,4BAA4B,GAClC,GAAG,CAAC,OAAO,CAyGb;AAED,eAAe,uBAAuB,CAAC"}
@@ -30,6 +30,7 @@ function ConditionalFormatEditor(props) {
30
30
  var _defaultRule$type;
31
31
  var {
32
32
  columns: originalColumns,
33
+ dh,
33
34
  onSave = DEFAULT_CALLBACK,
34
35
  onUpdate = DEFAULT_CALLBACK,
35
36
  onCancel = DEFAULT_CALLBACK,
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalFormatEditor.js","names":["React","useCallback","useState","classNames","Button","Log","FormatColumnWhereIcon","FormatRowWhereIcon","ColumnFormatEditor","RowFormatEditor","FormatterType","isSupportedColumn","log","module","DEFAULT_CALLBACK","undefined","getFormatterTypeIcon","option","CONDITIONAL","ROWS","getFormatterTypeLabel","formatterTypes","ConditionalFormatEditor","props","columns","originalColumns","onSave","onUpdate","onCancel","rule","defaultRule","filter","selectedFormatter","setFormatter","type","setRule","isValid","setIsValid","handleCancel","handleSave","error","handleFormatterChange","value","debug","handleRuleChange","ruleConfig","isRuleValid","updatedRule","config","map","index","active","dh"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { FormatColumnWhereIcon, FormatRowWhereIcon } from '../icons';\nimport ColumnFormatEditor from './ColumnFormatEditor';\nimport RowFormatEditor from './RowFormatEditor';\nimport {\n BaseFormatConfig,\n FormatterType,\n FormattingRule,\n isSupportedColumn,\n ModelColumn,\n} from './ConditionalFormattingUtils';\nimport './ConditionalFormatEditor.scss';\n\nconst log = Log.module('ConditionalFormatEditor');\n\nexport type SaveCallback = (rule: FormattingRule) => void;\n\nexport type UpdateCallback = (rule?: FormattingRule) => void;\n\nexport type CancelCallback = () => void;\n\nexport interface ConditionalFormatEditorProps {\n columns: readonly ModelColumn[];\n rule?: FormattingRule;\n onCancel?: CancelCallback;\n onSave?: SaveCallback;\n onUpdate?: UpdateCallback;\n}\n\nconst DEFAULT_CALLBACK = () => undefined;\n\nfunction getFormatterTypeIcon(option: FormatterType): JSX.Element | undefined {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return <FormatColumnWhereIcon />;\n case FormatterType.ROWS:\n return <FormatRowWhereIcon />;\n }\n}\n\nfunction getFormatterTypeLabel(option: FormatterType): string {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return 'Conditional';\n case FormatterType.ROWS:\n return 'Rows';\n }\n}\n\nconst formatterTypes = [FormatterType.CONDITIONAL, FormatterType.ROWS];\n\nfunction ConditionalFormatEditor(\n props: ConditionalFormatEditorProps\n): JSX.Element {\n const {\n columns: originalColumns,\n onSave = DEFAULT_CALLBACK,\n onUpdate = DEFAULT_CALLBACK,\n onCancel = DEFAULT_CALLBACK,\n rule: defaultRule,\n } = props;\n\n const columns = originalColumns.filter(isSupportedColumn);\n\n const [selectedFormatter, setFormatter] = useState(\n defaultRule?.type ?? formatterTypes[0]\n );\n const [rule, setRule] = useState(defaultRule);\n const [isValid, setIsValid] = useState(false);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n const handleSave = useCallback(() => {\n if (rule === undefined) {\n log.error('Rule is not defined.');\n return;\n }\n onSave(rule);\n }, [onSave, rule]);\n\n const handleFormatterChange = useCallback(value => {\n log.debug('handleFormatterChange', value);\n setFormatter(value);\n }, []);\n\n const handleRuleChange = useCallback(\n (ruleConfig, isRuleValid: boolean) => {\n log.debug('handleRuleChange', ruleConfig, isRuleValid, selectedFormatter);\n const updatedRule = {\n type: selectedFormatter,\n config: ruleConfig as BaseFormatConfig,\n };\n setRule(updatedRule);\n setIsValid(isRuleValid);\n onUpdate(isRuleValid ? updatedRule : undefined);\n },\n [onUpdate, selectedFormatter]\n );\n\n return (\n <div className=\"conditional-format-editor form\">\n <div className=\"mb-2\">\n <label className=\"mb-0\" htmlFor=\"formatter-select\">\n Select Formatter\n </label>\n\n <div className=\"formatter-list\">\n {formatterTypes.map((type, index) => (\n <div key={type} className=\"formatter-type\">\n <button\n type=\"button\"\n className={classNames('btn', 'btn-icon', 'btn-formatter-type', {\n active: type === selectedFormatter,\n })}\n data-index={index}\n onClick={() => handleFormatterChange(type)}\n >\n {getFormatterTypeIcon(type)}\n {getFormatterTypeLabel(type)}\n </button>\n </div>\n ))}\n </div>\n </div>\n {selectedFormatter === FormatterType.CONDITIONAL && (\n <ColumnFormatEditor\n columns={columns}\n dh={dh}\n config={rule?.config}\n onChange={handleRuleChange}\n />\n )}\n {selectedFormatter === FormatterType.ROWS && (\n <RowFormatEditor\n columns={columns}\n config={rule?.config}\n dh={dh}\n onChange={handleRuleChange}\n />\n )}\n <hr />\n <div className=\"d-flex justify-content-end my-3\">\n <Button kind=\"secondary\" onClick={handleCancel} className=\"mr-2\">\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n onClick={handleSave}\n disabled={rule === undefined || !isValid}\n >\n Done\n </Button>\n </div>\n </div>\n );\n}\n\nexport default ConditionalFormatEditor;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConditionalFormatEditor.js","names":["React","useCallback","useState","classNames","Button","Log","FormatColumnWhereIcon","FormatRowWhereIcon","ColumnFormatEditor","RowFormatEditor","FormatterType","isSupportedColumn","log","module","DEFAULT_CALLBACK","undefined","getFormatterTypeIcon","option","CONDITIONAL","ROWS","getFormatterTypeLabel","formatterTypes","ConditionalFormatEditor","props","columns","originalColumns","dh","onSave","onUpdate","onCancel","rule","defaultRule","filter","selectedFormatter","setFormatter","type","setRule","isValid","setIsValid","handleCancel","handleSave","error","handleFormatterChange","value","debug","handleRuleChange","ruleConfig","isRuleValid","updatedRule","config","map","index","active"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button } from '@deephaven/components';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { FormatColumnWhereIcon, FormatRowWhereIcon } from '../icons';\nimport ColumnFormatEditor from './ColumnFormatEditor';\nimport RowFormatEditor from './RowFormatEditor';\nimport {\n BaseFormatConfig,\n FormatterType,\n FormattingRule,\n isSupportedColumn,\n ModelColumn,\n} from './ConditionalFormattingUtils';\nimport './ConditionalFormatEditor.scss';\n\nconst log = Log.module('ConditionalFormatEditor');\n\nexport type SaveCallback = (rule: FormattingRule) => void;\n\nexport type UpdateCallback = (rule?: FormattingRule) => void;\n\nexport type CancelCallback = () => void;\n\nexport interface ConditionalFormatEditorProps {\n dh: DhType;\n columns: readonly ModelColumn[];\n rule?: FormattingRule;\n onCancel?: CancelCallback;\n onSave?: SaveCallback;\n onUpdate?: UpdateCallback;\n}\n\nconst DEFAULT_CALLBACK = () => undefined;\n\nfunction getFormatterTypeIcon(option: FormatterType): JSX.Element | undefined {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return <FormatColumnWhereIcon />;\n case FormatterType.ROWS:\n return <FormatRowWhereIcon />;\n }\n}\n\nfunction getFormatterTypeLabel(option: FormatterType): string {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return 'Conditional';\n case FormatterType.ROWS:\n return 'Rows';\n }\n}\n\nconst formatterTypes = [FormatterType.CONDITIONAL, FormatterType.ROWS];\n\nfunction ConditionalFormatEditor(\n props: ConditionalFormatEditorProps\n): JSX.Element {\n const {\n columns: originalColumns,\n dh,\n onSave = DEFAULT_CALLBACK,\n onUpdate = DEFAULT_CALLBACK,\n onCancel = DEFAULT_CALLBACK,\n rule: defaultRule,\n } = props;\n\n const columns = originalColumns.filter(isSupportedColumn);\n\n const [selectedFormatter, setFormatter] = useState(\n defaultRule?.type ?? formatterTypes[0]\n );\n const [rule, setRule] = useState(defaultRule);\n const [isValid, setIsValid] = useState(false);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n const handleSave = useCallback(() => {\n if (rule === undefined) {\n log.error('Rule is not defined.');\n return;\n }\n onSave(rule);\n }, [onSave, rule]);\n\n const handleFormatterChange = useCallback(value => {\n log.debug('handleFormatterChange', value);\n setFormatter(value);\n }, []);\n\n const handleRuleChange = useCallback(\n (ruleConfig, isRuleValid: boolean) => {\n log.debug('handleRuleChange', ruleConfig, isRuleValid, selectedFormatter);\n const updatedRule = {\n type: selectedFormatter,\n config: ruleConfig as BaseFormatConfig,\n };\n setRule(updatedRule);\n setIsValid(isRuleValid);\n onUpdate(isRuleValid ? updatedRule : undefined);\n },\n [onUpdate, selectedFormatter]\n );\n\n return (\n <div className=\"conditional-format-editor form\">\n <div className=\"mb-2\">\n <label className=\"mb-0\" htmlFor=\"formatter-select\">\n Select Formatter\n </label>\n\n <div className=\"formatter-list\">\n {formatterTypes.map((type, index) => (\n <div key={type} className=\"formatter-type\">\n <button\n type=\"button\"\n className={classNames('btn', 'btn-icon', 'btn-formatter-type', {\n active: type === selectedFormatter,\n })}\n data-index={index}\n onClick={() => handleFormatterChange(type)}\n >\n {getFormatterTypeIcon(type)}\n {getFormatterTypeLabel(type)}\n </button>\n </div>\n ))}\n </div>\n </div>\n {selectedFormatter === FormatterType.CONDITIONAL && (\n <ColumnFormatEditor\n columns={columns}\n dh={dh}\n config={rule?.config}\n onChange={handleRuleChange}\n />\n )}\n {selectedFormatter === FormatterType.ROWS && (\n <RowFormatEditor\n columns={columns}\n config={rule?.config}\n dh={dh}\n onChange={handleRuleChange}\n />\n )}\n <hr />\n <div className=\"d-flex justify-content-end my-3\">\n <Button kind=\"secondary\" onClick={handleCancel} className=\"mr-2\">\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n onClick={handleSave}\n disabled={rule === undefined || !isValid}\n >\n Done\n </Button>\n </div>\n </div>\n );\n}\n\nexport default ConditionalFormatEditor;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/iris-grid",
3
- "version": "0.38.1-beta.7+ce1fe2ce",
3
+ "version": "0.38.1-chart-refactor.20+052a4610",
4
4
  "description": "Deephaven Iris Grid",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -23,17 +23,17 @@
23
23
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
24
24
  },
25
25
  "dependencies": {
26
- "@deephaven/components": "^0.38.1-beta.7+ce1fe2ce",
27
- "@deephaven/console": "^0.38.1-beta.7+ce1fe2ce",
28
- "@deephaven/filters": "^0.38.1-beta.7+ce1fe2ce",
29
- "@deephaven/grid": "^0.38.1-beta.7+ce1fe2ce",
30
- "@deephaven/icons": "^0.38.1-beta.7+ce1fe2ce",
31
- "@deephaven/jsapi-types": "^0.38.1-beta.7+ce1fe2ce",
32
- "@deephaven/jsapi-utils": "^0.38.1-beta.7+ce1fe2ce",
33
- "@deephaven/log": "^0.38.1-beta.7+ce1fe2ce",
34
- "@deephaven/react-hooks": "^0.38.1-beta.7+ce1fe2ce",
35
- "@deephaven/storage": "^0.38.1-beta.7+ce1fe2ce",
36
- "@deephaven/utils": "^0.38.1-beta.7+ce1fe2ce",
26
+ "@deephaven/components": "^0.38.1-chart-refactor.20+052a4610",
27
+ "@deephaven/console": "^0.38.1-chart-refactor.20+052a4610",
28
+ "@deephaven/filters": "^0.38.1-chart-refactor.20+052a4610",
29
+ "@deephaven/grid": "^0.38.1-chart-refactor.20+052a4610",
30
+ "@deephaven/icons": "^0.38.1-chart-refactor.20+052a4610",
31
+ "@deephaven/jsapi-types": "^0.38.1-chart-refactor.20+052a4610",
32
+ "@deephaven/jsapi-utils": "^0.38.1-chart-refactor.20+052a4610",
33
+ "@deephaven/log": "^0.38.1-chart-refactor.20+052a4610",
34
+ "@deephaven/react-hooks": "^0.38.1-chart-refactor.20+052a4610",
35
+ "@deephaven/storage": "^0.38.1-chart-refactor.20+052a4610",
36
+ "@deephaven/utils": "^0.38.1-chart-refactor.20+052a4610",
37
37
  "@dnd-kit/core": "^6.0.5",
38
38
  "@dnd-kit/sortable": "^7.0.0",
39
39
  "@dnd-kit/utilities": "^3.2.0",
@@ -56,9 +56,9 @@
56
56
  "react-dom": "^17.x"
57
57
  },
58
58
  "devDependencies": {
59
- "@deephaven/jsapi-shim": "^0.38.1-beta.7+ce1fe2ce",
60
- "@deephaven/mocks": "^0.38.1-beta.7+ce1fe2ce",
61
- "@deephaven/tsconfig": "^0.38.1-beta.7+ce1fe2ce"
59
+ "@deephaven/jsapi-shim": "^0.38.1-chart-refactor.20+052a4610",
60
+ "@deephaven/mocks": "^0.38.1-chart-refactor.20+052a4610",
61
+ "@deephaven/tsconfig": "^0.38.1-chart-refactor.20+052a4610"
62
62
  },
63
63
  "files": [
64
64
  "dist"
@@ -69,5 +69,5 @@
69
69
  "publishConfig": {
70
70
  "access": "public"
71
71
  },
72
- "gitHead": "ce1fe2ce8cf28c4bc90356ebb25422835b5070df"
72
+ "gitHead": "052a4610ca82d250aa07ac1d08ac277300d420b7"
73
73
  }