@deephaven/dashboard-core-plugins 0.19.2-beta.0 → 0.19.2-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/ConsolePlugin.d.ts +4 -0
  2. package/dist/ConsolePlugin.d.ts.map +1 -1
  3. package/dist/ConsolePlugin.js +12 -12
  4. package/dist/ConsolePlugin.js.map +1 -1
  5. package/dist/MarkdownPlugin.d.ts.map +1 -1
  6. package/dist/MarkdownPlugin.js +3 -3
  7. package/dist/MarkdownPlugin.js.map +1 -1
  8. package/dist/controls/dropdown-filter/DropdownFilter.js +1 -1
  9. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  10. package/dist/controls/input-filter/InputFilter.d.ts.map +1 -1
  11. package/dist/controls/input-filter/InputFilter.js +1 -1
  12. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  13. package/dist/controls/markdown/MarkdownContainer.js +1 -1
  14. package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
  15. package/dist/controls/markdown/MarkdownEditor.d.ts.map +1 -1
  16. package/dist/controls/markdown/MarkdownEditor.js +1 -1
  17. package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
  18. package/dist/linker/Linker.d.ts +1 -1
  19. package/dist/linker/Linker.d.ts.map +1 -1
  20. package/dist/linker/Linker.js +6 -6
  21. package/dist/linker/Linker.js.map +1 -1
  22. package/dist/linker/LinkerOverlayContent.js +1 -1
  23. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  24. package/dist/linker/LinkerUtils.js +1 -1
  25. package/dist/linker/LinkerUtils.js.map +1 -1
  26. package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
  27. package/dist/panels/ChartFilterOverlay.js +2 -2
  28. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  29. package/dist/panels/ChartPanel.d.ts.map +1 -1
  30. package/dist/panels/ChartPanel.js +6 -6
  31. package/dist/panels/ChartPanel.js.map +1 -1
  32. package/dist/panels/ConsolePanel.d.ts.map +1 -1
  33. package/dist/panels/ConsolePanel.js +6 -8
  34. package/dist/panels/ConsolePanel.js.map +1 -1
  35. package/dist/panels/DropdownFilterPanel.js +2 -2
  36. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  37. package/dist/panels/FileExplorerPanel.js +1 -1
  38. package/dist/panels/FileExplorerPanel.js.map +1 -1
  39. package/dist/panels/FilterSetManager.js +1 -1
  40. package/dist/panels/FilterSetManager.js.map +1 -1
  41. package/dist/panels/InputFilterPanel.js +1 -1
  42. package/dist/panels/InputFilterPanel.js.map +1 -1
  43. package/dist/panels/IrisGridPanel.d.ts +1 -1
  44. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  45. package/dist/panels/IrisGridPanel.js +9 -11
  46. package/dist/panels/IrisGridPanel.js.map +1 -1
  47. package/dist/panels/LogPanel.js +2 -2
  48. package/dist/panels/LogPanel.js.map +1 -1
  49. package/dist/panels/MarkdownNotebook.d.ts +1 -1
  50. package/dist/panels/MarkdownNotebook.d.ts.map +1 -1
  51. package/dist/panels/MarkdownNotebook.js +3 -3
  52. package/dist/panels/MarkdownNotebook.js.map +1 -1
  53. package/dist/panels/MarkdownPanel.d.ts.map +1 -1
  54. package/dist/panels/MarkdownPanel.js +4 -4
  55. package/dist/panels/MarkdownPanel.js.map +1 -1
  56. package/dist/panels/NotebookPanel.d.ts.map +1 -1
  57. package/dist/panels/NotebookPanel.js +8 -10
  58. package/dist/panels/NotebookPanel.js.map +1 -1
  59. package/dist/panels/Panel.d.ts +1 -1
  60. package/dist/panels/Panel.d.ts.map +1 -1
  61. package/dist/panels/Panel.js +3 -3
  62. package/dist/panels/Panel.js.map +1 -1
  63. package/dist/panels/PanelContextMenu.d.ts.map +1 -1
  64. package/dist/panels/PanelContextMenu.js +8 -3
  65. package/dist/panels/PanelContextMenu.js.map +1 -1
  66. package/dist/panels/RenameDialog.d.ts.map +1 -1
  67. package/dist/panels/RenameDialog.js +2 -4
  68. package/dist/panels/RenameDialog.js.map +1 -1
  69. package/package.json +19 -19
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownFilterPanel.js","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"],"sources":["../../src/panels/DropdownFilterPanel.tsx"],"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 type { 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"],"mappings":"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"}
1
+ {"version":3,"file":"DropdownFilterPanel.js","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","undefined","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","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"],"sources":["../../src/panels/DropdownFilterPanel.tsx"],"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 type { 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 !== undefined && 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 != null ? `${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"],"mappings":"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"}
@@ -32,7 +32,7 @@ var connector = connect(mapStateToProps, null, null, {
32
32
 
33
33
  function isMouseEvent(e) {
34
34
  var mouseEvent = e;
35
- return mouseEvent && typeof mouseEvent.button === 'number';
35
+ return mouseEvent != null && typeof mouseEvent.button === 'number';
36
36
  }
37
37
  /**
38
38
  * Panel for showing a FileExplorer in a Dashboard.
@@ -1 +1 @@
1
- {"version":3,"file":"FileExplorerPanel.js","names":["Log","getFileStorage","FileExplorer","FileExplorerToolbar","FileUtils","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","handleSelectionChange","isShown","showCreateFolder","focusedFilePath","componentDidMount","isHidden","setState","glEventHub","notebookSettings","value","debug","emit","CREATE_NOTEBOOK","path","createDirectory","catch","files","forEach","file","CLOSE_FILE","id","filename","itemName","selectedItems","length","makePath","getPath","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 FileUtils,\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 focusedFilePath: string;\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 this.handleSelectionChange = this.handleSelectionChange.bind(this);\n\n const { session, language } = props;\n this.state = {\n isShown: false,\n language,\n session,\n showCreateFolder: false,\n focusedFilePath: '/',\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 handleSelectionChange(selectedItems: FileStorageItem[]): void {\n let path = '/';\n if (selectedItems.length === 1) {\n if (selectedItems[0].type === 'directory') {\n path = FileUtils.makePath(selectedItems[0].filename);\n } else {\n path = FileUtils.getPath(selectedItems[0].filename);\n }\n }\n this.setState({ focusedFilePath: path });\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, focusedFilePath } = 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 onSelectionChange={this.handleSelectionChange}\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 defaultValue={focusedFilePath}\n />\n </Panel>\n );\n }\n}\n\nexport default connector(FileExplorerPanel);\n"],"mappings":"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"}
1
+ {"version":3,"file":"FileExplorerPanel.js","names":["Log","getFileStorage","FileExplorer","FileExplorerToolbar","FileUtils","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","handleSelectionChange","isShown","showCreateFolder","focusedFilePath","componentDidMount","isHidden","setState","glEventHub","notebookSettings","value","debug","emit","CREATE_NOTEBOOK","path","createDirectory","catch","files","forEach","file","CLOSE_FILE","id","filename","itemName","selectedItems","length","makePath","getPath","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 FileUtils,\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 focusedFilePath: string;\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 != null && 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 this.handleSelectionChange = this.handleSelectionChange.bind(this);\n\n const { session, language } = props;\n this.state = {\n isShown: false,\n language,\n session,\n showCreateFolder: false,\n focusedFilePath: '/',\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 handleSelectionChange(selectedItems: FileStorageItem[]): void {\n let path = '/';\n if (selectedItems.length === 1) {\n if (selectedItems[0].type === 'directory') {\n path = FileUtils.makePath(selectedItems[0].filename);\n } else {\n path = FileUtils.getPath(selectedItems[0].filename);\n }\n }\n this.setState({ focusedFilePath: path });\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, focusedFilePath } = 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 onSelectionChange={this.handleSelectionChange}\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 defaultValue={focusedFilePath}\n />\n </Panel>\n );\n }\n}\n\nexport default connector(FileExplorerPanel);\n"],"mappings":"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"}
@@ -635,7 +635,7 @@ class FilterSetManager extends Component {
635
635
  onClick: this.handleRenameCancel,
636
636
  tooltip: "Cancel",
637
637
  icon: vsCircleSlash
638
- })), nameInputError && /*#__PURE__*/React.createElement("div", {
638
+ })), nameInputError !== undefined && /*#__PURE__*/React.createElement("div", {
639
639
  className: "error-message"
640
640
  }, nameInputError)), /*#__PURE__*/React.createElement("div", {
641
641
  className: "form-group"
@@ -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 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 &nbsp;\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,"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 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 !== undefined && (\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 &nbsp;\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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"}
@@ -33,7 +33,7 @@ class InputFilterPanel extends Component {
33
33
  } = panelState !== null && panelState !== void 0 ? panelState : {};
34
34
  this.state = {
35
35
  columns: [],
36
- column: name && type ? {
36
+ column: name != null && type != null ? {
37
37
  name,
38
38
  type
39
39
  } : undefined,