@deephaven/dashboard-core-plugins 0.37.4-logout.17 → 0.37.4-logout.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/ChartPlugin.js.map +1 -1
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridPlugin.js.map +1 -1
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPlugin.js.map +1 -1
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/events/ChartEvent.js +0 -2
- package/dist/events/ChartEvent.js.map +1 -1
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/events/InputFilterEvent.js +0 -8
- package/dist/events/InputFilterEvent.js.map +1 -1
- package/dist/events/IrisGridEvent.js +0 -2
- package/dist/events/IrisGridEvent.js.map +1 -1
- package/dist/events/NotebookEvent.js.map +1 -1
- package/dist/events/PQEvent.js.map +1 -1
- package/dist/events/PandasEvent.js +0 -2
- package/dist/events/PandasEvent.js.map +1 -1
- package/dist/events/TabEvent.js.map +1 -1
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.js +1 -1
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/ChartPanelUtils.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +2 -1
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.js +3 -2
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.js +0 -1
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/MockFileStorage.js.map +1 -1
- package/dist/panels/MockFileStorageTable.js.map +1 -1
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/Panel.js.map +1 -1
- package/dist/panels/PanelContextMenu.js.map +1 -1
- package/dist/panels/RenameDialog.js.map +1 -1
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/prop-types/CommonPropTypes.js.map +1 -1
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/index.js.map +1 -1
- package/dist/redux/selectors.js.map +1 -1
- package/package.json +21 -21
|
@@ -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","mapStateToProps","state","ownProps","localDashboardId","panelId","getIdFromPanel","props","panelTableMap","dashboardLinks","activeTool","isolatedLinkerPanelId","isLinkerActive","LINKER","undefined","disableLinking","columns","columnSelectionValidator","settings","connector","forwardRef","DropdownFilterPanel","constructor","_defineProperty","rawValues","_ref","formatter","type","name","isDateType","map","value","DATETIME_FORMATTER","format","getFormattedString","panel","debug","filter","link","_link$end","end","links","source","length","start","error","_panelTableMap$get","get","table","_table$columns$find","find","_ref2","columnName","columnType","handleChange","bind","handleClearAllFilters","handleDisconnect","handleReconnect","handleColumnSelected","handleSourceFilterChange","handleSourceSortChange","handleSourceSizeChange","handleSourceMouseEnter","handleSourceMouseLeave","handleValuesTableUpdate","dropdownFilterRef","createRef","panelContainer","pending","panelState","columnFormats","getColumnFormats","isValueShown","timestamp","column","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","_element$getBoundingC","current","element","querySelector","concat","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","_ref3","Date","now","setState","_ref4","_ref5","_timestamp","prevTimestamp","isFlip","Error","applySourceFilters","applySourceSorts","_ref6","detail","glEventHub","emit","COLUMN_SELECTED","SOURCE_COLUMN","_this$dropdownFilterR","_this$dropdownFilterR2","clearFilter","setPanelState","_this$dropdownFilterR3","_this$dropdownFilterR4","arguments","setFilterState","_this$getSource","sourcePanelId","excludePanelIds","FILTERS_CHANGED","size","add","copy","resolved","then","updateViewportListener","catch","isCanceled","sort","sorts","applySort","setViewport","filters","applyFilter","EVENT_UPDATED","_ref7","rows","row","render","glContainer","settingsErrorMessage","panelErrorMessage","formattedValues","getCachedValues","createElement","errorMessage","className","componentPanel","onClearAllFilters","widgetName","widgetType","ref","settingsError","onChange","onColumnSelected","onSourceMouseEnter","onSourceMouseLeave","showTimeZone","showTSeparator","defaultDateTimeFormatString","Object","freeze","ConnectedDropdownFilterPanel"],"sources":["../../src/panels/DropdownFilterPanel.tsx"],"sourcesContent":["import React, { Component, RefObject } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoizee';\nimport { DashboardPanelProps, LayoutUtils } from '@deephaven/dashboard';\nimport dh from '@deephaven/jsapi-shim';\nimport type { Column, Row, Table, 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 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 type { Link, LinkPoint } from '../linker/LinkerUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\nimport { PanelState as InputFilterPanelState } from './InputFilterPanel';\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\ntype PanelTableMap = Map<string | string[], TableTemplate>;\n\ntype StateProps = {\n columns: Column[];\n columnSelectionValidator?: ColumnSelectionValidator;\n dashboardLinks: Link[];\n disableLinking: boolean;\n isLinkerActive: boolean;\n panelTableMap: PanelTableMap;\n panelState?: PanelState;\n settings: { formatter: FormattingRule[] };\n};\n\ntype OwnProps = DashboardPanelProps;\n\nconst mapStateToProps = (state: RootState, ownProps: OwnProps): StateProps => {\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\nconst connector = connect(mapStateToProps, null, null, { forwardRef: true });\n\nexport type DropdownFilterPanelProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\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\nexport class 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(): void {\n this.updateValuesTable();\n const { dashboardLinks, panelTableMap } = this.props;\n const { column, value, timestamp } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\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 ): void {\n const { dashboardLinks, panelTableMap, settings } = this.props;\n const { valuesTable } = this.state;\n const source = this.getSource(dashboardLinks);\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n\n const prevSource = this.getSource(prevProps.dashboardLinks);\n const prevSourceTable = this.getSourceTable(\n prevProps.panelTableMap,\n prevProps.dashboardLinks\n );\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 { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\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(\n (dashboardLinks: Link[], panel: DropdownFilterPanel) => {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('getCachedPanelLinks', dashboardLinks, panelId);\n return dashboardLinks.filter(link => link.end?.panelId === panelId);\n }\n );\n\n getCachedSource = memoize((links: Link[]) => {\n log.debug('getCachedSource', links);\n let source: LinkPoint | undefined;\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(\n (\n panelTableMap: Map<string | string[], TableTemplate<Table>>,\n source: LinkPoint | undefined\n ) => {\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\n getCachedSourceColumn = memoize(\n (table: TableTemplate, source: LinkPoint | undefined) => {\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\n getSource(links: Link[]): LinkPoint | undefined {\n const panelLinks = this.getCachedPanelLinks(links, this);\n return this.getCachedSource(panelLinks);\n }\n\n getSourceTable(\n panelTableMap: PanelTableMap,\n links: Link[]\n ): TableTemplate | null {\n const source = this.getSource(links);\n return this.getCachedSourceTable(panelTableMap, source);\n }\n\n getValuesColumn(valuesTable: TableTemplate, links: Link[]): Column | null {\n const source = this.getSource(links);\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 = false,\n value,\n }: {\n column: Partial<Column> | null;\n isValueShown?: boolean | undefined;\n value?: string | undefined;\n }): void {\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(): void {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleSourceFilterChange(): void {\n this.applySourceFilters();\n }\n\n handleSourceSortChange(): void {\n this.applySourceSorts();\n }\n\n handleSourceSizeChange({ detail }: { detail: number }): void {\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(state: InputFilterPanelState, sendUpdate = false): void {\n const { dashboardLinks } = this.props;\n if (this.getSource(dashboardLinks) == 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 { dashboardLinks, glEventHub } = this.props;\n const sourcePanelId = this.getSource(dashboardLinks)?.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 { dashboardLinks, panelTableMap } = this.props;\n const source = this.getSource(dashboardLinks);\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\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(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceSorts', sourceTable?.sort);\n if (valuesTable == null || sourceTable == 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 { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceFilters', sourceTable?.filter);\n if (valuesTable == null || sourceTable == 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 { dashboardLinks } = this.props;\n const valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\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 }): void {\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[] } }): void {\n const { rows } = detail;\n const { dashboardLinks } = this.props;\n const { valuesTable } = this.state;\n if (!valuesTable) {\n log.error('valuesTable is null');\n return;\n }\n const valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\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(): void {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n\n handleSourceMouseLeave(): void {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n render(): React.ReactElement {\n const {\n columns,\n dashboardLinks,\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 const source = this.getSource(dashboardLinks);\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 ConnectedDropdownFilterPanel = connector(DropdownFilterPanel);\n\nexport default ConnectedDropdownFilterPanel;\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","mapStateToProps","state","ownProps","localDashboardId","panelId","getIdFromPanel","props","panelTableMap","dashboardLinks","activeTool","isolatedLinkerPanelId","isLinkerActive","LINKER","undefined","disableLinking","columns","columnSelectionValidator","settings","connector","forwardRef","DropdownFilterPanel","constructor","rawValues","formatter","type","name","isDateType","map","value","DATETIME_FORMATTER","format","getFormattedString","panel","debug","filter","link","end","links","source","length","start","error","get","table","find","columnName","columnType","handleChange","bind","handleClearAllFilters","handleDisconnect","handleReconnect","handleColumnSelected","handleSourceFilterChange","handleSourceSortChange","handleSourceSizeChange","handleSourceMouseEnter","handleSourceMouseLeave","handleValuesTableUpdate","dropdownFilterRef","createRef","panelContainer","pending","panelState","columnFormats","getColumnFormats","isValueShown","timestamp","column","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","render","glContainer","settingsErrorMessage","panelErrorMessage","formattedValues","getCachedValues","showTimeZone","showTSeparator","defaultDateTimeFormatString","Object","freeze","ConnectedDropdownFilterPanel"],"sources":["../../src/panels/DropdownFilterPanel.tsx"],"sourcesContent":["import React, { Component, RefObject } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoizee';\nimport { DashboardPanelProps, LayoutUtils } from '@deephaven/dashboard';\nimport dh from '@deephaven/jsapi-shim';\nimport type { Column, Row, Table, 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 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 type { Link, LinkPoint } from '../linker/LinkerUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\nimport { PanelState as InputFilterPanelState } from './InputFilterPanel';\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\ntype PanelTableMap = Map<string | string[], TableTemplate>;\n\ntype StateProps = {\n columns: Column[];\n columnSelectionValidator?: ColumnSelectionValidator;\n dashboardLinks: Link[];\n disableLinking: boolean;\n isLinkerActive: boolean;\n panelTableMap: PanelTableMap;\n panelState?: PanelState;\n settings: { formatter: FormattingRule[] };\n};\n\ntype OwnProps = DashboardPanelProps;\n\nconst mapStateToProps = (state: RootState, ownProps: OwnProps): StateProps => {\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\nconst connector = connect(mapStateToProps, null, null, { forwardRef: true });\n\nexport type DropdownFilterPanelProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\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\nexport class 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(): void {\n this.updateValuesTable();\n const { dashboardLinks, panelTableMap } = this.props;\n const { column, value, timestamp } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\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 ): void {\n const { dashboardLinks, panelTableMap, settings } = this.props;\n const { valuesTable } = this.state;\n const source = this.getSource(dashboardLinks);\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n\n const prevSource = this.getSource(prevProps.dashboardLinks);\n const prevSourceTable = this.getSourceTable(\n prevProps.panelTableMap,\n prevProps.dashboardLinks\n );\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 { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\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(\n (dashboardLinks: Link[], panel: DropdownFilterPanel) => {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('getCachedPanelLinks', dashboardLinks, panelId);\n return dashboardLinks.filter(link => link.end?.panelId === panelId);\n }\n );\n\n getCachedSource = memoize((links: Link[]) => {\n log.debug('getCachedSource', links);\n let source: LinkPoint | undefined;\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(\n (\n panelTableMap: Map<string | string[], TableTemplate<Table>>,\n source: LinkPoint | undefined\n ) => {\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\n getCachedSourceColumn = memoize(\n (table: TableTemplate, source: LinkPoint | undefined) => {\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\n getSource(links: Link[]): LinkPoint | undefined {\n const panelLinks = this.getCachedPanelLinks(links, this);\n return this.getCachedSource(panelLinks);\n }\n\n getSourceTable(\n panelTableMap: PanelTableMap,\n links: Link[]\n ): TableTemplate | null {\n const source = this.getSource(links);\n return this.getCachedSourceTable(panelTableMap, source);\n }\n\n getValuesColumn(valuesTable: TableTemplate, links: Link[]): Column | null {\n const source = this.getSource(links);\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 = false,\n value,\n }: {\n column: Partial<Column> | null;\n isValueShown?: boolean | undefined;\n value?: string | undefined;\n }): void {\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(): void {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleSourceFilterChange(): void {\n this.applySourceFilters();\n }\n\n handleSourceSortChange(): void {\n this.applySourceSorts();\n }\n\n handleSourceSizeChange({ detail }: { detail: number }): void {\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(state: InputFilterPanelState, sendUpdate = false): void {\n const { dashboardLinks } = this.props;\n if (this.getSource(dashboardLinks) == 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 { dashboardLinks, glEventHub } = this.props;\n const sourcePanelId = this.getSource(dashboardLinks)?.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 { dashboardLinks, panelTableMap } = this.props;\n const source = this.getSource(dashboardLinks);\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\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(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceSorts', sourceTable?.sort);\n if (valuesTable == null || sourceTable == 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 { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceFilters', sourceTable?.filter);\n if (valuesTable == null || sourceTable == 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 { dashboardLinks } = this.props;\n const valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\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 }): void {\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[] } }): void {\n const { rows } = detail;\n const { dashboardLinks } = this.props;\n const { valuesTable } = this.state;\n if (!valuesTable) {\n log.error('valuesTable is null');\n return;\n }\n const valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\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(): void {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n\n handleSourceMouseLeave(): void {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n render(): React.ReactElement {\n const {\n columns,\n dashboardLinks,\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 const source = this.getSource(dashboardLinks);\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 ConnectedDropdownFilterPanel = connector(DropdownFilterPanel);\n\nexport default ConnectedDropdownFilterPanel;\n"],"mappings":"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"}
|
|
@@ -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","_ref","undefined","glContainer","render","createElement","className","componentPanel","onSessionOpen","onSessionClose","onShow","createFile","createFolder","isMultiSelect","storage","onDelete","onRename","onSelect","onSelectionChange","isOpen","title","onSubmit","onCancel","defaultValue","_defineProperty","ConnectedFileExplorerPanel"],"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\nconst ConnectedFileExplorerPanel = connector(FileExplorerPanel);\n\nexport default ConnectedFileExplorerPanel;\n"],"mappings":";;;AACA,OAAOA,GAAG,MAAM,gBAAgB;AAChC,SAASC,cAAc,QAAmB,kBAAkB;AAC5D,OAAOC,YAAY,IACjBC,mBAAmB,EAGnBC,SAAS,EACTC,YAAY,QACP,0BAA0B;AACjC,OAAOC,KAAK,MAAqB,OAAO;AACxC,SAASC,OAAO,QAAwB,aAAa;AAAC,OAE/CC,KAAK;AAAA,SACHC,aAAa;AAAA;AAAA,SAEbC,0BAA0B;AAEnC,IAAMC,GAAG,GAAGX,GAAG,CAACY,MAAM,CAAC,mBAAmB,CAAC;AAU3C,IAAMC,eAAe,GAAGA,CAACC,KAAgB,EAAEC,QAAkB,KAAiB;EAC5E,IAAMC,WAAW,GAAGf,cAAc,CAACa,KAAK,CAAC;EACzC,IAAMG,cAAc,GAAGP,0BAA0B,CAC/CI,KAAK,EACLC,QAAQ,CAACG,gBACX,CAAC;EACD,IAAM;IAAEC,OAAO;IAAEC,MAAM,EAAEC;EAAc,CAAC,GAAGJ,cAAc,aAAdA,cAAc,cAAdA,cAAc,GAAI,CAAC,CAAC;EAC/D,IAAMK,QAAQ,GAAGD,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEE,IAAI;EAEpC,OAAO;IACLP,WAAW;IACXM,QAAQ;IACRH;EACF,CAAC;AACH,CAAC;AAED,IAAMK,SAAS,GAAGjB,OAAO,CAACM,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE;EAAEY,UAAU,EAAE;AAAK,CAAC,CAAC;AAc5E,SAASC,YAAYA,CAAIC,CAA0B,EAA4B;EAC7E,IAAMC,UAAU,GAAGD,CAAwB;EAC3C,OAAOC,UAAU,IAAI,IAAI,IAAI,OAAOA,UAAU,CAACC,MAAM,KAAK,QAAQ;AACpE;;AAEA;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,SAASxB,KAAK,CAACyB,SAAS,CAGpD;EAKA,OAAOC,WAAWA,CAACC,KAAY,EAAQ;IACrCtB,GAAG,CAACsB,KAAK,CAACA,KAAK,CAAC;EAClB;;EAEA;AACF;AACA;AACA;EACE,OAAOC,YAAYA,CAACC,KAA2B,EAAW;IACxD,IAAIT,YAAY,CAACS,KAAK,CAAC,EAAE;MACvB;MACA,OAAOA,KAAK,CAACC,MAAM,IAAI,CAAC;IAC1B;;IAEA;IACA,OAAO,IAAI;EACb;EAEAC,WAAWA,CAACC,KAA6B,EAAE;IACzC,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACC,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACD,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACE,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACF,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACG,2BAA2B,GAAG,IAAI,CAACA,2BAA2B,CAACH,IAAI,CACtE,IACF,CAAC;IACD,IAAI,CAACI,2BAA2B,GAAG,IAAI,CAACA,2BAA2B,CAACJ,IAAI,CACtE,IACF,CAAC;IACD,IAAI,CAACK,YAAY,GAAG,IAAI,CAACA,YAAY,CAACL,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACM,YAAY,GAAG,IAAI,CAACA,YAAY,CAACN,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACO,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACP,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACQ,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACR,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACS,UAAU,GAAG,IAAI,CAACA,UAAU,CAACT,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACU,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACV,IAAI,CAAC,IAAI,CAAC;IAElE,IAAM;MAAErB,OAAO;MAAEG;IAAS,CAAC,GAAGgB,KAAK;IACnC,IAAI,CAACxB,KAAK,GAAG;MACXqC,OAAO,EAAE,KAAK;MACd7B,QAAQ;MACRH,OAAO;MACPiC,gBAAgB,EAAE,KAAK;MACvBC,eAAe,EAAE;IACnB,CAAC;EACH;EAEAC,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAAC,IAAI,CAACC,QAAQ,CAAC,CAAC,EAAE;MACpB,IAAI,CAACC,QAAQ,CAAC;QAAEL,OAAO,EAAE;MAAK,CAAC,CAAC;IAClC;EACF;EAEAV,gBAAgBA,CAAA,EAAS;IACvB,IAAM;MAAEgB;IAAW,CAAC,GAAG,IAAI,CAACnB,KAAK;IACjC,IAAM;MAAEnB,OAAO;MAAEG;IAAS,CAAC,GAAG,IAAI,CAACR,KAAK;IACxC,IAAM4C,gBAAgB,GAAG;MACvBpC,QAAQ;MACRqC,KAAK,EAAE;IACT,CAAC;IACDhD,GAAG,CAACiD,KAAK,CAAC,kBAAkB,EAAEzC,OAAO,EAAEG,QAAQ,EAAEoC,gBAAgB,CAAC;IAClED,UAAU,CAACI,IAAI,CACbpD,aAAa,CAACqD,eAAe,EAC7B3C,OAAO,EACPG,QAAQ,EACRoC,gBACF,CAAC;EACH;EAEAhB,qBAAqBA,CAACqB,IAAa,EAAQ;IACzC,IAAI,CAACP,QAAQ,CAAC;MAAEJ,gBAAgB,EAAE;IAAK,CAAC,CAAC;EAC3C;EAEAT,2BAA2BA,CAAA,EAAS;IAClChC,GAAG,CAACiD,KAAK,CAAC,6BAA6B,CAAC;IACxC,IAAI,CAACJ,QAAQ,CAAC;MACZJ,gBAAgB,EAAE;IACpB,CAAC,CAAC;EACJ;EAEAR,2BAA2BA,CAACmB,IAAY,EAAQ;IAC9CpD,GAAG,CAACiD,KAAK,CAAC,6BAA6B,EAAEG,IAAI,CAAC;IAC9C,IAAI,CAACP,QAAQ,CAAC;MAAEJ,gBAAgB,EAAE;IAAM,CAAC,CAAC;IAC1C,IAAM;MAAEpC;IAAY,CAAC,GAAG,IAAI,CAACsB,KAAK;IAClCtB,WAAW,CAACgD,eAAe,CAACD,IAAI,CAAC,CAACE,KAAK,CAACnC,iBAAiB,CAACE,WAAW,CAAC;EACxE;EAEAa,YAAYA,CAACqB,KAAwB,EAAQ;IAC3C,IAAM;MAAET;IAAW,CAAC,GAAG,IAAI,CAACnB,KAAK;IACjC4B,KAAK,CAACC,OAAO,CAACC,IAAI,IAAI;MACpBX,UAAU,CAACI,IAAI,CAACpD,aAAa,CAAC4D,UAAU,EAAE;QACxCC,EAAE,EAAEF,IAAI,CAACG,QAAQ;QACjBC,QAAQ,EAAEJ,IAAI,CAACG;MACjB,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;EAEArB,qBAAqBA,CAACuB,aAAgC,EAAQ;IAC5D,IAAIV,IAAI,GAAG,GAAG;IACd,IAAIU,aAAa,CAACC,MAAM,KAAK,CAAC,EAAE;MAC9B,IAAID,aAAa,CAAC,CAAC,CAAC,CAAClD,IAAI,KAAK,WAAW,EAAE;QACzCwC,IAAI,GAAG3D,SAAS,CAACuE,QAAQ,CAACF,aAAa,CAAC,CAAC,CAAC,CAACF,QAAQ,CAAC;MACtD,CAAC,MAAM;QACLR,IAAI,GAAG3D,SAAS,CAACwE,OAAO,CAACH,aAAa,CAAC,CAAC,CAAC,CAACF,QAAQ,CAAC;MACrD;IACF;IACA,IAAI,CAACf,QAAQ,CAAC;MAAEH,eAAe,EAAEU;IAAK,CAAC,CAAC;EAC1C;EAEAxB,gBAAgBA,CAAC6B,IAAqB,EAAEjC,KAA2B,EAAQ;IACzExB,GAAG,CAACiD,KAAK,CAAC,YAAY,EAAEQ,IAAI,CAAC;IAC7B,IAAIA,IAAI,CAAC7C,IAAI,KAAK,WAAW,EAAE;MAC7B;IACF;IAEA,IAAMsD,WAAW,GAAG/C,iBAAiB,CAACI,YAAY,CAACC,KAAK,CAAC;IACzD,IAAM2C,YAAY,GAAG;MAAER,EAAE,EAAEF,IAAI,CAACG,QAAQ;MAAEC,QAAQ,EAAEJ,IAAI,CAACG;IAAS,CAAC;IACnE,IAAM;MAAEd;IAAW,CAAC,GAAG,IAAI,CAACnB,KAAK;IACjC,IAAM;MAAEnB,OAAO;MAAEG;IAAS,CAAC,GAAG,IAAI,CAACR,KAAK;IACxC,IAAM4C,gBAAgB,GAAG;MACvBC,KAAK,EAAE,IAAI;MACXrC;IACF,CAAC;IACDmC,UAAU,CAACI,IAAI,CACbpD,aAAa,CAACsE,eAAe,EAC7B5D,OAAO,EACPG,QAAQ,EACRoC,gBAAgB,EAChBoB,YAAY,EACZD,WACF,CAAC;EACH;EAEA/B,YAAYA,CAACkC,OAAe,EAAEC,OAAe,EAAQ;IACnD,IAAM;MAAExB;IAAW,CAAC,GAAG,IAAI,CAACnB,KAAK;IACjC3B,GAAG,CAACiD,KAAK,CAAC,cAAc,EAAEoB,OAAO,EAAEC,OAAO,CAAC;IAC3CxB,UAAU,CAACI,IAAI,CAACpD,aAAa,CAACyE,WAAW,EAAEF,OAAO,EAAEC,OAAO,CAAC;EAC9D;EAEAlC,mBAAmBA,CACjB5B,OAAmB,EAAAgE,IAAA,EAEb;IAAA,IADN;MAAE7D;IAA+B,CAAC,GAAA6D,IAAA;IAElC,IAAI,CAAC3B,QAAQ,CAAC;MACZrC,OAAO;MACPG;IACF,CAAC,CAAC;EACJ;EAEA0B,mBAAmBA,CAAA,EAAS;IAC1B,IAAI,CAACQ,QAAQ,CAAC;MACZrC,OAAO,EAAEiE,SAAS;MAClB9D,QAAQ,EAAE8D;IACZ,CAAC,CAAC;EACJ;EAEAnC,UAAUA,CAAA,EAAS;IACjB,IAAI,CAACO,QAAQ,CAAC;MAAEL,OAAO,EAAE;IAAK,CAAC,CAAC;EAClC;EAEAI,QAAQA,CAAA,EAAY;IAClB,IAAM;MAAE8B;IAAY,CAAC,GAAG,IAAI,CAAC/C,KAAK;IAClC,IAAM;MAAEiB;IAAS,CAAC,GAAG8B,WAAW;IAChC,OAAO9B,QAAQ;EACjB;EAEA+B,MAAMA,CAAA,EAAc;IAClB,IAAM;MAAEtE,WAAW;MAAEqE,WAAW;MAAE5B;IAAW,CAAC,GAAG,IAAI,CAACnB,KAAK;IAC3D,IAAM;MAAEa,OAAO;MAAEC,gBAAgB;MAAEC;IAAgB,CAAC,GAAG,IAAI,CAACvC,KAAK;IACjE,oBACER,KAAA,CAAAiF,aAAA,CAAC/E,KAAK;MACJgF,SAAS,EAAC,qBAAqB;MAC/BC,cAAc,EAAE,IAAK;MACrBJ,WAAW,EAAEA,WAAY;MACzB5B,UAAU,EAAEA,UAAW;MACvBiC,aAAa,EAAE,IAAI,CAAC3C,mBAAoB;MACxC4C,cAAc,EAAE,IAAI,CAAC3C,mBAAoB;MACzC4C,MAAM,EAAE,IAAI,CAAC3C;IAAW,gBAExB3C,KAAA,CAAAiF,aAAA,CAACpF,mBAAmB;MAClB0F,UAAU,EAAE,IAAI,CAACpD,gBAAiB;MAClCqD,YAAY,EAAE,IAAI,CAACpD;IAAsB,CAC1C,CAAC,EACDS,OAAO,iBACN7C,KAAA,CAAAiF,aAAA,CAACrF,YAAY;MACX6F,aAAa;MACbC,OAAO,EAAEhF,WAAY;MACrBiF,QAAQ,EAAE,IAAI,CAACpD,YAAa;MAC5BqD,QAAQ,EAAE,IAAI,CAACpD,YAAa;MAC5BqD,QAAQ,EAAE,IAAI,CAAC5D,gBAAiB;MAChC6D,iBAAiB,EAAE,IAAI,CAAClD;IAAsB,CAC/C,CACF,eACD5C,KAAA,CAAAiF,aAAA,CAAClF,YAAY;MACXgG,MAAM,EAAEjD,gBAAiB;MACzB7B,IAAI,EAAC,WAAW;MAChB+E,KAAK,EAAC,mBAAmB;MACzBN,OAAO,EAAEhF,WAAY;MACrBuF,QAAQ,EAAE,IAAI,CAAC3D,2BAA4B;MAC3C4D,QAAQ,EAAE,IAAI,CAAC7D,2BAA4B;MAC3C8D,YAAY,EAAEpD;IAAgB,CAC/B,CACI,CAAC;EAEZ;AACF;AAACqD,eAAA,CArNY5E,iBAAiB,eAIT,mBAAmB;AAAA4E,eAAA,CAJ3B5E,iBAAiB,WAMb,eAAe;AAiNhC,IAAM6E,0BAA0B,GAAGnF,SAAS,CAACM,iBAAiB,CAAC;AAE/D,eAAe6E,0BAA0B"}
|
|
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","ConnectedFileExplorerPanel"],"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\nconst ConnectedFileExplorerPanel = connector(FileExplorerPanel);\n\nexport default ConnectedFileExplorerPanel;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterSetManager.js","names":["React","Component","memoizeOne","shortid","FontAwesomeIcon","vsEdit","vsGear","vsSave","vsCircleSlash","vsTrash","vsDeviceCamera","dhRefresh","dhNewCircleLargeFilled","vsCircleLargeFilled","vsArrowSmallUp","Log","Button","CardFlip","RadioGroup","RadioItem","log","module","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","animateScreenFlash","_document$querySelect","overlay","document","createElement","classList","add","addEventListener","remove","querySelector","appendChild","constructor","props","_defineProperty","createRef","filterSets","renameSet","undefined","some","_ref","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","_ref2","isEmptyList","event","value","target","applyFilterSet","onUpdateSets","getFilterState","panels","title","getNameError","_nameInputValue$trim","trimmedName","trim","_ref3","_nameInputValue$trim2","error","namedFilterSet","_objectSpread","selectedIndex","findIndex","_ref4","updatedModifiedFilterSets","push","prevFilterSets","_ref5","filter","_ref6","newSelectedIndex","Math","max","min","newSelectedId","_ref7","selectedSetIndex","_ref8","_ref9","selectedSet","find","_ref10","stopPropagation","dropdownRef","current","focusInput","key","preventDefault","arguments","onApply","filterSet","_ref11","_this$dropdownRef$cur","focus","_this$renameInputRef$","renameInputRef","render","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","className","icon","mask","transform","updateSetIcon","isFlipped","kind","onClick","type","placeholder","ref","onKeyPress","spellCheck","tooltip","concat","editDropdownRef","disabled","map","_ref12","_ref13"],"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 \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 <div className=\"filter-set-manager-column\">\n <div className=\"filter-set-manager-column-title\">Filter sets</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 </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 \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 <div className=\"filter-set-manager-column\">\n <div className=\"filter-set-manager-column-title\">Filter sets</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 </div>\n </CardFlip>\n </div>\n );\n }\n}\n\nexport default FilterSetManager;\n"],"mappings":"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"}
|