@deephaven/dashboard-core-plugins 0.12.1-beta.2 → 0.12.1-beta.6

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.
@@ -9,8 +9,8 @@ import PropTypes from 'prop-types';
9
9
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
10
10
  import { Button, CardFlip, SocketedButton } from '@deephaven/components';
11
11
  import { vsGear } from '@deephaven/icons';
12
- import { TableUtils } from '@deephaven/iris-grid';
13
12
  import { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';
13
+ import { TableUtils } from '@deephaven/jsapi-utils';
14
14
  import memoizee from 'memoizee';
15
15
  import memoize from 'memoize-one';
16
16
  import debounce from 'lodash.debounce';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/controls/dropdown-filter/DropdownFilter.jsx"],"names":["React","Component","PropTypes","FontAwesomeIcon","Button","CardFlip","SocketedButton","vsGear","TableUtils","APIPropTypes","memoizee","memoize","debounce","Log","UIPropTypes","log","module","UPDATE_DEBOUNCE","DropdownFilter","constructor","props","source","columns","filter","type","isCompatibleType","columnType","selectedColumn","selectedIndex","options","push","forEach","columnItem","index","name","getItemLabel","values","value","indexOf","PLACEHOLDER","map","val","length","shortType","substring","lastIndexOf","handleColumnChange","bind","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleDropdownKeyPress","handleValueChange","sendUpdate","dropdownRef","createRef","column","isValueShown","state","disableCancel","componentDidUpdate","prevProps","prevState","isLoaded","sourceUpdated","includes","resetValue","focusInput","componentWillUnmount","flush","event","target","debug2","setState","allColumns","getCompatibleColumns","key","preventDefault","stopPropagation","valueIndex","parseInt","error","showSettings","current","handleMouseEnter","onSourceMouseEnter","handleMouseLeave","onSourceMouseLeave","focus","clearFilter","setFilterState","onChange","render","disableLinking","isLinkerActive","onColumnSelected","settingsError","columnSelectionDisabled","isLinked","sourceButtonLabel","columnName","SOURCE_BUTTON_PLACEHOLDER","filterTitle","columnOptions","getColumnOptions","valueOptions","getValueOptions","selectedOption","getSelectedOptionIndex","disableSave","isFlipped","SOURCE_BUTTON_CLASS_NAME","propTypes","Column","arrayOf","isRequired","func","bool","string","LinkPoint","defaultProps"],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CardFlip, SocketedButton } from '@deephaven/components';\nimport { vsGear } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/iris-grid';\nimport { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';\nimport memoizee from 'memoizee';\nimport memoize from 'memoize-one';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { UIPropTypes } from '../../prop-types';\nimport './DropdownFilter.scss';\n\nconst log = Log.module('DropdownFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nclass DropdownFilter extends Component {\n static PLACEHOLDER = 'Select a value...';\n\n static SOURCE_BUTTON_CLASS_NAME = 'btn-dropdown-filter-selector';\n\n static SOURCE_BUTTON_PLACEHOLDER = 'Select a column';\n\n constructor(props) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleDropdownKeyPress = this.handleDropdownKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n\n this.sendUpdate = debounce(this.sendUpdate.bind(this), UPDATE_DEBOUNCE);\n\n this.dropdownRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n selectedColumn: column,\n disableCancel: !isValueShown,\n isValueShown,\n value,\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { source, values, isLoaded } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (isLoaded) {\n if (source !== prevProps.source) {\n this.sourceUpdated();\n }\n\n if (\n values !== prevProps.values &&\n value !== '' &&\n !values.includes(value)\n ) {\n // Value list loaded, but doesn't contain the current value\n this.resetValue();\n }\n\n if (isValueShown !== prevState.isValueShown) {\n if (isValueShown) {\n this.focusInput();\n }\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n }\n\n componentWillUnmount() {\n this.sendUpdate.flush();\n }\n\n getCompatibleColumns = memoize((source, columns) =>\n source\n ? columns.filter(({ type }) =>\n TableUtils.isCompatibleType(type, source.columnType)\n )\n : []\n );\n\n getColumnOptions = memoize((columns, selectedColumn) => {\n let selectedIndex = -1;\n const options = [];\n options.push(\n <option key=\"placeholder\" value=\"-1\">\n Select a column\n </option>\n );\n columns.forEach((columnItem, index) => {\n options.push(\n <option key={`${columnItem.name}/${columnItem.type}`} value={index}>\n {this.getItemLabel(columns, index)}\n </option>\n );\n if (\n selectedColumn !== null &&\n columnItem.name === selectedColumn.name &&\n columnItem.type === selectedColumn.type\n ) {\n selectedIndex = index;\n }\n });\n return [options, selectedIndex];\n });\n\n getSelectedOptionIndex = memoize((values, value) => values.indexOf(value));\n\n getValueOptions = memoize(values => [\n <option value=\"-1\" key=\"-1\">\n {DropdownFilter.PLACEHOLDER}\n </option>,\n ...values.map((val, index) => (\n <option\n value={index}\n // eslint-disable-next-line react/no-array-index-key\n key={`${index}/${val}`}\n >\n {val}\n </option>\n )),\n ]);\n\n getItemLabel = memoizee((columns, index) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event) {\n const { value } = event.target;\n log.debug2('handleColumnChange', value);\n if (value < 0) {\n this.setState({\n selectedColumn: null,\n });\n return;\n }\n const { columns: allColumns, source } = this.props;\n const columns = this.getCompatibleColumns(source, allColumns);\n this.setState({\n selectedColumn: columns[value],\n });\n }\n\n handleDropdownKeyPress(event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n\n log.debug2('handleDropdownKeyPress');\n\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n }\n\n handleValueChange(event) {\n const { value: valueIndex } = event.target;\n const index = parseInt(valueIndex, 10);\n // Default empty string value for 'clear filter'\n let value = '';\n const { values } = this.props;\n if (index === -1) {\n log.debug2('Selected default item');\n } else if (index >= 0 && index < values.length) {\n value = values[index];\n } else {\n log.error('Invalid index', index, values);\n return;\n }\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel() {\n this.setState(({ column }) => ({\n selectedColumn: column,\n isValueShown: true,\n }));\n }\n\n handleSettingsSave() {\n this.setState(({ column, selectedColumn, value }) => ({\n column: selectedColumn,\n // Reset value if column changed\n value: column === selectedColumn ? value : '',\n isValueShown: true,\n disableCancel: false,\n }));\n }\n\n handleSettingsClick(event) {\n event.stopPropagation();\n this.showSettings();\n }\n\n handleBackgroundClick(event) {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n\n handleMouseEnter() {\n const { onSourceMouseEnter } = this.props;\n onSourceMouseEnter();\n }\n\n handleMouseLeave() {\n const { onSourceMouseLeave } = this.props;\n onSourceMouseLeave();\n }\n\n sourceUpdated() {\n this.setState({\n column: null,\n selectedColumn: null,\n isValueShown: false,\n disableCancel: true,\n value: '',\n });\n }\n\n showSettings() {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n }\n\n focusInput() {\n if (this.dropdownRef.current !== null) {\n this.dropdownRef.current.focus();\n }\n }\n\n resetValue() {\n this.setState({ value: '' });\n }\n\n // Called by the parent component via ref\n clearFilter() {\n this.resetValue();\n }\n\n setFilterState({ name, type, value, isValueShown }) {\n const column = name != null && type != null ? { name, type } : null;\n this.setState({ column, value, isValueShown });\n }\n\n sendUpdate() {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value });\n }\n\n render() {\n const {\n columns: allColumns,\n disableLinking,\n isLinkerActive,\n isLoaded,\n source,\n onColumnSelected,\n onSourceMouseEnter,\n onSourceMouseLeave,\n values,\n settingsError,\n } = this.props;\n const {\n column,\n disableCancel,\n isValueShown,\n selectedColumn,\n value,\n } = this.state;\n const columnSelectionDisabled = source === null;\n const columns = this.getCompatibleColumns(source, allColumns);\n const isLinked = source != null;\n const sourceButtonLabel =\n source?.columnName ?? DropdownFilter.SOURCE_BUTTON_PLACEHOLDER;\n const filterTitle = column != null ? `${column.name} Filter` : null;\n const [columnOptions, selectedIndex] = this.getColumnOptions(\n columns,\n selectedColumn\n );\n const valueOptions = this.getValueOptions(values);\n const selectedOption = this.getSelectedOptionIndex(values, value);\n const disableSave = !isLinked || selectedColumn == null;\n\n const isFlipped = isValueShown && !isLinkerActive;\n\n return (\n <CardFlip\n className=\"dropdown-filter fill-parent-absolute\"\n isFlipped={isFlipped}\n >\n <div className=\"dropdown-filter-settings-card\">\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-settings-grid\">\n <label>Source Column</label>\n <SocketedButton\n isLinked={isLinked}\n onClick={onColumnSelected}\n onMouseEnter={onSourceMouseEnter}\n onMouseLeave={onSourceMouseLeave}\n className={DropdownFilter.SOURCE_BUTTON_CLASS_NAME}\n disabled={disableLinking}\n >\n {sourceButtonLabel}\n </SocketedButton>\n\n <div className=\"text-muted small\">\n Select a source column for the list by linking to a table.\n </div>\n\n <label>Filter Column</label>\n <select\n value={selectedIndex}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n disabled={columnSelectionDisabled}\n >\n {columnOptions}\n </select>\n <div className=\"text-muted small\">\n Dropdown filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n {settingsError && (\n <div className=\"error-message text-center\">{settingsError}</div>\n )}\n {isLinked && (\n <div className=\"dropdown-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n type=\"button\"\n onClick={this.handleSettingsCancel}\n disabled={disableCancel || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive ? 'Cancel disabled while linker open' : null\n }\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n type=\"button\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={disableSave || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive ? 'Save disabled while linker open' : null\n }\n >\n Save\n </Button>\n </div>\n )}\n </div>\n </div>\n\n <div\n className=\"dropdown-filter-value-card\"\n onClick={this.handleBackgroundClick}\n >\n {isLoaded && (\n <>\n <div className=\"dropdown-filter-column\">\n <div className=\"dropdown-filter-column-title\">\n {filterTitle}\n </div>\n </div>\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-value-input d-flex flex-column justify-content-center\">\n <select\n className=\"custom-select\"\n value={selectedOption}\n ref={this.dropdownRef}\n onChange={this.handleValueChange}\n onKeyPress={this.handleDropdownKeyPress}\n >\n {valueOptions}\n </select>\n </div>\n {settingsError && (\n <div className=\"error-message mt-3 text-center\">\n {settingsError}\n </div>\n )}\n </div>\n <div className=\"dropdown-filter-menu\">\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon m-2 px-2\"\n onClick={this.handleSettingsClick}\n >\n <FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />\n </button>\n </div>\n </>\n )}\n </div>\n </CardFlip>\n );\n }\n}\n\nDropdownFilter.propTypes = {\n column: APIPropTypes.Column,\n columns: PropTypes.arrayOf(APIPropTypes.Column).isRequired,\n onSourceMouseEnter: PropTypes.func,\n onSourceMouseLeave: PropTypes.func,\n disableLinking: PropTypes.bool,\n isLinkerActive: PropTypes.bool,\n isLoaded: PropTypes.bool,\n isValueShown: PropTypes.bool,\n settingsError: PropTypes.string,\n source: UIPropTypes.LinkPoint,\n value: PropTypes.string,\n values: PropTypes.arrayOf(PropTypes.string),\n onChange: PropTypes.func.isRequired,\n onColumnSelected: PropTypes.func,\n};\n\nDropdownFilter.defaultProps = {\n column: null,\n disableLinking: false,\n isLinkerActive: false,\n isLoaded: false,\n isValueShown: false,\n\n settingsError: null,\n source: null,\n value: '',\n values: [],\n onColumnSelected: () => {},\n onSourceMouseEnter: () => {},\n onSourceMouseLeave: () => {},\n};\n\nexport default DropdownFilter;\n"],"file":"DropdownFilter.js"}
