@deephaven/dashboard-core-plugins 1.7.2-beta.1 → 1.7.2-react-18-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/ChartBuilderPlugin.js.map +1 -1
  2. package/dist/ChartBuilderPluginConfig.js.map +1 -1
  3. package/dist/ChartPanelPlugin.js +1 -1
  4. package/dist/ChartPanelPlugin.js.map +1 -1
  5. package/dist/ChartPluginConfig.js.map +1 -1
  6. package/dist/ChartWidgetPlugin.js.map +1 -1
  7. package/dist/ConsolePlugin.d.ts.map +1 -1
  8. package/dist/ConsolePlugin.js +12 -2
  9. package/dist/ConsolePlugin.js.map +1 -1
  10. package/dist/FilterEvents.js.map +1 -1
  11. package/dist/FilterPlugin.js +2 -2
  12. package/dist/FilterPlugin.js.map +1 -1
  13. package/dist/FilterPluginConfig.js.map +1 -1
  14. package/dist/GridPanelPlugin.js.map +1 -1
  15. package/dist/GridPluginConfig.js.map +1 -1
  16. package/dist/GridWidgetPlugin.js.map +1 -1
  17. package/dist/LinkerPlugin.js.map +1 -1
  18. package/dist/LinkerPluginConfig.js.map +1 -1
  19. package/dist/MarkdownPlugin.js +1 -1
  20. package/dist/MarkdownPlugin.js.map +1 -1
  21. package/dist/MarkdownPluginConfig.js.map +1 -1
  22. package/dist/PandasPanelPlugin.js.map +1 -1
  23. package/dist/PandasPluginConfig.js.map +1 -1
  24. package/dist/PandasWidgetPlugin.js.map +1 -1
  25. package/dist/TablePluginWrapper.js.map +1 -1
  26. package/dist/WidgetLoaderPlugin.js.map +1 -1
  27. package/dist/WidgetLoaderPluginConfig.js.map +1 -1
  28. package/dist/controls/ControlType.js.map +1 -1
  29. package/dist/controls/dropdown-filter/DropdownFilter.d.ts +1 -1
  30. package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
  31. package/dist/controls/dropdown-filter/DropdownFilter.js +4 -6
  32. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  33. package/dist/controls/input-filter/InputFilter.js +1 -2
  34. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  35. package/dist/controls/markdown/MarkdownContainer.js +1 -2
  36. package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
  37. package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
  38. package/dist/controls/markdown/MarkdownStartPage.js +1 -2
  39. package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
  40. package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
  41. package/dist/events/ChartEvent.js +2 -0
  42. package/dist/events/ChartEvent.js.map +1 -1
  43. package/dist/events/ConsoleEvent.js.map +1 -1
  44. package/dist/events/InputFilterEvent.js +8 -0
  45. package/dist/events/InputFilterEvent.js.map +1 -1
  46. package/dist/events/IrisGridEvent.js +2 -0
  47. package/dist/events/IrisGridEvent.js.map +1 -1
  48. package/dist/events/MarkdownEvent.js.map +1 -1
  49. package/dist/events/NotebookEvent.js.map +1 -1
  50. package/dist/events/PQEvent.js.map +1 -1
  51. package/dist/events/PandasEvent.js +2 -0
  52. package/dist/events/PandasEvent.js.map +1 -1
  53. package/dist/events/TabEventMap.js.map +1 -1
  54. package/dist/events/index.js.map +1 -1
  55. package/dist/index.js.map +1 -1
  56. package/dist/linker/ColumnSelectionValidator.js.map +1 -1
  57. package/dist/linker/Linker.js +2 -2
  58. package/dist/linker/Linker.js.map +1 -1
  59. package/dist/linker/LinkerEvent.js.map +1 -1
  60. package/dist/linker/LinkerLink.js +1 -3
  61. package/dist/linker/LinkerLink.js.map +1 -1
  62. package/dist/linker/LinkerOverlayContent.js +1 -2
  63. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  64. package/dist/linker/LinkerUtils.js.map +1 -1
  65. package/dist/linker/ToolType.js.map +1 -1
  66. package/dist/linker/index.js.map +1 -1
  67. package/dist/panels/ChartColumnSelectorOverlay.d.ts +0 -4
  68. package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +1 -1
  69. package/dist/panels/ChartColumnSelectorOverlay.js +2 -7
  70. package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
  71. package/dist/panels/ChartFilterOverlay.d.ts +0 -12
  72. package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
  73. package/dist/panels/ChartFilterOverlay.js +1 -13
  74. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  75. package/dist/panels/ChartPanel.d.ts +10 -10
  76. package/dist/panels/ChartPanel.d.ts.map +1 -1
  77. package/dist/panels/ChartPanel.js +2 -4
  78. package/dist/panels/ChartPanel.js.map +1 -1
  79. package/dist/panels/ChartPanelUtils.js.map +1 -1
  80. package/dist/panels/CommandHistoryPanel.js +2 -4
  81. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  82. package/dist/panels/ConsolePanel.d.ts +2 -1
  83. package/dist/panels/ConsolePanel.d.ts.map +1 -1
  84. package/dist/panels/ConsolePanel.js +11 -11
  85. package/dist/panels/ConsolePanel.js.map +1 -1
  86. package/dist/panels/CorePanel.js +3 -3
  87. package/dist/panels/CorePanel.js.map +1 -1
  88. package/dist/panels/DropdownFilterPanel.d.ts +2 -8
  89. package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
  90. package/dist/panels/DropdownFilterPanel.js +6 -6
  91. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  92. package/dist/panels/FileExplorerPanel.d.ts +1 -7
  93. package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
  94. package/dist/panels/FileExplorerPanel.js +1 -2
  95. package/dist/panels/FileExplorerPanel.js.map +1 -1
  96. package/dist/panels/FilterSetManager.js +12 -13
  97. package/dist/panels/FilterSetManager.js.map +1 -1
  98. package/dist/panels/FilterSetManagerPanel.d.ts +3 -3
  99. package/dist/panels/FilterSetManagerPanel.js +4 -4
  100. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  101. package/dist/panels/InputFilterPanel.d.ts +3 -3
  102. package/dist/panels/InputFilterPanel.js +4 -5
  103. package/dist/panels/InputFilterPanel.js.map +1 -1
  104. package/dist/panels/IrisGridPanel.d.ts +5 -5
  105. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  106. package/dist/panels/IrisGridPanel.js +14 -13
  107. package/dist/panels/IrisGridPanel.js.map +1 -1
  108. package/dist/panels/IrisGridPanelTooltip.js +1 -2
  109. package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
  110. package/dist/panels/IrisGridPanelTypes.js.map +1 -1
  111. package/dist/panels/LogPanel.d.ts +3 -3
  112. package/dist/panels/LogPanel.d.ts.map +1 -1
  113. package/dist/panels/LogPanel.js +1 -3
  114. package/dist/panels/LogPanel.js.map +1 -1
  115. package/dist/panels/MarkdownNotebook.js +3 -4
  116. package/dist/panels/MarkdownNotebook.js.map +1 -1
  117. package/dist/panels/MarkdownPanel.d.ts +3 -3
  118. package/dist/panels/MarkdownPanel.js.map +1 -1
  119. package/dist/panels/MockFileStorage.js.map +1 -1
  120. package/dist/panels/MockFileStorageTable.js +1 -1
  121. package/dist/panels/MockFileStorageTable.js.map +1 -1
  122. package/dist/panels/NotebookPanel.d.ts +7 -9
  123. package/dist/panels/NotebookPanel.d.ts.map +1 -1
  124. package/dist/panels/NotebookPanel.js +8 -10
  125. package/dist/panels/NotebookPanel.js.map +1 -1
  126. package/dist/panels/PandasPanel.js +5 -6
  127. package/dist/panels/PandasPanel.js.map +1 -1
  128. package/dist/panels/PandasReloadButton.js +2 -3
  129. package/dist/panels/PandasReloadButton.js.map +1 -1
  130. package/dist/panels/WidgetPanel.js +2 -3
  131. package/dist/panels/WidgetPanel.js.map +1 -1
  132. package/dist/panels/WidgetPanelTooltip.js +1 -3
  133. package/dist/panels/WidgetPanelTooltip.js.map +1 -1
  134. package/dist/panels/WidgetPanelTypes.js.map +1 -1
  135. package/dist/panels/index.js.map +1 -1
  136. package/dist/prop-types/CommonPropTypes.js.map +1 -1
  137. package/dist/prop-types/UIPropTypes.js.map +1 -1
  138. package/dist/prop-types/index.js.map +1 -1
  139. package/dist/redux/actions.js.map +1 -1
  140. package/dist/redux/index.js.map +1 -1
  141. package/dist/redux/selectors.js.map +1 -1
  142. package/dist/useChartLinker.js.map +1 -1
  143. package/dist/useConfigureRuff.js.map +1 -1
  144. package/dist/useDashboardColumnFilters.js.map +1 -1
  145. package/dist/useGridLinker.js.map +1 -1
  146. package/dist/useHydrateGrid.js.map +1 -1
  147. package/dist/useIrisGridModel.js +2 -2
  148. package/dist/useIrisGridModel.js.map +1 -1
  149. package/dist/useLoadTablePlugin.js.map +1 -1
  150. package/dist/useTablePlugin.js +1 -1
  151. package/dist/useTablePlugin.js.map +1 -1
  152. package/package.json +24 -24
@@ -1 +1 @@
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 { type DashboardPanelProps } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { getFileStorage, type RootState } from '@deephaven/redux';\nimport FileExplorer, {\n FileExplorerToolbar,\n type FileStorage,\n type FileStorageItem,\n FileUtils,\n NewItemModal,\n isDirectory,\n} from '@deephaven/file-explorer';\nimport React, { type ReactNode } from 'react';\nimport { connect, type ConnectedProps } from 'react-redux';\nimport type { dh } from '@deephaven/jsapi-types';\nimport Panel from './CorePanel';\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?: dh.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?: dh.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: dh.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 { type DashboardPanelProps } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { getFileStorage, type RootState } from '@deephaven/redux';\nimport FileExplorer, {\n FileExplorerToolbar,\n type FileStorage,\n type FileStorageItem,\n FileUtils,\n NewItemModal,\n isDirectory,\n} from '@deephaven/file-explorer';\nimport React, { type ReactNode } from 'react';\nimport { connect, type ConnectedProps } from 'react-redux';\nimport type { dh } from '@deephaven/jsapi-types';\nimport Panel from './CorePanel';\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?: dh.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?: dh.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: dh.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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","ignoreList":[]}
@@ -15,8 +15,7 @@ import { vsEdit, vsGear, vsSave, vsCircleSlash, vsTrash, vsDeviceCamera, dhRefre
15
15
  import Log from '@deephaven/log';
16
16
  import { Button, CardFlip, RadioGroup, Radio, Select } from '@deephaven/components';
17
17
  import "./FilterSetManager.css";
18
- import { jsx as _jsx } from "react/jsx-runtime";
19
- import { jsxs as _jsxs } from "react/jsx-runtime";
18
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
20
19
  var log = Log.module('FilterSetManager');
21
20
  var NAME_INPUT_PLACEHOLDER = 'Enter name...';
22
21
  var EMPTY_LIST_PLACEHOLDER = 'No Available Filter Sets';
@@ -29,7 +28,7 @@ class FilterSetManager extends Component {
29
28
  // Removing the element removes its event listeners
30
29
  overlay.remove();
31
30
  });
