@deephaven/dashboard-core-plugins 0.50.1-beta.4 → 0.51.0
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 +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/WidgetLoaderPlugin.d.ts.map +1 -1
- package/dist/WidgetLoaderPlugin.js +1 -2
- package/dist/WidgetLoaderPlugin.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.map +1 -1
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/events/InputFilterEvent.js.map +1 -1
- 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.map +1 -1
- package/dist/events/TabEvent.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/linker/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 +3 -0
- 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.d.ts +2 -2
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js.map +1 -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 +0 -1
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.js +4 -0
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
- package/dist/panels/IrisGridPanelTypes.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/selectors.js.map +1 -1
- package/dist/useHydrateGrid.d.ts.map +1 -1
- package/dist/useHydrateGrid.js +2 -1
- package/dist/useHydrateGrid.js.map +1 -1
- package/dist/useLoadTablePlugin.d.ts +8 -0
- package/dist/useLoadTablePlugin.d.ts.map +1 -0
- package/dist/useLoadTablePlugin.js +30 -0
- package/dist/useLoadTablePlugin.js.map +1 -0
- package/package.json +24 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsolePanel.js","names":["React","PureComponent","shortid","debounce","connect","Console","ConsoleConstants","HeapUsage","ObjectIcon","PanelEvent","Log","getCommandHistoryStorage","getPlugins","getTimeZone","assertNotNull","getIconForPlugin","pluginSupportsType","ConsoleEvent","Panel","getDashboardSessionWrapper","log","module","DEBOUNCE_PANEL_STATE_UPDATE","DEFAULT_PANEL_STATE","Object","freeze","consoleSettings","itemIds","ConsolePanel","constructor","props","state","panelState","debug","setState","handleFocusCommandHistory","bind","handleOpenObject","handleCloseObject","handleResize","handleSettingsChange","handleShow","handlePanelMount","supportsType","iconForType","consoleRef","createRef","initialPanelState","Map","objectMap","error","undefined","componentDidMount","glEventHub","closeDisconnectedPanels","on","MOUNT","subscribeToFieldUpdates","componentDidUpdate","prevProps","prevState","savePanelState","componentWillUnmount","flush","off","objectSubscriptionCleanup","sessionWrapper","session","updates","updated","created","removed","objectsToRemove","newObjectMap","forEach","toRemove","title","delete","objectsToAdd","toAdd","set","setItemId","name","id","newItemIds","getItemId","createIfNecessary","get","generate","handleTabFocus","current","focus","panel","panelId","sourceId","metadata","sourcePanelId","pandelIds","Set","values","has","emit","FOCUS_HISTORY","updateDimensions","object","openWidget","CLOSE","SETTINGS_CHANGED","widget","openOptions","fetch","getObject","OPEN","addCommand","command","execute","force","isClosePanelsOnDisconnectEnabled","panelIdsToClose","type","plugins","some","plugin","find","p","render","commandHistoryStorage","glContainer","timeZone","unzip","config","connection","details","dh","workerName","processInfoId","sessionId","language","LANGUAGE_MAP","mapStateToProps","ownProps","localDashboardId","ConnectedConsolePanel","forwardRef"],"sources":["../../src/panels/ConsolePanel.tsx"],"sourcesContent":["// Wrapper for the Console for use in a golden layout container\n// Will probably need to handle window popping out from golden layout here.\nimport React, { PureComponent, ReactElement, RefObject } from 'react';\nimport shortid from 'shortid';\nimport debounce from 'lodash.debounce';\nimport { connect } from 'react-redux';\nimport {\n CommandHistoryStorage,\n Console,\n ConsoleConstants,\n HeapUsage,\n ObjectIcon,\n} from '@deephaven/console';\nimport { DashboardPanelProps, PanelEvent } from '@deephaven/dashboard';\nimport type { IdeSession, VariableDefinition } from '@deephaven/jsapi-types';\nimport { SessionWrapper } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n DeephavenPluginModuleMap,\n getCommandHistoryStorage,\n getPlugins,\n getTimeZone,\n RootState,\n} from '@deephaven/redux';\nimport { assertNotNull } from '@deephaven/utils';\nimport { getIconForPlugin, pluginSupportsType } from '@deephaven/plugin';\nimport type { JSZipObject } from 'jszip';\nimport { ConsoleEvent } from '../events';\nimport Panel from './Panel';\nimport { getDashboardSessionWrapper } from '../redux';\nimport './ConsolePanel.scss';\n\nconst log = Log.module('ConsolePanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 500;\n\nconst DEFAULT_PANEL_STATE = Object.freeze({\n consoleSettings: {},\n itemIds: [],\n});\n\ninterface ConsoleSettings {\n isClosePanelsOnDisconnectEnabled?: boolean;\n}\n\ninterface PanelState {\n consoleSettings: ConsoleSettings;\n itemIds: [string, string][];\n}\n\ntype ItemIds = Map<string, string>;\n\ninterface ConsolePanelProps extends DashboardPanelProps {\n commandHistoryStorage: CommandHistoryStorage;\n\n panelState?: PanelState;\n\n sessionWrapper: SessionWrapper;\n\n timeZone: string;\n unzip?: (file: File) => Promise<JSZipObject[]>;\n plugins: DeephavenPluginModuleMap;\n}\n\ninterface ConsolePanelState {\n consoleSettings: ConsoleSettings;\n itemIds: ItemIds;\n\n objectMap: Map<string, VariableDefinition>;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n error: unknown;\n}\n\nexport class ConsolePanel extends PureComponent<\n ConsolePanelProps,\n ConsolePanelState\n> {\n static COMPONENT = 'ConsolePanel';\n\n static TITLE = 'Console';\n\n constructor(props: ConsolePanelProps) {\n super(props);\n\n this.handleFocusCommandHistory = this.handleFocusCommandHistory.bind(this);\n this.handleOpenObject = this.handleOpenObject.bind(this);\n this.handleCloseObject = this.handleCloseObject.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSettingsChange = this.handleSettingsChange.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handlePanelMount = this.handlePanelMount.bind(this);\n this.supportsType = this.supportsType.bind(this);\n this.iconForType = this.iconForType.bind(this);\n\n this.consoleRef = React.createRef();\n\n const { panelState: initialPanelState } = props;\n const panelState = {\n ...DEFAULT_PANEL_STATE,\n ...(initialPanelState || {}),\n };\n const { consoleSettings, itemIds } = panelState;\n\n this.state = {\n consoleSettings,\n itemIds: new Map(itemIds),\n\n objectMap: new Map(),\n error: undefined,\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n };\n }\n\n componentDidMount(): void {\n const { glEventHub } = this.props;\n // Need to close the disconnected panels when we're first loaded,\n // as they may have been saved with the dashboard\n this.closeDisconnectedPanels();\n glEventHub.on(PanelEvent.MOUNT, this.handlePanelMount);\n this.subscribeToFieldUpdates();\n }\n\n componentDidUpdate(\n prevProps: ConsolePanelProps,\n prevState: ConsolePanelState\n ): void {\n const { consoleSettings, itemIds } = this.state;\n if (\n prevState.consoleSettings !== consoleSettings ||\n prevState.itemIds !== itemIds\n ) {\n this.savePanelState();\n }\n }\n\n componentWillUnmount(): void {\n const { glEventHub } = this.props;\n this.savePanelState.flush();\n glEventHub.off(PanelEvent.MOUNT, this.handlePanelMount);\n this.objectSubscriptionCleanup?.();\n }\n\n consoleRef: RefObject<Console>;\n\n objectSubscriptionCleanup?: () => void;\n\n subscribeToFieldUpdates(): void {\n const { sessionWrapper } = this.props;\n const { session } = sessionWrapper;\n\n this.objectSubscriptionCleanup = session.subscribeToFieldUpdates(\n updates => {\n log.debug('Got updates', updates);\n this.setState(({ objectMap }) => {\n const { updated, created, removed } = updates;\n\n // Remove from the array if it's been removed OR modified. We'll add it back after if it was modified.\n const objectsToRemove = [...updated, ...removed];\n const newObjectMap = new Map(objectMap);\n objectsToRemove.forEach(toRemove => {\n const { title } = toRemove;\n if (title !== undefined) {\n newObjectMap.delete(title);\n }\n });\n\n // Now add all the modified and updated widgets back in\n const objectsToAdd = [...updated, ...created];\n objectsToAdd.forEach(toAdd => {\n if (toAdd.title !== undefined) {\n newObjectMap.set(toAdd.title, toAdd);\n }\n });\n\n return { objectMap: newObjectMap };\n });\n }\n );\n }\n\n setItemId(name: string, id: string): void {\n this.setState(({ itemIds }) => {\n const newItemIds = new Map(itemIds);\n newItemIds.set(name, id);\n return { itemIds: newItemIds };\n });\n }\n\n getItemId(name: string, createIfNecessary = true): string | undefined {\n const { itemIds } = this.state;\n let id = itemIds.get(name);\n if (id == null && createIfNecessary) {\n id = shortid.generate();\n this.setItemId(name, id);\n }\n return id;\n }\n\n handleTabFocus(): void {\n this.consoleRef.current?.focus();\n }\n\n handlePanelMount(panel: {\n props: { id: string; metadata: { sourcePanelId: string } };\n }): void {\n const { itemIds } = this.state;\n const panelId = panel?.props?.id;\n const sourceId = panel?.props?.metadata?.sourcePanelId;\n if (panelId && sourceId) {\n // Check if the panel was created from a panel in this console\n const pandelIds = new Set(itemIds.values());\n if (pandelIds.has(sourceId)) {\n // The Chart Panel does not have name so map panelId to panelId\n this.setItemId(panelId, panelId);\n }\n }\n }\n\n handleFocusCommandHistory(): void {\n const { glEventHub } = this.props;\n glEventHub.emit(ConsoleEvent.FOCUS_HISTORY);\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleShow(): void {\n this.updateDimensions();\n }\n\n handleOpenObject(object: VariableDefinition): void {\n const { sessionWrapper } = this.props;\n const { session } = sessionWrapper;\n this.openWidget(object, session);\n }\n\n handleCloseObject(object: VariableDefinition): void {\n const { title } = object;\n if (title !== undefined) {\n const id = this.getItemId(title, false);\n const { glEventHub } = this.props;\n glEventHub.emit(PanelEvent.CLOSE, id);\n }\n }\n\n handleSettingsChange(consoleSettings: Record<string, unknown>): void {\n const { glEventHub } = this.props;\n log.debug('handleSettingsChange', consoleSettings);\n this.setState({\n consoleSettings,\n });\n glEventHub.emit(ConsoleEvent.SETTINGS_CHANGED, consoleSettings);\n }\n\n /**\n * @param widget The widget to open\n * @param session The session object\n */\n openWidget(widget: VariableDefinition, session: IdeSession): void {\n const { glEventHub } = this.props;\n const { title } = widget;\n assertNotNull(title);\n const panelId = this.getItemId(title);\n const openOptions = {\n fetch: () => session.getObject(widget),\n panelId,\n widget,\n };\n\n log.debug('openWidget', openOptions);\n\n glEventHub.emit(PanelEvent.OPEN, openOptions);\n }\n\n addCommand(command: string, focus = true, execute = false): void {\n this.consoleRef.current?.addCommand(command, focus, execute);\n }\n\n /**\n * Close the disconnected panels from this session\n * @param force True to force the panels closed regardless of the current setting\n */\n closeDisconnectedPanels(force = false): void {\n const { consoleSettings, itemIds } = this.state;\n const { isClosePanelsOnDisconnectEnabled = true } = consoleSettings;\n if (!isClosePanelsOnDisconnectEnabled && !force) {\n return;\n }\n\n const panelIdsToClose = [...itemIds.values()];\n const { glEventHub } = this.props;\n panelIdsToClose.forEach(panelId => {\n glEventHub.emit(PanelEvent.CLOSE, panelId);\n });\n\n this.setState({ itemIds: new Map() });\n }\n\n savePanelState = debounce((): void => {\n const { consoleSettings, itemIds } = this.state;\n const panelState = {\n consoleSettings,\n itemIds: [...itemIds],\n };\n log.debug('Saving panel state', panelState);\n // eslint-disable-next-line react/no-unused-state\n this.setState({ panelState });\n }, DEBOUNCE_PANEL_STATE_UPDATE);\n\n updateDimensions(): void {\n this.consoleRef.current?.updateDimensions();\n }\n\n supportsType(type: string): boolean {\n const { plugins } = this.props;\n return [...plugins.values()].some(plugin =>\n pluginSupportsType(plugin, type)\n );\n }\n\n iconForType(type: string): JSX.Element {\n const { plugins } = this.props;\n const plugin = [...plugins.values()].find(p => pluginSupportsType(p, type));\n if (plugin != null) {\n return getIconForPlugin(plugin);\n }\n // TODO: #1573 Remove this default and always return getIconForPlugin\n return <ObjectIcon type={type} />;\n }\n\n render(): ReactElement {\n const {\n commandHistoryStorage,\n glContainer,\n glEventHub,\n sessionWrapper,\n timeZone,\n unzip,\n } = this.props;\n const { consoleSettings, error, objectMap } = this.state;\n const { config, session, connection, details = {}, dh } = sessionWrapper;\n const { workerName, processInfoId } = details;\n const { id: sessionId, type: language } = config;\n\n return (\n <Panel\n className=\"iris-panel-console\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabFocus={this.handleTabFocus}\n errorMessage={error != null ? `${error}` : undefined}\n >\n {session != null && (\n <Console\n dh={dh}\n ref={this.consoleRef}\n settings={consoleSettings}\n session={session}\n focusCommandHistory={this.handleFocusCommandHistory}\n openObject={this.handleOpenObject}\n closeObject={this.handleCloseObject}\n commandHistoryStorage={commandHistoryStorage}\n onSettingsChange={this.handleSettingsChange}\n language={language}\n statusBarChildren={\n <>\n <div> </div>\n <div>{ConsoleConstants.LANGUAGE_MAP.get(language)}</div>\n {workerName != null && (\n <>\n <div> • </div>\n {workerName}\n </>\n )}\n {processInfoId != null && (\n <>\n <div> • </div>\n {processInfoId}\n <div> •</div>\n </>\n )}\n <div> </div>\n <div>\n <HeapUsage\n connection={connection}\n defaultUpdateInterval={10 * 1000}\n hoverUpdateInterval={3 * 1000}\n monitorDuration={10 * 60 * 1000}\n />\n </div>\n <div> </div>\n </>\n }\n scope={sessionId}\n timeZone={timeZone}\n objectMap={objectMap}\n unzip={unzip}\n supportsType={this.supportsType}\n iconForType={this.iconForType}\n />\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n): Pick<\n ConsolePanelProps,\n 'commandHistoryStorage' | 'sessionWrapper' | 'timeZone' | 'plugins'\n> => ({\n commandHistoryStorage: getCommandHistoryStorage(\n state\n ) as CommandHistoryStorage,\n sessionWrapper: getDashboardSessionWrapper(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n plugins: getPlugins(state),\n});\n\nconst ConnectedConsolePanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(ConsolePanel);\n\nexport default ConnectedConsolePanel;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConsolePanel.js","names":["React","PureComponent","shortid","debounce","connect","Console","ConsoleConstants","HeapUsage","ObjectIcon","PanelEvent","Log","getCommandHistoryStorage","getPlugins","getTimeZone","assertNotNull","getIconForPlugin","pluginSupportsType","ConsoleEvent","Panel","getDashboardSessionWrapper","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","DEBOUNCE_PANEL_STATE_UPDATE","DEFAULT_PANEL_STATE","Object","freeze","consoleSettings","itemIds","ConsolePanel","constructor","props","_defineProperty","state","panelState","debug","setState","handleFocusCommandHistory","bind","handleOpenObject","handleCloseObject","handleResize","handleSettingsChange","handleShow","handlePanelMount","supportsType","iconForType","consoleRef","createRef","initialPanelState","_objectSpread","Map","objectMap","error","undefined","componentDidMount","glEventHub","closeDisconnectedPanels","on","MOUNT","subscribeToFieldUpdates","componentDidUpdate","prevProps","prevState","savePanelState","componentWillUnmount","_this$objectSubscript","flush","off","objectSubscriptionCleanup","call","sessionWrapper","session","updates","_ref","updated","created","removed","objectsToRemove","newObjectMap","forEach","toRemove","title","delete","objectsToAdd","toAdd","set","setItemId","name","id","_ref2","newItemIds","getItemId","createIfNecessary","arguments","length","get","generate","handleTabFocus","_this$consoleRef$curr","current","focus","panel","_panel$props","_panel$props2","_panel$props2$metadat","panelId","sourceId","metadata","sourcePanelId","pandelIds","Set","values","has","emit","FOCUS_HISTORY","updateDimensions","object","openWidget","CLOSE","SETTINGS_CHANGED","widget","openOptions","fetch","getObject","OPEN","addCommand","command","_this$consoleRef$curr2","execute","force","isClosePanelsOnDisconnectEnabled","panelIdsToClose","_this$consoleRef$curr3","type","plugins","some","plugin","find","p","render","commandHistoryStorage","glContainer","timeZone","unzip","config","connection","details","dh","workerName","processInfoId","sessionId","language","className","componentPanel","onResize","onShow","onTabFocus","errorMessage","concat","children","ref","settings","focusCommandHistory","openObject","closeObject","onSettingsChange","statusBarChildren","LANGUAGE_MAP","defaultUpdateInterval","hoverUpdateInterval","monitorDuration","scope","mapStateToProps","ownProps","localDashboardId","ConnectedConsolePanel","forwardRef"],"sources":["../../src/panels/ConsolePanel.tsx"],"sourcesContent":["// Wrapper for the Console for use in a golden layout container\n// Will probably need to handle window popping out from golden layout here.\nimport React, { PureComponent, ReactElement, RefObject } from 'react';\nimport shortid from 'shortid';\nimport debounce from 'lodash.debounce';\nimport { connect } from 'react-redux';\nimport {\n CommandHistoryStorage,\n Console,\n ConsoleConstants,\n HeapUsage,\n ObjectIcon,\n} from '@deephaven/console';\nimport { DashboardPanelProps, PanelEvent } from '@deephaven/dashboard';\nimport type { IdeSession, VariableDefinition } from '@deephaven/jsapi-types';\nimport { SessionWrapper } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n getCommandHistoryStorage,\n getPlugins,\n getTimeZone,\n RootState,\n} from '@deephaven/redux';\nimport { assertNotNull } from '@deephaven/utils';\nimport {\n getIconForPlugin,\n pluginSupportsType,\n type PluginModuleMap,\n} from '@deephaven/plugin';\nimport type { JSZipObject } from 'jszip';\nimport { ConsoleEvent } from '../events';\nimport Panel from './Panel';\nimport { getDashboardSessionWrapper } from '../redux';\nimport './ConsolePanel.scss';\n\nconst log = Log.module('ConsolePanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 500;\n\nconst DEFAULT_PANEL_STATE = Object.freeze({\n consoleSettings: {},\n itemIds: [],\n});\n\ninterface ConsoleSettings {\n isClosePanelsOnDisconnectEnabled?: boolean;\n}\n\ninterface PanelState {\n consoleSettings: ConsoleSettings;\n itemIds: [string, string][];\n}\n\ntype ItemIds = Map<string, string>;\n\ninterface ConsolePanelProps extends DashboardPanelProps {\n commandHistoryStorage: CommandHistoryStorage;\n\n panelState?: PanelState;\n\n sessionWrapper: SessionWrapper;\n\n timeZone: string;\n unzip?: (file: File) => Promise<JSZipObject[]>;\n plugins: PluginModuleMap;\n}\n\ninterface ConsolePanelState {\n consoleSettings: ConsoleSettings;\n itemIds: ItemIds;\n\n objectMap: Map<string, VariableDefinition>;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n error: unknown;\n}\n\nexport class ConsolePanel extends PureComponent<\n ConsolePanelProps,\n ConsolePanelState\n> {\n static COMPONENT = 'ConsolePanel';\n\n static TITLE = 'Console';\n\n constructor(props: ConsolePanelProps) {\n super(props);\n\n this.handleFocusCommandHistory = this.handleFocusCommandHistory.bind(this);\n this.handleOpenObject = this.handleOpenObject.bind(this);\n this.handleCloseObject = this.handleCloseObject.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSettingsChange = this.handleSettingsChange.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handlePanelMount = this.handlePanelMount.bind(this);\n this.supportsType = this.supportsType.bind(this);\n this.iconForType = this.iconForType.bind(this);\n\n this.consoleRef = React.createRef();\n\n const { panelState: initialPanelState } = props;\n const panelState = {\n ...DEFAULT_PANEL_STATE,\n ...(initialPanelState || {}),\n };\n const { consoleSettings, itemIds } = panelState;\n\n this.state = {\n consoleSettings,\n itemIds: new Map(itemIds),\n\n objectMap: new Map(),\n error: undefined,\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n };\n }\n\n componentDidMount(): void {\n const { glEventHub } = this.props;\n // Need to close the disconnected panels when we're first loaded,\n // as they may have been saved with the dashboard\n this.closeDisconnectedPanels();\n glEventHub.on(PanelEvent.MOUNT, this.handlePanelMount);\n this.subscribeToFieldUpdates();\n }\n\n componentDidUpdate(\n prevProps: ConsolePanelProps,\n prevState: ConsolePanelState\n ): void {\n const { consoleSettings, itemIds } = this.state;\n if (\n prevState.consoleSettings !== consoleSettings ||\n prevState.itemIds !== itemIds\n ) {\n this.savePanelState();\n }\n }\n\n componentWillUnmount(): void {\n const { glEventHub } = this.props;\n this.savePanelState.flush();\n glEventHub.off(PanelEvent.MOUNT, this.handlePanelMount);\n this.objectSubscriptionCleanup?.();\n }\n\n consoleRef: RefObject<Console>;\n\n objectSubscriptionCleanup?: () => void;\n\n subscribeToFieldUpdates(): void {\n const { sessionWrapper } = this.props;\n const { session } = sessionWrapper;\n\n this.objectSubscriptionCleanup = session.subscribeToFieldUpdates(\n updates => {\n log.debug('Got updates', updates);\n this.setState(({ objectMap }) => {\n const { updated, created, removed } = updates;\n\n // Remove from the array if it's been removed OR modified. We'll add it back after if it was modified.\n const objectsToRemove = [...updated, ...removed];\n const newObjectMap = new Map(objectMap);\n objectsToRemove.forEach(toRemove => {\n const { title } = toRemove;\n if (title !== undefined) {\n newObjectMap.delete(title);\n }\n });\n\n // Now add all the modified and updated widgets back in\n const objectsToAdd = [...updated, ...created];\n objectsToAdd.forEach(toAdd => {\n if (toAdd.title !== undefined) {\n newObjectMap.set(toAdd.title, toAdd);\n }\n });\n\n return { objectMap: newObjectMap };\n });\n }\n );\n }\n\n setItemId(name: string, id: string): void {\n this.setState(({ itemIds }) => {\n const newItemIds = new Map(itemIds);\n newItemIds.set(name, id);\n return { itemIds: newItemIds };\n });\n }\n\n getItemId(name: string, createIfNecessary = true): string | undefined {\n const { itemIds } = this.state;\n let id = itemIds.get(name);\n if (id == null && createIfNecessary) {\n id = shortid.generate();\n this.setItemId(name, id);\n }\n return id;\n }\n\n handleTabFocus(): void {\n this.consoleRef.current?.focus();\n }\n\n handlePanelMount(panel: {\n props: { id: string; metadata: { sourcePanelId: string } };\n }): void {\n const { itemIds } = this.state;\n const panelId = panel?.props?.id;\n const sourceId = panel?.props?.metadata?.sourcePanelId;\n if (panelId && sourceId) {\n // Check if the panel was created from a panel in this console\n const pandelIds = new Set(itemIds.values());\n if (pandelIds.has(sourceId)) {\n // The Chart Panel does not have name so map panelId to panelId\n this.setItemId(panelId, panelId);\n }\n }\n }\n\n handleFocusCommandHistory(): void {\n const { glEventHub } = this.props;\n glEventHub.emit(ConsoleEvent.FOCUS_HISTORY);\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleShow(): void {\n this.updateDimensions();\n }\n\n handleOpenObject(object: VariableDefinition): void {\n const { sessionWrapper } = this.props;\n const { session } = sessionWrapper;\n this.openWidget(object, session);\n }\n\n handleCloseObject(object: VariableDefinition): void {\n const { title } = object;\n if (title !== undefined) {\n const id = this.getItemId(title, false);\n const { glEventHub } = this.props;\n glEventHub.emit(PanelEvent.CLOSE, id);\n }\n }\n\n handleSettingsChange(consoleSettings: Record<string, unknown>): void {\n const { glEventHub } = this.props;\n log.debug('handleSettingsChange', consoleSettings);\n this.setState({\n consoleSettings,\n });\n glEventHub.emit(ConsoleEvent.SETTINGS_CHANGED, consoleSettings);\n }\n\n /**\n * @param widget The widget to open\n * @param session The session object\n */\n openWidget(widget: VariableDefinition, session: IdeSession): void {\n const { glEventHub } = this.props;\n const { title } = widget;\n assertNotNull(title);\n const panelId = this.getItemId(title);\n const openOptions = {\n fetch: () => session.getObject(widget),\n panelId,\n widget,\n };\n\n log.debug('openWidget', openOptions);\n\n glEventHub.emit(PanelEvent.OPEN, openOptions);\n }\n\n addCommand(command: string, focus = true, execute = false): void {\n this.consoleRef.current?.addCommand(command, focus, execute);\n }\n\n /**\n * Close the disconnected panels from this session\n * @param force True to force the panels closed regardless of the current setting\n */\n closeDisconnectedPanels(force = false): void {\n const { consoleSettings, itemIds } = this.state;\n const { isClosePanelsOnDisconnectEnabled = true } = consoleSettings;\n if (!isClosePanelsOnDisconnectEnabled && !force) {\n return;\n }\n\n const panelIdsToClose = [...itemIds.values()];\n const { glEventHub } = this.props;\n panelIdsToClose.forEach(panelId => {\n glEventHub.emit(PanelEvent.CLOSE, panelId);\n });\n\n this.setState({ itemIds: new Map() });\n }\n\n savePanelState = debounce((): void => {\n const { consoleSettings, itemIds } = this.state;\n const panelState = {\n consoleSettings,\n itemIds: [...itemIds],\n };\n log.debug('Saving panel state', panelState);\n // eslint-disable-next-line react/no-unused-state\n this.setState({ panelState });\n }, DEBOUNCE_PANEL_STATE_UPDATE);\n\n updateDimensions(): void {\n this.consoleRef.current?.updateDimensions();\n }\n\n supportsType(type: string): boolean {\n const { plugins } = this.props;\n return [...plugins.values()].some(plugin =>\n pluginSupportsType(plugin, type)\n );\n }\n\n iconForType(type: string): JSX.Element {\n const { plugins } = this.props;\n const plugin = [...plugins.values()].find(p => pluginSupportsType(p, type));\n if (plugin != null) {\n return getIconForPlugin(plugin);\n }\n // TODO: #1573 Remove this default and always return getIconForPlugin\n return <ObjectIcon type={type} />;\n }\n\n render(): ReactElement {\n const {\n commandHistoryStorage,\n glContainer,\n glEventHub,\n sessionWrapper,\n timeZone,\n unzip,\n } = this.props;\n const { consoleSettings, error, objectMap } = this.state;\n const { config, session, connection, details = {}, dh } = sessionWrapper;\n const { workerName, processInfoId } = details;\n const { id: sessionId, type: language } = config;\n\n return (\n <Panel\n className=\"iris-panel-console\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabFocus={this.handleTabFocus}\n errorMessage={error != null ? `${error}` : undefined}\n >\n {session != null && (\n <Console\n dh={dh}\n ref={this.consoleRef}\n settings={consoleSettings}\n session={session}\n focusCommandHistory={this.handleFocusCommandHistory}\n openObject={this.handleOpenObject}\n closeObject={this.handleCloseObject}\n commandHistoryStorage={commandHistoryStorage}\n onSettingsChange={this.handleSettingsChange}\n language={language}\n statusBarChildren={\n <>\n <div> </div>\n <div>{ConsoleConstants.LANGUAGE_MAP.get(language)}</div>\n {workerName != null && (\n <>\n <div> • </div>\n {workerName}\n </>\n )}\n {processInfoId != null && (\n <>\n <div> • </div>\n {processInfoId}\n <div> •</div>\n </>\n )}\n <div> </div>\n <div>\n <HeapUsage\n connection={connection}\n defaultUpdateInterval={10 * 1000}\n hoverUpdateInterval={3 * 1000}\n monitorDuration={10 * 60 * 1000}\n />\n </div>\n <div> </div>\n </>\n }\n scope={sessionId}\n timeZone={timeZone}\n objectMap={objectMap}\n unzip={unzip}\n supportsType={this.supportsType}\n iconForType={this.iconForType}\n />\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n): Pick<\n ConsolePanelProps,\n 'commandHistoryStorage' | 'sessionWrapper' | 'timeZone' | 'plugins'\n> => ({\n commandHistoryStorage: getCommandHistoryStorage(\n state\n ) as CommandHistoryStorage,\n sessionWrapper: getDashboardSessionWrapper(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n plugins: getPlugins(state),\n});\n\nconst ConnectedConsolePanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(ConsolePanel);\n\nexport default ConnectedConsolePanel;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownFilterPanel.js","names":["React","Component","connect","debounce","deepEqual","memoize","LayoutUtils","DateTimeColumnFormatter","Formatter","FormatterUtils","TableUtils","Log","getActiveTool","getApi","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","dh","settings","connector","forwardRef","DropdownFilterPanel","constructor","rawValues","formatter","type","name","isDateType","map","value","dateTimeFormatter","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","showTimeZone","showTSeparator","defaultDateTimeFormatString","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","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 type {\n dh as DhType,\n Column,\n Row,\n Table,\n TableTemplate,\n} from '@deephaven/jsapi-types';\nimport {\n DateTimeColumnFormatter,\n Formatter,\n FormatterUtils,\n FormattingRule,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getApi,\n getSettings,\n RootState,\n} 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 dh: DhType;\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 dh: getApi(state),\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 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 { dh, panelState, settings } = props;\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n // Filter dropdown needs to show and send full timestamp format with nanoseconds\n this.dateTimeFormatter = new DateTimeColumnFormatter(dh, {\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: `yyyy-MM-dd HH:mm:ss.SSSSSSSSS`,\n });\n const {\n value = '',\n isValueShown = false,\n name,\n type,\n timestamp,\n } = panelState ?? {};\n const column = name != null && type != null ? { name, type } : undefined;\n this.state = {\n column,\n formatter: new Formatter(dh, 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 dateTimeFormatter: DateTimeColumnFormatter;\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 this.dateTimeFormatter.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 const { dh } = this.props;\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 const { dh } = this.props;\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 const { dh } = this.props;\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 { dh } = this.props;\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n if (!deepEqual(this.columnFormats, columnFormats)) {\n this.columnFormats = columnFormats;\n this.setState({ formatter: new Formatter(dh, 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":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAmB,OAAO;AACnD,SAASC,OAAO,QAAwB,aAAa;AACrD,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,OAAO,MAAM,UAAU;AAC9B,SAA8BC,WAAW,QAAQ,sBAAsB;AAQvE,SACEC,uBAAuB,EACvBC,SAAS,EACTC,cAAc,EAEdC,UAAU,QACL,wBAAwB;AAC/B,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SACEC,aAAa,EACbC,MAAM,EACNC,WAAW,QAEN,kBAAkB;AACzB,SAASC,OAAO,EAAEC,YAAY,QAAQ,kBAAkB;AAAC,OAClDC,cAAc;AAAA,SAGZC,gBAAgB;AAAA,SAEvBC,sBAAsB,EACtBC,uCAAuC,EACvCC,oCAAoC,EACpCC,oBAAoB,EACpBC,uBAAuB;AAAA;AAAA,OAGlBC,QAAQ;AAAA,OACRC,WAAW;AAAA;AAKlB,IAAMC,GAAG,GAAGf,GAAG,CAACgB,MAAM,CAAC,qBAAqB,CAAC;AAE7C,IAAMC,wBAAwB,GAAG,GAAG;AA0BpC,IAAMC,eAAe,GAAG,CAACC,KAAgB,EAAEC,QAAkB,KAAiB;EAC5E,IAAM;IAAEC;EAAiB,CAAC,GAAGD,QAAQ;EACrC,IAAME,OAAO,GAAG3B,WAAW,CAAC4B,cAAc,CAAC;IAAEC,KAAK,EAAEJ;EAAS,CAAC,CAAC;EAC/D,IAAMK,aAAa,GAAGb,uBAAuB,CAACO,KAAK,EAAEE,gBAAgB,CAAC;EACtE,IAAMK,cAAc,GAAGf,oBAAoB,CAACQ,KAAK,EAAEE,gBAAgB,CAAC;EACpE,IAAMM,UAAU,GAAG1B,aAAa,CAACkB,KAAK,CAAC;EACvC,IAAMS,qBAAqB,GAAGlB,oCAAoC,CAChES,KAAK,EACLE,gBAAgB,CACjB;EACD,IAAMQ,cAAc,GAClBF,UAAU,KAAKd,QAAQ,CAACiB,MAAM,KAC7BF,qBAAqB,KAAKG,SAAS,IAAIH,qBAAqB,KAAKN,OAAO,CAAC;EAC5E;EACA,IAAMU,cAAc,GAClBL,UAAU,KAAKd,QAAQ,CAACiB,MAAM,IAC9BF,qBAAqB,KAAKG,SAAS,IACnCH,qBAAqB,KAAKN,OAAO;EAEnC,OAAO;IACLW,OAAO,EAAEzB,sBAAsB,CAACW,KAAK,EAAEE,gBAAgB,CAAC;IACxDa,wBAAwB,EAAEzB,uCAAuC,CAC/DU,KAAK,EACLE,gBAAgB,CACjB;IACDc,EAAE,EAAEjC,MAAM,CAACiB,KAAK,CAAC;IACjBU,cAAc;IACdG,cAAc;IACdI,QAAQ,EAAEjC,WAAW,CAACgB,KAAK,CAAC;IAC5BM,aAAa;IACbC;EACF,CAAC;AACH,CAAC;AAED,IAAMW,SAAS,GAAG9C,OAAO,CAAC2B,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE;EAAEoB,UAAU,EAAE;AAAK,CAAC,CAAC;AA2B5E,OAAO,MAAMC,mBAAmB,SAASjD,SAAS,CAGhD;EAYAkD,WAAW,CAAChB,KAA+B,EAAE;IAC3C,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA,yCAiJG9B,OAAO,CACvB,CACE+C,SAAoB,QAEpBC,SAAoB,KACjB;MAAA,IAFH;QAAEC,IAAI;QAAEC;MAA2B,CAAC;MAGpC,IAAID,IAAI,KAAKZ,SAAS,IAAIhC,UAAU,CAAC8C,UAAU,CAACF,IAAI,CAAC,EAAE;QACrD,OAAOF,SAAS,CAACK,GAAG,CAACC,KAAK,IACxB,IAAI,CAACC,iBAAiB,CAACC,MAAM,CAACF,KAAK,CAAW,CAC/C;MACH;MACA,OAAON,SAAS,CAACK,GAAG,CAACC,KAAK;MACxB;MACAA,KAAK,IAAI,IAAI,IAAIJ,IAAI,IAAI,IAAI,GACzBD,SAAS,CAACQ,kBAAkB,CAACH,KAAK,EAAEJ,IAAI,EAAEC,IAAI,CAAC,GAC/C,IAAI,CACT;IACH,CAAC,CACF;IAAA,6CAgCqBlD,OAAO,CAC3B,CAACgC,cAAsB,EAAEyB,KAA0B,KAAK;MACtD,IAAM7B,OAAO,GAAG3B,WAAW,CAAC4B,cAAc,CAAC4B,KAAK,CAAC;MACjDpC,GAAG,CAACqC,KAAK,CAAC,qBAAqB,EAAE1B,cAAc,EAAEJ,OAAO,CAAC;MACzD,OAAOI,cAAc,CAAC2B,MAAM,CAACC,IAAI;QAAA;QAAA,OAAI,cAAAA,IAAI,CAACC,GAAG,8CAAR,UAAUjC,OAAO,MAAKA,OAAO;MAAA,EAAC;IACrE,CAAC,CACF;IAAA,yCAEiB5B,OAAO,CAAE8D,KAAa,IAAK;MAC3CzC,GAAG,CAACqC,KAAK,CAAC,iBAAiB,EAAEI,KAAK,CAAC;MACnC,IAAIC,MAA6B;MACjC,IAAID,KAAK,CAACE,MAAM,GAAG,CAAC,EAAE;QACpB,IAAM,CAACJ,IAAI,CAAC,GAAGE,KAAK;QACpBC,MAAM,GAAGH,IAAI,CAACK,KAAK;QACnB,IAAIH,KAAK,CAACE,MAAM,GAAG,CAAC,EAAE;UACpB3C,GAAG,CAAC6C,KAAK,CAAC,+BAA+B,EAAEJ,KAAK,CAAC;QACnD;MACF;MACA,OAAOC,MAAM;IACf,CAAC,CAAC;IAAA,8CAEqB/D,OAAO,CAC5B,CACE+B,aAA2D,EAC3DgC,MAA6B,KAC1B;MAAA;MACH1C,GAAG,CAACqC,KAAK,CAAC,sBAAsB,EAAE3B,aAAa,EAAEgC,MAAM,CAAC;MACxD,IAAIA,MAAM,IAAI,IAAI,EAAE;QAClB,OAAO,IAAI;MACb;MACA,IAAM;QAAEnC;MAAQ,CAAC,GAAGmC,MAAM;MAC1B,6BAAOhC,aAAa,CAACoC,GAAG,CAACvC,OAAO,CAAC,mEAAI,IAAI;IAC3C,CAAC,CACF;IAAA,+CAEuB5B,OAAO,CAC7B,CAACoE,KAAoB,EAAEL,MAA6B,KAAK;MAAA;MACvD1C,GAAG,CAACqC,KAAK,CAAC,uBAAuB,EAAEU,KAAK,EAAEL,MAAM,CAAC;MACjD,IAAIK,KAAK,IAAI,IAAI,IAAIL,MAAM,IAAI,IAAI,EAAE;QACnC,OAAO,IAAI;MACb;MACA,8BACEK,KAAK,CAAC7B,OAAO,CAAC8B,IAAI,CAChB;QAAA,IAAC;UAAEnB,IAAI;UAAED;QAAK,CAAC;QAAA,OACbC,IAAI,KAAKa,MAAM,CAACO,UAAU,IAAIrB,IAAI,KAAKc,MAAM,CAACQ,UAAU;MAAA,EAC3D,qEAAI,IAAI;IAEb,CAAC,CACF;IAjPC,IAAI,CAACC,YAAY,GAAG1E,QAAQ,CAC1B,IAAI,CAAC0E,YAAY,CAACC,IAAI,CAAC,IAAI,CAAC,EAC5BlD,wBAAwB,CACzB;IACD,IAAI,CAACmD,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACD,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACE,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACF,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACG,eAAe,GAAG,IAAI,CAACA,eAAe,CAACH,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACI,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACJ,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACK,wBAAwB,GAAG,IAAI,CAACA,wBAAwB,CAACL,IAAI,CAAC,IAAI,CAAC;IACxE,IAAI,CAACM,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACN,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACO,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACP,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACQ,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACR,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACS,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACT,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACU,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACV,IAAI,CAAC,IAAI,CAAC;IAEtE,IAAI,CAACW,iBAAiB,gBAAGzF,KAAK,CAAC0F,SAAS,EAAE;IAC1C,IAAI,CAACC,cAAc,gBAAG3F,KAAK,CAAC0F,SAAS,EAAE;IACvC,IAAI,CAACE,OAAO,GAAG,IAAI7E,OAAO,EAAE;IAE5B,IAAM;MAAE+B,EAAE;MAAE+C,UAAU;MAAE9C;IAAS,CAAC,GAAGZ,KAAK;IAC1C,IAAI,CAAC2D,aAAa,GAAGrF,cAAc,CAACsF,gBAAgB,CAAChD,QAAQ,CAAC;IAC9D;IACA,IAAI,CAACY,iBAAiB,GAAG,IAAIpD,uBAAuB,CAACuC,EAAE,EAAE;MACvDkD,YAAY,EAAE,KAAK;MACnBC,cAAc,EAAE,IAAI;MACpBC,2BAA2B;IAC7B,CAAC,CAAC;IACF,IAAM;MACJxC,KAAK,EAALA,MAAK,GAAG,EAAE;MACVyC,YAAY,GAAG,KAAK;MACpB5C,IAAI,EAAJA,KAAI;MACJD,IAAI,EAAJA,KAAI;MACJ8C;IACF,CAAC,GAAGP,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAI,CAAC,CAAC;IACpB,IAAMQ,MAAM,GAAG9C,KAAI,IAAI,IAAI,IAAID,KAAI,IAAI,IAAI,GAAG;MAAEC,IAAI,EAAJA,KAAI;MAAED,IAAI,EAAJA;IAAK,CAAC,GAAGZ,SAAS;IACxE,IAAI,CAACZ,KAAK,GAAG;MACXuE,MAAM;MACNhD,SAAS,EAAE,IAAI7C,SAAS,CAACsC,EAAE,EAAE,IAAI,CAACgD,aAAa,CAAC;MAChDQ,WAAW,EAAE5D,SAAS;MACtB6D,YAAY,EAAE7D,SAAS;MACvB8D,UAAU,EAAE,CAAC;MACb9C,KAAK,EAALA,MAAK;MACL0C,SAAS;MACTK,MAAM,EAAE,EAAE;MACVN,YAAY;MACZO,UAAU,EAAE,KAAK;MACjBC,UAAU,EAAE,KAAK;MAEjB;MACAd,UAAU;MAAE;;MAEZe,cAAc,EAAE,KAAK;MACrBC,SAAS,EAAE,KAAK;MAChBC,QAAQ,EAAE,KAAK;MACfvC,KAAK,EAAE;IACT,CAAC;EACH;EAEAwC,iBAAiB,GAAS;IACxB,IAAI,CAACC,iBAAiB,EAAE;IACxB,IAAM;MAAE3E,cAAc;MAAED;IAAc,CAAC,GAAG,IAAI,CAACD,KAAK;IACpD,IAAM;MAAEkE,MAAM;MAAE3C,KAAK;MAAE0C;IAAU,CAAC,GAAG,IAAI,CAACtE,KAAK;IAC/C,IAAMmF,WAAW,GAAG,IAAI,CAACC,cAAc,CAAC9E,aAAa,EAAEC,cAAc,CAAC;IACtE,IAAI4E,WAAW,KAAK,IAAI,EAAE;MACxB,IAAI,CAACE,sBAAsB,CAACF,WAAW,CAAC;IAC1C;IACA,IAAIZ,MAAM,IAAI,IAAI,EAAE;MAClB,IAAM;QAAE9C,IAAI;QAAED;MAAK,CAAC,GAAG+C,MAAM;MAC7B,IAAI,CAACe,UAAU,CAAC7D,IAAI,EAAED,IAAI,EAAEI,KAAK,EAAE0C,SAAS,CAAC;IAC/C;EACF;EAEAiB,kBAAkB,CAChBC,SAAmC,EACnCC,SAAmC,EAC7B;IACN,IAAM;MAAElF,cAAc;MAAED,aAAa;MAAEW;IAAS,CAAC,GAAG,IAAI,CAACZ,KAAK;IAC9D,IAAM;MAAEmE;IAAY,CAAC,GAAG,IAAI,CAACxE,KAAK;IAClC,IAAMsC,MAAM,GAAG,IAAI,CAACoD,SAAS,CAACnF,cAAc,CAAC;IAC7C,IAAM4E,WAAW,GAAG,IAAI,CAACC,cAAc,CAAC9E,aAAa,EAAEC,cAAc,CAAC;IAEtE,IAAMoF,UAAU,GAAG,IAAI,CAACD,SAAS,CAACF,SAAS,CAACjF,cAAc,CAAC;IAC3D,IAAMqF,eAAe,GAAG,IAAI,CAACR,cAAc,CACzCI,SAAS,CAAClF,aAAa,EACvBkF,SAAS,CAACjF,cAAc,CACzB;IAED,IAAIU,QAAQ,KAAKuE,SAAS,CAACvE,QAAQ,IAAIA,QAAQ,KAAKL,SAAS,EAAE;MAC7D,IAAI,CAACiF,uBAAuB,CAAC5E,QAAQ,CAAC;IACxC;IAEA,IACEuD,WAAW,KAAKiB,SAAS,CAACjB,WAAW,IACrCiB,SAAS,CAACjB,WAAW,IAAI,IAAI,EAC7B;MACA5E,GAAG,CAACqC,KAAK,CAAC,iDAAiD,CAAC;MAC5DwD,SAAS,CAACjB,WAAW,CAACsB,KAAK,EAAE;IAC/B;;IAEA;IACA;IACA,IAAIX,WAAW,KAAKS,eAAe,IAAItD,MAAM,KAAKqD,UAAU,EAAE;MAC5D,IAAI,CAACT,iBAAiB,EAAE;IAC1B;IAEA,IAAIC,WAAW,KAAKS,eAAe,EAAE;MACnC,IAAIA,eAAe,KAAK,IAAI,EAAE;QAC5B,IAAI,CAACG,qBAAqB,CAACH,eAAe,CAAC;MAC7C;MACA,IAAIT,WAAW,KAAK,IAAI,EAAE;QACxB,IAAI,CAACE,sBAAsB,CAACF,WAAW,CAAC;MAC1C;IACF;EACF;EAEAa,oBAAoB,GAAS;IAC3B,IAAM;MAAEzF,cAAc;MAAED;IAAc,CAAC,GAAG,IAAI,CAACD,KAAK;IACpD,IAAM;MAAEmE;IAAY,CAAC,GAAG,IAAI,CAACxE,KAAK;IAClC,IAAMmF,WAAW,GAAG,IAAI,CAACC,cAAc,CAAC9E,aAAa,EAAEC,cAAc,CAAC;IACtE,IAAI,CAACuD,OAAO,CAACmC,MAAM,EAAE;IACrB,IAAId,WAAW,KAAK,IAAI,EAAE;MACxB,IAAI,CAACY,qBAAqB,CAACZ,WAAW,CAAC;IACzC;IACA,IAAI,IAAI,CAACe,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,EAAE;IAChB;IACA,IAAI1B,WAAW,IAAI,IAAI,EAAE;MACvBA,WAAW,CAACsB,KAAK,EAAE;IACrB;EACF;EAkCAK,sBAAsB,GAA4B;IAAA;IAChD,IAAI,IAAI,CAACtC,cAAc,CAACuC,OAAO,IAAI,IAAI,EAAE;MACvC,OAAO,IAAI;IACb;IAEA,IAAMC,OAAO,GAAG,IAAI,CAACxC,cAAc,CAACuC,OAAO,CAACE,aAAa,YACnDnH,cAAc,CAACoH,wBAAwB,EAC5C;IACD,IAAMC,IAAI,4BAAGH,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEI,qBAAqB,EAAE,yEAAI,IAAI;IACrD,IAAID,IAAI,IAAI,IAAI,IAAIA,IAAI,CAACE,KAAK,IAAI,CAAC,IAAIF,IAAI,CAACG,MAAM,IAAI,CAAC,EAAE;MACvD,OAAO,IAAI;IACb;IACA,IAAMC,CAAC,GAAGJ,IAAI,CAACK,IAAI,GAAGL,IAAI,CAACE,KAAK,GAAG,CAAC;IACpC,IAAMI,CAAC,GAAGN,IAAI,CAACO,MAAM;IACrB,OAAO,CAACH,CAAC,EAAEE,CAAC,CAAC;EACf;EAEAE,uBAAuB,GAAuB;IAC5C,IAAM;MAAEtC;IAAW,CAAC,GAAG,IAAI,CAAC1E,KAAK;IACjC,IAAI0E,UAAU,GAAGtD,mBAAmB,CAAC6F,cAAc,EAAE;MACnD,uDAAgD7F,mBAAmB,CAAC6F,cAAc;IACpF;IACA,OAAOrG,SAAS;EAClB;EAEAsG,oBAAoB,GAAuB;IACzC,IAAM;MAAEzE;IAAM,CAAC,GAAG,IAAI,CAACzC,KAAK;IAC5B,OAAOyC,KAAK,IAAI,IAAI,aAAMA,KAAK,IAAK7B,SAAS;EAC/C;EAoDA8E,SAAS,CAACrD,KAAa,EAAyB;IAC9C,IAAM8E,UAAU,GAAG,IAAI,CAACC,mBAAmB,CAAC/E,KAAK,EAAE,IAAI,CAAC;IACxD,OAAO,IAAI,CAACgF,eAAe,CAACF,UAAU,CAAC;EACzC;EAEA/B,cAAc,CACZ9E,aAA4B,EAC5B+B,KAAa,EACS;IACtB,IAAMC,MAAM,GAAG,IAAI,CAACoD,SAAS,CAACrD,KAAK,CAAC;IACpC,OAAO,IAAI,CAACiF,oBAAoB,CAAChH,aAAa,EAAEgC,MAAM,CAAC;EACzD;EAEAiF,eAAe,CAAC/C,WAA0B,EAAEnC,KAAa,EAAiB;IACxE,IAAMC,MAAM,GAAG,IAAI,CAACoD,SAAS,CAACrD,KAAK,CAAC;IACpC,OAAO,IAAI,CAACmF,qBAAqB,CAAChD,WAAW,EAAElC,MAAM,CAAC;EACxD;EAEA+C,sBAAsB,CAACF,WAA0B,EAAQ;IACvD,IAAM;MAAEnE;IAAG,CAAC,GAAG,IAAI,CAACX,KAAK;IACzBT,GAAG,CAACqC,KAAK,CAAC,wBAAwB,CAAC;IACnCkD,WAAW,CAACsC,gBAAgB,CAC1BzG,EAAE,CAAC0G,KAAK,CAACC,mBAAmB,EAC5B,IAAI,CAACtE,wBAAwB,CAC9B;IACD8B,WAAW,CAACsC,gBAAgB,CAC1BzG,EAAE,CAAC0G,KAAK,CAACE,iBAAiB,EAC1B,IAAI,CAACtE,sBAAsB,CAC5B;IACD6B,WAAW,CAACsC,gBAAgB,CAC1BzG,EAAE,CAAC0G,KAAK,CAACG,iBAAiB,EAC1B,IAAI,CAACtE,sBAAsB,CAC5B;IACD4B,WAAW,CAACsC,gBAAgB,CAC1BzG,EAAE,CAAC0G,KAAK,CAACI,gBAAgB,EACzB,IAAI,CAAC5E,gBAAgB,CACtB;IACDiC,WAAW,CAACsC,gBAAgB,CAC1BzG,EAAE,CAAC0G,KAAK,CAACK,eAAe,EACxB,IAAI,CAAC5E,eAAe,CACrB;EACH;EAEA4C,qBAAqB,CAACZ,WAA0B,EAAQ;IACtD,IAAM;MAAEnE;IAAG,CAAC,GAAG,IAAI,CAACX,KAAK;IACzBT,GAAG,CAACqC,KAAK,CAAC,uBAAuB,CAAC;IAClCkD,WAAW,CAAC6C,mBAAmB,CAC7BhH,EAAE,CAAC0G,KAAK,CAACC,mBAAmB,EAC5B,IAAI,CAACtE,wBAAwB,CAC9B;IACD8B,WAAW,CAAC6C,mBAAmB,CAC7BhH,EAAE,CAAC0G,KAAK,CAACE,iBAAiB,EAC1B,IAAI,CAACtE,sBAAsB,CAC5B;IACD6B,WAAW,CAAC6C,mBAAmB,CAC7BhH,EAAE,CAAC0G,KAAK,CAACG,iBAAiB,EAC1B,IAAI,CAACtE,sBAAsB,CAC5B;IACD4B,WAAW,CAAC6C,mBAAmB,CAC7BhH,EAAE,CAAC0G,KAAK,CAACI,gBAAgB,EACzB,IAAI,CAAC5E,gBAAgB,CACtB;IACDiC,WAAW,CAAC6C,mBAAmB,CAC7BhH,EAAE,CAAC0G,KAAK,CAACK,eAAe,EACxB,IAAI,CAAC5E,eAAe,CACrB;EACH;EAEAJ,YAAY,QAQH;IAAA,IARI;MACXwB,MAAM;MACNF,YAAY,GAAG,KAAK;MACpBzC;IAKF,CAAC;IACC,IAAM;MAAEH,IAAI,GAAGb,SAAS;MAAEY,IAAI,GAAGZ;IAAU,CAAC,GAAG2D,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,CAAC,CAAC;IAC3D,IAAIe,UAAU,GAAG,IAAI;IACrB,IAAIhB,SAA6B,GAAG2D,IAAI,CAACC,GAAG,EAAE;IAC9C,IAAI,CAACC,QAAQ,CACX,SAAsE;MAAA;MAAA,IAArE;QAAEpE,UAAU;QAAEO,SAAS,EAAE8D,aAAa;QAAExD,UAAU;QAAEC;MAAW,CAAC;MAC/D;MACA,IAAMwD,MAAM,GACVtE,UAAU,IAAI,IAAI,IAClBM,YAAY,KAAKN,UAAU,CAACM,YAAY,IACxC5C,IAAI,KAAKsC,UAAU,CAACtC,IAAI,IACxBD,IAAI,KAAKuC,UAAU,CAACvC,IAAI,IACxBI,KAAK,KAAKmC,UAAU,CAACnC,KAAK;MAC5B0D,UAAU,YACP,CAACT,UAAU,IAAIR,YAAY,KAAK,CAACgE,MAAM,IAAI,CAACzD,UAAU,CAAC,yCAAK,KAAK;MAEpE,IAAI,CAACU,UAAU,EAAE;QACfhB,SAAS,GAAG8D,aAAa;MAC3B;MAEA,OAAO;QACLrE,UAAU,EAAE;UACVM,YAAY;UACZ5C,IAAI;UACJD,IAAI;UACJI,KAAK;UACL0C,SAAS,gBAAEA,SAAS,mDAAI1D;QAC1B,CAAC;QACD0D,SAAS;QACTM,UAAU,EAAEyD,MAAM;QAClBxD,UAAU,EAAE;MACd,CAAC;IACH,CAAC,EACD,MAAM;MACJ,IAAIS,UAAU,EAAE;QACd,IAAI,CAACA,UAAU,CAAC7D,IAAI,aAAJA,IAAI,cAAJA,IAAI,GAAI,IAAI,EAAED,IAAI,EAAEI,KAAK,EAAE0C,SAAS,CAAC;MACvD;IACF,CAAC,CACF;EACH;EAEApB,gBAAgB,GAAS;IACvB,IAAI,CAACiF,QAAQ,CAAC;MACZ1F,KAAK,EAAE,IAAI6F,KAAK,CAAC,oBAAoB,CAAC;MACtCxD,cAAc,EAAE,IAAI;MACpBC,SAAS,EAAE;IACb,CAAC,CAAC;EACJ;EAEA5B,eAAe,GAAS;IACtB,IAAI,CAACgF,QAAQ,CAAC;MAAErD,cAAc,EAAE,KAAK;MAAErC,KAAK,EAAE;IAAK,CAAC,CAAC;EACvD;EAEAY,wBAAwB,GAAS;IAC/B,IAAI,CAACkF,kBAAkB,EAAE;EAC3B;EAEAjF,sBAAsB,GAAS;IAC7B,IAAI,CAACkF,gBAAgB,EAAE;EACzB;EAEAjF,sBAAsB,QAAuC;IAAA,IAAtC;MAAEkF;IAA2B,CAAC;IACnD,IAAI,CAACN,QAAQ,CAAC;MAAEzD,UAAU,EAAE+D;IAAO,CAAC,CAAC;EACvC;EAEArF,oBAAoB,GAAS;IAC3BxD,GAAG,CAACqC,KAAK,CAAC,sBAAsB,CAAC;IACjC,IAAM;MAAEyG;IAAW,CAAC,GAAG,IAAI,CAACrI,KAAK;IACjCqI,UAAU,CAACC,IAAI,CACbvJ,gBAAgB,CAACwJ,eAAe,EAChC,IAAI,EACJxH,mBAAmB,CAACyH,aAAa,CAClC;EACH;EAEA5F,qBAAqB,GAAS;IAAA;IAC5B,6BAAI,CAACU,iBAAiB,oFAAtB,sBAAwByC,OAAO,2DAA/B,uBAAiC0C,WAAW,EAAE;EAChD;;EAEA;AACF;AACA;AACA;AACA;EACEC,aAAa,CAAC/I,KAA4B,EAA4B;IAAA;IAAA,IAA1BsF,UAAU,uEAAG,KAAK;IAC5D,IAAM;MAAE/E;IAAe,CAAC,GAAG,IAAI,CAACF,KAAK;IACrC,IAAI,IAAI,CAACqF,SAAS,CAACnF,cAAc,CAAC,IAAI,IAAI,EAAE;MAC1CX,GAAG,CAACqC,KAAK,CAAC,yCAAyC,EAAEjC,KAAK,CAAC;MAC3D;IACF;IACA;IACA,IAAI,CAACmI,QAAQ,CAAC;MAAEtD,UAAU,EAAE,CAACS;IAAW,CAAC,CAAC;;IAE1C;IACA;IACA,8BAAI,CAAC3B,iBAAiB,qFAAtB,uBAAwByC,OAAO,2DAA/B,uBAAiC4C,cAAc,CAAChJ,KAAK,CAAC;EACxD;EAEAsF,UAAU,CACR7D,IAAmB,EACnBD,IAAwB,EACxBI,KAAyB,EACzB0C,SAAkB,EACZ;IAAA;IACN,IAAM;MAAE/D,cAAc;MAAEmI;IAAW,CAAC,GAAG,IAAI,CAACrI,KAAK;IACjD,IAAM4I,aAAa,sBAAG,IAAI,CAACvD,SAAS,CAACnF,cAAc,CAAC,oDAA9B,gBAAgCJ,OAAO;IAC7D,IAAM+I,eAAe,GAAGD,aAAa,KAAK,IAAI,GAAG,EAAE,GAAG,CAACA,aAAa,CAAC;IACrErJ,GAAG,CAACqC,KAAK,CAAC,YAAY,EAAE;MACtBR,IAAI;MACJD,IAAI;MACJI,KAAK;MACL0C,SAAS;MACT4E;IACF,CAAC,CAAC;IAEFR,UAAU,CAACC,IAAI,CAACvJ,gBAAgB,CAAC+J,eAAe,EAAE,IAAI,EAAE;MACtD1H,IAAI;MACJD,IAAI;MACJI,KAAK,EAAEA,KAAK,IAAI,IAAI,GAAGA,KAAK,GAAG,OAAO;MACtC0C,SAAS;MACT4E;IACF,CAAC,CAAC;EACJ;EAEAhE,iBAAiB,GAAS;IACxB,IAAM;MAAE3E,cAAc;MAAED;IAAc,CAAC,GAAG,IAAI,CAACD,KAAK;IACpD,IAAMiC,MAAM,GAAG,IAAI,CAACoD,SAAS,CAACnF,cAAc,CAAC;IAC7C,IAAM4E,WAAW,GAAG,IAAI,CAACC,cAAc,CAAC9E,aAAa,EAAEC,cAAc,CAAC;IACtEX,GAAG,CAACqC,KAAK,CAAC,mBAAmB,EAAEK,MAAM,EAAE6C,WAAW,CAAC;IAEnD,IAAI,CAACgD,QAAQ,CAAC;MACZxD,MAAM,EAAE,EAAE;MACVH,WAAW,EAAE5D,SAAS;MACtB6B,KAAK,EAAE;IACT,CAAC,CAAC;IAEF,IAAIH,MAAM,IAAI,IAAI,EAAE;MAClB1C,GAAG,CAACqC,KAAK,CAAC,kBAAkB,CAAC;MAC7B,IAAI,CAACkG,QAAQ,CAAC;QACZpD,SAAS,EAAE,KAAK;QAChBC,QAAQ,EAAE,IAAI;QACdX,YAAY,EAAE,KAAK;QACnBK,UAAU,EAAE;MACd,CAAC,CAAC;MACF;IACF;IAEA,IAAI,CAACyD,QAAQ,CAAC;MAAEpD,SAAS,EAAE;IAAK,CAAC,CAAC;IAElC,IAAII,WAAW,IAAI,IAAI,EAAE;MACvB;IACF;IAEA,IAAI,CAACgD,QAAQ,CAAC;MAAEnD,QAAQ,EAAE,KAAK;MAAEN,UAAU,EAAES,WAAW,CAACiE;IAAK,CAAC,CAAC;IAEhE,IAAI,CAACtF,OAAO,CACTuF,GAAG,CAAClE,WAAW,CAACmE,IAAI,EAAE,EAAEC,QAAQ,IAAIA,QAAQ,CAACzD,KAAK,EAAE,CAAC,CACrD0D,IAAI,CAAChF,WAAW,IAAI;MACnB;MACA,IAAI,CAACiF,sBAAsB,CAACjF,WAAW,CAAC;MACxC,IAAI,CAAC2D,QAAQ,CAAC;QAAE3D;MAAY,CAAC,CAAC;IAChC,CAAC,CAAC,CACDkF,KAAK,CAAEjH,KAAc,IAAK;MACzB,IAAIvD,YAAY,CAACyK,UAAU,CAAClH,KAAK,CAAC,EAAE;QAClC;MACF;MACA7C,GAAG,CAAC6C,KAAK,CAACA,KAAK,CAAC;MAChB,IAAI,CAAC0F,QAAQ,CAAC;QAAEpD,SAAS,EAAE,KAAK;QAAEtC;MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC;EACN;EAEA+F,gBAAgB,GAAS;IACvB,IAAM;MAAEjI,cAAc;MAAED;IAAc,CAAC,GAAG,IAAI,CAACD,KAAK;IACpD,IAAM;MAAEmE;IAAY,CAAC,GAAG,IAAI,CAACxE,KAAK;IAClC,IAAMmF,WAAW,GAAG,IAAI,CAACC,cAAc,CAAC9E,aAAa,EAAEC,cAAc,CAAC;IACtEX,GAAG,CAACqC,KAAK,CAAC,kBAAkB,EAAEkD,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEyE,IAAI,CAAC;IAChD,IAAIpF,WAAW,IAAI,IAAI,IAAIW,WAAW,IAAI,IAAI,EAAE;MAC9CvF,GAAG,CAACqC,KAAK,CAAC,uBAAuB,CAAC;MAClC;IACF;IACA,IAAM4H,KAAK,GAAG,CAAC,GAAG1E,WAAW,CAACyE,IAAI,CAAC;IACnCpF,WAAW,CAACsF,SAAS,CAACD,KAAK,CAAC;IAC5B,IAAI,CAACE,WAAW,CAACvF,WAAW,CAAC;EAC/B;EAEA+D,kBAAkB,GAAS;IACzB,IAAM;MAAEhI,cAAc;MAAED;IAAc,CAAC,GAAG,IAAI,CAACD,KAAK;IACpD,IAAM;MAAEmE;IAAY,CAAC,GAAG,IAAI,CAACxE,KAAK;IAClC,IAAMmF,WAAW,GAAG,IAAI,CAACC,cAAc,CAAC9E,aAAa,EAAEC,cAAc,CAAC;IACtEX,GAAG,CAACqC,KAAK,CAAC,oBAAoB,EAAEkD,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEjD,MAAM,CAAC;IACpD,IAAIsC,WAAW,IAAI,IAAI,IAAIW,WAAW,IAAI,IAAI,EAAE;MAC9CvF,GAAG,CAACqC,KAAK,CAAC,uBAAuB,CAAC;MAClC;IACF;IACA,IAAM+H,OAAO,GAAG,CAAC,GAAG7E,WAAW,CAACjD,MAAM,CAAC;IACvCsC,WAAW,CAACyF,WAAW,CAACD,OAAO,CAAC;IAChC,IAAI,CAACD,WAAW,CAACvF,WAAW,CAAC;EAC/B;EAEAiF,sBAAsB,CAACjF,WAA0B,EAAQ;IACvD,IAAM;MAAExD;IAAG,CAAC,GAAG,IAAI,CAACX,KAAK;IACzBT,GAAG,CAACqC,KAAK,CAAC,wBAAwB,EAAEuC,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAE4E,IAAI,CAAC;IAEtD,IAAI,IAAI,CAAClD,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,EAAE;IAChB;IAEA,IAAI1B,WAAW,IAAI,IAAI,EAAE;MACvB,IAAI,CAAC0B,OAAO,GAAGtF,SAAS;MACxB;IACF;IAEA,IAAI,CAACsF,OAAO,GAAG1B,WAAW,CAACiD,gBAAgB,CACzCzG,EAAE,CAAC0G,KAAK,CAACwC,aAAa,EACtB,IAAI,CAACxG,uBAAuB,CAC7B;IAED,IAAI,CAACqG,WAAW,CAACvF,WAAW,CAAC;EAC/B;EAEAuF,WAAW,CAACvF,WAA0B,EAAQ;IAC5C,IAAM;MAAEjE;IAAe,CAAC,GAAG,IAAI,CAACF,KAAK;IACrC,IAAMoE,YAAY,GAAG,IAAI,CAAC8C,eAAe,CAAC/C,WAAW,EAAEjE,cAAc,CAAC;IACtE,IAAI,CAACkE,YAAY,EAAE;MACjB7E,GAAG,CAAC6C,KAAK,CAAC,uBAAuB,CAAC;MAClC;IACF;IACA+B,WAAW,CAACuF,WAAW,CAAC,CAAC,EAAE3I,mBAAmB,CAAC6F,cAAc,GAAG,CAAC,EAAE,CACjExC,YAAY,CACb,CAAC;EACJ;EAEAoB,uBAAuB,CAAC5E,QAEvB,EAAQ;IACP,IAAM;MAAED;IAAG,CAAC,GAAG,IAAI,CAACX,KAAK;IACzB,IAAM2D,aAAa,GAAGrF,cAAc,CAACsF,gBAAgB,CAAChD,QAAQ,CAAC;IAC/D,IAAI,CAAC3C,SAAS,CAAC,IAAI,CAAC0F,aAAa,EAAEA,aAAa,CAAC,EAAE;MACjD,IAAI,CAACA,aAAa,GAAGA,aAAa;MAClC,IAAI,CAACmE,QAAQ,CAAC;QAAE5G,SAAS,EAAE,IAAI7C,SAAS,CAACsC,EAAE,EAAEgD,aAAa;MAAE,CAAC,CAAC;IAChE;EACF;EAEAN,uBAAuB,QAAgD;IAAA,IAA/C;MAAE+E;IAAoC,CAAC;IAC7D,IAAM;MAAE0B;IAAK,CAAC,GAAG1B,MAAM;IACvB,IAAM;MAAElI;IAAe,CAAC,GAAG,IAAI,CAACF,KAAK;IACrC,IAAM;MAAEmE;IAAY,CAAC,GAAG,IAAI,CAACxE,KAAK;IAClC,IAAI,CAACwE,WAAW,EAAE;MAChB5E,GAAG,CAAC6C,KAAK,CAAC,qBAAqB,CAAC;MAChC;IACF;IACA,IAAMgC,YAAY,GAAG,IAAI,CAAC8C,eAAe,CAAC/C,WAAW,EAAEjE,cAAc,CAAC;IACtE,IAAI,CAACkE,YAAY,EAAE;MACjB7E,GAAG,CAAC6C,KAAK,CAAC,yBAAyB,CAAC;MACpC;IACF;IACA,IAAMkC,MAAM,GAAGwF,IAAI,CAACxI,GAAG,CAACyI,GAAG,IAAIA,GAAG,CAAC1H,GAAG,CAAC+B,YAAY,CAAC,CAAC;IACrD,IAAI,CAAC0D,QAAQ,CAAC;MAAExD,MAAM;MAAEI,SAAS,EAAE,KAAK;MAAEC,QAAQ,EAAE,IAAI;MAAEP;IAAa,CAAC,CAAC;EAC3E;EAEAjB,sBAAsB,GAAS;IAC7B,IAAM;MAAEzC;IAAyB,CAAC,GAAG,IAAI,CAACV,KAAK;IAC/C,IAAI,CAACU,wBAAwB,EAAE;MAC7B;IACF;IACAA,wBAAwB,CAAC,IAAI,EAAEK,mBAAmB,CAACyH,aAAa,CAAC;EACnE;EAEApF,sBAAsB,GAAS;IAC7B,IAAM;MAAE1C;IAAyB,CAAC,GAAG,IAAI,CAACV,KAAK;IAC/C,IAAI,CAACU,wBAAwB,EAAE;MAC7B;IACF;IACAA,wBAAwB,CAAC,IAAI,EAAEH,SAAS,CAAC;EAC3C;EAEAyJ,MAAM,GAAuB;IAC3B,IAAM;MACJvJ,OAAO;MACPP,cAAc;MACdM,cAAc;MACdyJ,WAAW;MACX5B,UAAU;MACVhI;IACF,CAAC,GAAG,IAAI,CAACL,KAAK;IACd,IAAM;MACJkE,MAAM;MACNhD,SAAS;MACTuD,cAAc;MACdT,YAAY;MACZzC,KAAK;MACL+C,MAAM;MACNF,YAAY;MACZM,SAAS;MACTC;IACF,CAAC,GAAG,IAAI,CAAChF,KAAK;IACd,IAAMsC,MAAM,GAAG,IAAI,CAACoD,SAAS,CAACnF,cAAc,CAAC;IAC7C,IAAMgK,oBAAoB,GAAG,IAAI,CAACvD,uBAAuB,EAAE;IAC3D,IAAMwD,iBAAiB,GAAG,IAAI,CAACtD,oBAAoB,EAAE;IACrD,IAAMuD,eAAe,GACnBzF,QAAQ,IAAIP,YAAY,IAAI,IAAI,GAC5B,IAAI,CAACiG,eAAe,CAAC/F,MAAM,EAAEF,YAAY,EAAElD,SAAS,CAAC,GACrD,EAAE;IAER,oBACE,KAAC,WAAW;MACV,YAAY,EAAEiJ,iBAAkB;MAChC,SAAS,EAAEzF,SAAU;MACrB,QAAQ,EAAEC,QAAS;MACnB,cAAc,EAAEF,cAAe;MAC/B,SAAS,EAAC,4BAA4B;MACtC,cAAc,EAAE,IAAK;MACrB,WAAW,EAAEwF,WAAY;MACzB,UAAU,EAAE5B,UAAW;MACvB,iBAAiB,EAAE,IAAI,CAACzF,qBAAsB;MAC9C,UAAU,EAAC,iBAAiB;MAC5B,UAAU,EAAC,gBAAgB;MAAA,uBAE3B;QACE,GAAG,EAAE,IAAI,CAACY,cAAe;QACzB,SAAS,EAAC,iDAAiD;QAAA,uBAE3D,KAAC,cAAc;UACb,GAAG,EAAE,IAAI,CAACF,iBAAkB;UAC5B,MAAM,EAAEY,MAAO;UACf,OAAO,EAAEzD,OAAQ;UACjB,YAAY,EAAEuD,YAAa;UAC3B,cAAc,EAAE3D,cAAe;UAC/B,cAAc,EAAEG,cAAe;UAC/B,QAAQ,EAAEmE,QAAS;UACnB,aAAa,EAAEuF,oBAAqB;UACpC,MAAM,EAAEjI,MAAO;UACf,KAAK,EAAEV,KAAM;UACb,MAAM,EAAE6I,eAAgB;UACxB,QAAQ,EAAE,IAAI,CAAC1H,YAAa;UAC5B,gBAAgB,EAAE,IAAI,CAACK,oBAAqB;UAC5C,kBAAkB,EAAE,IAAI,CAACI,sBAAuB;UAChD,kBAAkB,EAAE,IAAI,CAACC;QAAuB;MAChD;IACE,EACM;EAElB;AACF;AAAC,gBAxqBYrC,mBAAmB,iBAIT,qBAAqB;AAAA,gBAJ/BA,mBAAmB,eAMX,qBAAqB;AAAA,gBAN7BA,mBAAmB,oBAQN,GAAG;AAAA,gBARhBA,mBAAmB,mBAUPuJ,MAAM,CAACC,MAAM,CAAC;EACnCnJ,IAAI,EAAE,cAAc;EACpBD,IAAI,EAAE;AACR,CAAC,CAAC;AA6pBJ,IAAMqJ,4BAA4B,GAAG3J,SAAS,CAACE,mBAAmB,CAAC;AAEnE,eAAeyJ,4BAA4B"}
|
|
1
|
+
{"version":3,"file":"DropdownFilterPanel.js","names":["React","Component","connect","debounce","deepEqual","memoize","LayoutUtils","DateTimeColumnFormatter","Formatter","FormatterUtils","TableUtils","Log","getActiveTool","getApi","getSettings","Pending","PromiseUtils","DropdownFilter","InputFilterEvent","getColumnsForDashboard","getColumnSelectionValidatorForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","ToolType","WidgetPanel","jsx","_jsx","log","module","DROPDOWN_FILTER_DEBOUNCE","mapStateToProps","state","ownProps","localDashboardId","panelId","getIdFromPanel","props","panelTableMap","dashboardLinks","activeTool","isolatedLinkerPanelId","isLinkerActive","LINKER","undefined","disableLinking","columns","columnSelectionValidator","dh","settings","connector","forwardRef","DropdownFilterPanel","constructor","_defineProperty","rawValues","_ref","formatter","type","name","isDateType","map","value","dateTimeFormatter","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","showTimeZone","showTSeparator","defaultDateTimeFormatString","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","errorMessage","className","componentPanel","onClearAllFilters","widgetName","widgetType","children","ref","settingsError","onChange","onColumnSelected","onSourceMouseEnter","onSourceMouseLeave","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 type {\n dh as DhType,\n Column,\n Row,\n Table,\n TableTemplate,\n} from '@deephaven/jsapi-types';\nimport {\n DateTimeColumnFormatter,\n Formatter,\n FormatterUtils,\n FormattingRule,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getApi,\n getSettings,\n RootState,\n} 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 dh: DhType;\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 dh: getApi(state),\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 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 { dh, panelState, settings } = props;\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n // Filter dropdown needs to show and send full timestamp format with nanoseconds\n this.dateTimeFormatter = new DateTimeColumnFormatter(dh, {\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: `yyyy-MM-dd HH:mm:ss.SSSSSSSSS`,\n });\n const {\n value = '',\n isValueShown = false,\n name,\n type,\n timestamp,\n } = panelState ?? {};\n const column = name != null && type != null ? { name, type } : undefined;\n this.state = {\n column,\n formatter: new Formatter(dh, 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 dateTimeFormatter: DateTimeColumnFormatter;\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 this.dateTimeFormatter.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 const { dh } = this.props;\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 const { dh } = this.props;\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 const { dh } = this.props;\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 { dh } = this.props;\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n if (!deepEqual(this.columnFormats, columnFormats)) {\n this.columnFormats = columnFormats;\n this.setState({ formatter: new Formatter(dh, 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","isDirectory","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","handleCopyFile","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","file","newName","getUniqueCopyFileName","filename","copyFile","files","forEach","CLOSE_FILE","id","itemName","selectedItems","length","makePath","getPath","shouldFocus","fileMetadata","SELECT_NOTEBOOK","oldName","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 isDirectory,\n} from '@deephaven/file-explorer';\nimport React, { ReactNode } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport type { IdeSession } from '@deephaven/jsapi-types';\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.handleCopyFile = this.handleCopyFile.bind(this);\n this.handleCreateFile = this.handleCreateFile.bind(this);\n this.handleCreateDirectory = this.handleCreateDirectory.bind(this);\n this.handleCreateDirectoryCancel =\n this.handleCreateDirectoryCancel.bind(this);\n this.handleCreateDirectorySubmit =\n this.handleCreateDirectorySubmit.bind(this);\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(): 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 async handleCopyFile(file: FileStorageItem): Promise<void> {\n const { fileStorage } = this.props;\n if (isDirectory(file)) {\n log.error('Invalid item in handleCopyItem', file);\n return;\n }\n const newName = await FileUtils.getUniqueCopyFileName(\n fileStorage,\n file.filename\n );\n await fileStorage.copyFile(file.filename, newName);\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 onCopy={this.handleCopyFile}\n onCreateFile={this.handleCreateFile}\n onCreateFolder={this.handleCreateDirectory}\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
|
+
{"version":3,"file":"FileExplorerPanel.js","names":["Log","getFileStorage","FileExplorer","FileExplorerToolbar","FileUtils","NewItemModal","isDirectory","React","connect","Panel","NotebookEvent","getDashboardSessionWrapper","jsx","_jsx","jsxs","_jsxs","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","handleCopyFile","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","file","_this","_asyncToGenerator","newName","getUniqueCopyFileName","filename","copyFile","files","forEach","CLOSE_FILE","id","itemName","selectedItems","length","makePath","getPath","shouldFocus","fileMetadata","SELECT_NOTEBOOK","oldName","RENAME_FILE","_ref","undefined","glContainer","render","className","componentPanel","onSessionOpen","onSessionClose","onShow","children","createFile","createFolder","isMultiSelect","storage","onCopy","onCreateFile","onCreateFolder","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 isDirectory,\n} from '@deephaven/file-explorer';\nimport React, { ReactNode } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport type { IdeSession } from '@deephaven/jsapi-types';\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.handleCopyFile = this.handleCopyFile.bind(this);\n this.handleCreateFile = this.handleCreateFile.bind(this);\n this.handleCreateDirectory = this.handleCreateDirectory.bind(this);\n this.handleCreateDirectoryCancel =\n this.handleCreateDirectoryCancel.bind(this);\n this.handleCreateDirectorySubmit =\n this.handleCreateDirectorySubmit.bind(this);\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(): 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 async handleCopyFile(file: FileStorageItem): Promise<void> {\n const { fileStorage } = this.props;\n if (isDirectory(file)) {\n log.error('Invalid item in handleCopyItem', file);\n return;\n }\n const newName = await FileUtils.getUniqueCopyFileName(\n fileStorage,\n file.filename\n );\n await fileStorage.copyFile(file.filename, newName);\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 onCopy={this.handleCopyFile}\n onCreateFile={this.handleCreateFile}\n onCreateFolder={this.handleCreateDirectory}\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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"}
|