1
+ {"version":3,"sources":["../../../src/controls/dropdown-filter/DropdownFilter.jsx"],"names":["React","Component","PropTypes","FontAwesomeIcon","Button","CardFlip","SocketedButton","vsGear","APIPropTypes","TableUtils","memoizee","memoize","debounce","Log","UIPropTypes","log","module","UPDATE_DEBOUNCE","DropdownFilter","constructor","props","source","columns","filter","type","isCompatibleType","columnType","selectedColumn","selectedIndex","options","push","forEach","columnItem","index","name","getItemLabel","values","value","indexOf","PLACEHOLDER","map","val","length","shortType","substring","lastIndexOf","handleColumnChange","bind","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleDropdownKeyPress","handleValueChange","sendUpdate","dropdownRef","createRef","column","isValueShown","state","disableCancel","componentDidUpdate","prevProps","prevState","isLoaded","sourceUpdated","includes","resetValue","focusInput","componentWillUnmount","flush","event","target","debug2","setState","allColumns","getCompatibleColumns","key","preventDefault","stopPropagation","valueIndex","parseInt","error","showSettings","current","handleMouseEnter","onSourceMouseEnter","handleMouseLeave","onSourceMouseLeave","focus","clearFilter","setFilterState","onChange","render","disableLinking","isLinkerActive","onColumnSelected","settingsError","columnSelectionDisabled","isLinked","sourceButtonLabel","columnName","SOURCE_BUTTON_PLACEHOLDER","filterTitle","columnOptions","getColumnOptions","valueOptions","getValueOptions","selectedOption","getSelectedOptionIndex","disableSave","isFlipped","SOURCE_BUTTON_CLASS_NAME","propTypes","Column","arrayOf","isRequired","func","bool","string","LinkPoint","defaultProps"],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CardFlip, SocketedButton } from '@deephaven/components';\nimport { vsGear } from '@deephaven/icons';\nimport { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport memoizee from 'memoizee';\nimport memoize from 'memoize-one';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { UIPropTypes } from '../../prop-types';\nimport './DropdownFilter.scss';\n\nconst log = Log.module('DropdownFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nclass DropdownFilter extends Component {\n static PLACEHOLDER = 'Select a value...';\n\n static SOURCE_BUTTON_CLASS_NAME = 'btn-dropdown-filter-selector';\n\n static SOURCE_BUTTON_PLACEHOLDER = 'Select a column';\n\n constructor(props) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleDropdownKeyPress = this.handleDropdownKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n\n this.sendUpdate = debounce(this.sendUpdate.bind(this), UPDATE_DEBOUNCE);\n\n this.dropdownRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n selectedColumn: column,\n disableCancel: !isValueShown,\n isValueShown,\n value,\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { source, values, isLoaded } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (isLoaded) {\n if (source !== prevProps.source) {\n this.sourceUpdated();\n }\n\n if (\n values !== prevProps.values &&\n value !== '' &&\n !values.includes(value)\n ) {\n // Value list loaded, but doesn't contain the current value\n this.resetValue();\n }\n\n if (isValueShown !== prevState.isValueShown) {\n if (isValueShown) {\n this.focusInput();\n }\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n }\n\n componentWillUnmount() {\n this.sendUpdate.flush();\n }\n\n getCompatibleColumns = memoize((source, columns) =>\n source\n ? columns.filter(({ type }) =>\n TableUtils.isCompatibleType(type, source.columnType)\n )\n : []\n );\n\n getColumnOptions = memoize((columns, selectedColumn) => {\n let selectedIndex = -1;\n const options = [];\n options.push(\n <option key=\"placeholder\" value=\"-1\">\n Select a column\n </option>\n );\n columns.forEach((columnItem, index) => {\n options.push(\n <option key={`${columnItem.name}/${columnItem.type}`} value={index}>\n {this.getItemLabel(columns, index)}\n </option>\n );\n if (\n selectedColumn !== null &&\n columnItem.name === selectedColumn.name &&\n columnItem.type === selectedColumn.type\n ) {\n selectedIndex = index;\n }\n });\n return [options, selectedIndex];\n });\n\n getSelectedOptionIndex = memoize((values, value) => values.indexOf(value));\n\n getValueOptions = memoize(values => [\n <option value=\"-1\" key=\"-1\">\n {DropdownFilter.PLACEHOLDER}\n </option>,\n ...values.map((val, index) => (\n <option\n value={index}\n // eslint-disable-next-line react/no-array-index-key\n key={`${index}/${val}`}\n >\n {val}\n </option>\n )),\n ]);\n\n getItemLabel = memoizee((columns, index) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event) {\n const { value } = event.target;\n log.debug2('handleColumnChange', value);\n if (value < 0) {\n this.setState({\n selectedColumn: null,\n });\n return;\n }\n const { columns: allColumns, source } = this.props;\n const columns = this.getCompatibleColumns(source, allColumns);\n this.setState({\n selectedColumn: columns[value],\n });\n }\n\n handleDropdownKeyPress(event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n\n log.debug2('handleDropdownKeyPress');\n\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n }\n\n handleValueChange(event) {\n const { value: valueIndex } = event.target;\n const index = parseInt(valueIndex, 10);\n // Default empty string value for 'clear filter'\n let value = '';\n const { values } = this.props;\n if (index === -1) {\n log.debug2('Selected default item');\n } else if (index >= 0 && index < values.length) {\n value = values[index];\n } else {\n log.error('Invalid index', index, values);\n return;\n }\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel() {\n this.setState(({ column }) => ({\n selectedColumn: column,\n isValueShown: true,\n }));\n }\n\n handleSettingsSave() {\n this.setState(({ column, selectedColumn, value }) => ({\n column: selectedColumn,\n // Reset value if column changed\n value: column === selectedColumn ? value : '',\n isValueShown: true,\n disableCancel: false,\n }));\n }\n\n handleSettingsClick(event) {\n event.stopPropagation();\n this.showSettings();\n }\n\n handleBackgroundClick(event) {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n\n handleMouseEnter() {\n const { onSourceMouseEnter } = this.props;\n onSourceMouseEnter();\n }\n\n handleMouseLeave() {\n const { onSourceMouseLeave } = this.props;\n onSourceMouseLeave();\n }\n\n sourceUpdated() {\n this.setState({\n column: null,\n selectedColumn: null,\n isValueShown: false,\n disableCancel: true,\n value: '',\n });\n }\n\n showSettings() {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n }\n\n focusInput() {\n if (this.dropdownRef.current !== null) {\n this.dropdownRef.current.focus();\n }\n }\n\n resetValue() {\n this.setState({ value: '' });\n }\n\n // Called by the parent component via ref\n clearFilter() {\n this.resetValue();\n }\n\n setFilterState({ name, type, value, isValueShown }) {\n const column = name != null && type != null ? { name, type } : null;\n this.setState({ column, value, isValueShown });\n }\n\n sendUpdate() {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value });\n }\n\n render() {\n const {\n columns: allColumns,\n disableLinking,\n isLinkerActive,\n isLoaded,\n source,\n onColumnSelected,\n onSourceMouseEnter,\n onSourceMouseLeave,\n values,\n settingsError,\n } = this.props;\n const {\n column,\n disableCancel,\n isValueShown,\n selectedColumn,\n value,\n } = this.state;\n const columnSelectionDisabled = source === null;\n const columns = this.getCompatibleColumns(source, allColumns);\n const isLinked = source != null;\n const sourceButtonLabel =\n source?.columnName ?? DropdownFilter.SOURCE_BUTTON_PLACEHOLDER;\n const filterTitle = column != null ? `${column.name} Filter` : null;\n const [columnOptions, selectedIndex] = this.getColumnOptions(\n columns,\n selectedColumn\n );\n const valueOptions = this.getValueOptions(values);\n const selectedOption = this.getSelectedOptionIndex(values, value);\n const disableSave = !isLinked || selectedColumn == null;\n\n const isFlipped = isValueShown && !isLinkerActive;\n\n return (\n <CardFlip\n className=\"dropdown-filter fill-parent-absolute\"\n isFlipped={isFlipped}\n >\n <div className=\"dropdown-filter-settings-card\">\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-settings-grid\">\n <label>Source Column</label>\n <SocketedButton\n isLinked={isLinked}\n onClick={onColumnSelected}\n onMouseEnter={onSourceMouseEnter}\n onMouseLeave={onSourceMouseLeave}\n className={DropdownFilter.SOURCE_BUTTON_CLASS_NAME}\n disabled={disableLinking}\n >\n {sourceButtonLabel}\n </SocketedButton>\n\n <div className=\"text-muted small\">\n Select a source column for the list by linking to a table.\n </div>\n\n <label>Filter Column</label>\n <select\n value={selectedIndex}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n disabled={columnSelectionDisabled}\n >\n {columnOptions}\n </select>\n <div className=\"text-muted small\">\n Dropdown filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n {settingsError && (\n <div className=\"error-message text-center\">{settingsError}</div>\n )}\n {isLinked && (\n <div className=\"dropdown-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n type=\"button\"\n onClick={this.handleSettingsCancel}\n disabled={disableCancel || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive ? 'Cancel disabled while linker open' : null\n }\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n type=\"button\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={disableSave || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive ? 'Save disabled while linker open' : null\n }\n >\n Save\n </Button>\n </div>\n )}\n </div>\n </div>\n\n <div\n className=\"dropdown-filter-value-card\"\n onClick={this.handleBackgroundClick}\n >\n {isLoaded && (\n <>\n <div className=\"dropdown-filter-column\">\n <div className=\"dropdown-filter-column-title\">\n {filterTitle}\n </div>\n </div>\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-value-input d-flex flex-column justify-content-center\">\n <select\n className=\"custom-select\"\n value={selectedOption}\n ref={this.dropdownRef}\n onChange={this.handleValueChange}\n onKeyPress={this.handleDropdownKeyPress}\n >\n {valueOptions}\n </select>\n </div>\n {settingsError && (\n <div className=\"error-message mt-3 text-center\">\n {settingsError}\n </div>\n )}\n </div>\n <div className=\"dropdown-filter-menu\">\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon m-2 px-2\"\n onClick={this.handleSettingsClick}\n >\n <FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />\n </button>\n </div>\n </>\n )}\n </div>\n </CardFlip>\n );\n }\n}\n\nDropdownFilter.propTypes = {\n column: APIPropTypes.Column,\n columns: PropTypes.arrayOf(APIPropTypes.Column).isRequired,\n onSourceMouseEnter: PropTypes.func,\n onSourceMouseLeave: PropTypes.func,\n disableLinking: PropTypes.bool,\n isLinkerActive: PropTypes.bool,\n isLoaded: PropTypes.bool,\n isValueShown: PropTypes.bool,\n settingsError: PropTypes.string,\n source: UIPropTypes.LinkPoint,\n value: PropTypes.string,\n values: PropTypes.arrayOf(PropTypes.string),\n onChange: PropTypes.func.isRequired,\n onColumnSelected: PropTypes.func,\n};\n\nDropdownFilter.defaultProps = {\n column: null,\n disableLinking: false,\n isLinkerActive: false,\n isLoaded: false,\n isValueShown: false,\n\n settingsError: null,\n source: null,\n value: '',\n values: [],\n onColumnSelected: () => {},\n onSourceMouseEnter: () => {},\n onSourceMouseLeave: () => {},\n};\n\nexport default DropdownFilter;\n"],"file":"DropdownFilter.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"Linker.d.ts","sourceRoot":"","sources":["../../src/linker/Linker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Linker.d.ts","sourceRoot":"","sources":["../../src/linker/Linker.tsx"],"names":[],"mappings":"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"}
@@ -11,8 +11,7 @@ import memoize from 'memoize-one';
11
11
  import { CSSTransition } from 'react-transition-group';
12
12
  import { ThemeExport } from '@deephaven/components';
13
13
  import { LayoutUtils, PanelEvent } from '@deephaven/dashboard';
14
- import { DateUtils, TableUtils } from '@deephaven/iris-grid';
15
- import { DateTimeColumnFormatter } from '@deephaven/iris-grid/dist/formatters';
14
+ import { DateTimeColumnFormatter, DateUtils, TableUtils } from '@deephaven/jsapi-utils';
16
15
  import Log from '@deephaven/log';
17
16
  import { getActiveTool, getTimeZone, setActiveTool as setActiveToolAction } from '@deephaven/redux';
18
17
  import { getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, setDashboardLinks as setDashboardLinksAction, addDashboardLinks as addDashboardLinksAction, deleteDashboardLinks as deleteDashboardLinksAction, setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction, setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction } from "../redux/index.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/linker/Linker.tsx"],"names":["React","Component","connect","shortid","memoize","CSSTransition","ThemeExport","LayoutUtils","PanelEvent","DateUtils","TableUtils","DateTimeColumnFormatter","Log","getActiveTool","getTimeZone","setActiveTool","setActiveToolAction","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","InputFilterEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","log","module","mapState","state","ownProps","activeTool","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","constructor","props","linkInProgress","isolateForPanelId","combinedLinks","start","push","undefined","filter","link","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleFilterColumnSelect","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","isColumnSelectionValid","componentDidMount","layout","startListening","updateSelectionValidators","componentDidUpdate","prevProps","stopListening","componentDidCatch","error","info","componentWillUnmount","on","eventHub","COLUMN_SELECTED","DATA_SELECTED","STATE_CHANGED","CLONED","COLUMNS_CHANGED","CLOSED","off","DEFAULT","setState","panel","column","columnSelected","debug","isOverlayShown","getIdFromPanel","panelLinks","LINKER","length","columns","linksToDelete","findColumn","deleteLinks","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","name","columnName","type","columnType","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","addLinks","unsetFilterValueForLink","panelManager","endPanel","getOpenedPanelById","unsetFilterValue","setPanelFilterMap","filterMap","setFilterMap","clearAll","forEach","map","isolatedLinks","linkId","find","l","dataMap","panelFilterMap","Map","i","endPanelId","has","get","value","text","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","set","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","deleteLinksForPanelId","forceUpdate","updateLinkInProgressType","tableColumn","render","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks"],"mappings":"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","sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport {\n LayoutUtils,\n PanelComponent,\n PanelEvent,\n PanelManager,\n} from '@deephaven/dashboard';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport { DateUtils, TableUtils } from '@deephaven/iris-grid';\nimport { DateTimeColumnFormatter } from '@deephaven/iris-grid/dist/formatters';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getTimeZone,\n setActiveTool as setActiveToolAction,\n RootState,\n} from '@deephaven/redux';\nimport {\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n setDashboardLinks as setDashboardLinksAction,\n addDashboardLinks as addDashboardLinksAction,\n deleteDashboardLinks as deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction,\n} from '../redux';\nimport ToolType from './ToolType';\nimport { ChartEvent, IrisGridEvent, InputFilterEvent } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkDataMap,\n LinkFilterMap,\n LinkType,\n} from './LinkerUtils';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n isolatedLinkerPanelId?: string;\n links: Link[];\n timeZone: string;\n}\n\ninterface OwnProps {\n layout: GoldenLayout;\n panelManager: PanelManager;\n localDashboardId: string;\n}\n\nconst mapState = (state: RootState, ownProps: OwnProps): StateProps => ({\n activeTool: getActiveTool(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(\n state,\n ownProps.localDashboardId\n ),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n});\n\nconst connector = connect(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link;\n};\n\nexport class Linker extends Component<LinkerProps, LinkerState> {\n constructor(props: LinkerProps) {\n super(props);\n\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n\n this.state = { linkInProgress: undefined };\n }\n\n componentDidMount(): void {\n const { layout } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n\n componentDidUpdate(prevProps: LinkerProps): void {\n const { activeTool, layout } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n const { layout } = this.props;\n this.stopListening(layout);\n }\n\n startListening(layout: GoldenLayout): void {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.on(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n stopListening(layout: GoldenLayout): void {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n handleCancel(): void {\n const { linkInProgress } = this.state;\n if (linkInProgress == null) {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleDone(): void {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n this.setState({ linkInProgress: undefined });\n }\n\n handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column, true);\n }\n\n handleFilterColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const panelLinks = links.filter(\n link => link.start?.panelId === panelId || link.end?.panelId === panelId\n );\n\n if (!this.isOverlayShown() && panelId != null) {\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);\n\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n\n handleColumnsChanged(panel: PanelComponent, columns: LinkColumn[]): void {\n log.debug('handleColumnsChanged', panel, columns);\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\n // Delete links that start or end on non-existent column in the updated panel\n const linksToDelete = links.filter(\n ({ start, end }) =>\n (start.panelId === panelId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === panelId &&\n LinkerUtils.findColumn(columns, end) == null)\n );\n this.deleteLinks(linksToDelete);\n }\n\n handleGridColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(\n panel: PanelComponent,\n column: LinkColumn,\n isAlwaysEndPoint = false,\n overrideIsolatedLinkerPanelId?: string\n ): void {\n if (overrideIsolatedLinkerPanelId === undefined && !this.isOverlayShown()) {\n return;\n }\n const { isolatedLinkerPanelId } = this.props;\n const { linkInProgress } = this.state;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n const panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n const { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType,\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n log.debug('starting link', newLink);\n\n this.setState({ linkInProgress: newLink });\n } else {\n const { start, id, isReversed } = linkInProgress;\n const end = {\n panelId,\n panelComponent,\n columnName,\n columnType,\n };\n\n const type = LinkerUtils.getLinkType(\n isReversed ? end : start,\n isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n switch (type) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource': {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n const { links } = this.props;\n const existingLinkPanelId = isReversed ? start.panelId : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd }) =>\n panelLinkEnd?.panelId === existingLinkPanelId\n );\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n const newLink = {\n start: isReversed ? end : start,\n end: isReversed ? start : end,\n id,\n type,\n };\n log.info('creating link', newLink);\n\n this.setState({ linkInProgress: undefined }, () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([newLink]);\n });\n }\n }\n\n unsetFilterValueForLink(link: Link): void {\n const { panelManager } = this.props;\n if (link.end) {\n const { end } = link;\n const { panelId, columnName, columnType } = end;\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists, ignoring unsetFilterValue',\n panelId\n );\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId: string, filterMap: LinkFilterMap): void {\n log.debug('Set filter data for panel:', panelId, filterMap);\n const { panelManager } = this.props;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n\n addLinks(links: Link[]): void {\n const { addDashboardLinks, localDashboardId } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n\n deleteLinks(links: Link[], clearAll = false): void {\n const { localDashboardId } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n const { setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n const { deleteDashboardLinks } = this.props;\n deleteDashboardLinks(\n localDashboardId,\n links.map(({ id }) => id)\n );\n }\n }\n\n handleAllLinksDeleted(): void {\n const { links, isolatedLinkerPanelId } = this.props;\n if (isolatedLinkerPanelId === undefined) {\n this.deleteLinks(links, true);\n } else {\n const isolatedLinks = links.filter(\n link =>\n link?.start?.panelId === isolatedLinkerPanelId ||\n link?.end?.panelId === isolatedLinkerPanelId\n );\n this.deleteLinks(isolatedLinks);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleLinkDeleted(linkId: string): void {\n const { links } = this.props;\n const link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n\n handleUpdateValues(panel: PanelComponent, dataMap: LinkDataMap): void {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const { links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (let i = 0; i < links.length; i += 1) {\n const { start, end } = links[i];\n if (start.panelId === panelId && end != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const filterMap = panelFilterMap.has(endPanelId)\n ? panelFilterMap.get(endPanelId)\n : new Map();\n const { value } = dataMap[start.columnName];\n let text = `${value}`;\n if (TableUtils.isDateType(columnType)) {\n const dateFilterFormatter = new DateTimeColumnFormatter({\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT,\n });\n // The values are Dates for dateType values, not string like everything else\n text = dateFilterFormatter.format((value as unknown) as Date);\n }\n filterMap.set(columnName, {\n columnType,\n text,\n value,\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n\n handlePanelCloned(panel: PanelComponent, cloneConfig: { id: string }): void {\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const cloneId = cloneConfig.id;\n if (panelId != null) {\n const linksToAdd = LinkerUtils.cloneLinksForPanel(\n links,\n panelId,\n cloneId\n );\n this.addLinks(linksToAdd);\n }\n }\n\n handlePanelClosed(panelId: string): void {\n // Delete links on PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(`Panel ${panelId} closed, deleting links.`);\n this.deleteLinksForPanelId(panelId);\n }\n\n handleLayoutStateChanged(): void {\n this.forceUpdate();\n }\n\n handleStateChange(): void {\n this.forceUpdate();\n }\n\n handleExited(): void {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n const { localDashboardId, setDashboardIsolatedLinkerPanelId } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId: string): void {\n const { links } = this.props;\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n const { start, end, id } = link;\n if (start.panelId === panelId || end?.panelId === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n\n getCachedLinks = memoize((links, linkInProgress, isolateForPanelId) => {\n const combinedLinks = [...links];\n\n if (linkInProgress && linkInProgress.start) {\n combinedLinks.push(linkInProgress);\n }\n\n if (isolateForPanelId !== undefined) {\n return combinedLinks.filter(\n link =>\n link?.start?.panelId === isolateForPanelId ||\n link?.end?.panelId === isolateForPanelId ||\n link?.end == null\n );\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n });\n\n isOverlayShown(): boolean {\n const { activeTool } = this.props;\n return activeTool === ToolType.LINKER;\n }\n\n updateSelectionValidators(): void {\n const {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId,\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(\n localDashboardId,\n this.isColumnSelectionValid\n );\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n\n updateLinkInProgressType(\n linkInProgress: Link,\n type: LinkType = 'invalid'\n ): void {\n this.setState({\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n });\n }\n\n isColumnSelectionValid(\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\n }\n\n if (tableColumn == null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType(linkInProgress);\n return false;\n }\n\n const { isReversed, start } = linkInProgress;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n\n const end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const type = isReversed\n ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId)\n : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(linkInProgress, type);\n\n return type !== 'invalid';\n }\n\n render(): JSX.Element {\n const { links, isolatedLinkerPanelId, panelManager } = this.props;\n const { linkInProgress } = this.state;\n\n const isLinkOverlayShown = this.isOverlayShown();\n const disabled = linkInProgress != null && linkInProgress.start != null;\n const linkerOverlayMessage =\n isolatedLinkerPanelId === undefined\n ? 'Click a column source, then click a column target to create a filter link. Remove a filter link by clicking again to erase. Click done when finished.'\n : 'Create a link between the source column button and a table column by clicking on one, then the other. Remove the link by clicking it directly. Click done when finished.';\n return (\n <>\n <CSSTransition\n in={isLinkOverlayShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n onExited={this.handleExited}\n >\n <LinkerOverlayContent\n disabled={disabled}\n panelManager={panelManager}\n links={this.getCachedLinks(\n links,\n linkInProgress,\n isolatedLinkerPanelId\n )}\n messageText={linkerOverlayMessage}\n onLinkDeleted={this.handleLinkDeleted}\n onAllLinksDeleted={this.handleAllLinksDeleted}\n onDone={this.handleDone}\n onCancel={this.handleCancel}\n />\n </CSSTransition>\n </>\n );\n }\n}\n\nexport default connector(Linker);\n"],"file":"Linker.js"}