32
- (_document$querySelect = document.querySelector('body')) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.appendChild(overlay);
31
+ (_document$querySelect = document.querySelector('body')) === null || _document$querySelect === void 0 || _document$querySelect.appendChild(overlay);
33
32
  }
34
33
  constructor(props) {
35
34
  super(props);
@@ -379,10 +378,10 @@ class FilterSetManager extends Component {
379
378
  editId,
380
379
  modifiedFilterSets
381
380
  } = _ref9;
382
- var selectedSet = modifiedFilterSets.find(_ref10 => {
381
+ var selectedSet = modifiedFilterSets.find(_ref0 => {
383
382
  var {
384
383
  id
385
- } = _ref10;
384
+ } = _ref0;
386
385
  return id === editId;
387
386
  });
388
387
  if (selectedSet === undefined) {
@@ -454,10 +453,10 @@ class FilterSetManager extends Component {
454
453
  log.debug('No filter selected');
455
454
  return;
456
455
  }
457
- var filterSet = filterSets.find(_ref11 => {
456
+ var filterSet = filterSets.find(_ref1 => {
458
457
  var {
459
458
  id
460
- } = _ref11;
459
+ } = _ref1;
461
460
  return id === selectedId;
462
461
  });
463
462
  if (filterSet === undefined) {
@@ -469,11 +468,11 @@ class FilterSetManager extends Component {
469
468
  }
470
469
  focusInput() {
471
470
  var _this$dropdownRef$cur;
472
- (_this$dropdownRef$cur = this.dropdownRef.current) === null || _this$dropdownRef$cur === void 0 ? void 0 : _this$dropdownRef$cur.focus();
471
+ (_this$dropdownRef$cur = this.dropdownRef.current) === null || _this$dropdownRef$cur === void 0 || _this$dropdownRef$cur.focus();
473
472
  }
474
473
  focusRenameInput() {
475
474
  var _this$renameInputRef$;
476
- (_this$renameInputRef$ = this.renameInputRef.current) === null || _this$renameInputRef$ === void 0 ? void 0 : _this$renameInputRef$.focus();
475
+ (_this$renameInputRef$ = this.renameInputRef.current) === null || _this$renameInputRef$ === void 0 || _this$renameInputRef$.focus();
477
476
  }
478
477
  render() {
479
478
  var {
@@ -609,11 +608,11 @@ class FilterSetManager extends Component {
609
608
  value: "-1",
610
609
  disabled: true,
611
610
  children: EMPTY_LIST_PLACEHOLDER
612
- }), modifiedFilterSets.map(_ref12 => {
611
+ }), modifiedFilterSets.map(_ref10 => {
613
612
  var {
614
613
  id,
615
614
  title
616
- } = _ref12;
615
+ } = _ref10;
617
616
  return /*#__PURE__*/_jsx("option", {
618
617
  value: id,
619
618
  children: title
@@ -686,11 +685,11 @@ class FilterSetManager extends Component {
686
685
  value: "-1",
687
686
  disabled: true,
688
687
  children: EMPTY_LIST_PLACEHOLDER
689
- }), filterSets.map(_ref13 => {
688
+ }), filterSets.map(_ref11 => {
690
689
  var {
691
690
  id,
692
691
  title
693
- } = _ref13;
692
+ } = _ref11;
694
693
  return /*#__PURE__*/_jsx("option", {
695
694
  value: id,
696
695
  children: title
@@ -1 +1 @@
1
- {"version":3,"file":"FilterSetManager.js","names":["React","Component","memoizeOne","nanoid","FontAwesomeIcon","vsEdit","vsGear","vsSave","vsCircleSlash","vsTrash","vsDeviceCamera","dhRefresh","dhNewCircleLargeFilled","vsCircleLargeFilled","vsArrowSmallUp","Log","Button","CardFlip","RadioGroup","Radio","Select","jsx","_jsx","jsxs","_jsxs","log","module","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","animateScreenFlash","_document$querySelect","overlay","document","createElement","classList","add","addEventListener","remove","querySelector","appendChild","constructor","props","_defineProperty","createRef","filterSets","renameSet","undefined","some","_ref","id","handleSettingsCancel","bind","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleEditDropdownChange","handleFilterChange","handleFilterApply","handleCaptureNewSet","handleNameInputChange","handleNameInputKeyPress","handleRenameConfirm","handleRenameCancel","handleRestoreFullStateChange","handleSetDelete","handleSetEdit","handleSetUpdate","state","editId","nameInputValue","nameInputError","modifiedFilterSets","restoreFullState","componentDidMount","isValueShown","updateSelectedId","initSettingsScreen","componentDidUpdate","prevProps","prevState","isNameInputScreen","focusRenameInput","length","onChange","selectedId","debug","setState","_ref2","isEmptyList","eventTargetValue","applyFilterSet","onUpdateSets","getFilterState","panels","title","value","getNameError","_nameInputValue$trim","trimmedName","trim","_ref3","_nameInputValue$trim2","error","namedFilterSet","_objectSpread","selectedIndex","findIndex","_ref4","updatedModifiedFilterSets","push","prevFilterSets","_ref5","filter","_ref6","newSelectedIndex","Math","max","min","newSelectedId","_ref7","selectedSetIndex","_ref8","_ref9","selectedSet","find","_ref10","event","stopPropagation","target","dropdownRef","current","focusInput","key","preventDefault","arguments","onApply","filterSet","_ref11","_this$dropdownRef$cur","focus","_this$renameInputRef$","renameInputRef","render","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","className","children","icon","mask","transform","updateSetIcon","isFlipped","kind","onClick","type","placeholder","ref","onKeyPress","spellCheck","tooltip","concat","editDropdownRef","disabled","map","_ref12","_ref13"],"sources":["../../src/panels/FilterSetManager.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, {\n type ChangeEvent,\n Component,\n type ReactNode,\n type KeyboardEvent,\n type MouseEvent,\n} from 'react';\nimport memoizeOne from 'memoize-one';\nimport { nanoid } from 'nanoid';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n vsEdit,\n vsGear,\n vsSave,\n vsCircleSlash,\n vsTrash,\n vsDeviceCamera,\n dhRefresh,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsArrowSmallUp,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n Button,\n CardFlip,\n RadioGroup,\n Radio,\n Select,\n} from '@deephaven/components';\n\nimport './FilterSetManager.scss';\n\nconst log = Log.module('FilterSetManager');\n\nexport interface FilterSetPanel {\n panelId?: string | string[] | null;\n type: string;\n id?: string;\n state: unknown;\n}\n\nexport interface FilterSet {\n id: string;\n title: string;\n panels: FilterSetPanel[];\n restoreFullState?: boolean;\n}\n\nexport interface ChangeHandlerArgs {\n isValueShown: boolean;\n selectedId?: string;\n}\n\ninterface FilterSetManagerProps {\n isValueShown: boolean;\n selectedId?: string;\n filterSets: FilterSet[];\n getFilterState: () => FilterSetPanel[];\n onChange: (args: ChangeHandlerArgs) => void;\n onApply: (filterSet: FilterSet) => void;\n onUpdateSets: (filterSets: FilterSet[], editId?: string) => void;\n}\n\ninterface FilterSetManagerState {\n nameInputValue: string;\n nameInputError?: string;\n editId?: string;\n renameSet?: FilterSet;\n // Unsaved set changes on the settings screen\n modifiedFilterSets: FilterSet[];\n restoreFullState: boolean;\n}\n\nconst NAME_INPUT_PLACEHOLDER = 'Enter name...';\n\nconst EMPTY_LIST_PLACEHOLDER = 'No Available Filter Sets';\n\nclass FilterSetManager extends Component<\n FilterSetManagerProps,\n FilterSetManagerState\n> {\n static animateScreenFlash(): void {\n const overlay = document.createElement('div');\n overlay.classList.add('screen-flash-overlay');\n overlay.addEventListener('animationend', () => {\n // Removing the element removes its event listeners\n overlay.remove();\n });\n document.querySelector('body')?.appendChild(overlay);\n }\n\n constructor(props: FilterSetManagerProps) {\n super(props);\n\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleEditDropdownChange = this.handleEditDropdownChange.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterApply = this.handleFilterApply.bind(this);\n this.handleCaptureNewSet = this.handleCaptureNewSet.bind(this);\n this.handleNameInputChange = this.handleNameInputChange.bind(this);\n this.handleNameInputKeyPress = this.handleNameInputKeyPress.bind(this);\n this.handleRenameConfirm = this.handleRenameConfirm.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRestoreFullStateChange =\n this.handleRestoreFullStateChange.bind(this);\n\n this.handleSetDelete = this.handleSetDelete.bind(this);\n this.handleSetEdit = this.handleSetEdit.bind(this);\n this.handleSetUpdate = this.handleSetUpdate.bind(this);\n\n this.state = {\n editId: undefined,\n renameSet: undefined,\n nameInputValue: '',\n nameInputError: undefined,\n modifiedFilterSets: [],\n restoreFullState: false,\n };\n }\n\n componentDidMount(): void {\n const { isValueShown } = this.props;\n if (isValueShown) {\n this.updateSelectedId();\n } else {\n this.initSettingsScreen();\n }\n }\n\n componentDidUpdate(\n prevProps: FilterSetManagerProps,\n prevState: FilterSetManagerState\n ): void {\n const { isValueShown, filterSets } = this.props;\n const { modifiedFilterSets } = this.state;\n\n if (prevProps.isValueShown && !isValueShown) {\n this.initSettingsScreen();\n }\n\n if (this.isNameInputScreen() && !this.isNameInputScreen(prevState)) {\n this.focusRenameInput();\n }\n\n if (filterSets !== prevProps.filterSets) {\n if (\n !isValueShown &&\n filterSets.length > 0 &&\n prevProps.filterSets.length === 0 &&\n modifiedFilterSets.length === 0\n ) {\n // Filter set added from another panel, flip from the settings side/initial screen to the value side\n const { onChange } = this.props;\n onChange({ isValueShown: true, selectedId: filterSets[0].id });\n } else {\n this.updateSelectedId();\n }\n }\n }\n\n private renameInputRef = React.createRef<HTMLInputElement>();\n\n private dropdownRef = React.createRef<HTMLSelectElement>();\n\n private editDropdownRef = React.createRef<HTMLSelectElement>();\n\n initSettingsScreen(): void {\n const { filterSets, selectedId } = this.props;\n log.debug('initSettingsScreen', filterSets, selectedId);\n this.setState({\n modifiedFilterSets: [...filterSets],\n editId: selectedId,\n });\n }\n\n // Update selected id without applying the new set on filterSets change\n updateSelectedId(): void {\n const { isValueShown, filterSets, selectedId, onChange } = this.props;\n log.debug('updateSelectedId', filterSets, selectedId);\n if (!isValueShown) {\n return;\n }\n if (!filterSets.some(({ id }) => id === selectedId)) {\n // Update the selection if selectedId doesn't exist in the list\n // Flip to the settings side for empty list to show the initial screen\n const isEmptyList = filterSets.length === 0;\n onChange({\n isValueShown: !isEmptyList,\n selectedId: isEmptyList ? undefined : filterSets[0].id,\n });\n }\n }\n\n handleEditDropdownChange(eventTargetValue: string): void {\n this.setState({ editId: eventTargetValue });\n }\n\n handleFilterChange(eventTargetValue: string): void {\n const selectedId = eventTargetValue;\n const { isValueShown, onChange } = this.props;\n this.applyFilterSet(selectedId);\n onChange({ isValueShown, selectedId });\n }\n\n handleFilterApply(): void {\n const { selectedId } = this.props;\n this.applyFilterSet(selectedId);\n }\n\n handleSettingsCancel(): void {\n const { onChange, selectedId, filterSets } = this.props;\n this.setState({ modifiedFilterSets: [] });\n // Flip the card to the filter set selection screen if the sets list isn't empty\n // Otherwise show the initial screen\n if (filterSets.length > 0) {\n onChange({ isValueShown: true, selectedId });\n }\n }\n\n handleSettingsSave(): void {\n const { onChange, onUpdateSets } = this.props;\n const { modifiedFilterSets, editId } = this.state;\n this.setState({ modifiedFilterSets: [] });\n log.debug('Update sets', modifiedFilterSets, editId);\n onUpdateSets(modifiedFilterSets);\n // Don't flip the card to the filter set selection screen if the updated sets list is empty\n if (modifiedFilterSets.length > 0) {\n onChange({ isValueShown: true, selectedId: editId });\n }\n }\n\n handleCaptureNewSet(): void {\n const { getFilterState } = this.props;\n FilterSetManager.animateScreenFlash();\n const id = nanoid();\n const panels = getFilterState();\n const renameSet = {\n id,\n title: '',\n panels,\n };\n log.debug('handleSetCreate', renameSet);\n this.setState({ nameInputValue: '', nameInputError: undefined, renameSet });\n }\n\n handleRenameCancel(): void {\n this.setState({ renameSet: undefined });\n }\n\n handleRestoreFullStateChange(value: string): void {\n this.setState({\n restoreFullState: value === 'true',\n });\n }\n\n getNameError(nameInputValue: string): string | undefined {\n const { renameSet, modifiedFilterSets } = this.state;\n const trimmedName = nameInputValue?.trim() ?? '';\n if (trimmedName.length === 0) {\n log.debug('Name cannot be empty', trimmedName);\n return 'Name cannot be empty';\n }\n\n if (\n renameSet !== undefined &&\n modifiedFilterSets.some(\n ({ title, id }) => title === trimmedName && id !== renameSet.id\n )\n ) {\n log.debug('Set with this name already exists', trimmedName);\n return 'Set with this name already exists';\n }\n\n return undefined;\n }\n\n handleRenameConfirm(): void {\n const { nameInputValue, renameSet, modifiedFilterSets, restoreFullState } =\n this.state;\n if (renameSet === undefined) {\n log.error('Renamed set undefined.');\n return;\n }\n const nameInputError = this.getNameError(nameInputValue);\n log.debug('handleRenameConfirm', nameInputValue, nameInputError);\n if (nameInputError !== undefined) {\n this.setState({ nameInputError });\n return;\n }\n const trimmedName = nameInputValue?.trim() ?? '';\n const namedFilterSet = {\n ...renameSet,\n title: trimmedName,\n restoreFullState,\n };\n const selectedIndex = modifiedFilterSets.findIndex(\n ({ id }) => id === renameSet.id\n );\n const updatedModifiedFilterSets = [...modifiedFilterSets];\n\n if (selectedIndex >= 0) {\n updatedModifiedFilterSets[selectedIndex] = namedFilterSet;\n log.debug('Renamed existing set', updatedModifiedFilterSets);\n } else {\n updatedModifiedFilterSets.push(namedFilterSet);\n log.debug('Added new set to modified sets', updatedModifiedFilterSets);\n }\n\n this.setState({\n editId: namedFilterSet.id,\n modifiedFilterSets: updatedModifiedFilterSets,\n renameSet: undefined,\n });\n }\n\n handleSetDelete(): void {\n this.setState(state => {\n const { editId, modifiedFilterSets: prevFilterSets } = state;\n const selectedIndex = prevFilterSets.findIndex(({ id }) => id === editId);\n if (selectedIndex < 0) {\n log.error(\n 'Unable to find selected filterSet index',\n prevFilterSets,\n editId\n );\n return null;\n }\n const modifiedFilterSets = prevFilterSets.filter(\n ({ id }) => id !== editId\n );\n const newSelectedIndex = Math.max(\n 0,\n Math.min(modifiedFilterSets.length - 1, selectedIndex - 1)\n );\n const newSelectedId =\n modifiedFilterSets.length > 0\n ? modifiedFilterSets[newSelectedIndex].id\n : undefined;\n log.debug(\n 'Deleted selected set',\n editId,\n prevFilterSets,\n modifiedFilterSets\n );\n log.debug('New selection', newSelectedIndex, newSelectedId);\n return {\n modifiedFilterSets,\n editId: newSelectedId,\n };\n });\n }\n\n handleSetUpdate(): void {\n const { getFilterState } = this.props;\n FilterSetManager.animateScreenFlash();\n const panels = getFilterState();\n this.setState(({ modifiedFilterSets: prevFilterSets, editId }) => {\n if (editId === undefined) {\n log.error('Filter for update not selected.');\n return null;\n }\n const modifiedFilterSets = [...prevFilterSets];\n const selectedSetIndex = modifiedFilterSets.findIndex(\n ({ id }) => id === editId\n );\n if (selectedSetIndex < 0) {\n log.error('Selected set for update not found.');\n return null;\n }\n // Clone selected set to avoid mutation of the props\n modifiedFilterSets[selectedSetIndex] = {\n ...modifiedFilterSets[selectedSetIndex],\n panels,\n };\n\n log.debug('Update set', modifiedFilterSets, panels);\n return {\n modifiedFilterSets,\n };\n });\n }\n\n handleSetEdit(): void {\n this.setState(({ editId, modifiedFilterSets }) => {\n const selectedSet = modifiedFilterSets.find(({ id }) => id === editId);\n if (selectedSet === undefined) {\n log.error('Could not find selected set', editId, modifiedFilterSets);\n return null;\n }\n const { title, restoreFullState = false } = selectedSet;\n return {\n nameInputValue: title,\n nameInputError: undefined,\n renameSet: selectedSet,\n restoreFullState,\n };\n });\n }\n\n handleSettingsClick(event: MouseEvent): void {\n event.stopPropagation();\n const { onChange, selectedId } = this.props;\n onChange({ isValueShown: false, selectedId });\n }\n\n handleBackgroundClick(event: MouseEvent): void {\n log.debug('handleBackgroundClick');\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n\n handleNameInputChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value: nameInputValue } = event.target;\n const nameInputError = this.getNameError(nameInputValue);\n this.setState({ nameInputValue, nameInputError });\n }\n\n handleNameInputKeyPress(event: KeyboardEvent): void {\n const { key } = event;\n if (key === 'Enter') {\n event.preventDefault();\n this.handleRenameConfirm();\n }\n }\n\n isNameInputScreen(state = this.state): boolean {\n const { renameSet } = state;\n return renameSet !== undefined;\n }\n\n isRenamingExistingSet = memoizeOne(\n (filterSets: FilterSet[], renameSet?: FilterSet): boolean =>\n renameSet !== undefined &&\n filterSets.some(({ id }) => id === renameSet.id)\n );\n\n applyFilterSet(selectedId?: string): void {\n const { onApply, filterSets } = this.props;\n if (selectedId === undefined) {\n log.debug('No filter selected');\n return;\n }\n const filterSet = filterSets.find(({ id }) => id === selectedId);\n if (filterSet === undefined) {\n log.debug('Selected id not found in filterSets', selectedId, filterSets);\n return;\n }\n log.debug('Apply filterSet', filterSet);\n onApply(filterSet);\n }\n\n focusInput(): void {\n this.dropdownRef.current?.focus();\n }\n\n focusRenameInput(): void {\n this.renameInputRef.current?.focus();\n }\n\n render(): ReactNode {\n const {\n nameInputValue,\n nameInputError,\n editId,\n renameSet,\n modifiedFilterSets,\n restoreFullState,\n } = this.state;\n const { isValueShown, filterSets, selectedId } = this.props;\n const isNameInputScreen = this.isNameInputScreen();\n const isRenamingExistingSet = this.isRenamingExistingSet(\n modifiedFilterSets,\n renameSet\n );\n const isEmptyEditList = modifiedFilterSets.length === 0;\n const isInitialScreen =\n !isNameInputScreen && isEmptyEditList && filterSets.length === 0;\n const isEditListScreen = !isNameInputScreen && !isInitialScreen;\n const captureSetIcon = (\n <div className=\"fa-layers mr-3\">\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={vsDeviceCamera}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhNewCircleLargeFilled}\n className=\"text-primary\"\n transform=\"shrink-6 down-5 right-7\"\n />\n </div>\n );\n const updateSetIcon = (\n <div className=\"fa-layers\">\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={vsDeviceCamera}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={vsArrowSmallUp}\n transform=\"shrink-1 down-5 right-7\"\n />\n </div>\n );\n return (\n <div className=\"filter-set-manager fill-parent-absolute\">\n <CardFlip className=\"w-100 h-100\" isFlipped={isValueShown}>\n <div\n className=\"filter-set-manager-settings-card fill-parent-absolute\"\n key=\"front\"\n >\n <div className=\"filter-set-manager-card-content\">\n {isInitialScreen && (\n <div>\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline\"\n onClick={this.handleCaptureNewSet}\n icon={captureSetIcon}\n >\n Capture filter set\n </Button>\n <div className=\"py-3 text-muted small\">\n Takes a snapshot of the currently applied filters on all\n panels, allowing you to restore saved filter sets later.\n </div>\n </div>\n )}\n\n {isNameInputScreen && (\n <div\n className=\"d-flex flex-column justify-content-center\"\n data-testid=\"edit-filter-set-container\"\n >\n <div className=\"form-group\">\n <label>\n {isRenamingExistingSet ? 'Edit set' : 'Name captured set'}\n </label>\n <div className=\"name-input-container\">\n <input\n type=\"text\"\n className=\"input-set-name form-control\"\n placeholder={NAME_INPUT_PLACEHOLDER}\n value={nameInputValue}\n ref={this.renameInputRef}\n onChange={this.handleNameInputChange}\n onKeyPress={this.handleNameInputKeyPress}\n spellCheck=\"false\"\n />\n <Button\n data-testid=\"rename-confirm-button\"\n kind=\"ghost\"\n className=\"btn btn-link no-underline pt-2 pb-2\"\n onClick={this.handleRenameConfirm}\n tooltip=\"Save\"\n test-id=\"button-save\"\n icon={vsSave}\n />\n\n <Button\n data-testid=\"rename-cancel-button\"\n kind=\"ghost\"\n className=\"btn btn-link no-underline pt-2 pb-2\"\n onClick={this.handleRenameCancel}\n tooltip=\"Cancel\"\n icon={vsCircleSlash}\n />\n </div>\n {nameInputError !== undefined && (\n <div className=\"error-message\">{nameInputError}</div>\n )}\n </div>\n <div className=\"form-group\">\n <RadioGroup\n aria-label=\"Restoration options\"\n onChange={this.handleRestoreFullStateChange}\n value={`${restoreFullState}`}\n >\n <Radio value=\"false\">Restore only filters</Radio>\n <Radio value=\"true\">Restore full table state</Radio>\n </RadioGroup>\n </div>\n </div>\n )}\n\n {isEditListScreen && (\n <div className=\"filter-set-manager-settings-grid-1\">\n <div className=\"form-group\">\n <label>Edit filter sets</label>\n <div className=\"filter-select-container\">\n <Select\n data-testid=\"settings-card-filter-select\"\n ref={this.editDropdownRef}\n value={editId ?? '-1'}\n className=\"custom-select filter-value-select\"\n onChange={this.handleEditDropdownChange}\n disabled={isEmptyEditList}\n >\n {isEmptyEditList && (\n <option value=\"-1\" disabled>\n {EMPTY_LIST_PLACEHOLDER}\n </option>\n )}\n {modifiedFilterSets.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </Select>\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetUpdate}\n disabled={isEmptyEditList}\n icon={updateSetIcon}\n tooltip=\"Update\"\n />\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetEdit}\n disabled={isEmptyEditList}\n icon={vsEdit}\n tooltip=\"Edit\"\n />\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetDelete}\n disabled={isEmptyEditList}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n </div>\n </div>\n\n <div>\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline\"\n onClick={this.handleCaptureNewSet}\n icon={captureSetIcon}\n >\n Capture new filter set\n </Button>\n </div>\n\n <div className=\"py-3 text-right\">\n <Button\n kind=\"secondary\"\n onClick={this.handleSettingsCancel}\n >\n Cancel\n </Button>\n &nbsp;\n <Button kind=\"primary\" onClick={this.handleSettingsSave}>\n Save\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n <div\n className=\"filter-set-manager-value-card fill-parent-absolute\"\n key=\"back\"\n onClick={this.handleBackgroundClick}\n >\n <div className=\"filter-set-manager-column\">\n <div className=\"filter-set-manager-column-title\">Filter sets</div>\n </div>\n <div className=\"filter-set-manager-card-content\">\n <div className=\"filter-set-manager-value-input\">\n <div className=\"filter-select-container\">\n <Select\n data-testid=\"value-card-filter-select\"\n ref={this.dropdownRef}\n value={selectedId ?? '-1'}\n className=\"custom-select filter-value-select\"\n onChange={this.handleFilterChange}\n >\n {filterSets.length === 0 && (\n <option value=\"-1\" disabled>\n {EMPTY_LIST_PLACEHOLDER}\n </option>\n )}\n {filterSets.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </Select>\n <Button\n data-testid=\"filter-apply-button\"\n kind=\"ghost\"\n onClick={this.handleFilterApply}\n icon={dhRefresh}\n tooltip=\"Apply Filter Set\"\n />\n </div>\n </div>\n </div>\n <div className=\"filter-set-manager-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn btn-link btn-link-icon m-2 px-2\"\n onClick={this.handleSettingsClick}\n tooltip=\"Settings\"\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n />\n </div>\n </div>\n </CardFlip>\n </div>\n );\n }\n}\n\nexport default FilterSetManager;\n"],"mappings":"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"}
1
+ {"version":3,"file":"FilterSetManager.js","names":["React","Component","memoizeOne","nanoid","FontAwesomeIcon","vsEdit","vsGear","vsSave","vsCircleSlash","vsTrash","vsDeviceCamera","dhRefresh","dhNewCircleLargeFilled","vsCircleLargeFilled","vsArrowSmallUp","Log","Button","CardFlip","RadioGroup","Radio","Select","jsx","_jsx","jsxs","_jsxs","log","module","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","animateScreenFlash","_document$querySelect","overlay","document","createElement","classList","add","addEventListener","remove","querySelector","appendChild","constructor","props","_defineProperty","createRef","filterSets","renameSet","undefined","some","_ref","id","handleSettingsCancel","bind","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleEditDropdownChange","handleFilterChange","handleFilterApply","handleCaptureNewSet","handleNameInputChange","handleNameInputKeyPress","handleRenameConfirm","handleRenameCancel","handleRestoreFullStateChange","handleSetDelete","handleSetEdit","handleSetUpdate","state","editId","nameInputValue","nameInputError","modifiedFilterSets","restoreFullState","componentDidMount","isValueShown","updateSelectedId","initSettingsScreen","componentDidUpdate","prevProps","prevState","isNameInputScreen","focusRenameInput","length","onChange","selectedId","debug","setState","_ref2","isEmptyList","eventTargetValue","applyFilterSet","onUpdateSets","getFilterState","panels","title","value","getNameError","_nameInputValue$trim","trimmedName","trim","_ref3","_nameInputValue$trim2","error","namedFilterSet","_objectSpread","selectedIndex","findIndex","_ref4","updatedModifiedFilterSets","push","prevFilterSets","_ref5","filter","_ref6","newSelectedIndex","Math","max","min","newSelectedId","_ref7","selectedSetIndex","_ref8","_ref9","selectedSet","find","_ref0","event","stopPropagation","target","dropdownRef","current","focusInput","key","preventDefault","arguments","onApply","filterSet","_ref1","_this$dropdownRef$cur","focus","_this$renameInputRef$","renameInputRef","render","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","className","children","icon","mask","transform","updateSetIcon","isFlipped","kind","onClick","type","placeholder","ref","onKeyPress","spellCheck","tooltip","concat","editDropdownRef","disabled","map","_ref10","_ref11"],"sources":["../../src/panels/FilterSetManager.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, {\n type ChangeEvent,\n Component,\n type ReactNode,\n type KeyboardEvent,\n type MouseEvent,\n} from 'react';\nimport memoizeOne from 'memoize-one';\nimport { nanoid } from 'nanoid';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n vsEdit,\n vsGear,\n vsSave,\n vsCircleSlash,\n vsTrash,\n vsDeviceCamera,\n dhRefresh,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsArrowSmallUp,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n Button,\n CardFlip,\n RadioGroup,\n Radio,\n Select,\n} from '@deephaven/components';\n\nimport './FilterSetManager.scss';\n\nconst log = Log.module('FilterSetManager');\n\nexport interface FilterSetPanel {\n panelId?: string | string[] | null;\n type: string;\n id?: string;\n state: unknown;\n}\n\nexport interface FilterSet {\n id: string;\n title: string;\n panels: FilterSetPanel[];\n restoreFullState?: boolean;\n}\n\nexport interface ChangeHandlerArgs {\n isValueShown: boolean;\n selectedId?: string;\n}\n\ninterface FilterSetManagerProps {\n isValueShown: boolean;\n selectedId?: string;\n filterSets: FilterSet[];\n getFilterState: () => FilterSetPanel[];\n onChange: (args: ChangeHandlerArgs) => void;\n onApply: (filterSet: FilterSet) => void;\n onUpdateSets: (filterSets: FilterSet[], editId?: string) => void;\n}\n\ninterface FilterSetManagerState {\n nameInputValue: string;\n nameInputError?: string;\n editId?: string;\n renameSet?: FilterSet;\n // Unsaved set changes on the settings screen\n modifiedFilterSets: FilterSet[];\n restoreFullState: boolean;\n}\n\nconst NAME_INPUT_PLACEHOLDER = 'Enter name...';\n\nconst EMPTY_LIST_PLACEHOLDER = 'No Available Filter Sets';\n\nclass FilterSetManager extends Component<\n FilterSetManagerProps,\n FilterSetManagerState\n> {\n static animateScreenFlash(): void {\n const overlay = document.createElement('div');\n overlay.classList.add('screen-flash-overlay');\n overlay.addEventListener('animationend', () => {\n // Removing the element removes its event listeners\n overlay.remove();\n });\n document.querySelector('body')?.appendChild(overlay);\n }\n\n constructor(props: FilterSetManagerProps) {\n super(props);\n\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleEditDropdownChange = this.handleEditDropdownChange.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterApply = this.handleFilterApply.bind(this);\n this.handleCaptureNewSet = this.handleCaptureNewSet.bind(this);\n this.handleNameInputChange = this.handleNameInputChange.bind(this);\n this.handleNameInputKeyPress = this.handleNameInputKeyPress.bind(this);\n this.handleRenameConfirm = this.handleRenameConfirm.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRestoreFullStateChange =\n this.handleRestoreFullStateChange.bind(this);\n\n this.handleSetDelete = this.handleSetDelete.bind(this);\n this.handleSetEdit = this.handleSetEdit.bind(this);\n this.handleSetUpdate = this.handleSetUpdate.bind(this);\n\n this.state = {\n editId: undefined,\n renameSet: undefined,\n nameInputValue: '',\n nameInputError: undefined,\n modifiedFilterSets: [],\n restoreFullState: false,\n };\n }\n\n componentDidMount(): void {\n const { isValueShown } = this.props;\n if (isValueShown) {\n this.updateSelectedId();\n } else {\n this.initSettingsScreen();\n }\n }\n\n componentDidUpdate(\n prevProps: FilterSetManagerProps,\n prevState: FilterSetManagerState\n ): void {\n const { isValueShown, filterSets } = this.props;\n const { modifiedFilterSets } = this.state;\n\n if (prevProps.isValueShown && !isValueShown) {\n this.initSettingsScreen();\n }\n\n if (this.isNameInputScreen() && !this.isNameInputScreen(prevState)) {\n this.focusRenameInput();\n }\n\n if (filterSets !== prevProps.filterSets) {\n if (\n !isValueShown &&\n filterSets.length > 0 &&\n prevProps.filterSets.length === 0 &&\n modifiedFilterSets.length === 0\n ) {\n // Filter set added from another panel, flip from the settings side/initial screen to the value side\n const { onChange } = this.props;\n onChange({ isValueShown: true, selectedId: filterSets[0].id });\n } else {\n this.updateSelectedId();\n }\n }\n }\n\n private renameInputRef = React.createRef<HTMLInputElement>();\n\n private dropdownRef = React.createRef<HTMLSelectElement>();\n\n private editDropdownRef = React.createRef<HTMLSelectElement>();\n\n initSettingsScreen(): void {\n const { filterSets, selectedId } = this.props;\n log.debug('initSettingsScreen', filterSets, selectedId);\n this.setState({\n modifiedFilterSets: [...filterSets],\n editId: selectedId,\n });\n }\n\n // Update selected id without applying the new set on filterSets change\n updateSelectedId(): void {\n const { isValueShown, filterSets, selectedId, onChange } = this.props;\n log.debug('updateSelectedId', filterSets, selectedId);\n if (!isValueShown) {\n return;\n }\n if (!filterSets.some(({ id }) => id === selectedId)) {\n // Update the selection if selectedId doesn't exist in the list\n // Flip to the settings side for empty list to show the initial screen\n const isEmptyList = filterSets.length === 0;\n onChange({\n isValueShown: !isEmptyList,\n selectedId: isEmptyList ? undefined : filterSets[0].id,\n });\n }\n }\n\n handleEditDropdownChange(eventTargetValue: string): void {\n this.setState({ editId: eventTargetValue });\n }\n\n handleFilterChange(eventTargetValue: string): void {\n const selectedId = eventTargetValue;\n const { isValueShown, onChange } = this.props;\n this.applyFilterSet(selectedId);\n onChange({ isValueShown, selectedId });\n }\n\n handleFilterApply(): void {\n const { selectedId } = this.props;\n this.applyFilterSet(selectedId);\n }\n\n handleSettingsCancel(): void {\n const { onChange, selectedId, filterSets } = this.props;\n this.setState({ modifiedFilterSets: [] });\n // Flip the card to the filter set selection screen if the sets list isn't empty\n // Otherwise show the initial screen\n if (filterSets.length > 0) {\n onChange({ isValueShown: true, selectedId });\n }\n }\n\n handleSettingsSave(): void {\n const { onChange, onUpdateSets } = this.props;\n const { modifiedFilterSets, editId } = this.state;\n this.setState({ modifiedFilterSets: [] });\n log.debug('Update sets', modifiedFilterSets, editId);\n onUpdateSets(modifiedFilterSets);\n // Don't flip the card to the filter set selection screen if the updated sets list is empty\n if (modifiedFilterSets.length > 0) {\n onChange({ isValueShown: true, selectedId: editId });\n }\n }\n\n handleCaptureNewSet(): void {\n const { getFilterState } = this.props;\n FilterSetManager.animateScreenFlash();\n const id = nanoid();\n const panels = getFilterState();\n const renameSet = {\n id,\n title: '',\n panels,\n };\n log.debug('handleSetCreate', renameSet);\n this.setState({ nameInputValue: '', nameInputError: undefined, renameSet });\n }\n\n handleRenameCancel(): void {\n this.setState({ renameSet: undefined });\n }\n\n handleRestoreFullStateChange(value: string): void {\n this.setState({\n restoreFullState: value === 'true',\n });\n }\n\n getNameError(nameInputValue: string): string | undefined {\n const { renameSet, modifiedFilterSets } = this.state;\n const trimmedName = nameInputValue?.trim() ?? '';\n if (trimmedName.length === 0) {\n log.debug('Name cannot be empty', trimmedName);\n return 'Name cannot be empty';\n }\n\n if (\n renameSet !== undefined &&\n modifiedFilterSets.some(\n ({ title, id }) => title === trimmedName && id !== renameSet.id\n )\n ) {\n log.debug('Set with this name already exists', trimmedName);\n return 'Set with this name already exists';\n }\n\n return undefined;\n }\n\n handleRenameConfirm(): void {\n const { nameInputValue, renameSet, modifiedFilterSets, restoreFullState } =\n this.state;\n if (renameSet === undefined) {\n log.error('Renamed set undefined.');\n return;\n }\n const nameInputError = this.getNameError(nameInputValue);\n log.debug('handleRenameConfirm', nameInputValue, nameInputError);\n if (nameInputError !== undefined) {\n this.setState({ nameInputError });\n return;\n }\n const trimmedName = nameInputValue?.trim() ?? '';\n const namedFilterSet = {\n ...renameSet,\n title: trimmedName,\n restoreFullState,\n };\n const selectedIndex = modifiedFilterSets.findIndex(\n ({ id }) => id === renameSet.id\n );\n const updatedModifiedFilterSets = [...modifiedFilterSets];\n\n if (selectedIndex >= 0) {\n updatedModifiedFilterSets[selectedIndex] = namedFilterSet;\n log.debug('Renamed existing set', updatedModifiedFilterSets);\n } else {\n updatedModifiedFilterSets.push(namedFilterSet);\n log.debug('Added new set to modified sets', updatedModifiedFilterSets);\n }\n\n this.setState({\n editId: namedFilterSet.id,\n modifiedFilterSets: updatedModifiedFilterSets,\n renameSet: undefined,\n });\n }\n\n handleSetDelete(): void {\n this.setState(state => {\n const { editId, modifiedFilterSets: prevFilterSets } = state;\n const selectedIndex = prevFilterSets.findIndex(({ id }) => id === editId);\n if (selectedIndex < 0) {\n log.error(\n 'Unable to find selected filterSet index',\n prevFilterSets,\n editId\n );\n return null;\n }\n const modifiedFilterSets = prevFilterSets.filter(\n ({ id }) => id !== editId\n );\n const newSelectedIndex = Math.max(\n 0,\n Math.min(modifiedFilterSets.length - 1, selectedIndex - 1)\n );\n const newSelectedId =\n modifiedFilterSets.length > 0\n ? modifiedFilterSets[newSelectedIndex].id\n : undefined;\n log.debug(\n 'Deleted selected set',\n editId,\n prevFilterSets,\n modifiedFilterSets\n );\n log.debug('New selection', newSelectedIndex, newSelectedId);\n return {\n modifiedFilterSets,\n editId: newSelectedId,\n };\n });\n }\n\n handleSetUpdate(): void {\n const { getFilterState } = this.props;\n FilterSetManager.animateScreenFlash();\n const panels = getFilterState();\n this.setState(({ modifiedFilterSets: prevFilterSets, editId }) => {\n if (editId === undefined) {\n log.error('Filter for update not selected.');\n return null;\n }\n const modifiedFilterSets = [...prevFilterSets];\n const selectedSetIndex = modifiedFilterSets.findIndex(\n ({ id }) => id === editId\n );\n if (selectedSetIndex < 0) {\n log.error('Selected set for update not found.');\n return null;\n }\n // Clone selected set to avoid mutation of the props\n modifiedFilterSets[selectedSetIndex] = {\n ...modifiedFilterSets[selectedSetIndex],\n panels,\n };\n\n log.debug('Update set', modifiedFilterSets, panels);\n return {\n modifiedFilterSets,\n };\n });\n }\n\n handleSetEdit(): void {\n this.setState(({ editId, modifiedFilterSets }) => {\n const selectedSet = modifiedFilterSets.find(({ id }) => id === editId);\n if (selectedSet === undefined) {\n log.error('Could not find selected set', editId, modifiedFilterSets);\n return null;\n }\n const { title, restoreFullState = false } = selectedSet;\n return {\n nameInputValue: title,\n nameInputError: undefined,\n renameSet: selectedSet,\n restoreFullState,\n };\n });\n }\n\n handleSettingsClick(event: MouseEvent): void {\n event.stopPropagation();\n const { onChange, selectedId } = this.props;\n onChange({ isValueShown: false, selectedId });\n }\n\n handleBackgroundClick(event: MouseEvent): void {\n log.debug('handleBackgroundClick');\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n\n handleNameInputChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value: nameInputValue } = event.target;\n const nameInputError = this.getNameError(nameInputValue);\n this.setState({ nameInputValue, nameInputError });\n }\n\n handleNameInputKeyPress(event: KeyboardEvent): void {\n const { key } = event;\n if (key === 'Enter') {\n event.preventDefault();\n this.handleRenameConfirm();\n }\n }\n\n isNameInputScreen(state = this.state): boolean {\n const { renameSet } = state;\n return renameSet !== undefined;\n }\n\n isRenamingExistingSet = memoizeOne(\n (filterSets: FilterSet[], renameSet?: FilterSet): boolean =>\n renameSet !== undefined &&\n filterSets.some(({ id }) => id === renameSet.id)\n );\n\n applyFilterSet(selectedId?: string): void {\n const { onApply, filterSets } = this.props;\n if (selectedId === undefined) {\n log.debug('No filter selected');\n return;\n }\n const filterSet = filterSets.find(({ id }) => id === selectedId);\n if (filterSet === undefined) {\n log.debug('Selected id not found in filterSets', selectedId, filterSets);\n return;\n }\n log.debug('Apply filterSet', filterSet);\n onApply(filterSet);\n }\n\n focusInput(): void {\n this.dropdownRef.current?.focus();\n }\n\n focusRenameInput(): void {\n this.renameInputRef.current?.focus();\n }\n\n render(): ReactNode {\n const {\n nameInputValue,\n nameInputError,\n editId,\n renameSet,\n modifiedFilterSets,\n restoreFullState,\n } = this.state;\n const { isValueShown, filterSets, selectedId } = this.props;\n const isNameInputScreen = this.isNameInputScreen();\n const isRenamingExistingSet = this.isRenamingExistingSet(\n modifiedFilterSets,\n renameSet\n );\n const isEmptyEditList = modifiedFilterSets.length === 0;\n const isInitialScreen =\n !isNameInputScreen && isEmptyEditList && filterSets.length === 0;\n const isEditListScreen = !isNameInputScreen && !isInitialScreen;\n const captureSetIcon = (\n <div className=\"fa-layers mr-3\">\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={vsDeviceCamera}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhNewCircleLargeFilled}\n className=\"text-primary\"\n transform=\"shrink-6 down-5 right-7\"\n />\n </div>\n );\n const updateSetIcon = (\n <div className=\"fa-layers\">\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={vsDeviceCamera}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={vsArrowSmallUp}\n transform=\"shrink-1 down-5 right-7\"\n />\n </div>\n );\n return (\n <div className=\"filter-set-manager fill-parent-absolute\">\n <CardFlip className=\"w-100 h-100\" isFlipped={isValueShown}>\n <div\n className=\"filter-set-manager-settings-card fill-parent-absolute\"\n key=\"front\"\n >\n <div className=\"filter-set-manager-card-content\">\n {isInitialScreen && (\n <div>\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline\"\n onClick={this.handleCaptureNewSet}\n icon={captureSetIcon}\n >\n Capture filter set\n </Button>\n <div className=\"py-3 text-muted small\">\n Takes a snapshot of the currently applied filters on all\n panels, allowing you to restore saved filter sets later.\n </div>\n </div>\n )}\n\n {isNameInputScreen && (\n <div\n className=\"d-flex flex-column justify-content-center\"\n data-testid=\"edit-filter-set-container\"\n >\n <div className=\"form-group\">\n <label>\n {isRenamingExistingSet ? 'Edit set' : 'Name captured set'}\n </label>\n <div className=\"name-input-container\">\n <input\n type=\"text\"\n className=\"input-set-name form-control\"\n placeholder={NAME_INPUT_PLACEHOLDER}\n value={nameInputValue}\n ref={this.renameInputRef}\n onChange={this.handleNameInputChange}\n onKeyPress={this.handleNameInputKeyPress}\n spellCheck=\"false\"\n />\n <Button\n data-testid=\"rename-confirm-button\"\n kind=\"ghost\"\n className=\"btn btn-link no-underline pt-2 pb-2\"\n onClick={this.handleRenameConfirm}\n tooltip=\"Save\"\n test-id=\"button-save\"\n icon={vsSave}\n />\n\n <Button\n data-testid=\"rename-cancel-button\"\n kind=\"ghost\"\n className=\"btn btn-link no-underline pt-2 pb-2\"\n onClick={this.handleRenameCancel}\n tooltip=\"Cancel\"\n icon={vsCircleSlash}\n />\n </div>\n {nameInputError !== undefined && (\n <div className=\"error-message\">{nameInputError}</div>\n )}\n </div>\n <div className=\"form-group\">\n <RadioGroup\n aria-label=\"Restoration options\"\n onChange={this.handleRestoreFullStateChange}\n value={`${restoreFullState}`}\n >\n <Radio value=\"false\">Restore only filters</Radio>\n <Radio value=\"true\">Restore full table state</Radio>\n </RadioGroup>\n </div>\n </div>\n )}\n\n {isEditListScreen && (\n <div className=\"filter-set-manager-settings-grid-1\">\n <div className=\"form-group\">\n <label>Edit filter sets</label>\n <div className=\"filter-select-container\">\n <Select\n data-testid=\"settings-card-filter-select\"\n ref={this.editDropdownRef}\n value={editId ?? '-1'}\n className=\"custom-select filter-value-select\"\n onChange={this.handleEditDropdownChange}\n disabled={isEmptyEditList}\n >\n {isEmptyEditList && (\n <option value=\"-1\" disabled>\n {EMPTY_LIST_PLACEHOLDER}\n </option>\n )}\n {modifiedFilterSets.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </Select>\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetUpdate}\n disabled={isEmptyEditList}\n icon={updateSetIcon}\n tooltip=\"Update\"\n />\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetEdit}\n disabled={isEmptyEditList}\n icon={vsEdit}\n tooltip=\"Edit\"\n />\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetDelete}\n disabled={isEmptyEditList}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n </div>\n </div>\n\n <div>\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline\"\n onClick={this.handleCaptureNewSet}\n icon={captureSetIcon}\n >\n Capture new filter set\n </Button>\n </div>\n\n <div className=\"py-3 text-right\">\n <Button\n kind=\"secondary\"\n onClick={this.handleSettingsCancel}\n >\n Cancel\n </Button>\n &nbsp;\n <Button kind=\"primary\" onClick={this.handleSettingsSave}>\n Save\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n <div\n className=\"filter-set-manager-value-card fill-parent-absolute\"\n key=\"back\"\n onClick={this.handleBackgroundClick}\n >\n <div className=\"filter-set-manager-column\">\n <div className=\"filter-set-manager-column-title\">Filter sets</div>\n </div>\n <div className=\"filter-set-manager-card-content\">\n <div className=\"filter-set-manager-value-input\">\n <div className=\"filter-select-container\">\n <Select\n data-testid=\"value-card-filter-select\"\n ref={this.dropdownRef}\n value={selectedId ?? '-1'}\n className=\"custom-select filter-value-select\"\n onChange={this.handleFilterChange}\n >\n {filterSets.length === 0 && (\n <option value=\"-1\" disabled>\n {EMPTY_LIST_PLACEHOLDER}\n </option>\n )}\n {filterSets.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </Select>\n <Button\n data-testid=\"filter-apply-button\"\n kind=\"ghost\"\n onClick={this.handleFilterApply}\n icon={dhRefresh}\n tooltip=\"Apply Filter Set\"\n />\n </div>\n </div>\n </div>\n <div className=\"filter-set-manager-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn btn-link btn-link-icon m-2 px-2\"\n onClick={this.handleSettingsClick}\n tooltip=\"Settings\"\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n />\n </div>\n </div>\n </CardFlip>\n </div>\n );\n }\n}\n\nexport default FilterSetManager;\n"],"mappings":"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","ignoreList":[]}
@@ -80,9 +80,9 @@ export declare class FilterSetManagerPanel extends Component<FilterSetManagerPan
80
80
  restoreInputFilterState(panel: PanelComponent | undefined, state: InputFilterPanelState): void;
81
81
  render(): ReactElement;
82
82
  }
83
- declare const ConnectedFilterSetManagerPanel: import("react-redux").ConnectedComponent<typeof FilterSetManagerPanel, import("react-redux").Omit<Pick<FilterSetManagerPanelProps, "glEventHub" | "glContainer" | "localDashboardId" | "filterSets" | "panelTableMap" | "dashboardOpenedPanelMap" | "setDashboardFilterSets"> & Partial<Pick<FilterSetManagerPanelProps, "panelState">> & Partial<Pick<{
84
- panelState: null;
85
- }, never>>, "filterSets" | "panelTableMap" | "dashboardOpenedPanelMap" | "setDashboardFilterSets"> & {
83
+ declare const ConnectedFilterSetManagerPanel: import("react-redux").ConnectedComponent<typeof FilterSetManagerPanel, import("react-redux").Omit<Pick<FilterSetManagerPanelProps, "glEventHub" | "glContainer" | "localDashboardId" | "filterSets" | "panelTableMap" | "dashboardOpenedPanelMap" | "setDashboardFilterSets"> & {
84
+ panelState?: PanelState | undefined;
85
+ } & {}, "filterSets" | "panelTableMap" | "dashboardOpenedPanelMap" | "setDashboardFilterSets"> & {
86
86
  localDashboardId: string;
87
87
  }>;
88
88
  export default ConnectedFilterSetManagerPanel;
@@ -92,15 +92,15 @@ export class FilterSetManagerPanel extends Component {
92
92
  switch (componentName) {
93
93
  case LayoutUtils.getComponentName(IrisGridPanel):
94
94
  {
95
- var _state;
95
+ var state;
96
96
  if (panelId != null) {
97
- _state = this.getIrisGridPanelFilters(panelId, panelState);
97
+ state = this.getIrisGridPanelFilters(panelId, panelState);
98
98
  }
99
- if (_state != null) {
99
+ if (state != null) {
100
100
  panels.push({
101
101
  panelId,
102
102
  type: componentName,
103
- state: _state
103
+ state
104
104
  });
105
105
  }
106
106
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"FilterSetManagerPanel.js","names":["React","Component","connect","getOpenedPanelMapForDashboard","LayoutUtils","Log","getFilterSetsForDashboard","getInputFiltersForDashboard","getTableMapForDashboard","setDashboardFilterSets","setDashboardFilterSetsAction","Panel","FilterSetManager","IrisGridPanel","DropdownFilterPanel","InputFilterPanel","jsx","_jsx","log","module","hasSetPanelState","panel","setPanelState","FilterSetManagerPanel","changeFilterIndexesToColumnNames","table","configs","map","_ref","index","filter","columns","length","name","config","constructor","props","handleChange","bind","handleFilterApply","handleSetsUpdate","handleGetFilterState","panelState","filterSets","selectedId","id","undefined","isValueShown","state","getFilterState","dashboardOpenedPanelMap","panels","keys","forEach","key","get","error","componentName","getComponentNameFromPanel","panelId","getIdFromPanel","debug","glContainer","getComponentConfigFromContainer","getPanelComponentState","concat","getComponentName","getIrisGridPanelFilters","push","type","value","panelTableMap","irisGridState","advancedFilters","quickFilters","gridState","indexedAdvancedFilters","indexedQuickFilters","_objectSpread","_ref2","setState","updatePanelState","filterSet","restoreFullState","_ref3","has","restoreIrisGridFilters","restoreInputFilterState","modifiedFilterSets","localDashboardId","_ref4","prevAdvancedFilters","prevQuickFilters","setStateOverrides","setFilters","inputFilterState","render","glEventHub","className","componentPanel","isClonable","isRenamable","children","onChange","onApply","onUpdateSets","_defineProperty","mapStateToProps","ownProps","dashboardInputFilters","ConnectedFilterSetManagerPanel","forwardRef"],"sources":["../../src/panels/FilterSetManagerPanel.tsx"],"sourcesContent":["import React, { Component, type ReactElement } from 'react';\nimport { connect } from 'react-redux';\nimport {\n getOpenedPanelMapForDashboard,\n LayoutUtils,\n type PanelComponent,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { Container, EventEmitter } from '@deephaven/golden-layout';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type RootState } from '@deephaven/redux';\nimport {\n type AdvancedFilter,\n type ColumnName,\n type DehydratedIrisGridState,\n type QuickFilter,\n} from '@deephaven/iris-grid';\nimport { type GridState } from '@deephaven/grid';\nimport {\n getFilterSetsForDashboard,\n getInputFiltersForDashboard,\n getTableMapForDashboard,\n setDashboardFilterSets as setDashboardFilterSetsAction,\n} from '../redux';\nimport Panel from './CorePanel';\nimport FilterSetManager, {\n type ChangeHandlerArgs,\n type FilterSet,\n type FilterSetPanel,\n} from './FilterSetManager';\nimport { IrisGridPanel } from './IrisGridPanel';\nimport DropdownFilterPanel from './DropdownFilterPanel';\nimport InputFilterPanel, {\n type PanelState as InputFilterPanelState,\n} from './InputFilterPanel';\nimport './FilterSetManagerPanel.scss';\nimport { type FilterChangeEvent } from '../FilterEvents';\n\nconst log = Log.module('FilterSetManagerPanel');\ninterface IrisGridState {\n advancedFilters: [number, AdvancedFilter][];\n quickFilters: [number, QuickFilter][];\n}\n\ninterface PanelState {\n irisGridState?: IrisGridState;\n gridState?: Partial<GridState>;\n selectedId?: string | string[];\n isValueShown?: boolean;\n name?: string;\n type?: string;\n value?: string;\n}\n\ninterface FilterSetManagerPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n panelState: PanelState;\n filterSets: FilterSet[];\n localDashboardId: string;\n dashboardOpenedPanelMap: Map<string | string[], PanelComponent>;\n setDashboardFilterSets: (\n dashboardId: string,\n filterSets: FilterSet[]\n ) => void;\n panelTableMap: Map<string | string[], dh.Table>;\n}\n\ninterface FilterSetManagerPanelState {\n selectedId?: string | string[];\n isValueShown: boolean;\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState; // Dehydrated panel state that can load this panel\n}\n\nfunction hasSetPanelState(panel: PanelComponent): panel is PanelComponent & {\n setPanelState: (state: InputFilterPanelState) => void;\n} {\n return (\n (\n panel as PanelComponent & {\n setPanelState: (state: InputFilterPanelState) => void;\n }\n ).setPanelState != null\n );\n}\nexport class FilterSetManagerPanel extends Component<\n FilterSetManagerPanelProps,\n FilterSetManagerPanelState\n> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'FilterSetManagerPanel';\n\n static changeFilterIndexesToColumnNames<T>(\n table: dh.Table,\n configs: [number, T][]\n ): { name: string; filter: T }[] {\n return configs\n .map(([index, filter]) => {\n if (index >= table.columns.length) {\n return null;\n }\n const { name } = table.columns[index];\n return { name, filter };\n })\n .filter(config => config != null) as { name: string; filter: T }[];\n }\n\n constructor(props: FilterSetManagerPanelProps) {\n super(props);\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFilterApply = this.handleFilterApply.bind(this);\n this.handleSetsUpdate = this.handleSetsUpdate.bind(this);\n this.handleGetFilterState = this.handleGetFilterState.bind(this);\n\n const { panelState, filterSets } = props;\n const {\n selectedId = filterSets.length > 0 ? filterSets[0].id : undefined,\n isValueShown = false,\n } = panelState ?? {};\n\n this.state = {\n selectedId,\n isValueShown,\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n };\n }\n\n // Collect all filter values for each dashboard panel\n getFilterState(): FilterSetPanel[] {\n const { dashboardOpenedPanelMap } = this.props;\n const panels: FilterSetPanel[] = [];\n [...dashboardOpenedPanelMap.keys()].forEach(key => {\n const panel = dashboardOpenedPanelMap.get(key);\n\n if (panel === undefined) {\n log.error('Could not get panel', panel);\n return;\n }\n\n const componentName = LayoutUtils.getComponentNameFromPanel(panel);\n const panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('Panel:', panel, componentName);\n\n const { glContainer = null } = panel.props;\n if (glContainer == null) {\n log.error('Could not get panel container', panel);\n return;\n }\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n const panelState = LayoutUtils.getPanelComponentState(\n config\n ) as PanelState;\n if (panelState == null) {\n log.debug(`Panel state is null ${panelId}`);\n return;\n }\n switch (componentName) {\n case LayoutUtils.getComponentName(IrisGridPanel): {\n let state;\n if (panelId != null) {\n state = this.getIrisGridPanelFilters(panelId, panelState);\n }\n if (state != null) {\n panels.push({\n panelId,\n type: componentName,\n state,\n });\n }\n break;\n }\n case LayoutUtils.getComponentName(InputFilterPanel):\n case LayoutUtils.getComponentName(DropdownFilterPanel): {\n const { isValueShown, name, type, value } = panelState;\n panels.push({\n panelId,\n type: componentName,\n state: { isValueShown, name, type, value },\n });\n break;\n }\n default:\n }\n });\n return panels;\n }\n\n getIrisGridPanelFilters(\n panelId: string | string[],\n panelState: PanelState\n ): {\n irisGridState: Omit<IrisGridState, 'advancedFilters' | 'quickFilters'> & {\n advancedFilters?: {\n name: string;\n filter: AdvancedFilter;\n }[];\n quickFilters?: {\n name: string;\n filter: QuickFilter;\n }[];\n };\n gridState: Partial<GridState>;\n } | null {\n const { panelTableMap } = this.props;\n const table = panelTableMap.get(panelId);\n if (table == null) {\n log.error(`Unable to get table for panel ${panelId}.`);\n return null;\n }\n // IrisGridUtils.hydrate uses numeric indexes for columns\n // Change indexes to column names to make it work for proxy models\n const {\n irisGridState = { advancedFilters: undefined, quickFilters: undefined },\n gridState = {},\n } = panelState;\n const {\n advancedFilters: indexedAdvancedFilters,\n quickFilters: indexedQuickFilters,\n } = irisGridState;\n let advancedFilters;\n if (indexedAdvancedFilters) {\n advancedFilters = FilterSetManagerPanel.changeFilterIndexesToColumnNames(\n table,\n indexedAdvancedFilters\n );\n }\n\n let quickFilters;\n if (indexedQuickFilters) {\n quickFilters = FilterSetManagerPanel.changeFilterIndexesToColumnNames(\n table,\n indexedQuickFilters\n );\n }\n return {\n irisGridState: {\n ...irisGridState,\n advancedFilters,\n quickFilters,\n },\n gridState: { ...gridState },\n };\n }\n\n handleGetFilterState(): FilterSetPanel[] {\n return this.getFilterState();\n }\n\n handleChange({ isValueShown, selectedId }: ChangeHandlerArgs): void {\n log.debug('handleChange', isValueShown, selectedId);\n this.setState({ isValueShown, selectedId });\n this.updatePanelState();\n }\n\n handleFilterApply(filterSet: FilterSet): void {\n const { dashboardOpenedPanelMap } = this.props;\n const { panels, restoreFullState = false } = filterSet;\n log.debug(`Apply filters from filter set`, filterSet);\n panels.forEach(({ panelId, type, state }) => {\n if (panelId == null) {\n log.debug('panel is null', panelId);\n return;\n }\n if (!dashboardOpenedPanelMap.has(panelId)) {\n log.debug('Ignore closed panel', panelId);\n return;\n }\n log.debug('Apply panel filters', panelId, type, state);\n const panel = dashboardOpenedPanelMap.get(panelId);\n switch (type) {\n case LayoutUtils.getComponentName(IrisGridPanel):\n this.restoreIrisGridFilters(\n panel as IrisGridPanel,\n state as {\n irisGridState: Partial<DehydratedIrisGridState>;\n gridState: Partial<GridState>;\n advancedFilters: { name: string; filter: AdvancedFilter }[];\n quickFilters: { name: string; filter: QuickFilter }[];\n },\n restoreFullState\n );\n break;\n case LayoutUtils.getComponentName(InputFilterPanel):\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n this.restoreInputFilterState(panel, state as InputFilterPanelState);\n break;\n default:\n }\n });\n }\n\n handleSetsUpdate(modifiedFilterSets: FilterSet[]): void {\n const { setDashboardFilterSets, localDashboardId } = this.props;\n log.debug('Saving updated sets', modifiedFilterSets);\n // Filter sets are stored in dashboard data instead of the panelState\n // because they need to be shared between the filter view manager panels\n setDashboardFilterSets(localDashboardId, [...modifiedFilterSets]);\n }\n\n updatePanelState(): void {\n this.setState(({ selectedId, isValueShown }) => ({\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n selectedId,\n isValueShown,\n },\n }));\n }\n\n restoreIrisGridFilters(\n panel: IrisGridPanel,\n state: {\n irisGridState: Partial<DehydratedIrisGridState>;\n gridState: Partial<GridState>;\n advancedFilters: { name: ColumnName; filter: AdvancedFilter }[];\n quickFilters: { name: ColumnName; filter: QuickFilter }[];\n },\n restoreFullState: boolean\n ): void {\n // Fall back to state.advancedFilters and state.quickFilters\n // for backward compatibility with filter sets that only contain filters\n const {\n irisGridState = {},\n advancedFilters: prevAdvancedFilters = [],\n quickFilters: prevQuickFilters = [],\n } = state;\n const {\n advancedFilters = prevAdvancedFilters,\n quickFilters = prevQuickFilters,\n } = irisGridState;\n const { panelTableMap } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error(`Panel Id is null.`);\n return;\n }\n const table = panelTableMap.get(panelId);\n if (table == null) {\n log.error(`Unable to get table for panel ${panelId}.`);\n return;\n }\n log.debug('restoreIrisGridFilters', panelId, state, restoreFullState);\n if (restoreFullState) {\n panel.setStateOverrides(state);\n } else {\n panel.setFilters({\n quickFilters: quickFilters as {\n name: string;\n filter: QuickFilter;\n }[],\n advancedFilters: advancedFilters as {\n name: string;\n filter: AdvancedFilter;\n }[],\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n restoreInputFilterState(\n panel: PanelComponent | undefined,\n state: InputFilterPanelState\n ): void {\n const inputFilterState = { ...state };\n // Restore state but don't flip the card\n delete inputFilterState.isValueShown;\n log.debug('restoreInputFilterState', panel, inputFilterState);\n if (panel && hasSetPanelState(panel)) {\n panel.setPanelState(inputFilterState);\n }\n }\n\n render(): ReactElement {\n const { glContainer, glEventHub, filterSets } = this.props;\n const { isValueShown, selectedId } = this.state;\n return (\n <Panel\n className=\"filter-set-manager-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n isClonable\n isRenamable\n >\n <div className=\"input-filter-container h-100 w-100 container\">\n <FilterSetManager\n onChange={this.handleChange}\n onApply={this.handleFilterApply}\n onUpdateSets={this.handleSetsUpdate}\n isValueShown={isValueShown}\n filterSets={filterSets}\n selectedId={selectedId as string}\n getFilterState={this.handleGetFilterState}\n />\n </div>\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n): Pick<\n FilterSetManagerPanelProps,\n 'dashboardOpenedPanelMap' | 'filterSets' | 'panelTableMap'\n> & {\n dashboardInputFilters: FilterChangeEvent[];\n} => {\n const { localDashboardId } = ownProps;\n return {\n filterSets: getFilterSetsForDashboard(state, localDashboardId),\n dashboardOpenedPanelMap: getOpenedPanelMapForDashboard(\n state,\n localDashboardId\n ),\n dashboardInputFilters: getInputFiltersForDashboard(state, localDashboardId),\n panelTableMap: getTableMapForDashboard(state, localDashboardId),\n };\n};\n\nconst ConnectedFilterSetManagerPanel = connect(\n mapStateToProps,\n {\n setDashboardFilterSets: setDashboardFilterSetsAction,\n },\n null,\n { forwardRef: true }\n)(FilterSetManagerPanel);\n\nexport default ConnectedFilterSetManagerPanel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"FilterSetManagerPanel.js","names":["React","Component","connect","getOpenedPanelMapForDashboard","LayoutUtils","Log","getFilterSetsForDashboard","getInputFiltersForDashboard","getTableMapForDashboard","setDashboardFilterSets","setDashboardFilterSetsAction","Panel","FilterSetManager","IrisGridPanel","DropdownFilterPanel","InputFilterPanel","jsx","_jsx","log","module","hasSetPanelState","panel","setPanelState","FilterSetManagerPanel","changeFilterIndexesToColumnNames","table","configs","map","_ref","index","filter","columns","length","name","config","constructor","props","handleChange","bind","handleFilterApply","handleSetsUpdate","handleGetFilterState","panelState","filterSets","selectedId","id","undefined","isValueShown","state","getFilterState","dashboardOpenedPanelMap","panels","keys","forEach","key","get","error","componentName","getComponentNameFromPanel","panelId","getIdFromPanel","debug","glContainer","getComponentConfigFromContainer","getPanelComponentState","concat","getComponentName","getIrisGridPanelFilters","push","type","value","panelTableMap","irisGridState","advancedFilters","quickFilters","gridState","indexedAdvancedFilters","indexedQuickFilters","_objectSpread","_ref2","setState","updatePanelState","filterSet","restoreFullState","_ref3","has","restoreIrisGridFilters","restoreInputFilterState","modifiedFilterSets","localDashboardId","_ref4","prevAdvancedFilters","prevQuickFilters","setStateOverrides","setFilters","inputFilterState","render","glEventHub","className","componentPanel","isClonable","isRenamable","children","onChange","onApply","onUpdateSets","_defineProperty","mapStateToProps","ownProps","dashboardInputFilters","ConnectedFilterSetManagerPanel","forwardRef"],"sources":["../../src/panels/FilterSetManagerPanel.tsx"],"sourcesContent":["import React, { Component, type ReactElement } from 'react';\nimport { connect } from 'react-redux';\nimport {\n getOpenedPanelMapForDashboard,\n LayoutUtils,\n type PanelComponent,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { Container, EventEmitter } from '@deephaven/golden-layout';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type RootState } from '@deephaven/redux';\nimport {\n type AdvancedFilter,\n type ColumnName,\n type DehydratedIrisGridState,\n type QuickFilter,\n} from '@deephaven/iris-grid';\nimport { type GridState } from '@deephaven/grid';\nimport {\n getFilterSetsForDashboard,\n getInputFiltersForDashboard,\n getTableMapForDashboard,\n setDashboardFilterSets as setDashboardFilterSetsAction,\n} from '../redux';\nimport Panel from './CorePanel';\nimport FilterSetManager, {\n type ChangeHandlerArgs,\n type FilterSet,\n type FilterSetPanel,\n} from './FilterSetManager';\nimport { IrisGridPanel } from './IrisGridPanel';\nimport DropdownFilterPanel from './DropdownFilterPanel';\nimport InputFilterPanel, {\n type PanelState as InputFilterPanelState,\n} from './InputFilterPanel';\nimport './FilterSetManagerPanel.scss';\nimport { type FilterChangeEvent } from '../FilterEvents';\n\nconst log = Log.module('FilterSetManagerPanel');\ninterface IrisGridState {\n advancedFilters: [number, AdvancedFilter][];\n quickFilters: [number, QuickFilter][];\n}\n\ninterface PanelState {\n irisGridState?: IrisGridState;\n gridState?: Partial<GridState>;\n selectedId?: string | string[];\n isValueShown?: boolean;\n name?: string;\n type?: string;\n value?: string;\n}\n\ninterface FilterSetManagerPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n panelState: PanelState;\n filterSets: FilterSet[];\n localDashboardId: string;\n dashboardOpenedPanelMap: Map<string | string[], PanelComponent>;\n setDashboardFilterSets: (\n dashboardId: string,\n filterSets: FilterSet[]\n ) => void;\n panelTableMap: Map<string | string[], dh.Table>;\n}\n\ninterface FilterSetManagerPanelState {\n selectedId?: string | string[];\n isValueShown: boolean;\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState; // Dehydrated panel state that can load this panel\n}\n\nfunction hasSetPanelState(panel: PanelComponent): panel is PanelComponent & {\n setPanelState: (state: InputFilterPanelState) => void;\n} {\n return (\n (\n panel as PanelComponent & {\n setPanelState: (state: InputFilterPanelState) => void;\n }\n ).setPanelState != null\n );\n}\nexport class FilterSetManagerPanel extends Component<\n FilterSetManagerPanelProps,\n FilterSetManagerPanelState\n> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'FilterSetManagerPanel';\n\n static changeFilterIndexesToColumnNames<T>(\n table: dh.Table,\n configs: [number, T][]\n ): { name: string; filter: T }[] {\n return configs\n .map(([index, filter]) => {\n if (index >= table.columns.length) {\n return null;\n }\n const { name } = table.columns[index];\n return { name, filter };\n })\n .filter(config => config != null) as { name: string; filter: T }[];\n }\n\n constructor(props: FilterSetManagerPanelProps) {\n super(props);\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFilterApply = this.handleFilterApply.bind(this);\n this.handleSetsUpdate = this.handleSetsUpdate.bind(this);\n this.handleGetFilterState = this.handleGetFilterState.bind(this);\n\n const { panelState, filterSets } = props;\n const {\n selectedId = filterSets.length > 0 ? filterSets[0].id : undefined,\n isValueShown = false,\n } = panelState ?? {};\n\n this.state = {\n selectedId,\n isValueShown,\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n };\n }\n\n // Collect all filter values for each dashboard panel\n getFilterState(): FilterSetPanel[] {\n const { dashboardOpenedPanelMap } = this.props;\n const panels: FilterSetPanel[] = [];\n [...dashboardOpenedPanelMap.keys()].forEach(key => {\n const panel = dashboardOpenedPanelMap.get(key);\n\n if (panel === undefined) {\n log.error('Could not get panel', panel);\n return;\n }\n\n const componentName = LayoutUtils.getComponentNameFromPanel(panel);\n const panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('Panel:', panel, componentName);\n\n const { glContainer = null } = panel.props;\n if (glContainer == null) {\n log.error('Could not get panel container', panel);\n return;\n }\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n const panelState = LayoutUtils.getPanelComponentState(\n config\n ) as PanelState;\n if (panelState == null) {\n log.debug(`Panel state is null ${panelId}`);\n return;\n }\n switch (componentName) {\n case LayoutUtils.getComponentName(IrisGridPanel): {\n let state;\n if (panelId != null) {\n state = this.getIrisGridPanelFilters(panelId, panelState);\n }\n if (state != null) {\n panels.push({\n panelId,\n type: componentName,\n state,\n });\n }\n break;\n }\n case LayoutUtils.getComponentName(InputFilterPanel):\n case LayoutUtils.getComponentName(DropdownFilterPanel): {\n const { isValueShown, name, type, value } = panelState;\n panels.push({\n panelId,\n type: componentName,\n state: { isValueShown, name, type, value },\n });\n break;\n }\n default:\n }\n });\n return panels;\n }\n\n getIrisGridPanelFilters(\n panelId: string | string[],\n panelState: PanelState\n ): {\n irisGridState: Omit<IrisGridState, 'advancedFilters' | 'quickFilters'> & {\n advancedFilters?: {\n name: string;\n filter: AdvancedFilter;\n }[];\n quickFilters?: {\n name: string;\n filter: QuickFilter;\n }[];\n };\n gridState: Partial<GridState>;\n } | null {\n const { panelTableMap } = this.props;\n const table = panelTableMap.get(panelId);\n if (table == null) {\n log.error(`Unable to get table for panel ${panelId}.`);\n return null;\n }\n // IrisGridUtils.hydrate uses numeric indexes for columns\n // Change indexes to column names to make it work for proxy models\n const {\n irisGridState = { advancedFilters: undefined, quickFilters: undefined },\n gridState = {},\n } = panelState;\n const {\n advancedFilters: indexedAdvancedFilters,\n quickFilters: indexedQuickFilters,\n } = irisGridState;\n let advancedFilters;\n if (indexedAdvancedFilters) {\n advancedFilters = FilterSetManagerPanel.changeFilterIndexesToColumnNames(\n table,\n indexedAdvancedFilters\n );\n }\n\n let quickFilters;\n if (indexedQuickFilters) {\n quickFilters = FilterSetManagerPanel.changeFilterIndexesToColumnNames(\n table,\n indexedQuickFilters\n );\n }\n return {\n irisGridState: {\n ...irisGridState,\n advancedFilters,\n quickFilters,\n },\n gridState: { ...gridState },\n };\n }\n\n handleGetFilterState(): FilterSetPanel[] {\n return this.getFilterState();\n }\n\n handleChange({ isValueShown, selectedId }: ChangeHandlerArgs): void {\n log.debug('handleChange', isValueShown, selectedId);\n this.setState({ isValueShown, selectedId });\n this.updatePanelState();\n }\n\n handleFilterApply(filterSet: FilterSet): void {\n const { dashboardOpenedPanelMap } = this.props;\n const { panels, restoreFullState = false } = filterSet;\n log.debug(`Apply filters from filter set`, filterSet);\n panels.forEach(({ panelId, type, state }) => {\n if (panelId == null) {\n log.debug('panel is null', panelId);\n return;\n }\n if (!dashboardOpenedPanelMap.has(panelId)) {\n log.debug('Ignore closed panel', panelId);\n return;\n }\n log.debug('Apply panel filters', panelId, type, state);\n const panel = dashboardOpenedPanelMap.get(panelId);\n switch (type) {\n case LayoutUtils.getComponentName(IrisGridPanel):\n this.restoreIrisGridFilters(\n panel as IrisGridPanel,\n state as {\n irisGridState: Partial<DehydratedIrisGridState>;\n gridState: Partial<GridState>;\n advancedFilters: { name: string; filter: AdvancedFilter }[];\n quickFilters: { name: string; filter: QuickFilter }[];\n },\n restoreFullState\n );\n break;\n case LayoutUtils.getComponentName(InputFilterPanel):\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n this.restoreInputFilterState(panel, state as InputFilterPanelState);\n break;\n default:\n }\n });\n }\n\n handleSetsUpdate(modifiedFilterSets: FilterSet[]): void {\n const { setDashboardFilterSets, localDashboardId } = this.props;\n log.debug('Saving updated sets', modifiedFilterSets);\n // Filter sets are stored in dashboard data instead of the panelState\n // because they need to be shared between the filter view manager panels\n setDashboardFilterSets(localDashboardId, [...modifiedFilterSets]);\n }\n\n updatePanelState(): void {\n this.setState(({ selectedId, isValueShown }) => ({\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n selectedId,\n isValueShown,\n },\n }));\n }\n\n restoreIrisGridFilters(\n panel: IrisGridPanel,\n state: {\n irisGridState: Partial<DehydratedIrisGridState>;\n gridState: Partial<GridState>;\n advancedFilters: { name: ColumnName; filter: AdvancedFilter }[];\n quickFilters: { name: ColumnName; filter: QuickFilter }[];\n },\n restoreFullState: boolean\n ): void {\n // Fall back to state.advancedFilters and state.quickFilters\n // for backward compatibility with filter sets that only contain filters\n const {\n irisGridState = {},\n advancedFilters: prevAdvancedFilters = [],\n quickFilters: prevQuickFilters = [],\n } = state;\n const {\n advancedFilters = prevAdvancedFilters,\n quickFilters = prevQuickFilters,\n } = irisGridState;\n const { panelTableMap } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error(`Panel Id is null.`);\n return;\n }\n const table = panelTableMap.get(panelId);\n if (table == null) {\n log.error(`Unable to get table for panel ${panelId}.`);\n return;\n }\n log.debug('restoreIrisGridFilters', panelId, state, restoreFullState);\n if (restoreFullState) {\n panel.setStateOverrides(state);\n } else {\n panel.setFilters({\n quickFilters: quickFilters as {\n name: string;\n filter: QuickFilter;\n }[],\n advancedFilters: advancedFilters as {\n name: string;\n filter: AdvancedFilter;\n }[],\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n restoreInputFilterState(\n panel: PanelComponent | undefined,\n state: InputFilterPanelState\n ): void {\n const inputFilterState = { ...state };\n // Restore state but don't flip the card\n delete inputFilterState.isValueShown;\n log.debug('restoreInputFilterState', panel, inputFilterState);\n if (panel && hasSetPanelState(panel)) {\n panel.setPanelState(inputFilterState);\n }\n }\n\n render(): ReactElement {\n const { glContainer, glEventHub, filterSets } = this.props;\n const { isValueShown, selectedId } = this.state;\n return (\n <Panel\n className=\"filter-set-manager-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n isClonable\n isRenamable\n >\n <div className=\"input-filter-container h-100 w-100 container\">\n <FilterSetManager\n onChange={this.handleChange}\n onApply={this.handleFilterApply}\n onUpdateSets={this.handleSetsUpdate}\n isValueShown={isValueShown}\n filterSets={filterSets}\n selectedId={selectedId as string}\n getFilterState={this.handleGetFilterState}\n />\n </div>\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n): Pick<\n FilterSetManagerPanelProps,\n 'dashboardOpenedPanelMap' | 'filterSets' | 'panelTableMap'\n> & {\n dashboardInputFilters: FilterChangeEvent[];\n} => {\n const { localDashboardId } = ownProps;\n return {\n filterSets: getFilterSetsForDashboard(state, localDashboardId),\n dashboardOpenedPanelMap: getOpenedPanelMapForDashboard(\n state,\n localDashboardId\n ),\n dashboardInputFilters: getInputFiltersForDashboard(state, localDashboardId),\n panelTableMap: getTableMapForDashboard(state, localDashboardId),\n };\n};\n\nconst ConnectedFilterSetManagerPanel = connect(\n mapStateToProps,\n {\n setDashboardFilterSets: setDashboardFilterSetsAction,\n },\n null,\n { forwardRef: true }\n)(FilterSetManagerPanel);\n\nexport default ConnectedFilterSetManagerPanel;\n"],"mappings":"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","ignoreList":[]}
@@ -50,9 +50,9 @@ declare class InputFilterPanel extends Component<InputFilterPanelProps, InputFil
50
50
  updateColumns(): void;
51
51
  render(): JSX.Element;
52
52
  }
53
- declare const ConnectedInputFilterPanel: import("react-redux").ConnectedComponent<typeof InputFilterPanel, import("react-redux").Omit<Pick<InputFilterPanelProps, "glEventHub" | "glContainer" | "columns"> & Partial<Pick<InputFilterPanelProps, "panelState">> & Partial<Pick<{
54
- panelState: null;
55
- }, never>>, "columns"> & {
53
+ declare const ConnectedInputFilterPanel: import("react-redux").ConnectedComponent<typeof InputFilterPanel, import("react-redux").Omit<Pick<InputFilterPanelProps, "glEventHub" | "glContainer" | "columns"> & {
54
+ panelState?: PanelState | undefined;
55
+ } & {}, "columns"> & {
56
56
  localDashboardId: string;
57
57
  }>;
58
58
  export default ConnectedInputFilterPanel;