@deephaven/dashboard-core-plugins 0.15.5-vite.12 → 0.15.6-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ChartBuilderPlugin.d.ts.map +1 -1
- package/dist/ChartBuilderPlugin.js +2 -1
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/ChartPlugin.d.ts +2 -1
- package/dist/ChartPlugin.d.ts.map +1 -1
- package/dist/ChartPlugin.js.map +1 -1
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.js +1 -1
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridPlugin.d.ts +2 -1
- package/dist/GridPlugin.d.ts.map +1 -1
- package/dist/GridPlugin.js.map +1 -1
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPlugin.d.ts +2 -1
- package/dist/PandasPlugin.d.ts.map +1 -1
- package/dist/PandasPlugin.js.map +1 -1
- package/dist/controls/ControlType.d.ts +1 -1
- package/dist/controls/ControlType.d.ts.map +1 -1
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts +73 -81
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +41 -58
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.d.ts +46 -46
- package/dist/controls/input-filter/InputFilter.d.ts.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +32 -39
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.d.ts +11 -16
- package/dist/controls/markdown/MarkdownContainer.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js +5 -8
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.d.ts +17 -19
- package/dist/controls/markdown/MarkdownEditor.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js +5 -8
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.d.ts +24 -28
- package/dist/controls/markdown/MarkdownStartPage.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js +19 -23
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.d.ts +4 -4
- package/dist/controls/markdown/MarkdownUtils.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.js +2 -2
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/events/ChartEvent.d.ts +1 -1
- package/dist/events/ChartEvent.d.ts.map +1 -1
- package/dist/events/ChartEvent.js.map +1 -1
- package/dist/events/ConsoleEvent.d.ts +1 -1
- package/dist/events/ConsoleEvent.d.ts.map +1 -1
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/events/InputFilterEvent.d.ts +1 -1
- package/dist/events/InputFilterEvent.d.ts.map +1 -1
- package/dist/events/InputFilterEvent.js.map +1 -1
- package/dist/events/IrisGridEvent.d.ts +1 -1
- package/dist/events/IrisGridEvent.d.ts.map +1 -1
- package/dist/events/IrisGridEvent.js.map +1 -1
- package/dist/events/MarkdownEvent.js.map +1 -1
- package/dist/events/NotebookEvent.d.ts +1 -1
- package/dist/events/NotebookEvent.d.ts.map +1 -1
- package/dist/events/NotebookEvent.js.map +1 -1
- package/dist/events/PQEvent.d.ts +1 -1
- package/dist/events/PQEvent.d.ts.map +1 -1
- package/dist/events/PQEvent.js.map +1 -1
- package/dist/events/PandasEvent.d.ts +1 -1
- package/dist/events/PandasEvent.d.ts.map +1 -1
- package/dist/events/PandasEvent.js.map +1 -1
- package/dist/events/TabEvent.d.ts +1 -1
- package/dist/events/TabEvent.d.ts.map +1 -1
- package/dist/events/TabEvent.js.map +1 -1
- package/dist/events/index.d.ts +8 -8
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/linker/ColumnSelectionValidator.d.ts +4 -0
- package/dist/linker/ColumnSelectionValidator.d.ts.map +1 -0
- package/dist/linker/ColumnSelectionValidator.js +2 -0
- package/dist/linker/ColumnSelectionValidator.js.map +1 -0
- package/dist/linker/Linker.d.ts +11 -11
- package/dist/linker/Linker.js +1 -1
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.d.ts +3 -3
- package/dist/linker/LinkerUtils.d.ts.map +1 -1
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/linker/ToolType.d.ts +1 -1
- package/dist/linker/ToolType.d.ts.map +1 -1
- package/dist/linker/ToolType.js.map +1 -1
- package/dist/linker/index.d.ts +2 -0
- package/dist/linker/index.d.ts.map +1 -0
- package/dist/linker/index.js +2 -0
- package/dist/linker/index.js.map +1 -0
- package/dist/panels/ChartColumnSelectorOverlay.d.ts +22 -26
- package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js +5 -14
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.d.ts +29 -21
- package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +187 -152
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +87 -84
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.d.ts +41 -56
- package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
- package/dist/panels/CommandHistoryPanel.js +13 -35
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.d.ts +63 -73
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js +67 -83
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts +110 -106
- package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +60 -62
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.d.ts +5 -7
- package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.d.ts +3 -1
- package/dist/panels/FilterSetManager.d.ts.map +1 -1
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.d.ts +83 -62
- package/dist/panels/FilterSetManagerPanel.d.ts.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js +58 -36
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.d.ts +50 -51
- package/dist/panels/InputFilterPanel.d.ts.map +1 -1
- package/dist/panels/InputFilterPanel.js +35 -34
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +191 -178
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +150 -179
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/LogPanel.d.ts +29 -45
- package/dist/panels/LogPanel.d.ts.map +1 -1
- package/dist/panels/LogPanel.js +9 -11
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.d.ts +34 -34
- package/dist/panels/MarkdownNotebook.d.ts.map +1 -1
- package/dist/panels/MarkdownNotebook.js +21 -18
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.d.ts +41 -47
- package/dist/panels/MarkdownPanel.d.ts.map +1 -1
- package/dist/panels/MarkdownPanel.js +17 -19
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/NotebookPanel.d.ts +137 -115
- package/dist/panels/NotebookPanel.d.ts.map +1 -1
- package/dist/panels/NotebookPanel.js +95 -69
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.d.ts +20 -17
- package/dist/panels/PandasPanel.d.ts.map +1 -1
- package/dist/panels/PandasPanel.js +18 -14
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/Panel.d.ts +87 -123
- package/dist/panels/Panel.d.ts.map +1 -1
- package/dist/panels/Panel.js +29 -54
- package/dist/panels/Panel.js.map +1 -1
- package/dist/panels/PanelContextMenu.d.ts +16 -31
- package/dist/panels/PanelContextMenu.d.ts.map +1 -1
- package/dist/panels/PanelContextMenu.js +12 -15
- package/dist/panels/PanelContextMenu.js.map +1 -1
- package/dist/panels/RenameDialog.d.ts +26 -28
- package/dist/panels/RenameDialog.d.ts.map +1 -1
- package/dist/panels/RenameDialog.js +15 -19
- package/dist/panels/RenameDialog.js.map +1 -1
- package/dist/panels/WidgetPanel.d.ts +72 -106
- package/dist/panels/WidgetPanel.d.ts.map +1 -1
- package/dist/panels/WidgetPanel.js +17 -47
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.d.ts +29 -22
- package/dist/panels/WidgetPanelTooltip.d.ts.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js +1 -1
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/panels/index.d.ts +3 -0
- package/dist/panels/index.d.ts.map +1 -1
- package/dist/panels/index.js +3 -0
- package/dist/panels/index.js.map +1 -1
- package/dist/prop-types/CommonPropTypes.d.ts +4 -4
- package/dist/prop-types/CommonPropTypes.d.ts.map +1 -1
- package/dist/prop-types/CommonPropTypes.js +1 -1
- package/dist/prop-types/CommonPropTypes.js.map +1 -1
- package/dist/prop-types/UIPropTypes.d.ts +2 -7
- package/dist/prop-types/UIPropTypes.d.ts.map +1 -1
- package/dist/prop-types/UIPropTypes.js +0 -7
- package/dist/prop-types/UIPropTypes.js.map +1 -1
- package/dist/prop-types/index.d.ts +2 -2
- package/dist/prop-types/index.d.ts.map +1 -1
- package/dist/prop-types/index.js.map +1 -1
- package/dist/redux/actionTypes.d.ts +1 -1
- package/dist/redux/actionTypes.d.ts.map +1 -1
- package/dist/redux/actionTypes.js.map +1 -1
- package/dist/redux/actions.d.ts +63 -8
- package/dist/redux/actions.d.ts.map +1 -1
- package/dist/redux/actions.js +17 -17
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/index.js.map +1 -1
- package/dist/redux/reducers/index.d.ts +3 -4
- package/dist/redux/reducers/index.d.ts.map +1 -1
- package/dist/redux/reducers/index.js.map +1 -1
- package/dist/redux/reducers/sessionWrapper.d.ts +1 -1
- package/dist/redux/reducers/sessionWrapper.d.ts.map +1 -1
- package/dist/redux/reducers/sessionWrapper.js.map +1 -1
- package/dist/redux/selectors.d.ts +63 -9
- package/dist/redux/selectors.d.ts.map +1 -1
- package/dist/redux/selectors.js +27 -27
- package/dist/redux/selectors.js.map +1 -1
- package/package.json +21 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownFilterPanel.js","names":["React","Component","PropTypes","connect","debounce","deepEqual","memoize","GLPropTypes","LayoutUtils","dh","DateTimeColumnFormatter","Formatter","FormatterUtils","TableUtils","Log","getActiveTool","getSettings","Pending","PromiseUtils","DropdownFilter","InputFilterEvent","getColumnsForDashboard","getColumnSelectionValidatorForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","UIPropTypes","ToolType","WidgetPanel","log","module","DROPDOWN_FILTER_DEBOUNCE","DropdownFilterPanel","constructor","props","rawValues","formatter","type","name","isDateType","map","value","DATETIME_FORMATTER","format","getFormattedString","dashboardLinks","panel","panelId","getIdFromPanel","debug","filter","link","end","links","source","length","start","error","panelTableMap","get","table","columns","find","columnName","columnType","handleChange","bind","handleClearAllFilters","handleDisconnect","handleReconnect","handleColumnSelected","handleSourceFilterChange","handleSourceSortChange","handleSourceSizeChange","handleSourceMouseEnter","handleSourceMouseLeave","handleValuesTableUpdate","dropdownFilterRef","createRef","panelContainer","pending","cleanup","panelState","settings","columnFormats","isValueShown","timestamp","column","state","valuesTable","valuesColumn","sourceSize","values","wasFlipped","skipUpdate","isDisconnected","isLoading","isLoaded","componentDidMount","updateValuesTable","sourceTable","getSourceTable","startListeningToSource","sendUpdate","componentDidUpdate","prevProps","prevState","getSource","prevSource","prevSourceTable","updateFormatterSettings","close","stopListeningToSource","componentWillUnmount","cancel","getCoordinateForColumn","current","element","querySelector","SOURCE_BUTTON_CLASS_NAME","rect","getBoundingClientRect","width","height","x","left","y","bottom","getSettingsErrorMessage","MAX_TABLE_SIZE","getPanelErrorMessage","panelLinks","getCachedPanelLinks","getCachedSource","getCachedSourceTable","getValuesColumn","getCachedSourceColumn","addEventListener","Table","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","EVENT_SIZECHANGED","EVENT_DISCONNECT","EVENT_RECONNECT","removeEventListener","Date","now","setState","prevTimestamp","isFlip","Error","applySourceFilters","applySourceSorts","detail","glEventHub","emit","COLUMN_SELECTED","SOURCE_COLUMN","clearFilter","setPanelState","setFilterState","sourcePanelId","excludePanelIds","FILTERS_CHANGED","size","add","copy","resolved","then","updateViewportListener","catch","isCancelled","sort","sorts","applySort","setViewport","filters","applyFilter","EVENT_UPDATED","getColumnFormats","rows","row","columnSelectionValidator","render","disableLinking","glContainer","isLinkerActive","settingsErrorMessage","panelErrorMessage","formattedValues","getCachedValues","showTimeZone","showTSeparator","defaultDateTimeFormatString","Object","freeze","propTypes","Container","isRequired","EventHub","shape","string","bool","arrayOf","func","instanceOf","Map","Links","defaultProps","displayName","mapStateToProps","ownProps","localDashboardId","activeTool","isolatedLinkerPanelId","LINKER","undefined","forwardRef"],"sources":["../../src/panels/DropdownFilterPanel.jsx"],"sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoize-one';\nimport { GLPropTypes, LayoutUtils } from '@deephaven/dashboard';\nimport dh from '@deephaven/jsapi-shim';\nimport {\n DateTimeColumnFormatter,\n Formatter,\n FormatterUtils,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getActiveTool, getSettings } from '@deephaven/redux';\nimport { Pending, PromiseUtils } from '@deephaven/utils';\nimport DropdownFilter from '../controls/dropdown-filter/DropdownFilter';\nimport { InputFilterEvent } from '../events';\nimport {\n getColumnsForDashboard,\n getColumnSelectionValidatorForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n} from '../redux';\nimport './DropdownFilterPanel.scss';\nimport { UIPropTypes } from '../prop-types';\nimport ToolType from '../linker/ToolType';\nimport WidgetPanel from './WidgetPanel';\n\nconst log = Log.module('DropdownFilterPanel');\n\nconst DROPDOWN_FILTER_DEBOUNCE = 250;\n\nclass DropdownFilterPanel extends Component {\n static COMPONENT = 'DropdownFilterPanel';\n\n static MAX_TABLE_SIZE = 256;\n\n // Filter dropdown needs to show and send full timestamp format with nanoseconds\n static DATETIME_FORMATTER = new DateTimeColumnFormatter({\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: `yyyy-MM-dd HH:mm:ss.SSSSSSSSS`,\n });\n\n static SOURCE_COLUMN = Object.freeze({\n name: 'FilterSource',\n type: null,\n });\n\n constructor(props) {\n super(props);\n\n this.handleChange = debounce(\n this.handleChange.bind(this),\n DROPDOWN_FILTER_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleSourceSizeChange = this.handleSourceSizeChange.bind(this);\n this.handleSourceMouseEnter = this.handleSourceMouseEnter.bind(this);\n this.handleSourceMouseLeave = this.handleSourceMouseLeave.bind(this);\n this.handleValuesTableUpdate = this.handleValuesTableUpdate.bind(this);\n\n this.dropdownFilterRef = React.createRef();\n this.panelContainer = React.createRef();\n this.pending = new Pending();\n this.cleanup = null;\n\n const { panelState, settings } = props;\n this.columnFormats = settings.columnFormats;\n const { value = '', isValueShown = false, name, type, timestamp = null } =\n panelState ?? {};\n const column = name != null && type != null ? { name, type } : null;\n this.state = {\n column,\n formatter: new Formatter(this.columnFormats),\n valuesTable: null,\n valuesColumn: null,\n sourceSize: 0,\n value,\n timestamp,\n values: [],\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n error: null,\n };\n }\n\n componentDidMount() {\n this.updateValuesTable();\n const { column, value, timestamp } = this.state;\n const sourceTable = this.getSourceTable();\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n if (column != null) {\n const { name, type } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { valuesTable } = this.state;\n const { settings } = this.props;\n const source = this.getSource();\n const sourceTable = this.getSourceTable();\n const prevSource = this.getSource(prevProps);\n const prevSourceTable = this.getSourceTable(prevProps);\n\n if (settings !== prevProps.settings) {\n this.updateFormatterSettings(settings);\n }\n\n if (\n valuesTable !== prevState.valuesTable &&\n prevState.valuesTable !== null\n ) {\n log.debug('Table in state modified, closing the old table.');\n prevState.valuesTable.close();\n }\n\n // Checking source change in addition to table change\n // in case a different column is selected in the same table\n if (sourceTable !== prevSourceTable || source !== prevSource) {\n this.updateValuesTable();\n }\n\n if (sourceTable !== prevSourceTable) {\n if (prevSourceTable !== null) {\n this.stopListeningToSource(prevSourceTable);\n }\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n }\n }\n\n componentWillUnmount() {\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable();\n this.pending.cancel();\n if (sourceTable !== null) {\n this.stopListeningToSource(sourceTable);\n }\n if (this.cleanup) {\n this.cleanup();\n }\n if (valuesTable !== null) {\n valuesTable.close();\n }\n }\n\n getCachedValues = memoize((rawValues, { type, name }, formatter) => {\n if (TableUtils.isDateType(type)) {\n return rawValues.map(value =>\n DropdownFilterPanel.DATETIME_FORMATTER.format(value)\n );\n }\n return rawValues.map(value =>\n // Skip formatting for nulls so they don't get converted to ''\n value != null ? formatter.getFormattedString(value, type, name) : null\n );\n });\n\n getCoordinateForColumn() {\n if (!this.panelContainer.current) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(\n `.${DropdownFilter.SOURCE_BUTTON_CLASS_NAME}`\n );\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n getSettingsErrorMessage() {\n const { sourceSize } = this.state;\n if (sourceSize > DropdownFilterPanel.MAX_TABLE_SIZE) {\n return `Table too large, must have fewer than ${DropdownFilterPanel.MAX_TABLE_SIZE} options.`;\n }\n return null;\n }\n\n getPanelErrorMessage() {\n const { error } = this.state;\n return error ? `${error}` : null;\n }\n\n getCachedPanelLinks = memoize((dashboardLinks, panel) => {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('getCachedPanelLinks', dashboardLinks, panelId);\n return dashboardLinks.filter(link => link.end?.panelId === panelId);\n });\n\n getCachedSource = memoize(links => {\n log.debug('getCachedSource', links);\n let source = null;\n if (links.length > 0) {\n const [link] = links;\n source = link.start;\n if (links.length > 1) {\n log.error('Filter has more that one link', links);\n }\n }\n return source;\n });\n\n getCachedSourceTable = memoize((panelTableMap, source) => {\n log.debug('getCachedSourceTable', panelTableMap, source);\n if (source == null) {\n return null;\n }\n const { panelId } = source;\n return panelTableMap.get(panelId) ?? null;\n });\n\n getCachedSourceColumn = memoize((table, source) => {\n log.debug('getCachedSourceColumn', table, source);\n if (table == null || source == null) {\n return null;\n }\n return (\n table.columns.find(\n ({ name, type }) =>\n name === source.columnName && type === source.columnType\n ) ?? null\n );\n });\n\n getSource(props = this.props) {\n const { dashboardLinks } = props;\n const panelLinks = this.getCachedPanelLinks(dashboardLinks, this);\n return this.getCachedSource(panelLinks);\n }\n\n getSourceTable(props = this.props) {\n const { panelTableMap } = props;\n const source = this.getSource(props);\n return this.getCachedSourceTable(panelTableMap, source);\n }\n\n getValuesColumn(valuesTable) {\n const source = this.getSource();\n return this.getCachedSourceColumn(valuesTable, source);\n }\n\n startListeningToSource(sourceTable) {\n log.debug('startListeningToSource');\n sourceTable.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n stopListeningToSource(sourceTable) {\n log.debug('stopListeningToSource');\n sourceTable.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n handleChange({ column, isValueShown, value }) {\n const { name = null, type = null } = column ?? {};\n let sendUpdate = true;\n let timestamp = Date.now();\n this.setState(\n ({ panelState, timestamp: prevTimestamp, wasFlipped, skipUpdate }) => {\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n const isFlip =\n panelState != null &&\n isValueShown !== panelState.isValueShown &&\n name === panelState.name &&\n type === panelState.type &&\n value === panelState.value;\n sendUpdate = !skipUpdate && isValueShown && (!isFlip || !wasFlipped);\n\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp,\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false,\n };\n },\n () => {\n if (sendUpdate) {\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n );\n }\n\n handleDisconnect() {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect() {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleSourceFilterChange() {\n this.applySourceFilters();\n }\n\n handleSourceSortChange() {\n this.applySourceSorts();\n }\n\n handleSourceSizeChange({ detail }) {\n this.setState({ sourceSize: detail });\n }\n\n handleColumnSelected() {\n log.debug('handleColumnSelected');\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMN_SELECTED,\n this,\n DropdownFilterPanel.SOURCE_COLUMN\n );\n }\n\n handleClearAllFilters() {\n this.dropdownFilterRef.current.clearFilter();\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param {Object} state Filter state to set\n * @param {boolean} sendUpdate Emit filters changed event if true\n */\n setPanelState(state, sendUpdate = false) {\n if (this.getSource() == null) {\n log.debug('Ignore state update for unlinked filter', state);\n return;\n }\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({ skipUpdate: !sendUpdate });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n this.dropdownFilterRef.current?.setFilterState(state);\n }\n\n sendUpdate(name, type, value, timestamp) {\n const { glEventHub } = this.props;\n const sourcePanelId = this.getSource()?.panelId;\n const excludePanelIds = sourcePanelId === null ? [] : [sourcePanelId];\n log.debug('sendUpdate', {\n name,\n type,\n value,\n timestamp,\n excludePanelIds,\n });\n\n glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value: value != null ? value : '=null',\n timestamp,\n excludePanelIds,\n });\n }\n\n updateValuesTable() {\n const source = this.getSource();\n const sourceTable = this.getSourceTable();\n log.debug('updateValuesTable', source, sourceTable);\n\n this.setState({\n values: [],\n valuesTable: null,\n error: null,\n });\n\n if (source == null) {\n log.debug('Filter unlinked.');\n this.setState({\n isLoading: false,\n isLoaded: true,\n isValueShown: false,\n sourceSize: 0,\n });\n return;\n }\n\n this.setState({ isLoading: true });\n\n if (sourceTable == null) {\n return;\n }\n\n this.setState({ isLoaded: false, sourceSize: sourceTable.size });\n\n this.pending\n .add(sourceTable.copy(), resolved => resolved.close())\n .then(valuesTable => {\n // Loading/loaded will be set when values array is actually populated\n this.updateViewportListener(valuesTable);\n this.setState({ valuesTable });\n })\n .catch(error => {\n if (PromiseUtils.isCancelled(error)) {\n return;\n }\n log.error(error);\n this.setState({ isLoading: false, error });\n });\n }\n\n applySourceSorts() {\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable();\n log.debug('applySourceSorts', sourceTable.sort);\n if (valuesTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const sorts = [...sourceTable.sort];\n valuesTable.applySort(sorts);\n this.setViewport(valuesTable);\n }\n\n applySourceFilters() {\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable();\n log.debug('applySourceFilters', sourceTable.filter);\n if (valuesTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const filters = [...sourceTable.filter];\n valuesTable.applyFilter(filters);\n this.setViewport(valuesTable);\n }\n\n updateViewportListener(valuesTable) {\n log.debug('updateViewportListener', valuesTable?.size);\n\n if (this.cleanup) {\n this.cleanup();\n }\n\n if (valuesTable == null) {\n this.cleanup = null;\n return;\n }\n\n this.cleanup = valuesTable.addEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleValuesTableUpdate\n );\n\n this.setViewport(valuesTable);\n }\n\n setViewport(valuesTable) {\n const valuesColumn = this.getValuesColumn(valuesTable);\n valuesTable.setViewport(0, DropdownFilterPanel.MAX_TABLE_SIZE - 1, [\n valuesColumn,\n ]);\n }\n\n updateFormatterSettings(settings) {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n if (!deepEqual(this.columnFormats, columnFormats)) {\n this.columnFormats = columnFormats;\n this.setState({ formatter: new Formatter(columnFormats) });\n }\n }\n\n handleValuesTableUpdate({ detail }) {\n const { rows } = detail;\n const { valuesTable } = this.state;\n const valuesColumn = this.getValuesColumn(valuesTable);\n if (!valuesColumn) {\n log.error('Values column not found');\n return;\n }\n const values = rows.map(row => row.get(valuesColumn));\n this.setState({ values, isLoading: false, isLoaded: true, valuesColumn });\n }\n\n handleSourceMouseEnter() {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n\n handleSourceMouseLeave() {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, null);\n }\n\n render() {\n const {\n columns,\n disableLinking,\n glContainer,\n glEventHub,\n isLinkerActive,\n } = this.props;\n const {\n column,\n formatter,\n isDisconnected,\n isValueShown,\n value,\n values,\n valuesColumn,\n isLoading,\n isLoaded,\n } = this.state;\n\n const source = this.getSource();\n const settingsErrorMessage = this.getSettingsErrorMessage();\n const panelErrorMessage = this.getPanelErrorMessage();\n const formattedValues =\n isLoaded && valuesColumn != null\n ? this.getCachedValues(values, valuesColumn, formatter)\n : [];\n\n return (\n <WidgetPanel\n errorMessage={panelErrorMessage}\n isLoading={isLoading}\n isLoaded={isLoaded}\n isDisconnected={isDisconnected}\n className=\"iris-dropdown-filter-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n widgetName=\"Dropdown Filter\"\n widgetType=\"DropdownFilter\"\n >\n <div\n ref={this.panelContainer}\n className=\"dropdown-filter-container h-100 w-100 container\"\n >\n <DropdownFilter\n ref={this.dropdownFilterRef}\n column={column}\n columns={columns}\n isValueShown={isValueShown}\n isLinkerActive={isLinkerActive}\n disableLinking={disableLinking}\n isLoaded={isLoaded}\n settingsError={settingsErrorMessage}\n source={source}\n value={value}\n values={formattedValues}\n onChange={this.handleChange}\n onColumnSelected={this.handleColumnSelected}\n onSourceMouseEnter={this.handleSourceMouseEnter}\n onSourceMouseLeave={this.handleSourceMouseLeave}\n />\n </div>\n </WidgetPanel>\n );\n }\n}\n\nDropdownFilterPanel.propTypes = {\n glContainer: GLPropTypes.Container.isRequired,\n glEventHub: GLPropTypes.EventHub.isRequired,\n panelState: PropTypes.shape({\n name: PropTypes.string,\n type: PropTypes.string,\n value: PropTypes.string,\n isValueShown: PropTypes.bool,\n }),\n isLinkerActive: PropTypes.bool.isRequired,\n columns: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n columnSelectionValidator: PropTypes.func,\n disableLinking: PropTypes.bool.isRequired,\n settings: PropTypes.shape({\n columnFormats: PropTypes.arrayOf(PropTypes.shape({})),\n }).isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n panelTableMap: PropTypes.instanceOf(Map).isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n dashboardLinks: UIPropTypes.Links.isRequired,\n};\n\nDropdownFilterPanel.defaultProps = {\n columnSelectionValidator: null,\n panelState: null,\n};\n\nDropdownFilterPanel.displayName = 'DropdownFilterPanel';\n\nconst mapStateToProps = (state, ownProps) => {\n const { localDashboardId } = ownProps;\n const panelId = LayoutUtils.getIdFromPanel({ props: ownProps });\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const dashboardLinks = getLinksForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER &&\n (isolatedLinkerPanelId === undefined || isolatedLinkerPanelId === panelId);\n // Disable linking if linker is in isolated mode for a different panel\n const disableLinking =\n activeTool === ToolType.LINKER &&\n isolatedLinkerPanelId !== undefined &&\n isolatedLinkerPanelId !== panelId;\n\n return {\n columns: getColumnsForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n isLinkerActive,\n disableLinking,\n settings: getSettings(state),\n panelTableMap,\n dashboardLinks,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n DropdownFilterPanel\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/panels/DropdownFilterPanel.tsx"],"names":["React","Component","connect","debounce","deepEqual","memoize","LayoutUtils","dh","DateTimeColumnFormatter","Formatter","FormatterUtils","TableUtils","Log","getActiveTool","getSettings","Pending","PromiseUtils","DropdownFilter","InputFilterEvent","getColumnsForDashboard","getColumnSelectionValidatorForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","ToolType","WidgetPanel","log","module","DROPDOWN_FILTER_DEBOUNCE","DropdownFilterPanel","constructor","props","rawValues","formatter","type","name","isDateType","map","value","DATETIME_FORMATTER","format","getFormattedString","dashboardLinks","panel","panelId","getIdFromPanel","debug","filter","link","end","links","source","length","start","error","panelTableMap","get","table","columns","find","columnName","columnType","handleChange","bind","handleClearAllFilters","handleDisconnect","handleReconnect","handleColumnSelected","handleSourceFilterChange","handleSourceSortChange","handleSourceSizeChange","handleSourceMouseEnter","handleSourceMouseLeave","handleValuesTableUpdate","dropdownFilterRef","createRef","panelContainer","pending","panelState","settings","columnFormats","getColumnFormats","isValueShown","timestamp","column","undefined","state","valuesTable","valuesColumn","sourceSize","values","wasFlipped","skipUpdate","isDisconnected","isLoading","isLoaded","componentDidMount","updateValuesTable","sourceTable","getSourceTable","startListeningToSource","sendUpdate","componentDidUpdate","prevProps","prevState","getSource","prevSource","prevSourceTable","updateFormatterSettings","close","stopListeningToSource","componentWillUnmount","cancel","cleanup","getCoordinateForColumn","current","element","querySelector","SOURCE_BUTTON_CLASS_NAME","rect","getBoundingClientRect","width","height","x","left","y","bottom","getSettingsErrorMessage","MAX_TABLE_SIZE","getPanelErrorMessage","panelLinks","getCachedPanelLinks","getCachedSource","getCachedSourceTable","getValuesColumn","getCachedSourceColumn","addEventListener","Table","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","EVENT_SIZECHANGED","EVENT_DISCONNECT","EVENT_RECONNECT","removeEventListener","Date","now","setState","prevTimestamp","isFlip","Error","applySourceFilters","applySourceSorts","detail","glEventHub","emit","COLUMN_SELECTED","SOURCE_COLUMN","clearFilter","setPanelState","setFilterState","sourcePanelId","excludePanelIds","FILTERS_CHANGED","size","add","copy","resolved","then","updateViewportListener","catch","isCanceled","sort","sorts","applySort","setViewport","filters","applyFilter","EVENT_UPDATED","rows","row","columnSelectionValidator","render","disableLinking","glContainer","isLinkerActive","settingsErrorMessage","panelErrorMessage","formattedValues","getCachedValues","showTimeZone","showTSeparator","defaultDateTimeFormatString","Object","freeze","mapStateToProps","ownProps","localDashboardId","activeTool","isolatedLinkerPanelId","LINKER","forwardRef"],"mappings":"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","sourcesContent":["import React, { Component, RefObject } from 'react';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoize-one';\nimport { LayoutUtils } from '@deephaven/dashboard';\nimport dh, { Column, Row, TableTemplate } from '@deephaven/jsapi-shim';\nimport {\n DateTimeColumnFormatter,\n Formatter,\n FormatterUtils,\n FormattingRule,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getActiveTool, getSettings, RootState } from '@deephaven/redux';\nimport { Pending, PromiseUtils } from '@deephaven/utils';\nimport { Container, EventEmitter } from '@deephaven/golden-layout';\nimport DropdownFilter, {\n DropdownFilterColumn,\n} from '../controls/dropdown-filter/DropdownFilter';\nimport { InputFilterEvent } from '../events';\nimport {\n getColumnsForDashboard,\n getColumnSelectionValidatorForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n} from '../redux';\nimport './DropdownFilterPanel.scss';\nimport ToolType from '../linker/ToolType';\nimport WidgetPanel from './WidgetPanel';\nimport { Link } from '../linker/LinkerUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst log = Log.module('DropdownFilterPanel');\n\nconst DROPDOWN_FILTER_DEBOUNCE = 250;\n\ninterface PanelState {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n timestamp?: number;\n}\n\ninterface DropdownFilterPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n panelState?: PanelState;\n isLinkerActive: boolean;\n columns: Column[];\n columnSelectionValidator?: ColumnSelectionValidator;\n disableLinking: boolean;\n settings: {\n formatter: FormattingRule[];\n };\n // eslint-disable-next-line react/no-unused-prop-types\n panelTableMap: Map<string | string[], TableTemplate>;\n // eslint-disable-next-line react/no-unused-prop-types\n dashboardLinks: Link[];\n}\n\ninterface DropdownFilterPanelState {\n column?: DropdownFilterColumn;\n formatter: Formatter;\n valuesTable?: TableTemplate;\n valuesColumn?: Column;\n sourceSize: number;\n value: string;\n timestamp?: number;\n values: unknown[];\n isValueShown: boolean;\n wasFlipped: boolean;\n skipUpdate: boolean;\n\n panelState?: PanelState; // Dehydrated panel state that can load this panel\n\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n error: unknown | null;\n}\n\nclass DropdownFilterPanel extends Component<\n DropdownFilterPanelProps,\n DropdownFilterPanelState\n> {\n static displayName = 'DropdownFilterPanel';\n\n static COMPONENT = 'DropdownFilterPanel';\n\n static MAX_TABLE_SIZE = 256;\n\n // Filter dropdown needs to show and send full timestamp format with nanoseconds\n static DATETIME_FORMATTER = new DateTimeColumnFormatter({\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: `yyyy-MM-dd HH:mm:ss.SSSSSSSSS`,\n });\n\n static SOURCE_COLUMN = Object.freeze({\n name: 'FilterSource',\n type: null,\n });\n\n constructor(props: DropdownFilterPanelProps) {\n super(props);\n\n this.handleChange = debounce(\n this.handleChange.bind(this),\n DROPDOWN_FILTER_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleSourceSizeChange = this.handleSourceSizeChange.bind(this);\n this.handleSourceMouseEnter = this.handleSourceMouseEnter.bind(this);\n this.handleSourceMouseLeave = this.handleSourceMouseLeave.bind(this);\n this.handleValuesTableUpdate = this.handleValuesTableUpdate.bind(this);\n\n this.dropdownFilterRef = React.createRef();\n this.panelContainer = React.createRef();\n this.pending = new Pending();\n\n const { panelState, settings } = props;\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n const { value = '', isValueShown = false, name, type, timestamp } =\n panelState ?? {};\n const column = name != null && type != null ? { name, type } : undefined;\n this.state = {\n column,\n formatter: new Formatter(this.columnFormats),\n valuesTable: undefined,\n valuesColumn: undefined,\n sourceSize: 0,\n value,\n timestamp,\n values: [],\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n error: null,\n };\n }\n\n componentDidMount() {\n this.updateValuesTable();\n const { column, value, timestamp } = this.state;\n const sourceTable = this.getSourceTable();\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n if (column != null) {\n const { name, type } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n\n componentDidUpdate(\n prevProps: DropdownFilterPanelProps,\n prevState: DropdownFilterPanelState\n ) {\n const { valuesTable } = this.state;\n const { settings } = this.props;\n const source = this.getSource();\n const sourceTable = this.getSourceTable();\n const prevSource = this.getSource(prevProps);\n const prevSourceTable = this.getSourceTable(prevProps);\n\n if (settings !== prevProps.settings && settings !== undefined) {\n this.updateFormatterSettings(settings);\n }\n\n if (\n valuesTable !== prevState.valuesTable &&\n prevState.valuesTable != null\n ) {\n log.debug('Table in state modified, closing the old table.');\n prevState.valuesTable.close();\n }\n\n // Checking source change in addition to table change\n // in case a different column is selected in the same table\n if (sourceTable !== prevSourceTable || source !== prevSource) {\n this.updateValuesTable();\n }\n\n if (sourceTable !== prevSourceTable) {\n if (prevSourceTable !== null) {\n this.stopListeningToSource(prevSourceTable);\n }\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n }\n }\n\n componentWillUnmount(): void {\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable();\n this.pending.cancel();\n if (sourceTable !== null) {\n this.stopListeningToSource(sourceTable);\n }\n if (this.cleanup) {\n this.cleanup();\n }\n if (valuesTable != null) {\n valuesTable.close();\n }\n }\n\n dropdownFilterRef: RefObject<DropdownFilter>;\n\n panelContainer: RefObject<HTMLDivElement>;\n\n pending: Pending;\n\n cleanup?: () => void;\n\n columnFormats?: FormattingRule[];\n\n getCachedValues = memoize(\n (\n rawValues: unknown[],\n { type, name }: DropdownFilterColumn,\n formatter: Formatter\n ) => {\n if (type && TableUtils.isDateType(type)) {\n return rawValues.map(value =>\n DropdownFilterPanel.DATETIME_FORMATTER.format(value as number)\n );\n }\n return rawValues.map(value =>\n // Skip formatting for nulls so they don't get converted to ''\n value != null && type != null\n ? formatter.getFormattedString(value, type, name)\n : null\n );\n }\n );\n\n getCoordinateForColumn(): [number, number] | null {\n if (this.panelContainer.current == null) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(\n `.${DropdownFilter.SOURCE_BUTTON_CLASS_NAME}`\n );\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n getSettingsErrorMessage(): string | undefined {\n const { sourceSize } = this.state;\n if (sourceSize > DropdownFilterPanel.MAX_TABLE_SIZE) {\n return `Table too large, must have fewer than ${DropdownFilterPanel.MAX_TABLE_SIZE} options.`;\n }\n return undefined;\n }\n\n getPanelErrorMessage(): string | undefined {\n const { error } = this.state;\n return error ? `${error}` : undefined;\n }\n\n getCachedPanelLinks = memoize((dashboardLinks: Link[], panel) => {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('getCachedPanelLinks', dashboardLinks, panelId);\n return dashboardLinks.filter(link => link.end?.panelId === panelId);\n });\n\n getCachedSource = memoize(links => {\n log.debug('getCachedSource', links);\n let source = null;\n if (links.length > 0) {\n const [link] = links;\n source = link.start;\n if (links.length > 1) {\n log.error('Filter has more that one link', links);\n }\n }\n return source;\n });\n\n getCachedSourceTable = memoize((panelTableMap, source) => {\n log.debug('getCachedSourceTable', panelTableMap, source);\n if (source == null) {\n return null;\n }\n const { panelId } = source;\n return panelTableMap.get(panelId) ?? null;\n });\n\n getCachedSourceColumn = memoize((table: TableTemplate, source) => {\n log.debug('getCachedSourceColumn', table, source);\n if (table == null || source == null) {\n return null;\n }\n return (\n table.columns.find(\n ({ name, type }) =>\n name === source.columnName && type === source.columnType\n ) ?? null\n );\n });\n\n getSource(props = this.props) {\n const { dashboardLinks } = props;\n const panelLinks = this.getCachedPanelLinks(dashboardLinks, this);\n return this.getCachedSource(panelLinks);\n }\n\n getSourceTable(props = this.props) {\n const { panelTableMap } = props;\n const source = this.getSource(props);\n return this.getCachedSourceTable(panelTableMap, source);\n }\n\n getValuesColumn(valuesTable: TableTemplate): Column | null {\n const source = this.getSource();\n return this.getCachedSourceColumn(valuesTable, source);\n }\n\n startListeningToSource(sourceTable: TableTemplate): void {\n log.debug('startListeningToSource');\n sourceTable.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n stopListeningToSource(sourceTable: TableTemplate): void {\n log.debug('stopListeningToSource');\n sourceTable.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n handleChange({\n column,\n isValueShown,\n value,\n }: {\n column: Partial<Column> | null;\n isValueShown?: boolean | undefined;\n value?: string | undefined;\n }) {\n const { name = undefined, type = undefined } = column ?? {};\n let sendUpdate = true;\n let timestamp: number | undefined = Date.now();\n this.setState(\n ({ panelState, timestamp: prevTimestamp, wasFlipped, skipUpdate }) => {\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n const isFlip =\n panelState != null &&\n isValueShown !== panelState.isValueShown &&\n name === panelState.name &&\n type === panelState.type &&\n value === panelState.value;\n sendUpdate =\n (!skipUpdate && isValueShown && (!isFlip || !wasFlipped)) ?? false;\n\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp: timestamp ?? undefined,\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false,\n };\n },\n () => {\n if (sendUpdate) {\n this.sendUpdate(name ?? null, type, value, timestamp);\n }\n }\n );\n }\n\n handleDisconnect() {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect() {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleSourceFilterChange() {\n this.applySourceFilters();\n }\n\n handleSourceSortChange() {\n this.applySourceSorts();\n }\n\n handleSourceSizeChange({ detail }: { detail: number }) {\n this.setState({ sourceSize: detail });\n }\n\n handleColumnSelected(): void {\n log.debug('handleColumnSelected');\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMN_SELECTED,\n this,\n DropdownFilterPanel.SOURCE_COLUMN\n );\n }\n\n handleClearAllFilters(): void {\n this.dropdownFilterRef?.current?.clearFilter();\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param state Filter state to set\n * @param sendUpdate Emit filters changed event if true\n */\n setPanelState(\n state: {\n name: string;\n type: string;\n value: string;\n isValueShown: boolean;\n },\n sendUpdate = false\n ): void {\n if (this.getSource() == null) {\n log.debug('Ignore state update for unlinked filter', state);\n return;\n }\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({ skipUpdate: !sendUpdate });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n this.dropdownFilterRef?.current?.setFilterState(state);\n }\n\n sendUpdate(\n name: string | null,\n type: string | undefined,\n value: string | undefined,\n timestamp?: number\n ): void {\n const { glEventHub } = this.props;\n const sourcePanelId = this.getSource()?.panelId;\n const excludePanelIds = sourcePanelId === null ? [] : [sourcePanelId];\n log.debug('sendUpdate', {\n name,\n type,\n value,\n timestamp,\n excludePanelIds,\n });\n\n glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value: value != null ? value : '=null',\n timestamp,\n excludePanelIds,\n });\n }\n\n updateValuesTable(): void {\n const source = this.getSource();\n const sourceTable = this.getSourceTable();\n log.debug('updateValuesTable', source, sourceTable);\n\n this.setState({\n values: [],\n valuesTable: undefined,\n error: null,\n });\n\n if (source == null) {\n log.debug('Filter unlinked.');\n this.setState({\n isLoading: false,\n isLoaded: true,\n isValueShown: false,\n sourceSize: 0,\n });\n return;\n }\n\n this.setState({ isLoading: true });\n\n if (sourceTable == null) {\n return;\n }\n\n this.setState({ isLoaded: false, sourceSize: sourceTable.size });\n\n this.pending\n .add(sourceTable.copy(), resolved => resolved.close())\n .then(valuesTable => {\n // Loading/loaded will be set when values array is actually populated\n this.updateViewportListener(valuesTable);\n this.setState({ valuesTable });\n })\n .catch((error: unknown) => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n this.setState({ isLoading: false, error });\n });\n }\n\n applySourceSorts() {\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable();\n log.debug('applySourceSorts', sourceTable.sort);\n if (valuesTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const sorts = [...sourceTable.sort];\n valuesTable.applySort(sorts);\n this.setViewport(valuesTable);\n }\n\n applySourceFilters(): void {\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable();\n log.debug('applySourceFilters', sourceTable.filter);\n if (valuesTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const filters = [...sourceTable.filter];\n valuesTable.applyFilter(filters);\n this.setViewport(valuesTable);\n }\n\n updateViewportListener(valuesTable: TableTemplate): void {\n log.debug('updateViewportListener', valuesTable?.size);\n\n if (this.cleanup) {\n this.cleanup();\n }\n\n if (valuesTable == null) {\n this.cleanup = undefined;\n return;\n }\n\n this.cleanup = valuesTable.addEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleValuesTableUpdate\n );\n\n this.setViewport(valuesTable);\n }\n\n setViewport(valuesTable: TableTemplate): void {\n const valuesColumn = this.getValuesColumn(valuesTable);\n if (!valuesColumn) {\n log.error('values column is null');\n return;\n }\n valuesTable.setViewport(0, DropdownFilterPanel.MAX_TABLE_SIZE - 1, [\n valuesColumn,\n ]);\n }\n\n updateFormatterSettings(settings: {\n formatter?: FormattingRule[] | undefined;\n }) {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n if (!deepEqual(this.columnFormats, columnFormats)) {\n this.columnFormats = columnFormats;\n this.setState({ formatter: new Formatter(columnFormats) });\n }\n }\n\n handleValuesTableUpdate({ detail }: { detail: { rows: Row[] } }) {\n const { rows } = detail;\n const { valuesTable } = this.state;\n if (!valuesTable) {\n log.error('valuesTable is null');\n return;\n }\n const valuesColumn = this.getValuesColumn(valuesTable);\n if (!valuesColumn) {\n log.error('Values column not found');\n return;\n }\n const values = rows.map(row => row.get(valuesColumn));\n this.setState({ values, isLoading: false, isLoaded: true, valuesColumn });\n }\n\n handleSourceMouseEnter() {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n\n handleSourceMouseLeave() {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n render() {\n const {\n columns,\n disableLinking,\n glContainer,\n glEventHub,\n isLinkerActive,\n } = this.props;\n const {\n column,\n formatter,\n isDisconnected,\n isValueShown,\n value,\n values,\n valuesColumn,\n isLoading,\n isLoaded,\n } = this.state;\n\n const source = this.getSource();\n const settingsErrorMessage = this.getSettingsErrorMessage();\n const panelErrorMessage = this.getPanelErrorMessage();\n const formattedValues =\n isLoaded && valuesColumn != null\n ? this.getCachedValues(values, valuesColumn, formatter)\n : [];\n\n return (\n <WidgetPanel\n errorMessage={panelErrorMessage}\n isLoading={isLoading}\n isLoaded={isLoaded}\n isDisconnected={isDisconnected}\n className=\"iris-dropdown-filter-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n widgetName=\"Dropdown Filter\"\n widgetType=\"DropdownFilter\"\n >\n <div\n ref={this.panelContainer}\n className=\"dropdown-filter-container h-100 w-100 container\"\n >\n <DropdownFilter\n ref={this.dropdownFilterRef}\n column={column}\n columns={columns}\n isValueShown={isValueShown}\n isLinkerActive={isLinkerActive}\n disableLinking={disableLinking}\n isLoaded={isLoaded}\n settingsError={settingsErrorMessage}\n source={source}\n value={value}\n values={formattedValues}\n onChange={this.handleChange}\n onColumnSelected={this.handleColumnSelected}\n onSourceMouseEnter={this.handleSourceMouseEnter}\n onSourceMouseLeave={this.handleSourceMouseLeave}\n />\n </div>\n </WidgetPanel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string; glContainer: Container }\n) => {\n const { localDashboardId } = ownProps;\n const panelId = LayoutUtils.getIdFromPanel({ props: ownProps });\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const dashboardLinks = getLinksForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER &&\n (isolatedLinkerPanelId === undefined || isolatedLinkerPanelId === panelId);\n // Disable linking if linker is in isolated mode for a different panel\n const disableLinking =\n activeTool === ToolType.LINKER &&\n isolatedLinkerPanelId !== undefined &&\n isolatedLinkerPanelId !== panelId;\n\n return {\n columns: getColumnsForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n isLinkerActive,\n disableLinking,\n settings: getSettings(state),\n panelTableMap,\n dashboardLinks,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n DropdownFilterPanel\n);\n"],"file":"DropdownFilterPanel.js"}
|
|
@@ -2,14 +2,12 @@ import { DashboardPanelProps } from '@deephaven/dashboard';
|
|
|
2
2
|
import { FileStorage, FileStorageItem } from '@deephaven/file-explorer';
|
|
3
3
|
import React, { ReactNode } from 'react';
|
|
4
4
|
import { ConnectedProps } from 'react-redux';
|
|
5
|
+
import { IdeSession } from '@deephaven/jsapi-shim';
|
|
5
6
|
import './FileExplorerPanel.scss';
|
|
6
|
-
declare type DhSession = {
|
|
7
|
-
close: () => void;
|
|
8
|
-
};
|
|
9
7
|
declare type StateProps = {
|
|
10
8
|
fileStorage: FileStorage;
|
|
11
9
|
language: string;
|
|
12
|
-
session?:
|
|
10
|
+
session?: IdeSession;
|
|
13
11
|
};
|
|
14
12
|
declare type OwnProps = DashboardPanelProps;
|
|
15
13
|
declare const connector: import("react-redux").InferableComponentEnhancerWithProps<import("react-redux").DispatchProp<import("redux").AnyAction> & StateProps, DashboardPanelProps>;
|
|
@@ -17,7 +15,7 @@ export declare type FileExplorerPanelProps = OwnProps & StateProps & ConnectedPr
|
|
|
17
15
|
export declare type FileExplorerPanelState = {
|
|
18
16
|
isShown: boolean;
|
|
19
17
|
language?: string;
|
|
20
|
-
session?:
|
|
18
|
+
session?: IdeSession;
|
|
21
19
|
showCreateFolder: boolean;
|
|
22
20
|
};
|
|
23
21
|
/**
|
|
@@ -41,7 +39,7 @@ export declare class FileExplorerPanel extends React.Component<FileExplorerPanel
|
|
|
41
39
|
handleDelete(files: FileStorageItem[]): void;
|
|
42
40
|
handleFileSelect(file: FileStorageItem, event: React.SyntheticEvent): void;
|
|
43
41
|
handleRename(oldName: string, newName: string): void;
|
|
44
|
-
handleSessionOpened(session:
|
|
42
|
+
handleSessionOpened(session: IdeSession, { language }: {
|
|
45
43
|
language: string;
|
|
46
44
|
}): void;
|
|
47
45
|
handleSessionClosed(): void;
|
|
@@ -52,7 +50,7 @@ export declare class FileExplorerPanel extends React.Component<FileExplorerPanel
|
|
|
52
50
|
declare const _default: import("react-redux").ConnectedComponent<typeof FileExplorerPanel, import("react-redux").Omit<React.ClassAttributes<FileExplorerPanel> & import("@deephaven/dashboard").PanelProps & {
|
|
53
51
|
localDashboardId: string;
|
|
54
52
|
metadata?: Record<string, unknown> | undefined;
|
|
55
|
-
} & StateProps & import("react-redux").DispatchProp<import("redux").AnyAction>, "
|
|
53
|
+
} & StateProps & import("react-redux").DispatchProp<import("redux").AnyAction>, "language" | "dispatch" | "session" | "fileStorage"> & import("@deephaven/dashboard").PanelProps & {
|
|
56
54
|
localDashboardId: string;
|
|
57
55
|
metadata?: Record<string, unknown> | undefined;
|
|
58
56
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileExplorerPanel.d.ts","sourceRoot":"","sources":["../../src/panels/FileExplorerPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAqB,EAEnB,WAAW,EACX,eAAe,EAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAW,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"FileExplorerPanel.d.ts","sourceRoot":"","sources":["../../src/panels/FileExplorerPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAqB,EAEnB,WAAW,EACX,eAAe,EAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAW,cAAc,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,0BAA0B,CAAC;AAKlC,aAAK,UAAU,GAAG;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB,CAAC;AAEF,aAAK,QAAQ,GAAG,mBAAmB,CAAC;AAkBpC,QAAA,MAAM,SAAS,4JAA6D,CAAC;AAE7E,oBAAY,sBAAsB,GAAG,QAAQ,GAC3C,UAAU,GACV,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC;AAEnC,oBAAY,sBAAsB,GAAG;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAOF;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CACpD,sBAAsB,EACtB,sBAAsB,CACvB;IACC,MAAM,CAAC,SAAS,SAAuB;IAEvC,MAAM,CAAC,KAAK,SAAmB;IAE/B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAItC;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,GAAG,OAAO;gBAU7C,KAAK,EAAE,sBAAsB;IA2BzC,iBAAiB,IAAI,IAAI;IAMzB,gBAAgB,IAAI,IAAI;IAgBxB,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAI1C,2BAA2B,IAAI,IAAI;IAOnC,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO/C,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI;IAU5C,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,GAAG,IAAI;IAwB1E,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAMpD,mBAAmB,CACjB,OAAO,EAAE,UAAU,EACnB,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GACjC,IAAI;IAOP,mBAAmB,IAAI,IAAI;IAO3B,UAAU,IAAI,IAAI;IAIlB,QAAQ,IAAI,OAAO;IAMnB,MAAM,IAAI,SAAS;CAqCpB;;;;;;;;AAED,wBAA4C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileExplorerPanel.js","names":["Log","getFileStorage","FileExplorer","FileExplorerToolbar","NewItemModal","React","connect","Panel","NotebookEvent","getDashboardSessionWrapper","log","module","mapStateToProps","state","ownProps","fileStorage","sessionWrapper","localDashboardId","session","config","sessionConfig","language","type","connector","forwardRef","isMouseEvent","e","mouseEvent","button","FileExplorerPanel","Component","handleError","error","isFocusEvent","event","detail","constructor","props","handleFileSelect","bind","handleCreateFile","handleCreateDirectory","handleCreateDirectoryCancel","handleCreateDirectorySubmit","handleDelete","handleRename","handleSessionOpened","handleSessionClosed","handleShow","isShown","showCreateFolder","componentDidMount","isHidden","setState","glEventHub","notebookSettings","value","debug","emit","CREATE_NOTEBOOK","path","createDirectory","catch","files","forEach","file","CLOSE_FILE","id","filename","itemName","shouldFocus","fileMetadata","SELECT_NOTEBOOK","oldName","newName","RENAME_FILE","undefined","glContainer","render"],"sources":["../../src/panels/FileExplorerPanel.tsx"],"sourcesContent":["import { DashboardPanelProps } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { getFileStorage, RootState } from '@deephaven/redux';\nimport FileExplorer, {\n FileExplorerToolbar,\n FileStorage,\n FileStorageItem,\n NewItemModal,\n} from '@deephaven/file-explorer';\nimport React, { ReactNode } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport Panel from './Panel';\nimport { NotebookEvent } from '../events';\nimport './FileExplorerPanel.scss';\nimport { getDashboardSessionWrapper } from '../redux';\n\nconst log = Log.module('FileExplorerPanel');\n\ntype DhSession = {\n close: () => void;\n};\n\ntype StateProps = {\n fileStorage: FileStorage;\n language: string;\n session?: DhSession;\n};\n\ntype OwnProps = DashboardPanelProps;\n\nconst mapStateToProps = (state: RootState, ownProps: OwnProps): StateProps => {\n const fileStorage = getFileStorage(state);\n const sessionWrapper = getDashboardSessionWrapper(\n state,\n ownProps.localDashboardId\n );\n const { session, config: sessionConfig } = sessionWrapper ?? {};\n const language = sessionConfig?.type;\n\n return {\n fileStorage,\n language,\n session,\n };\n};\n\nconst connector = connect(mapStateToProps, null, null, { forwardRef: true });\n\nexport type FileExplorerPanelProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type FileExplorerPanelState = {\n isShown: boolean;\n language?: string;\n session?: DhSession;\n showCreateFolder: boolean;\n};\n\nfunction isMouseEvent<T>(e: React.SyntheticEvent<T>): e is React.MouseEvent<T> {\n const mouseEvent = e as React.MouseEvent<T>;\n return mouseEvent && typeof mouseEvent.button === 'number';\n}\n\n/**\n * Panel for showing a FileExplorer in a Dashboard.\n */\nexport class FileExplorerPanel extends React.Component<\n FileExplorerPanelProps,\n FileExplorerPanelState\n> {\n static COMPONENT = 'FileExplorerPanel';\n\n static TITLE = 'File Explorer';\n\n static handleError(error: Error): void {\n log.error(error);\n }\n\n /**\n * Return true if the event should open a file and focus it, otherwise false\n * @param event The event to check\n */\n static isFocusEvent(event: React.SyntheticEvent): boolean {\n if (isMouseEvent(event)) {\n // If it's not a double click, then it's a preview event\n return event.detail >= 2;\n }\n\n // Keyboard event should always open with focus\n return true;\n }\n\n constructor(props: FileExplorerPanelProps) {\n super(props);\n\n this.handleFileSelect = this.handleFileSelect.bind(this);\n this.handleCreateFile = this.handleCreateFile.bind(this);\n this.handleCreateDirectory = this.handleCreateDirectory.bind(this);\n this.handleCreateDirectoryCancel = this.handleCreateDirectoryCancel.bind(\n this\n );\n this.handleCreateDirectorySubmit = this.handleCreateDirectorySubmit.bind(\n this\n );\n this.handleDelete = this.handleDelete.bind(this);\n this.handleRename = this.handleRename.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleShow = this.handleShow.bind(this);\n\n const { session, language } = props;\n this.state = {\n isShown: false,\n language,\n session,\n showCreateFolder: false,\n };\n }\n\n componentDidMount(): void {\n if (!this.isHidden()) {\n this.setState({ isShown: true });\n }\n }\n\n handleCreateFile(): void {\n const { glEventHub } = this.props;\n const { session, language } = this.state;\n const notebookSettings = {\n language,\n value: '',\n };\n log.debug('handleCreateFile', session, language, notebookSettings);\n glEventHub.emit(\n NotebookEvent.CREATE_NOTEBOOK,\n session,\n language,\n notebookSettings\n );\n }\n\n handleCreateDirectory(path?: string): void {\n this.setState({ showCreateFolder: true });\n }\n\n handleCreateDirectoryCancel(): void {\n log.debug('handleCreateDirectoryCancel');\n this.setState({\n showCreateFolder: false,\n });\n }\n\n handleCreateDirectorySubmit(path: string): void {\n log.debug('handleCreateDirectorySubmit', path);\n this.setState({ showCreateFolder: false });\n const { fileStorage } = this.props;\n fileStorage.createDirectory(path).catch(FileExplorerPanel.handleError);\n }\n\n handleDelete(files: FileStorageItem[]): void {\n const { glEventHub } = this.props;\n files.forEach(file => {\n glEventHub.emit(NotebookEvent.CLOSE_FILE, {\n id: file.filename,\n itemName: file.filename,\n });\n });\n }\n\n handleFileSelect(file: FileStorageItem, event: React.SyntheticEvent): void {\n log.debug('fileSelect', file);\n if (file.type === 'directory') {\n return;\n }\n\n const shouldFocus = FileExplorerPanel.isFocusEvent(event);\n const fileMetadata = { id: file.filename, itemName: file.filename };\n const { glEventHub } = this.props;\n const { session, language } = this.state;\n const notebookSettings = {\n value: null,\n language,\n };\n glEventHub.emit(\n NotebookEvent.SELECT_NOTEBOOK,\n session,\n language,\n notebookSettings,\n fileMetadata,\n shouldFocus\n );\n }\n\n handleRename(oldName: string, newName: string): void {\n const { glEventHub } = this.props;\n log.debug('handleRename', oldName, newName);\n glEventHub.emit(NotebookEvent.RENAME_FILE, oldName, newName);\n }\n\n handleSessionOpened(\n session: DhSession,\n { language }: { language: string }\n ): void {\n this.setState({\n session,\n language,\n });\n }\n\n handleSessionClosed(): void {\n this.setState({\n session: undefined,\n language: undefined,\n });\n }\n\n handleShow(): void {\n this.setState({ isShown: true });\n }\n\n isHidden(): boolean {\n const { glContainer } = this.props;\n const { isHidden } = glContainer;\n return isHidden;\n }\n\n render(): ReactNode {\n const { fileStorage, glContainer, glEventHub } = this.props;\n const { isShown, showCreateFolder } = this.state;\n return (\n <Panel\n className=\"file-explorer-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n onShow={this.handleShow}\n >\n <FileExplorerToolbar\n createFile={this.handleCreateFile}\n createFolder={this.handleCreateDirectory}\n />\n {isShown && (\n <FileExplorer\n isMultiSelect\n storage={fileStorage}\n onDelete={this.handleDelete}\n onRename={this.handleRename}\n onSelect={this.handleFileSelect}\n />\n )}\n <NewItemModal\n isOpen={showCreateFolder}\n type=\"directory\"\n title=\"Create New Folder\"\n storage={fileStorage}\n onSubmit={this.handleCreateDirectorySubmit}\n onCancel={this.handleCreateDirectoryCancel}\n />\n </Panel>\n );\n }\n}\n\nexport default connector(FileExplorerPanel);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/panels/FileExplorerPanel.tsx"],"names":["Log","getFileStorage","FileExplorer","FileExplorerToolbar","NewItemModal","React","connect","Panel","NotebookEvent","getDashboardSessionWrapper","log","module","mapStateToProps","state","ownProps","fileStorage","sessionWrapper","localDashboardId","session","config","sessionConfig","language","type","connector","forwardRef","isMouseEvent","e","mouseEvent","button","FileExplorerPanel","Component","handleError","error","isFocusEvent","event","detail","constructor","props","handleFileSelect","bind","handleCreateFile","handleCreateDirectory","handleCreateDirectoryCancel","handleCreateDirectorySubmit","handleDelete","handleRename","handleSessionOpened","handleSessionClosed","handleShow","isShown","showCreateFolder","componentDidMount","isHidden","setState","glEventHub","notebookSettings","value","debug","emit","CREATE_NOTEBOOK","path","createDirectory","catch","files","forEach","file","CLOSE_FILE","id","filename","itemName","shouldFocus","fileMetadata","SELECT_NOTEBOOK","oldName","newName","RENAME_FILE","undefined","glContainer","render"],"mappings":"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","sourcesContent":["import { DashboardPanelProps } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { getFileStorage, RootState } from '@deephaven/redux';\nimport FileExplorer, {\n FileExplorerToolbar,\n FileStorage,\n FileStorageItem,\n NewItemModal,\n} from '@deephaven/file-explorer';\nimport React, { ReactNode } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport Panel from './Panel';\nimport { NotebookEvent } from '../events';\nimport './FileExplorerPanel.scss';\nimport { getDashboardSessionWrapper } from '../redux';\n\nconst log = Log.module('FileExplorerPanel');\n\ntype StateProps = {\n fileStorage: FileStorage;\n language: string;\n session?: IdeSession;\n};\n\ntype OwnProps = DashboardPanelProps;\n\nconst mapStateToProps = (state: RootState, ownProps: OwnProps): StateProps => {\n const fileStorage = getFileStorage(state);\n const sessionWrapper = getDashboardSessionWrapper(\n state,\n ownProps.localDashboardId\n );\n const { session, config: sessionConfig } = sessionWrapper ?? {};\n const language = sessionConfig?.type;\n\n return {\n fileStorage,\n language,\n session,\n };\n};\n\nconst connector = connect(mapStateToProps, null, null, { forwardRef: true });\n\nexport type FileExplorerPanelProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type FileExplorerPanelState = {\n isShown: boolean;\n language?: string;\n session?: IdeSession;\n showCreateFolder: boolean;\n};\n\nfunction isMouseEvent<T>(e: React.SyntheticEvent<T>): e is React.MouseEvent<T> {\n const mouseEvent = e as React.MouseEvent<T>;\n return mouseEvent && typeof mouseEvent.button === 'number';\n}\n\n/**\n * Panel for showing a FileExplorer in a Dashboard.\n */\nexport class FileExplorerPanel extends React.Component<\n FileExplorerPanelProps,\n FileExplorerPanelState\n> {\n static COMPONENT = 'FileExplorerPanel';\n\n static TITLE = 'File Explorer';\n\n static handleError(error: Error): void {\n log.error(error);\n }\n\n /**\n * Return true if the event should open a file and focus it, otherwise false\n * @param event The event to check\n */\n static isFocusEvent(event: React.SyntheticEvent): boolean {\n if (isMouseEvent(event)) {\n // If it's not a double click, then it's a preview event\n return event.detail >= 2;\n }\n\n // Keyboard event should always open with focus\n return true;\n }\n\n constructor(props: FileExplorerPanelProps) {\n super(props);\n\n this.handleFileSelect = this.handleFileSelect.bind(this);\n this.handleCreateFile = this.handleCreateFile.bind(this);\n this.handleCreateDirectory = this.handleCreateDirectory.bind(this);\n this.handleCreateDirectoryCancel = this.handleCreateDirectoryCancel.bind(\n this\n );\n this.handleCreateDirectorySubmit = this.handleCreateDirectorySubmit.bind(\n this\n );\n this.handleDelete = this.handleDelete.bind(this);\n this.handleRename = this.handleRename.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleShow = this.handleShow.bind(this);\n\n const { session, language } = props;\n this.state = {\n isShown: false,\n language,\n session,\n showCreateFolder: false,\n };\n }\n\n componentDidMount(): void {\n if (!this.isHidden()) {\n this.setState({ isShown: true });\n }\n }\n\n handleCreateFile(): void {\n const { glEventHub } = this.props;\n const { session, language } = this.state;\n const notebookSettings = {\n language,\n value: '',\n };\n log.debug('handleCreateFile', session, language, notebookSettings);\n glEventHub.emit(\n NotebookEvent.CREATE_NOTEBOOK,\n session,\n language,\n notebookSettings\n );\n }\n\n handleCreateDirectory(path?: string): void {\n this.setState({ showCreateFolder: true });\n }\n\n handleCreateDirectoryCancel(): void {\n log.debug('handleCreateDirectoryCancel');\n this.setState({\n showCreateFolder: false,\n });\n }\n\n handleCreateDirectorySubmit(path: string): void {\n log.debug('handleCreateDirectorySubmit', path);\n this.setState({ showCreateFolder: false });\n const { fileStorage } = this.props;\n fileStorage.createDirectory(path).catch(FileExplorerPanel.handleError);\n }\n\n handleDelete(files: FileStorageItem[]): void {\n const { glEventHub } = this.props;\n files.forEach(file => {\n glEventHub.emit(NotebookEvent.CLOSE_FILE, {\n id: file.filename,\n itemName: file.filename,\n });\n });\n }\n\n handleFileSelect(file: FileStorageItem, event: React.SyntheticEvent): void {\n log.debug('fileSelect', file);\n if (file.type === 'directory') {\n return;\n }\n\n const shouldFocus = FileExplorerPanel.isFocusEvent(event);\n const fileMetadata = { id: file.filename, itemName: file.filename };\n const { glEventHub } = this.props;\n const { session, language } = this.state;\n const notebookSettings = {\n value: null,\n language,\n };\n glEventHub.emit(\n NotebookEvent.SELECT_NOTEBOOK,\n session,\n language,\n notebookSettings,\n fileMetadata,\n shouldFocus\n );\n }\n\n handleRename(oldName: string, newName: string): void {\n const { glEventHub } = this.props;\n log.debug('handleRename', oldName, newName);\n glEventHub.emit(NotebookEvent.RENAME_FILE, oldName, newName);\n }\n\n handleSessionOpened(\n session: IdeSession,\n { language }: { language: string }\n ): void {\n this.setState({\n session,\n language,\n });\n }\n\n handleSessionClosed(): void {\n this.setState({\n session: undefined,\n language: undefined,\n });\n }\n\n handleShow(): void {\n this.setState({ isShown: true });\n }\n\n isHidden(): boolean {\n const { glContainer } = this.props;\n const { isHidden } = glContainer;\n return isHidden;\n }\n\n render(): ReactNode {\n const { fileStorage, glContainer, glEventHub } = this.props;\n const { isShown, showCreateFolder } = this.state;\n return (\n <Panel\n className=\"file-explorer-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n onShow={this.handleShow}\n >\n <FileExplorerToolbar\n createFile={this.handleCreateFile}\n createFolder={this.handleCreateDirectory}\n />\n {isShown && (\n <FileExplorer\n isMultiSelect\n storage={fileStorage}\n onDelete={this.handleDelete}\n onRename={this.handleRename}\n onSelect={this.handleFileSelect}\n />\n )}\n <NewItemModal\n isOpen={showCreateFolder}\n type=\"directory\"\n title=\"Create New Folder\"\n storage={fileStorage}\n onSubmit={this.handleCreateDirectorySubmit}\n onCancel={this.handleCreateDirectoryCancel}\n />\n </Panel>\n );\n }\n}\n\nexport default connector(FileExplorerPanel);\n"],"file":"FileExplorerPanel.js"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ChangeEvent, Component, ReactNode, KeyboardEvent, MouseEvent } from 'react';
|
|
2
2
|
import './FilterSetManager.scss';
|
|
3
3
|
export interface FilterSetPanel {
|
|
4
|
-
|
|
4
|
+
panelId?: string | string[] | null;
|
|
5
|
+
type: string;
|
|
6
|
+
id?: string;
|
|
5
7
|
state: unknown;
|
|
6
8
|
}
|
|
7
9
|
export interface FilterSet {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterSetManager.d.ts","sourceRoot":"","sources":["../../src/panels/FilterSetManager.tsx"],"names":[],"mappings":"AAIA,OAAc,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,aAAa,EACb,UAAU,EACX,MAAM,OAAO,CAAC;AAmBf,OAAO,yBAAyB,CAAC;AAIjC,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"FilterSetManager.d.ts","sourceRoot":"","sources":["../../src/panels/FilterSetManager.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterSetManager.js","names":["React","Component","memoizeOne","shortid","FontAwesomeIcon","vsEdit","vsGear","vsSave","vsCircleSlash","vsTrash","vsDeviceCamera","dhRefresh","dhNewCircleLargeFilled","vsCircleLargeFilled","vsArrowSmallUp","Log","Button","CardFlip","RadioGroup","RadioItem","log","module","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","animateScreenFlash","overlay","document","createElement","classList","add","addEventListener","remove","querySelector","appendChild","constructor","props","createRef","filterSets","renameSet","undefined","some","id","handleSettingsCancel","bind","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleEditDropdownChange","handleFilterChange","handleFilterApply","handleCaptureNewSet","handleNameInputChange","handleNameInputKeyPress","handleRenameConfirm","handleRenameCancel","handleRestoreFullStateChange","handleSetDelete","handleSetEdit","handleSetUpdate","state","editId","nameInputValue","nameInputError","modifiedFilterSets","restoreFullState","componentDidMount","isValueShown","updateSelectedId","initSettingsScreen","componentDidUpdate","prevProps","prevState","isNameInputScreen","focusRenameInput","length","onChange","selectedId","debug","setState","isEmptyList","event","value","target","applyFilterSet","onUpdateSets","getFilterState","panels","title","getNameError","trimmedName","trim","error","namedFilterSet","selectedIndex","findIndex","updatedModifiedFilterSets","push","prevFilterSets","filter","newSelectedIndex","Math","max","min","newSelectedId","selectedSetIndex","selectedSet","find","stopPropagation","dropdownRef","current","focusInput","key","preventDefault","onApply","filterSet","focus","renameInputRef","render","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","updateSetIcon","editDropdownRef","map"],"sources":["../../src/panels/FilterSetManager.tsx"],"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, {\n ChangeEvent,\n Component,\n ReactNode,\n KeyboardEvent,\n MouseEvent,\n} from 'react';\nimport memoizeOne from 'memoize-one';\nimport shortid from 'shortid';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n vsEdit,\n vsGear,\n vsSave,\n vsCircleSlash,\n vsTrash,\n vsDeviceCamera,\n dhRefresh,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsArrowSmallUp,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { Button, CardFlip, RadioGroup, RadioItem } from '@deephaven/components';\n\nimport './FilterSetManager.scss';\n\nconst log = Log.module('FilterSetManager');\n\nexport interface FilterSetPanel {\n id: string;\n state: unknown;\n}\n\nexport interface FilterSet {\n id: string;\n title: string;\n panels: FilterSetPanel[];\n restoreFullState?: boolean;\n}\n\nexport interface ChangeHandlerArgs {\n isValueShown: boolean;\n selectedId?: string;\n}\n\ninterface FilterSetManagerProps {\n isValueShown: boolean;\n selectedId?: string;\n filterSets: FilterSet[];\n getFilterState(): FilterSetPanel[];\n onChange(args: ChangeHandlerArgs): void;\n onApply(filterSet: FilterSet): void;\n onUpdateSets(filterSets: FilterSet[], editId?: string): void;\n}\n\ninterface FilterSetManagerState {\n nameInputValue: string;\n nameInputError?: string;\n editId?: string;\n renameSet?: FilterSet;\n // Unsaved set changes on the settings screen\n modifiedFilterSets: FilterSet[];\n restoreFullState: boolean;\n}\n\nconst NAME_INPUT_PLACEHOLDER = 'Enter name...';\n\nconst EMPTY_LIST_PLACEHOLDER = 'No Available Filter Sets';\n\nclass FilterSetManager extends Component<\n FilterSetManagerProps,\n FilterSetManagerState\n> {\n static animateScreenFlash(): void {\n const overlay = document.createElement('div');\n overlay.classList.add('screen-flash-overlay');\n overlay.addEventListener('animationend', () => {\n // Removing the element removes its event listeners\n overlay.remove();\n });\n document.querySelector('body')?.appendChild(overlay);\n }\n\n constructor(props: FilterSetManagerProps) {\n super(props);\n\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.handleEditDropdownChange = this.handleEditDropdownChange.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterApply = this.handleFilterApply.bind(this);\n this.handleCaptureNewSet = this.handleCaptureNewSet.bind(this);\n this.handleNameInputChange = this.handleNameInputChange.bind(this);\n this.handleNameInputKeyPress = this.handleNameInputKeyPress.bind(this);\n this.handleRenameConfirm = this.handleRenameConfirm.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRestoreFullStateChange = this.handleRestoreFullStateChange.bind(\n this\n );\n\n this.handleSetDelete = this.handleSetDelete.bind(this);\n this.handleSetEdit = this.handleSetEdit.bind(this);\n this.handleSetUpdate = this.handleSetUpdate.bind(this);\n\n this.state = {\n editId: undefined,\n renameSet: undefined,\n nameInputValue: '',\n nameInputError: undefined,\n modifiedFilterSets: [],\n restoreFullState: false,\n };\n }\n\n componentDidMount(): void {\n const { isValueShown } = this.props;\n if (isValueShown) {\n this.updateSelectedId();\n } else {\n this.initSettingsScreen();\n }\n }\n\n componentDidUpdate(\n prevProps: FilterSetManagerProps,\n prevState: FilterSetManagerState\n ): void {\n const { isValueShown, filterSets } = this.props;\n const { modifiedFilterSets } = this.state;\n\n if (prevProps.isValueShown && !isValueShown) {\n this.initSettingsScreen();\n }\n\n if (this.isNameInputScreen() && !this.isNameInputScreen(prevState)) {\n this.focusRenameInput();\n }\n\n if (filterSets !== prevProps.filterSets) {\n if (\n !isValueShown &&\n filterSets.length > 0 &&\n prevProps.filterSets.length === 0 &&\n modifiedFilterSets.length === 0\n ) {\n // Filter set added from another panel, flip from the settings side/initial screen to the value side\n const { onChange } = this.props;\n onChange({ isValueShown: true, selectedId: filterSets[0].id });\n } else {\n this.updateSelectedId();\n }\n }\n }\n\n private renameInputRef = React.createRef<HTMLInputElement>();\n\n private dropdownRef = React.createRef<HTMLSelectElement>();\n\n private editDropdownRef = React.createRef<HTMLSelectElement>();\n\n initSettingsScreen(): void {\n const { filterSets, selectedId } = this.props;\n log.debug('initSettingsScreen', filterSets, selectedId);\n this.setState({\n modifiedFilterSets: [...filterSets],\n editId: selectedId,\n });\n }\n\n // Update selected id without applying the new set on filterSets change\n updateSelectedId(): void {\n const { isValueShown, filterSets, selectedId, onChange } = this.props;\n log.debug('updateSelectedId', filterSets, selectedId);\n if (!isValueShown) {\n return;\n }\n if (!filterSets.some(({ id }) => id === selectedId)) {\n // Update the selection if selectedId doesn't exist in the list\n // Flip to the settings side for empty list to show the initial screen\n const isEmptyList = filterSets.length === 0;\n onChange({\n isValueShown: !isEmptyList,\n selectedId: isEmptyList ? undefined : filterSets[0].id,\n });\n }\n }\n\n handleEditDropdownChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value: editId } = event.target;\n this.setState({ editId });\n }\n\n handleFilterChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value: selectedId } = event.target;\n const { isValueShown, onChange } = this.props;\n this.applyFilterSet(selectedId);\n onChange({ isValueShown, selectedId });\n }\n\n handleFilterApply(): void {\n const { selectedId } = this.props;\n this.applyFilterSet(selectedId);\n }\n\n handleSettingsCancel(): void {\n const { onChange, selectedId, filterSets } = this.props;\n this.setState({ modifiedFilterSets: [] });\n // Flip the card to the filter set selection screen if the sets list isn't empty\n // Otherwise show the initial screen\n if (filterSets.length > 0) {\n onChange({ isValueShown: true, selectedId });\n }\n }\n\n handleSettingsSave(): void {\n const { onChange, onUpdateSets } = this.props;\n const { modifiedFilterSets, editId } = this.state;\n this.setState({ modifiedFilterSets: [] });\n log.debug('Update sets', modifiedFilterSets, editId);\n onUpdateSets(modifiedFilterSets);\n // Don't flip the card to the filter set selection screen if the updated sets list is empty\n if (modifiedFilterSets.length > 0) {\n onChange({ isValueShown: true, selectedId: editId });\n }\n }\n\n handleCaptureNewSet(): void {\n const { getFilterState } = this.props;\n FilterSetManager.animateScreenFlash();\n const id = shortid();\n const panels = getFilterState();\n const renameSet = {\n id,\n title: '',\n panels,\n };\n log.debug('handleSetCreate', renameSet);\n this.setState({ nameInputValue: '', nameInputError: undefined, renameSet });\n }\n\n handleRenameCancel(): void {\n this.setState({ renameSet: undefined });\n }\n\n handleRestoreFullStateChange(event: ChangeEvent<HTMLInputElement>): void {\n this.setState({\n restoreFullState: event.target.value === 'true',\n });\n }\n\n getNameError(nameInputValue: string): string | undefined {\n const { renameSet, modifiedFilterSets } = this.state;\n const trimmedName = nameInputValue?.trim() ?? '';\n if (trimmedName.length === 0) {\n log.debug('Name cannot be empty', trimmedName);\n return 'Name cannot be empty';\n }\n\n if (\n renameSet !== undefined &&\n modifiedFilterSets.some(\n ({ title, id }) => title === trimmedName && id !== renameSet.id\n )\n ) {\n log.debug('Set with this name already exists', trimmedName);\n return 'Set with this name already exists';\n }\n\n return undefined;\n }\n\n handleRenameConfirm(): void {\n const {\n nameInputValue,\n renameSet,\n modifiedFilterSets,\n restoreFullState,\n } = this.state;\n if (renameSet === undefined) {\n log.error('Renamed set undefined.');\n return;\n }\n const nameInputError = this.getNameError(nameInputValue);\n log.debug('handleRenameConfirm', nameInputValue, nameInputError);\n if (nameInputError !== undefined) {\n this.setState({ nameInputError });\n return;\n }\n const trimmedName = nameInputValue?.trim() ?? '';\n const namedFilterSet = {\n ...renameSet,\n title: trimmedName,\n restoreFullState,\n };\n const selectedIndex = modifiedFilterSets.findIndex(\n ({ id }) => id === renameSet.id\n );\n const updatedModifiedFilterSets = [...modifiedFilterSets];\n\n if (selectedIndex >= 0) {\n updatedModifiedFilterSets[selectedIndex] = namedFilterSet;\n log.debug('Renamed existing set', updatedModifiedFilterSets);\n } else {\n updatedModifiedFilterSets.push(namedFilterSet);\n log.debug('Added new set to modified sets', updatedModifiedFilterSets);\n }\n\n this.setState({\n editId: namedFilterSet.id,\n modifiedFilterSets: updatedModifiedFilterSets,\n renameSet: undefined,\n });\n }\n\n handleSetDelete(): void {\n this.setState(state => {\n const { editId, modifiedFilterSets: prevFilterSets } = state;\n const selectedIndex = prevFilterSets.findIndex(({ id }) => id === editId);\n if (selectedIndex < 0) {\n log.error(\n 'Unable to find selected filterSet index',\n prevFilterSets,\n editId\n );\n return null;\n }\n const modifiedFilterSets = prevFilterSets.filter(\n ({ id }) => id !== editId\n );\n const newSelectedIndex = Math.max(\n 0,\n Math.min(modifiedFilterSets.length - 1, selectedIndex - 1)\n );\n const newSelectedId =\n modifiedFilterSets.length > 0\n ? modifiedFilterSets[newSelectedIndex].id\n : undefined;\n log.debug(\n 'Deleted selected set',\n editId,\n prevFilterSets,\n modifiedFilterSets\n );\n log.debug('New selection', newSelectedIndex, newSelectedId);\n return {\n modifiedFilterSets,\n editId: newSelectedId,\n };\n });\n }\n\n handleSetUpdate(): void {\n const { getFilterState } = this.props;\n FilterSetManager.animateScreenFlash();\n const panels = getFilterState();\n this.setState(({ modifiedFilterSets: prevFilterSets, editId }) => {\n if (editId === undefined) {\n log.error('Filter for update not selected.');\n return null;\n }\n const modifiedFilterSets = [...prevFilterSets];\n const selectedSetIndex = modifiedFilterSets.findIndex(\n ({ id }) => id === editId\n );\n if (selectedSetIndex < 0) {\n log.error('Selected set for update not found.');\n return null;\n }\n // Clone selected set to avoid mutation of the props\n modifiedFilterSets[selectedSetIndex] = {\n ...modifiedFilterSets[selectedSetIndex],\n panels,\n };\n\n log.debug('Update set', modifiedFilterSets, panels);\n return {\n modifiedFilterSets,\n };\n });\n }\n\n handleSetEdit(): void {\n this.setState(({ editId, modifiedFilterSets }) => {\n const selectedSet = modifiedFilterSets.find(({ id }) => id === editId);\n if (selectedSet === undefined) {\n log.error('Could not find selected set', editId, modifiedFilterSets);\n return null;\n }\n const { title, restoreFullState = false } = selectedSet;\n return {\n nameInputValue: title,\n nameInputError: undefined,\n renameSet: selectedSet,\n restoreFullState,\n };\n });\n }\n\n handleSettingsClick(event: MouseEvent): void {\n event.stopPropagation();\n const { onChange, selectedId } = this.props;\n onChange({ isValueShown: false, selectedId });\n }\n\n handleBackgroundClick(event: MouseEvent): void {\n log.debug('handleBackgroundClick');\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 handleNameInputChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value: nameInputValue } = event.target;\n const nameInputError = this.getNameError(nameInputValue);\n this.setState({ nameInputValue, nameInputError });\n }\n\n handleNameInputKeyPress(event: KeyboardEvent): void {\n const { key } = event;\n if (key === 'Enter') {\n event.preventDefault();\n this.handleRenameConfirm();\n }\n }\n\n isNameInputScreen(state = this.state): boolean {\n const { renameSet } = state;\n return renameSet !== undefined;\n }\n\n isRenamingExistingSet = memoizeOne(\n (filterSets: FilterSet[], renameSet?: FilterSet): boolean =>\n renameSet !== undefined &&\n filterSets.some(({ id }) => id === renameSet.id)\n );\n\n applyFilterSet(selectedId?: string): void {\n const { onApply, filterSets } = this.props;\n if (selectedId === undefined) {\n log.debug('No filter selected');\n return;\n }\n const filterSet = filterSets.find(({ id }) => id === selectedId);\n if (filterSet === undefined) {\n log.debug('Selected id not found in filterSets', selectedId, filterSets);\n return;\n }\n log.debug('Apply filterSet', filterSet);\n onApply(filterSet);\n }\n\n focusInput(): void {\n this.dropdownRef.current?.focus();\n }\n\n focusRenameInput(): void {\n this.renameInputRef.current?.focus();\n }\n\n render(): ReactNode {\n const {\n nameInputValue,\n nameInputError,\n editId,\n renameSet,\n modifiedFilterSets,\n restoreFullState,\n } = this.state;\n const { isValueShown, filterSets, selectedId } = this.props;\n const isNameInputScreen = this.isNameInputScreen();\n const isRenamingExistingSet = this.isRenamingExistingSet(\n modifiedFilterSets,\n renameSet\n );\n const isEmptyEditList = modifiedFilterSets.length === 0;\n const isInitialScreen =\n !isNameInputScreen && isEmptyEditList && filterSets.length === 0;\n const isEditListScreen = !isNameInputScreen && !isInitialScreen;\n const captureSetIcon = (\n <div className=\"fa-layers mr-3\">\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={vsDeviceCamera}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhNewCircleLargeFilled}\n className=\"text-primary\"\n transform=\"shrink-6 down-5 right-7\"\n />\n </div>\n );\n const updateSetIcon = (\n <div className=\"fa-layers\">\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={vsDeviceCamera}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={vsArrowSmallUp}\n transform=\"shrink-1 down-5 right-7\"\n />\n </div>\n );\n return (\n <div className=\"filter-set-manager fill-parent-absolute\">\n <CardFlip className=\"w-100 h-100\" isFlipped={isValueShown}>\n <div\n className=\"filter-set-manager-settings-card fill-parent-absolute\"\n key=\"front\"\n >\n <div className=\"filter-set-manager-card-content\">\n {isInitialScreen && (\n <div>\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline\"\n onClick={this.handleCaptureNewSet}\n icon={captureSetIcon}\n >\n Capture filter set\n </Button>\n <div className=\"py-3 text-muted small\">\n Takes a snapshot of the currently applied filters on all\n panels, allowing you to restore saved filter sets later.\n </div>\n </div>\n )}\n\n {isNameInputScreen && (\n <div\n className=\"d-flex flex-column justify-content-center\"\n data-testid=\"edit-filter-set-container\"\n >\n <div className=\"form-group\">\n <label>\n {isRenamingExistingSet ? 'Edit set' : 'Name captured set'}\n </label>\n <div className=\"name-input-container\">\n <input\n type=\"text\"\n className=\"input-set-name form-control\"\n placeholder={NAME_INPUT_PLACEHOLDER}\n value={nameInputValue}\n ref={this.renameInputRef}\n onChange={this.handleNameInputChange}\n onKeyPress={this.handleNameInputKeyPress}\n spellCheck=\"false\"\n />\n <Button\n data-testid=\"rename-confirm-button\"\n kind=\"ghost\"\n className=\"btn btn-link no-underline pt-2 pb-2\"\n onClick={this.handleRenameConfirm}\n tooltip=\"Save\"\n test-id=\"button-save\"\n icon={vsSave}\n />\n\n <Button\n data-testid=\"rename-cancel-button\"\n kind=\"ghost\"\n className=\"btn btn-link no-underline pt-2 pb-2\"\n onClick={this.handleRenameCancel}\n tooltip=\"Cancel\"\n icon={vsCircleSlash}\n />\n </div>\n {nameInputError && (\n <div className=\"error-message\">{nameInputError}</div>\n )}\n </div>\n <div className=\"form-group\">\n <RadioGroup\n onChange={this.handleRestoreFullStateChange}\n value={`${restoreFullState}`}\n >\n <RadioItem value=\"false\">Restore only filters</RadioItem>\n <RadioItem value=\"true\">\n Restore full table state\n </RadioItem>\n </RadioGroup>\n </div>\n </div>\n )}\n\n {isEditListScreen && (\n <div className=\"filter-set-manager-settings-grid-1\">\n <div className=\"form-group\">\n <label>Edit filter sets</label>\n <div className=\"filter-select-container\">\n <select\n data-testid=\"settings-card-filter-select\"\n ref={this.editDropdownRef}\n value={editId ?? '-1'}\n className=\"custom-select filter-value-select\"\n onChange={this.handleEditDropdownChange}\n disabled={isEmptyEditList}\n >\n {isEmptyEditList && (\n <option value=\"-1\" disabled>\n {EMPTY_LIST_PLACEHOLDER}\n </option>\n )}\n {modifiedFilterSets.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </select>\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetUpdate}\n disabled={isEmptyEditList}\n icon={updateSetIcon}\n tooltip=\"Update\"\n />\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetEdit}\n disabled={isEmptyEditList}\n icon={vsEdit}\n tooltip=\"Edit\"\n />\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetDelete}\n disabled={isEmptyEditList}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n </div>\n </div>\n\n <div>\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline\"\n onClick={this.handleCaptureNewSet}\n icon={captureSetIcon}\n >\n Capture new filter set\n </Button>\n </div>\n\n <div className=\"py-3 text-right\">\n <Button\n kind=\"secondary\"\n onClick={this.handleSettingsCancel}\n >\n Cancel\n </Button>\n \n <Button kind=\"primary\" onClick={this.handleSettingsSave}>\n Save\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n <div\n className=\"filter-set-manager-value-card fill-parent-absolute\"\n key=\"back\"\n onClick={this.handleBackgroundClick}\n >\n <>\n <div className=\"filter-set-manager-column\">\n <div className=\"filter-set-manager-column-title\">\n Filter sets\n </div>\n </div>\n <div className=\"filter-set-manager-card-content\">\n <div className=\"filter-set-manager-value-input\">\n <div className=\"filter-select-container\">\n <select\n data-testid=\"value-card-filter-select\"\n ref={this.dropdownRef}\n value={selectedId}\n className=\"custom-select filter-value-select\"\n onChange={this.handleFilterChange}\n >\n {filterSets.length === 0 && (\n <option value=\"-1\" disabled>\n {EMPTY_LIST_PLACEHOLDER}\n </option>\n )}\n {filterSets.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </select>\n <Button\n data-testid=\"filter-apply-button\"\n kind=\"ghost\"\n onClick={this.handleFilterApply}\n icon={dhRefresh}\n tooltip=\"Apply Filter Set\"\n />\n </div>\n </div>\n </div>\n <div className=\"filter-set-manager-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn btn-link btn-link-icon m-2 px-2\"\n onClick={this.handleSettingsClick}\n tooltip=\"Settings\"\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n />\n </div>\n </>\n </div>\n </CardFlip>\n </div>\n );\n }\n}\n\nexport default FilterSetManager;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/panels/FilterSetManager.tsx"],"names":["React","Component","memoizeOne","shortid","FontAwesomeIcon","vsEdit","vsGear","vsSave","vsCircleSlash","vsTrash","vsDeviceCamera","dhRefresh","dhNewCircleLargeFilled","vsCircleLargeFilled","vsArrowSmallUp","Log","Button","CardFlip","RadioGroup","RadioItem","log","module","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","animateScreenFlash","overlay","document","createElement","classList","add","addEventListener","remove","querySelector","appendChild","constructor","props","createRef","filterSets","renameSet","undefined","some","id","handleSettingsCancel","bind","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleEditDropdownChange","handleFilterChange","handleFilterApply","handleCaptureNewSet","handleNameInputChange","handleNameInputKeyPress","handleRenameConfirm","handleRenameCancel","handleRestoreFullStateChange","handleSetDelete","handleSetEdit","handleSetUpdate","state","editId","nameInputValue","nameInputError","modifiedFilterSets","restoreFullState","componentDidMount","isValueShown","updateSelectedId","initSettingsScreen","componentDidUpdate","prevProps","prevState","isNameInputScreen","focusRenameInput","length","onChange","selectedId","debug","setState","isEmptyList","event","value","target","applyFilterSet","onUpdateSets","getFilterState","panels","title","getNameError","trimmedName","trim","error","namedFilterSet","selectedIndex","findIndex","updatedModifiedFilterSets","push","prevFilterSets","filter","newSelectedIndex","Math","max","min","newSelectedId","selectedSetIndex","selectedSet","find","stopPropagation","dropdownRef","current","focusInput","key","preventDefault","onApply","filterSet","focus","renameInputRef","render","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","updateSetIcon","editDropdownRef","map"],"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, {\n ChangeEvent,\n Component,\n ReactNode,\n KeyboardEvent,\n MouseEvent,\n} from 'react';\nimport memoizeOne from 'memoize-one';\nimport shortid from 'shortid';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n vsEdit,\n vsGear,\n vsSave,\n vsCircleSlash,\n vsTrash,\n vsDeviceCamera,\n dhRefresh,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsArrowSmallUp,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { Button, CardFlip, RadioGroup, RadioItem } from '@deephaven/components';\n\nimport './FilterSetManager.scss';\n\nconst log = Log.module('FilterSetManager');\n\nexport interface FilterSetPanel {\n panelId?: string | string[] | null;\n type: string;\n id?: string;\n state: unknown;\n}\n\nexport interface FilterSet {\n id: string;\n title: string;\n panels: FilterSetPanel[];\n restoreFullState?: boolean;\n}\n\nexport interface ChangeHandlerArgs {\n isValueShown: boolean;\n selectedId?: string;\n}\n\ninterface FilterSetManagerProps {\n isValueShown: boolean;\n selectedId?: string;\n filterSets: FilterSet[];\n getFilterState(): FilterSetPanel[];\n onChange(args: ChangeHandlerArgs): void;\n onApply(filterSet: FilterSet): void;\n onUpdateSets(filterSets: FilterSet[], editId?: string): void;\n}\n\ninterface FilterSetManagerState {\n nameInputValue: string;\n nameInputError?: string;\n editId?: string;\n renameSet?: FilterSet;\n // Unsaved set changes on the settings screen\n modifiedFilterSets: FilterSet[];\n restoreFullState: boolean;\n}\n\nconst NAME_INPUT_PLACEHOLDER = 'Enter name...';\n\nconst EMPTY_LIST_PLACEHOLDER = 'No Available Filter Sets';\n\nclass FilterSetManager extends Component<\n FilterSetManagerProps,\n FilterSetManagerState\n> {\n static animateScreenFlash(): void {\n const overlay = document.createElement('div');\n overlay.classList.add('screen-flash-overlay');\n overlay.addEventListener('animationend', () => {\n // Removing the element removes its event listeners\n overlay.remove();\n });\n document.querySelector('body')?.appendChild(overlay);\n }\n\n constructor(props: FilterSetManagerProps) {\n super(props);\n\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.handleEditDropdownChange = this.handleEditDropdownChange.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterApply = this.handleFilterApply.bind(this);\n this.handleCaptureNewSet = this.handleCaptureNewSet.bind(this);\n this.handleNameInputChange = this.handleNameInputChange.bind(this);\n this.handleNameInputKeyPress = this.handleNameInputKeyPress.bind(this);\n this.handleRenameConfirm = this.handleRenameConfirm.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRestoreFullStateChange = this.handleRestoreFullStateChange.bind(\n this\n );\n\n this.handleSetDelete = this.handleSetDelete.bind(this);\n this.handleSetEdit = this.handleSetEdit.bind(this);\n this.handleSetUpdate = this.handleSetUpdate.bind(this);\n\n this.state = {\n editId: undefined,\n renameSet: undefined,\n nameInputValue: '',\n nameInputError: undefined,\n modifiedFilterSets: [],\n restoreFullState: false,\n };\n }\n\n componentDidMount(): void {\n const { isValueShown } = this.props;\n if (isValueShown) {\n this.updateSelectedId();\n } else {\n this.initSettingsScreen();\n }\n }\n\n componentDidUpdate(\n prevProps: FilterSetManagerProps,\n prevState: FilterSetManagerState\n ): void {\n const { isValueShown, filterSets } = this.props;\n const { modifiedFilterSets } = this.state;\n\n if (prevProps.isValueShown && !isValueShown) {\n this.initSettingsScreen();\n }\n\n if (this.isNameInputScreen() && !this.isNameInputScreen(prevState)) {\n this.focusRenameInput();\n }\n\n if (filterSets !== prevProps.filterSets) {\n if (\n !isValueShown &&\n filterSets.length > 0 &&\n prevProps.filterSets.length === 0 &&\n modifiedFilterSets.length === 0\n ) {\n // Filter set added from another panel, flip from the settings side/initial screen to the value side\n const { onChange } = this.props;\n onChange({ isValueShown: true, selectedId: filterSets[0].id });\n } else {\n this.updateSelectedId();\n }\n }\n }\n\n private renameInputRef = React.createRef<HTMLInputElement>();\n\n private dropdownRef = React.createRef<HTMLSelectElement>();\n\n private editDropdownRef = React.createRef<HTMLSelectElement>();\n\n initSettingsScreen(): void {\n const { filterSets, selectedId } = this.props;\n log.debug('initSettingsScreen', filterSets, selectedId);\n this.setState({\n modifiedFilterSets: [...filterSets],\n editId: selectedId,\n });\n }\n\n // Update selected id without applying the new set on filterSets change\n updateSelectedId(): void {\n const { isValueShown, filterSets, selectedId, onChange } = this.props;\n log.debug('updateSelectedId', filterSets, selectedId);\n if (!isValueShown) {\n return;\n }\n if (!filterSets.some(({ id }) => id === selectedId)) {\n // Update the selection if selectedId doesn't exist in the list\n // Flip to the settings side for empty list to show the initial screen\n const isEmptyList = filterSets.length === 0;\n onChange({\n isValueShown: !isEmptyList,\n selectedId: isEmptyList ? undefined : filterSets[0].id,\n });\n }\n }\n\n handleEditDropdownChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value: editId } = event.target;\n this.setState({ editId });\n }\n\n handleFilterChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value: selectedId } = event.target;\n const { isValueShown, onChange } = this.props;\n this.applyFilterSet(selectedId);\n onChange({ isValueShown, selectedId });\n }\n\n handleFilterApply(): void {\n const { selectedId } = this.props;\n this.applyFilterSet(selectedId);\n }\n\n handleSettingsCancel(): void {\n const { onChange, selectedId, filterSets } = this.props;\n this.setState({ modifiedFilterSets: [] });\n // Flip the card to the filter set selection screen if the sets list isn't empty\n // Otherwise show the initial screen\n if (filterSets.length > 0) {\n onChange({ isValueShown: true, selectedId });\n }\n }\n\n handleSettingsSave(): void {\n const { onChange, onUpdateSets } = this.props;\n const { modifiedFilterSets, editId } = this.state;\n this.setState({ modifiedFilterSets: [] });\n log.debug('Update sets', modifiedFilterSets, editId);\n onUpdateSets(modifiedFilterSets);\n // Don't flip the card to the filter set selection screen if the updated sets list is empty\n if (modifiedFilterSets.length > 0) {\n onChange({ isValueShown: true, selectedId: editId });\n }\n }\n\n handleCaptureNewSet(): void {\n const { getFilterState } = this.props;\n FilterSetManager.animateScreenFlash();\n const id = shortid();\n const panels = getFilterState();\n const renameSet = {\n id,\n title: '',\n panels,\n };\n log.debug('handleSetCreate', renameSet);\n this.setState({ nameInputValue: '', nameInputError: undefined, renameSet });\n }\n\n handleRenameCancel(): void {\n this.setState({ renameSet: undefined });\n }\n\n handleRestoreFullStateChange(event: ChangeEvent<HTMLInputElement>): void {\n this.setState({\n restoreFullState: event.target.value === 'true',\n });\n }\n\n getNameError(nameInputValue: string): string | undefined {\n const { renameSet, modifiedFilterSets } = this.state;\n const trimmedName = nameInputValue?.trim() ?? '';\n if (trimmedName.length === 0) {\n log.debug('Name cannot be empty', trimmedName);\n return 'Name cannot be empty';\n }\n\n if (\n renameSet !== undefined &&\n modifiedFilterSets.some(\n ({ title, id }) => title === trimmedName && id !== renameSet.id\n )\n ) {\n log.debug('Set with this name already exists', trimmedName);\n return 'Set with this name already exists';\n }\n\n return undefined;\n }\n\n handleRenameConfirm(): void {\n const {\n nameInputValue,\n renameSet,\n modifiedFilterSets,\n restoreFullState,\n } = this.state;\n if (renameSet === undefined) {\n log.error('Renamed set undefined.');\n return;\n }\n const nameInputError = this.getNameError(nameInputValue);\n log.debug('handleRenameConfirm', nameInputValue, nameInputError);\n if (nameInputError !== undefined) {\n this.setState({ nameInputError });\n return;\n }\n const trimmedName = nameInputValue?.trim() ?? '';\n const namedFilterSet = {\n ...renameSet,\n title: trimmedName,\n restoreFullState,\n };\n const selectedIndex = modifiedFilterSets.findIndex(\n ({ id }) => id === renameSet.id\n );\n const updatedModifiedFilterSets = [...modifiedFilterSets];\n\n if (selectedIndex >= 0) {\n updatedModifiedFilterSets[selectedIndex] = namedFilterSet;\n log.debug('Renamed existing set', updatedModifiedFilterSets);\n } else {\n updatedModifiedFilterSets.push(namedFilterSet);\n log.debug('Added new set to modified sets', updatedModifiedFilterSets);\n }\n\n this.setState({\n editId: namedFilterSet.id,\n modifiedFilterSets: updatedModifiedFilterSets,\n renameSet: undefined,\n });\n }\n\n handleSetDelete(): void {\n this.setState(state => {\n const { editId, modifiedFilterSets: prevFilterSets } = state;\n const selectedIndex = prevFilterSets.findIndex(({ id }) => id === editId);\n if (selectedIndex < 0) {\n log.error(\n 'Unable to find selected filterSet index',\n prevFilterSets,\n editId\n );\n return null;\n }\n const modifiedFilterSets = prevFilterSets.filter(\n ({ id }) => id !== editId\n );\n const newSelectedIndex = Math.max(\n 0,\n Math.min(modifiedFilterSets.length - 1, selectedIndex - 1)\n );\n const newSelectedId =\n modifiedFilterSets.length > 0\n ? modifiedFilterSets[newSelectedIndex].id\n : undefined;\n log.debug(\n 'Deleted selected set',\n editId,\n prevFilterSets,\n modifiedFilterSets\n );\n log.debug('New selection', newSelectedIndex, newSelectedId);\n return {\n modifiedFilterSets,\n editId: newSelectedId,\n };\n });\n }\n\n handleSetUpdate(): void {\n const { getFilterState } = this.props;\n FilterSetManager.animateScreenFlash();\n const panels = getFilterState();\n this.setState(({ modifiedFilterSets: prevFilterSets, editId }) => {\n if (editId === undefined) {\n log.error('Filter for update not selected.');\n return null;\n }\n const modifiedFilterSets = [...prevFilterSets];\n const selectedSetIndex = modifiedFilterSets.findIndex(\n ({ id }) => id === editId\n );\n if (selectedSetIndex < 0) {\n log.error('Selected set for update not found.');\n return null;\n }\n // Clone selected set to avoid mutation of the props\n modifiedFilterSets[selectedSetIndex] = {\n ...modifiedFilterSets[selectedSetIndex],\n panels,\n };\n\n log.debug('Update set', modifiedFilterSets, panels);\n return {\n modifiedFilterSets,\n };\n });\n }\n\n handleSetEdit(): void {\n this.setState(({ editId, modifiedFilterSets }) => {\n const selectedSet = modifiedFilterSets.find(({ id }) => id === editId);\n if (selectedSet === undefined) {\n log.error('Could not find selected set', editId, modifiedFilterSets);\n return null;\n }\n const { title, restoreFullState = false } = selectedSet;\n return {\n nameInputValue: title,\n nameInputError: undefined,\n renameSet: selectedSet,\n restoreFullState,\n };\n });\n }\n\n handleSettingsClick(event: MouseEvent): void {\n event.stopPropagation();\n const { onChange, selectedId } = this.props;\n onChange({ isValueShown: false, selectedId });\n }\n\n handleBackgroundClick(event: MouseEvent): void {\n log.debug('handleBackgroundClick');\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 handleNameInputChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value: nameInputValue } = event.target;\n const nameInputError = this.getNameError(nameInputValue);\n this.setState({ nameInputValue, nameInputError });\n }\n\n handleNameInputKeyPress(event: KeyboardEvent): void {\n const { key } = event;\n if (key === 'Enter') {\n event.preventDefault();\n this.handleRenameConfirm();\n }\n }\n\n isNameInputScreen(state = this.state): boolean {\n const { renameSet } = state;\n return renameSet !== undefined;\n }\n\n isRenamingExistingSet = memoizeOne(\n (filterSets: FilterSet[], renameSet?: FilterSet): boolean =>\n renameSet !== undefined &&\n filterSets.some(({ id }) => id === renameSet.id)\n );\n\n applyFilterSet(selectedId?: string): void {\n const { onApply, filterSets } = this.props;\n if (selectedId === undefined) {\n log.debug('No filter selected');\n return;\n }\n const filterSet = filterSets.find(({ id }) => id === selectedId);\n if (filterSet === undefined) {\n log.debug('Selected id not found in filterSets', selectedId, filterSets);\n return;\n }\n log.debug('Apply filterSet', filterSet);\n onApply(filterSet);\n }\n\n focusInput(): void {\n this.dropdownRef.current?.focus();\n }\n\n focusRenameInput(): void {\n this.renameInputRef.current?.focus();\n }\n\n render(): ReactNode {\n const {\n nameInputValue,\n nameInputError,\n editId,\n renameSet,\n modifiedFilterSets,\n restoreFullState,\n } = this.state;\n const { isValueShown, filterSets, selectedId } = this.props;\n const isNameInputScreen = this.isNameInputScreen();\n const isRenamingExistingSet = this.isRenamingExistingSet(\n modifiedFilterSets,\n renameSet\n );\n const isEmptyEditList = modifiedFilterSets.length === 0;\n const isInitialScreen =\n !isNameInputScreen && isEmptyEditList && filterSets.length === 0;\n const isEditListScreen = !isNameInputScreen && !isInitialScreen;\n const captureSetIcon = (\n <div className=\"fa-layers mr-3\">\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={vsDeviceCamera}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhNewCircleLargeFilled}\n className=\"text-primary\"\n transform=\"shrink-6 down-5 right-7\"\n />\n </div>\n );\n const updateSetIcon = (\n <div className=\"fa-layers\">\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={vsDeviceCamera}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={vsArrowSmallUp}\n transform=\"shrink-1 down-5 right-7\"\n />\n </div>\n );\n return (\n <div className=\"filter-set-manager fill-parent-absolute\">\n <CardFlip className=\"w-100 h-100\" isFlipped={isValueShown}>\n <div\n className=\"filter-set-manager-settings-card fill-parent-absolute\"\n key=\"front\"\n >\n <div className=\"filter-set-manager-card-content\">\n {isInitialScreen && (\n <div>\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline\"\n onClick={this.handleCaptureNewSet}\n icon={captureSetIcon}\n >\n Capture filter set\n </Button>\n <div className=\"py-3 text-muted small\">\n Takes a snapshot of the currently applied filters on all\n panels, allowing you to restore saved filter sets later.\n </div>\n </div>\n )}\n\n {isNameInputScreen && (\n <div\n className=\"d-flex flex-column justify-content-center\"\n data-testid=\"edit-filter-set-container\"\n >\n <div className=\"form-group\">\n <label>\n {isRenamingExistingSet ? 'Edit set' : 'Name captured set'}\n </label>\n <div className=\"name-input-container\">\n <input\n type=\"text\"\n className=\"input-set-name form-control\"\n placeholder={NAME_INPUT_PLACEHOLDER}\n value={nameInputValue}\n ref={this.renameInputRef}\n onChange={this.handleNameInputChange}\n onKeyPress={this.handleNameInputKeyPress}\n spellCheck=\"false\"\n />\n <Button\n data-testid=\"rename-confirm-button\"\n kind=\"ghost\"\n className=\"btn btn-link no-underline pt-2 pb-2\"\n onClick={this.handleRenameConfirm}\n tooltip=\"Save\"\n test-id=\"button-save\"\n icon={vsSave}\n />\n\n <Button\n data-testid=\"rename-cancel-button\"\n kind=\"ghost\"\n className=\"btn btn-link no-underline pt-2 pb-2\"\n onClick={this.handleRenameCancel}\n tooltip=\"Cancel\"\n icon={vsCircleSlash}\n />\n </div>\n {nameInputError && (\n <div className=\"error-message\">{nameInputError}</div>\n )}\n </div>\n <div className=\"form-group\">\n <RadioGroup\n onChange={this.handleRestoreFullStateChange}\n value={`${restoreFullState}`}\n >\n <RadioItem value=\"false\">Restore only filters</RadioItem>\n <RadioItem value=\"true\">\n Restore full table state\n </RadioItem>\n </RadioGroup>\n </div>\n </div>\n )}\n\n {isEditListScreen && (\n <div className=\"filter-set-manager-settings-grid-1\">\n <div className=\"form-group\">\n <label>Edit filter sets</label>\n <div className=\"filter-select-container\">\n <select\n data-testid=\"settings-card-filter-select\"\n ref={this.editDropdownRef}\n value={editId ?? '-1'}\n className=\"custom-select filter-value-select\"\n onChange={this.handleEditDropdownChange}\n disabled={isEmptyEditList}\n >\n {isEmptyEditList && (\n <option value=\"-1\" disabled>\n {EMPTY_LIST_PLACEHOLDER}\n </option>\n )}\n {modifiedFilterSets.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </select>\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetUpdate}\n disabled={isEmptyEditList}\n icon={updateSetIcon}\n tooltip=\"Update\"\n />\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetEdit}\n disabled={isEmptyEditList}\n icon={vsEdit}\n tooltip=\"Edit\"\n />\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetDelete}\n disabled={isEmptyEditList}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n </div>\n </div>\n\n <div>\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline\"\n onClick={this.handleCaptureNewSet}\n icon={captureSetIcon}\n >\n Capture new filter set\n </Button>\n </div>\n\n <div className=\"py-3 text-right\">\n <Button\n kind=\"secondary\"\n onClick={this.handleSettingsCancel}\n >\n Cancel\n </Button>\n \n <Button kind=\"primary\" onClick={this.handleSettingsSave}>\n Save\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n <div\n className=\"filter-set-manager-value-card fill-parent-absolute\"\n key=\"back\"\n onClick={this.handleBackgroundClick}\n >\n <>\n <div className=\"filter-set-manager-column\">\n <div className=\"filter-set-manager-column-title\">\n Filter sets\n </div>\n </div>\n <div className=\"filter-set-manager-card-content\">\n <div className=\"filter-set-manager-value-input\">\n <div className=\"filter-select-container\">\n <select\n data-testid=\"value-card-filter-select\"\n ref={this.dropdownRef}\n value={selectedId}\n className=\"custom-select filter-value-select\"\n onChange={this.handleFilterChange}\n >\n {filterSets.length === 0 && (\n <option value=\"-1\" disabled>\n {EMPTY_LIST_PLACEHOLDER}\n </option>\n )}\n {filterSets.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </select>\n <Button\n data-testid=\"filter-apply-button\"\n kind=\"ghost\"\n onClick={this.handleFilterApply}\n icon={dhRefresh}\n tooltip=\"Apply Filter Set\"\n />\n </div>\n </div>\n </div>\n <div className=\"filter-set-manager-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn btn-link btn-link-icon m-2 px-2\"\n onClick={this.handleSettingsClick}\n tooltip=\"Settings\"\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n />\n </div>\n </>\n </div>\n </CardFlip>\n </div>\n );\n }\n}\n\nexport default FilterSetManager;\n"],"file":"FilterSetManager.js"}
|