1
+ {"version":3,"sources":["../../src/linker/Linker.tsx"],"names":["React","Component","connect","shortid","memoize","CSSTransition","ThemeExport","LayoutUtils","PanelEvent","DateTimeColumnFormatter","DateUtils","TableUtils","Log","getActiveTool","getTimeZone","setActiveTool","setActiveToolAction","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","InputFilterEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","log","module","mapState","state","ownProps","activeTool","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","constructor","props","linkInProgress","isolateForPanelId","combinedLinks","start","push","undefined","filter","link","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleFilterColumnSelect","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","isColumnSelectionValid","componentDidMount","layout","startListening","updateSelectionValidators","componentDidUpdate","prevProps","stopListening","componentDidCatch","error","info","componentWillUnmount","on","eventHub","COLUMN_SELECTED","DATA_SELECTED","STATE_CHANGED","CLONED","COLUMNS_CHANGED","CLOSED","off","DEFAULT","setState","panel","column","columnSelected","debug","isOverlayShown","getIdFromPanel","panelLinks","LINKER","length","columns","linksToDelete","findColumn","deleteLinks","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","name","columnName","type","columnType","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","addLinks","unsetFilterValueForLink","panelManager","endPanel","getOpenedPanelById","unsetFilterValue","setPanelFilterMap","filterMap","setFilterMap","clearAll","forEach","map","isolatedLinks","linkId","find","l","dataMap","panelFilterMap","Map","i","endPanelId","has","get","value","text","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","set","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","deleteLinksForPanelId","forceUpdate","updateLinkInProgressType","tableColumn","render","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks"],"mappings":"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","sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport {\n LayoutUtils,\n PanelComponent,\n PanelEvent,\n PanelManager,\n} from '@deephaven/dashboard';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport {\n DateTimeColumnFormatter,\n DateUtils,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getTimeZone,\n setActiveTool as setActiveToolAction,\n RootState,\n} from '@deephaven/redux';\nimport {\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n setDashboardLinks as setDashboardLinksAction,\n addDashboardLinks as addDashboardLinksAction,\n deleteDashboardLinks as deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction,\n} from '../redux';\nimport ToolType from './ToolType';\nimport { ChartEvent, IrisGridEvent, InputFilterEvent } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkDataMap,\n LinkFilterMap,\n LinkType,\n} from './LinkerUtils';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n isolatedLinkerPanelId?: string;\n links: Link[];\n timeZone: string;\n}\n\ninterface OwnProps {\n layout: GoldenLayout;\n panelManager: PanelManager;\n localDashboardId: string;\n}\n\nconst mapState = (state: RootState, ownProps: OwnProps): StateProps => ({\n activeTool: getActiveTool(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(\n state,\n ownProps.localDashboardId\n ),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n});\n\nconst connector = connect(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link;\n};\n\nexport class Linker extends Component<LinkerProps, LinkerState> {\n constructor(props: LinkerProps) {\n super(props);\n\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n\n this.state = { linkInProgress: undefined };\n }\n\n componentDidMount(): void {\n const { layout } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n\n componentDidUpdate(prevProps: LinkerProps): void {\n const { activeTool, layout } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n const { layout } = this.props;\n this.stopListening(layout);\n }\n\n startListening(layout: GoldenLayout): void {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.on(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n stopListening(layout: GoldenLayout): void {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n handleCancel(): void {\n const { linkInProgress } = this.state;\n if (linkInProgress == null) {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleDone(): void {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n this.setState({ linkInProgress: undefined });\n }\n\n handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column, true);\n }\n\n handleFilterColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const panelLinks = links.filter(\n link => link.start?.panelId === panelId || link.end?.panelId === panelId\n );\n\n if (!this.isOverlayShown() && panelId != null) {\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);\n\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n\n handleColumnsChanged(panel: PanelComponent, columns: LinkColumn[]): void {\n log.debug('handleColumnsChanged', panel, columns);\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\n // Delete links that start or end on non-existent column in the updated panel\n const linksToDelete = links.filter(\n ({ start, end }) =>\n (start.panelId === panelId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === panelId &&\n LinkerUtils.findColumn(columns, end) == null)\n );\n this.deleteLinks(linksToDelete);\n }\n\n handleGridColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(\n panel: PanelComponent,\n column: LinkColumn,\n isAlwaysEndPoint = false,\n overrideIsolatedLinkerPanelId?: string\n ): void {\n if (overrideIsolatedLinkerPanelId === undefined && !this.isOverlayShown()) {\n return;\n }\n const { isolatedLinkerPanelId } = this.props;\n const { linkInProgress } = this.state;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n const panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n const { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType,\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n log.debug('starting link', newLink);\n\n this.setState({ linkInProgress: newLink });\n } else {\n const { start, id, isReversed } = linkInProgress;\n const end = {\n panelId,\n panelComponent,\n columnName,\n columnType,\n };\n\n const type = LinkerUtils.getLinkType(\n isReversed ? end : start,\n isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n switch (type) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource': {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n const { links } = this.props;\n const existingLinkPanelId = isReversed ? start.panelId : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd }) =>\n panelLinkEnd?.panelId === existingLinkPanelId\n );\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n const newLink = {\n start: isReversed ? end : start,\n end: isReversed ? start : end,\n id,\n type,\n };\n log.info('creating link', newLink);\n\n this.setState({ linkInProgress: undefined }, () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([newLink]);\n });\n }\n }\n\n unsetFilterValueForLink(link: Link): void {\n const { panelManager } = this.props;\n if (link.end) {\n const { end } = link;\n const { panelId, columnName, columnType } = end;\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists, ignoring unsetFilterValue',\n panelId\n );\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId: string, filterMap: LinkFilterMap): void {\n log.debug('Set filter data for panel:', panelId, filterMap);\n const { panelManager } = this.props;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n\n addLinks(links: Link[]): void {\n const { addDashboardLinks, localDashboardId } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n\n deleteLinks(links: Link[], clearAll = false): void {\n const { localDashboardId } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n const { setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n const { deleteDashboardLinks } = this.props;\n deleteDashboardLinks(\n localDashboardId,\n links.map(({ id }) => id)\n );\n }\n }\n\n handleAllLinksDeleted(): void {\n const { links, isolatedLinkerPanelId } = this.props;\n if (isolatedLinkerPanelId === undefined) {\n this.deleteLinks(links, true);\n } else {\n const isolatedLinks = links.filter(\n link =>\n link?.start?.panelId === isolatedLinkerPanelId ||\n link?.end?.panelId === isolatedLinkerPanelId\n );\n this.deleteLinks(isolatedLinks);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleLinkDeleted(linkId: string): void {\n const { links } = this.props;\n const link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n\n handleUpdateValues(panel: PanelComponent, dataMap: LinkDataMap): void {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const { links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (let i = 0; i < links.length; i += 1) {\n const { start, end } = links[i];\n if (start.panelId === panelId && end != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const filterMap = panelFilterMap.has(endPanelId)\n ? panelFilterMap.get(endPanelId)\n : new Map();\n const { value } = dataMap[start.columnName];\n let text = `${value}`;\n if (TableUtils.isDateType(columnType)) {\n const dateFilterFormatter = new DateTimeColumnFormatter({\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT,\n });\n // The values are Dates for dateType values, not string like everything else\n text = dateFilterFormatter.format((value as unknown) as Date);\n }\n filterMap.set(columnName, {\n columnType,\n text,\n value,\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n\n handlePanelCloned(panel: PanelComponent, cloneConfig: { id: string }): void {\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const cloneId = cloneConfig.id;\n if (panelId != null) {\n const linksToAdd = LinkerUtils.cloneLinksForPanel(\n links,\n panelId,\n cloneId\n );\n this.addLinks(linksToAdd);\n }\n }\n\n handlePanelClosed(panelId: string): void {\n // Delete links on PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(`Panel ${panelId} closed, deleting links.`);\n this.deleteLinksForPanelId(panelId);\n }\n\n handleLayoutStateChanged(): void {\n this.forceUpdate();\n }\n\n handleStateChange(): void {\n this.forceUpdate();\n }\n\n handleExited(): void {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n const { localDashboardId, setDashboardIsolatedLinkerPanelId } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId: string): void {\n const { links } = this.props;\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n const { start, end, id } = link;\n if (start.panelId === panelId || end?.panelId === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n\n getCachedLinks = memoize((links, linkInProgress, isolateForPanelId) => {\n const combinedLinks = [...links];\n\n if (linkInProgress && linkInProgress.start) {\n combinedLinks.push(linkInProgress);\n }\n\n if (isolateForPanelId !== undefined) {\n return combinedLinks.filter(\n link =>\n link?.start?.panelId === isolateForPanelId ||\n link?.end?.panelId === isolateForPanelId ||\n link?.end == null\n );\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n });\n\n isOverlayShown(): boolean {\n const { activeTool } = this.props;\n return activeTool === ToolType.LINKER;\n }\n\n updateSelectionValidators(): void {\n const {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId,\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(\n localDashboardId,\n this.isColumnSelectionValid\n );\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n\n updateLinkInProgressType(\n linkInProgress: Link,\n type: LinkType = 'invalid'\n ): void {\n this.setState({\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n });\n }\n\n isColumnSelectionValid(\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\n }\n\n if (tableColumn == null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType(linkInProgress);\n return false;\n }\n\n const { isReversed, start } = linkInProgress;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n\n const end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const type = isReversed\n ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId)\n : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(linkInProgress, type);\n\n return type !== 'invalid';\n }\n\n render(): JSX.Element {\n const { links, isolatedLinkerPanelId, panelManager } = this.props;\n const { linkInProgress } = this.state;\n\n const isLinkOverlayShown = this.isOverlayShown();\n const disabled = linkInProgress != null && linkInProgress.start != null;\n const linkerOverlayMessage =\n isolatedLinkerPanelId === undefined\n ? 'Click a column source, then click a column target to create a filter link. Remove a filter link by clicking again to erase. Click done when finished.'\n : 'Create a link between the source column button and a table column by clicking on one, then the other. Remove the link by clicking it directly. Click done when finished.';\n return (\n <>\n <CSSTransition\n in={isLinkOverlayShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n onExited={this.handleExited}\n >\n <LinkerOverlayContent\n disabled={disabled}\n panelManager={panelManager}\n links={this.getCachedLinks(\n links,\n linkInProgress,\n isolatedLinkerPanelId\n )}\n messageText={linkerOverlayMessage}\n onLinkDeleted={this.handleLinkDeleted}\n onAllLinksDeleted={this.handleAllLinksDeleted}\n onDone={this.handleDone}\n onCancel={this.handleCancel}\n />\n </CSSTransition>\n </>\n );\n }\n}\n\nexport default connector(Linker);\n"],"file":"Linker.js"}
@@ -6,7 +6,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
6
6
 
7
7
  import shortid from 'shortid';
8
8
  import { LayoutUtils } from '@deephaven/dashboard';
9
- import { TableUtils } from '@deephaven/iris-grid';
9
+ import { TableUtils } from '@deephaven/jsapi-utils';
10
10
  import Log from '@deephaven/log';
11
11
  import { ChartPanel, IrisGridPanel, DropdownFilterPanel } from "../panels/index.js";
12
12
  export function isLinkableFromPanel(panel) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/linker/LinkerUtils.tsx"],"names":["shortid","LayoutUtils","TableUtils","Log","ChartPanel","IrisGridPanel","DropdownFilterPanel","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","log","module","LinkerUtils","getLinkType","start","end","isolatedLinkerPanelId","panelId","debug2","panelComponent","error","isCompatibleComponent","ALLOWED_LINKS","get","includes","columnType","startColumnType","endColumnType","isCompatibleType","getComponentName","findColumn","columns","columnName","find","name","type","cloneLinksForPanel","links","cloneId","clonedLinks","forEach","link","push","id","generate","Map"],"mappings":";;;;;;AAAA,OAAOA,OAAP,MAAoB,SAApB;AACA,SAASC,WAAT,QAA4C,sBAA5C;AACA,SAASC,UAAT,QAA2B,sBAA3B;AACA,OAAOC,GAAP,MAAgB,gBAAhB;SACSC,U,EAAYC,a,EAAeC,mB;AAoDpC,OAAO,SAASC,mBAAT,CACLC,KADK,EAEuB;AAC5B,MAAMC,CAAC,GAAGD,KAAV;AACA,SAAO,OAAOC,CAAC,CAACC,sBAAT,KAAoC,UAA3C;AACD;AAED,OAAO,SAASC,eAAT,CAAyBH,KAAzB,EAAwE;AAC7E,MAAMC,CAAC,GAAGD,KAAV;AACA,SACED,mBAAmB,CAACC,KAAD,CAAnB,IACA,OAAOC,CAAC,CAACG,YAAT,KAA0B,UAD1B,IAEA,OAAOH,CAAC,CAACI,gBAAT,KAA8B,UAHhC;AAKD;AAED,IAAMC,GAAG,GAAGX,GAAG,CAACY,MAAJ,CAAW,aAAX,CAAZ;AAEA;AACA;AACA;;AACA,MAAMC,WAAN,CAAkB;AAYhB;AACF;AACA;AACA;AACA;AACA;AACA;AACoB,SAAXC,WAAW,CAChBC,KADgB,EAEhBC,GAFgB,EAGhBC,qBAHgB,EAIN;AAAA;;AACV;AACA;AACA;AACA,QACE,CAAAF,KAAK,SAAL,IAAAA,KAAK,WAAL,YAAAA,KAAK,CAAEG,OAAP,KAAkB,IAAlB,IACA,CAAAF,GAAG,SAAH,IAAAA,GAAG,WAAH,YAAAA,GAAG,CAAEE,OAAL,KAAgB,IADhB,IAEAH,KAAK,CAACG,OAAN,KAAkBF,GAAG,CAACE,OAFtB,IAGCD,qBAAqB,IAAI,IAAzB,IACCA,qBAAqB,KAAKF,KAAK,CAACG,OADjC,IAECD,qBAAqB,KAAKD,GAAG,CAACE,OANlC,EAOE;AACAP,MAAAA,GAAG,CAACQ,MAAJ,CAAW,wBAAX,EAAqCJ,KAArC,EAA4CC,GAA5C,EAAiDC,qBAAjD;AACA,aAAO,SAAP;AACD;;AAED,QAAIF,KAAK,CAACK,cAAN,IAAwB,IAAxB,IAAgCJ,GAAG,CAACI,cAAJ,IAAsB,IAA1D,EAAgE;AAC9DT,MAAAA,GAAG,CAACU,KAAJ,CAAU,mCAAV,EAA+CN,KAA/C,EAAsDC,GAAtD;AACA,aAAO,SAAP;AACD;;AAED,QAAMM,qBAAqB,4BAAGT,WAAW,CAACU,aAAZ,CAA0BC,GAA1B,CAC5BT,KAAK,CAACK,cADsB,CAAH,0DAAG,sBAE3BK,QAF2B,CAElBT,GAAG,CAACI,cAFc,CAA9B;;AAIA,QAAI,CAACE,qBAAL,EAA4B;AAC1BX,MAAAA,GAAG,CAACQ,MAAJ,CAAW,+BAAX,EAA4CJ,KAA5C,EAAmDC,GAAnD;AACA,aAAO,SAAP;AACD,KA5BS,CA8BV;;;AACA,QAAM;AAAEU,MAAAA,UAAU,EAAEC;AAAd,QAAkCZ,KAAxC;AACA,QAAM;AAAEW,MAAAA,UAAU,EAAEE;AAAd,QAAgCZ,GAAtC,CAhCU,CAkCV;;AACA,QAAMa,gBAAgB,GACpBD,aAAa,KAAK,IAAlB,IACA7B,UAAU,CAAC8B,gBAAX,CAA4BF,eAA5B,EAA6CC,aAA7C,CAFF;;AAIA,QAAI,CAACC,gBAAL,EAAuB;AACrBlB,MAAAA,GAAG,CAACQ,MAAJ,CAAW,mBAAX,EAAgCQ,eAAhC,EAAiDC,aAAjD;AACA,aAAO,SAAP;AACD,KA1CS,CA4CV;;;AACA,YAAQZ,GAAG,CAACI,cAAZ;AACE,WAAKtB,WAAW,CAACgC,gBAAZ,CAA6B7B,UAA7B,CAAL;AACA,WAAKH,WAAW,CAACgC,gBAAZ,CAA6B5B,aAA7B,CAAL;AACE,eAAO,WAAP;;AACF,WAAKJ,WAAW,CAACgC,gBAAZ,CAA6B3B,mBAA7B,CAAL;AACE,eAAO,cAAP;;AACF;AANF;;AASAQ,IAAAA,GAAG,CAACQ,MAAJ,CAAW,qCAAX,EAAkDH,GAAG,CAACI,cAAtD;AACA,WAAO,SAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACmB,SAAVW,UAAU,CACfC,OADe,QAGS;AAAA,QADxB;AAAEC,MAAAA,UAAF;AAAcP,MAAAA;AAAd,KACwB;AACxB,WAAOM,OAAO,CAACE,IAAR,CACL;AAAA,UAAC;AAAEC,QAAAA,IAAF;AAAQC,QAAAA;AAAR,OAAD;AAAA,aAAoBD,IAAI,KAAKF,UAAT,IAAuBG,IAAI,KAAKV,UAApD;AAAA,KADK,CAAP;AAGD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AAC2B,SAAlBW,kBAAkB,CACvBC,KADuB,EAEvBpB,OAFuB,EAGvBqB,OAHuB,EAIf;AACR,QAAMC,WAAmB,GAAG,EAA5B;AACAF,IAAAA,KAAK,CAACG,OAAN,CAAcC,IAAI,IAAI;AAAA;;AACpB,UAAIA,IAAI,CAAC3B,KAAL,CAAWG,OAAX,KAAuBA,OAAvB,IAAkCwB,IAAI,CAACN,IAAL,KAAc,cAApD,EAAoE;AAClEI,QAAAA,WAAW,CAACG,IAAZ,iCACKD,IADL;AAEEE,UAAAA,EAAE,EAAE/C,OAAO,CAACgD,QAAR,EAFN;AAGE9B,UAAAA,KAAK,kCAAO2B,IAAI,CAAC3B,KAAZ;AAAmBG,YAAAA,OAAO,EAAEqB;AAA5B;AAHP;AAKD,OAND,MAMO,IAAI,cAAAG,IAAI,CAAC1B,GAAL,wDAAUE,OAAV,MAAsBA,OAA1B,EAAmC;AACxCsB,QAAAA,WAAW,CAACG,IAAZ,iCACKD,IADL;AAEEE,UAAAA,EAAE,EAAE/C,OAAO,CAACgD,QAAR,EAFN;AAGE7B,UAAAA,GAAG,kCAAO0B,IAAI,CAAC1B,GAAZ;AAAiBE,YAAAA,OAAO,EAAEqB;AAA1B;AAHL;AAKD;AACF,KAdD;AAeA,WAAOC,WAAP;AACD;;AA/He;;gBAAZ3B,W,mBACmB,IAAIiC,GAAJ,CAAQ,CAC7B,CACEhD,WAAW,CAACgC,gBAAZ,CAA6B5B,aAA7B,CADF,EAEE,CACEJ,WAAW,CAACgC,gBAAZ,CAA6B5B,aAA7B,CADF,EAEEJ,WAAW,CAACgC,gBAAZ,CAA6B7B,UAA7B,CAFF,EAGEH,WAAW,CAACgC,gBAAZ,CAA6B3B,mBAA7B,CAHF,CAFF,CAD6B,CAAR,C;;AAiIzB,eAAeU,WAAf","sourcesContent":["import shortid from 'shortid';\nimport { LayoutUtils, PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/iris-grid';\nimport Log from '@deephaven/log';\nimport { ChartPanel, IrisGridPanel, DropdownFilterPanel } from '../panels';\n\nexport type LinkType = 'invalid' | 'filterSource' | 'tableLink';\n\nexport type LinkPoint = {\n panelId: string;\n panelComponent?: string;\n columnName: string;\n columnType: string;\n};\n\nexport type Link = {\n start: LinkPoint;\n end?: LinkPoint;\n id: string;\n isReversed?: boolean;\n type: LinkType;\n};\n\nexport type LinkColumn = {\n name: string;\n type: string;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string;\n text: string;\n value: T;\n};\n\nexport type LinkFilterMap<T = unknown> = Map<string, LinkFilterMapValue<T>>;\n\nexport type LinkDataMapValue = {\n type: string;\n text: string;\n value: string;\n};\n\nexport type LinkDataMap = Record<string, LinkDataMapValue>;\n\n// [x,y] screen coordinates used by the Linker\nexport type LinkerCoordinate = [number, number];\n\nexport type LinkableFromPanel = PanelComponent & {\n getCoordinateForColumn: (name: string) => LinkerCoordinate;\n};\n\nexport type LinkablePanel = LinkableFromPanel & {\n setFilterMap: (filterMap: LinkFilterMap) => void;\n unsetFilterValue: (name: string, type: string) => void;\n};\n\nexport function isLinkableFromPanel(\n panel: PanelComponent\n): panel is LinkableFromPanel {\n const p = panel as LinkableFromPanel;\n return typeof p.getCoordinateForColumn === 'function';\n}\n\nexport function isLinkablePanel(panel: PanelComponent): panel is LinkablePanel {\n const p = panel as LinkablePanel;\n return (\n isLinkableFromPanel(panel) &&\n typeof p.setFilterMap === 'function' &&\n typeof p.unsetFilterValue === 'function'\n );\n}\n\nconst log = Log.module('LinkerUtils');\n\n/**\n * Collection of utility functions for use with the Linker\n */\nclass LinkerUtils {\n static ALLOWED_LINKS = new Map([\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n LayoutUtils.getComponentName(ChartPanel),\n LayoutUtils.getComponentName(DropdownFilterPanel),\n ],\n ],\n ]);\n\n /**\n * Retrieve the type of link given parameters.\n * @param start The link start\n * @param end The link end\n * @param isolatedLinkerPanelId Whether there's an isolated linker\n * @returns The type of link, or invalid if there's an error\n */\n static getLinkType(\n start?: LinkPoint,\n end?: LinkPoint,\n isolatedLinkerPanelId?: string\n ): LinkType {\n // Panel compatibility checks:\n // Link ends should point to different non-null panelIds\n // For isolated linker one of the panels should match isolated panel id\n if (\n start?.panelId == null ||\n end?.panelId == null ||\n start.panelId === end.panelId ||\n (isolatedLinkerPanelId != null &&\n isolatedLinkerPanelId !== start.panelId &&\n isolatedLinkerPanelId !== end.panelId)\n ) {\n log.debug2('Incompatible panel ids', start, end, isolatedLinkerPanelId);\n return 'invalid';\n }\n\n if (start.panelComponent == null || end.panelComponent == null) {\n log.error('PanelComponent should not be null', start, end);\n return 'invalid';\n }\n\n const isCompatibleComponent = LinkerUtils.ALLOWED_LINKS.get(\n start.panelComponent\n )?.includes(end.panelComponent);\n\n if (!isCompatibleComponent) {\n log.debug2('Incompatible panel components', start, end);\n return 'invalid';\n }\n\n // Check column type compatibility\n const { columnType: startColumnType } = start;\n const { columnType: endColumnType } = end;\n\n // Null columnType in ending link point allows linking to any type\n const isCompatibleType =\n endColumnType === null ||\n TableUtils.isCompatibleType(startColumnType, endColumnType);\n\n if (!isCompatibleType) {\n log.debug2('Incompatible type', startColumnType, endColumnType);\n return 'invalid';\n }\n\n // If all checks pass, link type is determined by the target panel component\n switch (end.panelComponent) {\n case LayoutUtils.getComponentName(ChartPanel):\n case LayoutUtils.getComponentName(IrisGridPanel):\n return 'tableLink';\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n return 'filterSource';\n default:\n }\n\n log.debug2('Incompatible target panel component', end.panelComponent);\n return 'invalid';\n }\n\n /**\n * Find column matching the link point\n * @param columns Columns to search in\n * @param linkPoint Link point to find column for\n * @param linkPoint.columnName Column name to find\n * @param linkPoint.columnType Column type to find\n * @returns Column matching the link point, undefined if not found\n */\n static findColumn(\n columns: LinkColumn[],\n { columnName, columnType }: LinkPoint\n ): LinkColumn | undefined {\n return columns.find(\n ({ name, type }) => name === columnName && type === columnType\n );\n }\n\n /**\n * Clone links for a given panel id\n * @param links Original links array\n * @param panelId Original panel id\n * @param cloneId Cloned panel id\n * @returns Cloned links array or empty array if no new links added\n */\n static cloneLinksForPanel(\n links: Link[],\n panelId: string,\n cloneId: string\n ): Link[] {\n const clonedLinks: Link[] = [];\n links.forEach(link => {\n if (link.start.panelId === panelId && link.type !== 'filterSource') {\n clonedLinks.push({\n ...link,\n id: shortid.generate(),\n start: { ...link.start, panelId: cloneId },\n });\n } else if (link.end?.panelId === panelId) {\n clonedLinks.push({\n ...link,\n id: shortid.generate(),\n end: { ...link.end, panelId: cloneId },\n });\n }\n });\n return clonedLinks;\n }\n}\n\nexport default LinkerUtils;\n"],"file":"LinkerUtils.js"}
1
+ {"version":3,"sources":["../../src/linker/LinkerUtils.tsx"],"names":["shortid","LayoutUtils","TableUtils","Log","ChartPanel","IrisGridPanel","DropdownFilterPanel","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","log","module","LinkerUtils","getLinkType","start","end","isolatedLinkerPanelId","panelId","debug2","panelComponent","error","isCompatibleComponent","ALLOWED_LINKS","get","includes","columnType","startColumnType","endColumnType","isCompatibleType","getComponentName","findColumn","columns","columnName","find","name","type","cloneLinksForPanel","links","cloneId","clonedLinks","forEach","link","push","id","generate","Map"],"mappings":"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","sourcesContent":["import shortid from 'shortid';\nimport { LayoutUtils, PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { ChartPanel, IrisGridPanel, DropdownFilterPanel } from '../panels';\n\nexport type LinkType = 'invalid' | 'filterSource' | 'tableLink';\n\nexport type LinkPoint = {\n panelId: string;\n panelComponent?: string;\n columnName: string;\n columnType: string;\n};\n\nexport type Link = {\n start: LinkPoint;\n end?: LinkPoint;\n id: string;\n isReversed?: boolean;\n type: LinkType;\n};\n\nexport type LinkColumn = {\n name: string;\n type: string;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string;\n text: string;\n value: T;\n};\n\nexport type LinkFilterMap<T = unknown> = Map<string, LinkFilterMapValue<T>>;\n\nexport type LinkDataMapValue = {\n type: string;\n text: string;\n value: string;\n};\n\nexport type LinkDataMap = Record<string, LinkDataMapValue>;\n\n// [x,y] screen coordinates used by the Linker\nexport type LinkerCoordinate = [number, number];\n\nexport type LinkableFromPanel = PanelComponent & {\n getCoordinateForColumn: (name: string) => LinkerCoordinate;\n};\n\nexport type LinkablePanel = LinkableFromPanel & {\n setFilterMap: (filterMap: LinkFilterMap) => void;\n unsetFilterValue: (name: string, type: string) => void;\n};\n\nexport function isLinkableFromPanel(\n panel: PanelComponent\n): panel is LinkableFromPanel {\n const p = panel as LinkableFromPanel;\n return typeof p.getCoordinateForColumn === 'function';\n}\n\nexport function isLinkablePanel(panel: PanelComponent): panel is LinkablePanel {\n const p = panel as LinkablePanel;\n return (\n isLinkableFromPanel(panel) &&\n typeof p.setFilterMap === 'function' &&\n typeof p.unsetFilterValue === 'function'\n );\n}\n\nconst log = Log.module('LinkerUtils');\n\n/**\n * Collection of utility functions for use with the Linker\n */\nclass LinkerUtils {\n static ALLOWED_LINKS = new Map([\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n LayoutUtils.getComponentName(ChartPanel),\n LayoutUtils.getComponentName(DropdownFilterPanel),\n ],\n ],\n ]);\n\n /**\n * Retrieve the type of link given parameters.\n * @param start The link start\n * @param end The link end\n * @param isolatedLinkerPanelId Whether there's an isolated linker\n * @returns The type of link, or invalid if there's an error\n */\n static getLinkType(\n start?: LinkPoint,\n end?: LinkPoint,\n isolatedLinkerPanelId?: string\n ): LinkType {\n // Panel compatibility checks:\n // Link ends should point to different non-null panelIds\n // For isolated linker one of the panels should match isolated panel id\n if (\n start?.panelId == null ||\n end?.panelId == null ||\n start.panelId === end.panelId ||\n (isolatedLinkerPanelId != null &&\n isolatedLinkerPanelId !== start.panelId &&\n isolatedLinkerPanelId !== end.panelId)\n ) {\n log.debug2('Incompatible panel ids', start, end, isolatedLinkerPanelId);\n return 'invalid';\n }\n\n if (start.panelComponent == null || end.panelComponent == null) {\n log.error('PanelComponent should not be null', start, end);\n return 'invalid';\n }\n\n const isCompatibleComponent = LinkerUtils.ALLOWED_LINKS.get(\n start.panelComponent\n )?.includes(end.panelComponent);\n\n if (!isCompatibleComponent) {\n log.debug2('Incompatible panel components', start, end);\n return 'invalid';\n }\n\n // Check column type compatibility\n const { columnType: startColumnType } = start;\n const { columnType: endColumnType } = end;\n\n // Null columnType in ending link point allows linking to any type\n const isCompatibleType =\n endColumnType === null ||\n TableUtils.isCompatibleType(startColumnType, endColumnType);\n\n if (!isCompatibleType) {\n log.debug2('Incompatible type', startColumnType, endColumnType);\n return 'invalid';\n }\n\n // If all checks pass, link type is determined by the target panel component\n switch (end.panelComponent) {\n case LayoutUtils.getComponentName(ChartPanel):\n case LayoutUtils.getComponentName(IrisGridPanel):\n return 'tableLink';\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n return 'filterSource';\n default:\n }\n\n log.debug2('Incompatible target panel component', end.panelComponent);\n return 'invalid';\n }\n\n /**\n * Find column matching the link point\n * @param columns Columns to search in\n * @param linkPoint Link point to find column for\n * @param linkPoint.columnName Column name to find\n * @param linkPoint.columnType Column type to find\n * @returns Column matching the link point, undefined if not found\n */\n static findColumn(\n columns: LinkColumn[],\n { columnName, columnType }: LinkPoint\n ): LinkColumn | undefined {\n return columns.find(\n ({ name, type }) => name === columnName && type === columnType\n );\n }\n\n /**\n * Clone links for a given panel id\n * @param links Original links array\n * @param panelId Original panel id\n * @param cloneId Cloned panel id\n * @returns Cloned links array or empty array if no new links added\n */\n static cloneLinksForPanel(\n links: Link[],\n panelId: string,\n cloneId: string\n ): Link[] {\n const clonedLinks: Link[] = [];\n links.forEach(link => {\n if (link.start.panelId === panelId && link.type !== 'filterSource') {\n clonedLinks.push({\n ...link,\n id: shortid.generate(),\n start: { ...link.start, panelId: cloneId },\n });\n } else if (link.end?.panelId === panelId) {\n clonedLinks.push({\n ...link,\n id: shortid.generate(),\n end: { ...link.end, panelId: cloneId },\n });\n }\n });\n return clonedLinks;\n }\n}\n\nexport default LinkerUtils;\n"],"file":"LinkerUtils.js"}
@@ -1,6 +1,4 @@
1
- declare var _default: import("react-redux").ConnectedComponent<typeof ConsolePanel, any>;
2
- export default _default;
3
- declare class ConsolePanel extends React.PureComponent<any, any, any> {
1
+ export class ConsolePanel extends React.PureComponent<any, any, any> {
4
2
  static COMPONENT: string;
5
3
  static TITLE: string;
6
4
  constructor(props: any);
@@ -32,7 +30,7 @@ declare class ConsolePanel extends React.PureComponent<any, any, any> {
32
30
  closeDisconnectedPanels(force?: boolean): void;
33
31
  updateDimensions(): void;
34
32
  }
35
- declare namespace ConsolePanel {
33
+ export namespace ConsolePanel {
36
34
  namespace propTypes {
37
35
  const commandHistoryStorage: PropTypes.Validator<PropTypes.InferProps<{}>>;
38
36
  const glContainer: PropTypes.Validator<PropTypes.InferProps<{
@@ -83,6 +81,8 @@ declare namespace ConsolePanel {
83
81
  export { unzip_1 as unzip };
84
82
  }
85
83
  }
84
+ declare var _default: import("react-redux").ConnectedComponent<typeof ConsolePanel, any>;
85
+ export default _default;
86
86
  import React from "react";
87
87
  import PropTypes from "prop-types";
88
88
  //# sourceMappingURL=ConsolePanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConsolePanel.d.ts","sourceRoot":"","sources":["../../src/panels/ConsolePanel.jsx"],"names":[],"mappings":";;AA0BA;IACE,yBAAkC;IAElC,qBAAyB;IAEzB,wBAqCC;IAuGD,kCAGC;IAUD,oCAIC;IAED,qCAKC;IAnBD,qBAEC;IAmBD,iDAOC;IAxBD,mBAEC;IArCD,sBAIC;IAED,uBAIC;IAED,mCAYC;IAgFD,uBASC;IAjNC,iCAAmC;IACnC,+BAAqC;IA8CvC,gCA6BC;IAED,oCAMC;IAED,uDAQC;IA+DD;;;OAGG;IACH,kEAaC;IAED,mEAEC;IAED;;;OAGG;IACH,gCAFW,OAAO,QAgBjB;IAaD,yBAEC;CAsDF"}
1
+ {"version":3,"file":"ConsolePanel.d.ts","sourceRoot":"","sources":["../../src/panels/ConsolePanel.jsx"],"names":[],"mappings":"AA0BA;IACE,yBAAkC;IAElC,qBAAyB;IAEzB,wBAqCC;IAuGD,kCAGC;IAUD,oCAIC;IAED,qCAKC;IAnBD,qBAEC;IAmBD,iDAOC;IAxBD,mBAEC;IArCD,sBAIC;IAED,uBAIC;IAED,mCAYC;IAgFD,uBASC;IAjNC,iCAAmC;IACnC,+BAAqC;IA8CvC,gCA6BC;IAED,oCAMC;IAED,uDAQC;IA+DD;;;OAGG;IACH,kEAaC;IAED,mEAEC;IAED;;;OAGG;IACH,gCAFW,OAAO,QAgBjB;IAaD,yBAEC;CAsDF"}
@@ -26,8 +26,7 @@ var DEFAULT_PANEL_STATE = Object.freeze({
26
26
  consoleSettings: {},
27
27
  itemIds: []
28
28
  });
29
-
30
- class ConsolePanel extends PureComponent {
29
+ export class ConsolePanel extends PureComponent {
31
30
  constructor(props) {
32
31
  super(props);
33
32
  this.handleFocusCommandHistory = this.handleFocusCommandHistory.bind(this);