@deephaven/dashboard-core-plugins 0.109.1-beta.7 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/events/TabEventMap.d.ts +1 -1
- package/dist/events/TabEventMap.d.ts.map +1 -1
- package/dist/events/TabEventMap.js.map +1 -1
- package/dist/events/index.d.ts +7 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +5 -1
- package/dist/events/index.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +2 -2
- package/dist/panels/CommandHistoryPanel.js +1 -1
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.js +1 -1
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/CorePanel.d.ts +13 -0
- package/dist/panels/CorePanel.d.ts.map +1 -0
- package/dist/panels/CorePanel.js +76 -0
- package/dist/panels/CorePanel.js.map +1 -0
- package/dist/panels/DropdownFilterPanel.d.ts +1 -1
- package/dist/panels/FileExplorerPanel.js +1 -1
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.d.ts +2 -2
- package/dist/panels/FilterSetManagerPanel.js +1 -1
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.d.ts +1 -1
- package/dist/panels/InputFilterPanel.js +1 -1
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +2 -2
- package/dist/panels/LogPanel.d.ts +1 -1
- package/dist/panels/LogPanel.js +1 -1
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownPanel.d.ts +1 -1
- package/dist/panels/MarkdownPanel.js +1 -1
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/NotebookPanel.d.ts +1 -1
- package/dist/panels/NotebookPanel.js +1 -1
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/WidgetPanel.d.ts +1 -1
- package/dist/panels/WidgetPanel.d.ts.map +1 -1
- package/dist/panels/WidgetPanel.js +1 -1
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/index.d.ts +5 -1
- package/dist/panels/index.d.ts.map +1 -1
- package/dist/panels/index.js +7 -1
- package/dist/panels/index.js.map +1 -1
- package/package.json +24 -24
- package/dist/events/TabEvent.d.ts +0 -6
- package/dist/events/TabEvent.d.ts.map +0 -1
- package/dist/events/TabEvent.js +0 -6
- package/dist/events/TabEvent.js.map +0 -1
- package/dist/panels/Panel.css +0 -5
- package/dist/panels/Panel.css.map +0 -1
- package/dist/panels/Panel.d.ts +0 -44
- package/dist/panels/Panel.d.ts.map +0 -1
- package/dist/panels/Panel.js +0 -333
- package/dist/panels/Panel.js.map +0 -1
- package/dist/panels/PanelContextMenu.d.ts +0 -30
- package/dist/panels/PanelContextMenu.d.ts.map +0 -1
- package/dist/panels/PanelContextMenu.js +0 -159
- package/dist/panels/PanelContextMenu.js.map +0 -1
- package/dist/panels/RenameDialog.d.ts +0 -34
- package/dist/panels/RenameDialog.d.ts.map +0 -1
- package/dist/panels/RenameDialog.js +0 -167
- package/dist/panels/RenameDialog.js.map +0 -1
|
@@ -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 './Panel';\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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"}
|
|
@@ -50,7 +50,7 @@ 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, "
|
|
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
54
|
panelState: null;
|
|
55
55
|
}, never>>, "columns"> & {
|
|
56
56
|
localDashboardId: string;
|
|
@@ -6,7 +6,7 @@ import { connect } from 'react-redux';
|
|
|
6
6
|
import debounce from 'lodash.debounce';
|
|
7
7
|
import { LayoutUtils } from '@deephaven/dashboard';
|
|
8
8
|
import { assertNotNull } from '@deephaven/utils';
|
|
9
|
-
import Panel from "./
|
|
9
|
+
import Panel from "./CorePanel.js";
|
|
10
10
|
import InputFilter from "../controls/input-filter/InputFilter.js";
|
|
11
11
|
import { getColumnsForDashboard } from "../redux/index.js";
|
|
12
12
|
import { emitFilterChanged } from "../FilterEvents.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputFilterPanel.js","names":["React","Component","connect","debounce","LayoutUtils","assertNotNull","Panel","InputFilter","getColumnsForDashboard","emitFilterChanged","jsx","_jsx","INPUT_FILTER_DEBOUNCE","InputFilterPanel","constructor","props","_defineProperty","handleChange","bind","handleClearAllFilters","inputFilterRef","createRef","panelState","value","isValueShown","name","type","timestamp","Date","now","state","columns","column","undefined","wasFlipped","skipUpdate","componentDidMount","updateColumns","sendUpdate","componentDidUpdate","prevProps","_ref","setState","_ref2","_ref3","prevTimestamp","isFlip","_this$inputFilterRef$","current","clearFilter","glEventHub","panelId","getIdFromPanel","setPanelState","_this$inputFilterRef$2","arguments","length","setFilterState","find","_ref4","render","glContainer","className","componentPanel","onClearAllFilters","isClonable","isRenamable","children","ref","onChange","mapStateToProps","ownProps","localDashboardId","ConnectedInputFilterPanel","forwardRef"],"sources":["../../src/panels/InputFilterPanel.tsx"],"sourcesContent":["import React, { Component, type RefObject } from 'react';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport type { Container, EventEmitter } from '@deephaven/golden-layout';\nimport { type RootState } from '@deephaven/redux';\nimport { LayoutUtils } from '@deephaven/dashboard';\nimport { assertNotNull } from '@deephaven/utils';\nimport Panel from './Panel';\nimport InputFilter, {\n type InputFilterColumn,\n} from '../controls/input-filter/InputFilter';\nimport { getColumnsForDashboard } from '../redux';\nimport { emitFilterChanged } from '../FilterEvents';\n\nconst INPUT_FILTER_DEBOUNCE = 250;\n\nexport interface PanelState {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n timestamp?: number;\n}\n\ninterface InputFilterPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n panelState: PanelState;\n columns: InputFilterColumn[];\n}\n\ninterface InputFilterPanelState {\n columns: InputFilterColumn[];\n column?: InputFilterColumn;\n value?: string;\n timestamp: number;\n isValueShown: boolean;\n wasFlipped: boolean;\n skipUpdate: boolean;\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState; // Dehydrated panel state that can load this panel}\n}\nclass InputFilterPanel extends Component<\n InputFilterPanelProps,\n InputFilterPanelState\n> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'InputFilterPanel';\n\n // Have to explicitly specify displayName\n // otherwise it gets minified and breaks LayoutUtils.getComponentName\n static displayName = 'InputFilterPanel';\n\n constructor(props: InputFilterPanelProps) {\n super(props);\n\n this.handleChange = debounce(\n this.handleChange.bind(this),\n INPUT_FILTER_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n\n this.inputFilterRef = React.createRef();\n\n const { panelState } = props;\n // if panelstate is null, use destructured defaults\n const {\n value,\n isValueShown = false,\n name,\n type,\n timestamp = Date.now(),\n } = panelState ?? {};\n\n this.state = {\n columns: [],\n column: name != null && type != null ? { name, type } : undefined,\n value,\n timestamp,\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n };\n }\n\n componentDidMount(): void {\n this.updateColumns();\n\n const { column, value, timestamp } = this.state;\n if (column != null) {\n const { name, type } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n\n componentDidUpdate(prevProps: InputFilterPanelProps): void {\n const { columns } = this.props;\n if (columns !== prevProps.columns) {\n this.updateColumns();\n }\n }\n\n inputFilterRef: RefObject<InputFilter>;\n\n handleChange({\n column,\n isValueShown = false,\n value,\n }: {\n column?: InputFilterColumn;\n isValueShown?: boolean;\n value?: string;\n }): void {\n let name: string | undefined;\n let type: string | undefined;\n if (column != null) {\n ({ name, type } = column);\n }\n let sendUpdate = true;\n let timestamp = Date.now();\n this.setState(\n ({ panelState, timestamp: prevTimestamp, wasFlipped, skipUpdate }) => {\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n const isFlip =\n panelState != null &&\n isValueShown !== panelState.isValueShown &&\n name === panelState.name &&\n type === panelState.type &&\n value === panelState.value;\n sendUpdate =\n (!skipUpdate && isValueShown && (!isFlip || !wasFlipped)) ?? false;\n\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp,\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false,\n };\n },\n () => {\n if (sendUpdate) {\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n );\n }\n\n handleClearAllFilters(): void {\n this.inputFilterRef.current?.clearFilter();\n }\n\n sendUpdate(\n name?: string,\n type?: string,\n value?: string,\n timestamp?: number\n ): void {\n const { glEventHub } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitFilterChanged(\n glEventHub,\n panelId,\n name != null && type != null && value != null && timestamp != null\n ? {\n name,\n type,\n value,\n timestamp,\n }\n : null\n );\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param state Filter state to set\n * @param sendUpdate Emit filters changed event if true\n */\n setPanelState(state: PanelState, sendUpdate = false): void {\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({ skipUpdate: !sendUpdate });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n this.inputFilterRef.current?.setFilterState(state);\n }\n\n updateColumns(): void {\n const { columns } = this.props;\n if (columns == null) {\n return;\n }\n\n this.setState(state => {\n const { column } = state;\n\n if (column == null && columns.length > 0) {\n return {\n columns: [...columns],\n column: columns[0],\n };\n }\n\n if (\n column != null &&\n !columns.find(\n ({ name, type }) => column.name === name && column.type === type\n )\n ) {\n return { columns: [...columns, column] };\n }\n\n return { columns: [...columns] };\n });\n }\n\n render(): JSX.Element {\n const { glContainer, glEventHub } = this.props;\n const { column, columns, isValueShown, value } = this.state;\n return (\n <Panel\n className=\"iris-input-filter-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n isClonable\n isRenamable\n >\n <InputFilter\n ref={this.inputFilterRef}\n column={column}\n columns={columns}\n onChange={this.handleChange}\n isValueShown={isValueShown}\n value={value}\n />\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n): Pick<InputFilterPanelProps, 'columns'> => {\n const { localDashboardId } = ownProps;\n\n return {\n columns: getColumnsForDashboard(state, localDashboardId),\n };\n};\n\nconst ConnectedInputFilterPanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(InputFilterPanel);\n\nexport default ConnectedInputFilterPanel;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InputFilterPanel.js","names":["React","Component","connect","debounce","LayoutUtils","assertNotNull","Panel","InputFilter","getColumnsForDashboard","emitFilterChanged","jsx","_jsx","INPUT_FILTER_DEBOUNCE","InputFilterPanel","constructor","props","_defineProperty","handleChange","bind","handleClearAllFilters","inputFilterRef","createRef","panelState","value","isValueShown","name","type","timestamp","Date","now","state","columns","column","undefined","wasFlipped","skipUpdate","componentDidMount","updateColumns","sendUpdate","componentDidUpdate","prevProps","_ref","setState","_ref2","_ref3","prevTimestamp","isFlip","_this$inputFilterRef$","current","clearFilter","glEventHub","panelId","getIdFromPanel","setPanelState","_this$inputFilterRef$2","arguments","length","setFilterState","find","_ref4","render","glContainer","className","componentPanel","onClearAllFilters","isClonable","isRenamable","children","ref","onChange","mapStateToProps","ownProps","localDashboardId","ConnectedInputFilterPanel","forwardRef"],"sources":["../../src/panels/InputFilterPanel.tsx"],"sourcesContent":["import React, { Component, type RefObject } from 'react';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport type { Container, EventEmitter } from '@deephaven/golden-layout';\nimport { type RootState } from '@deephaven/redux';\nimport { LayoutUtils } from '@deephaven/dashboard';\nimport { assertNotNull } from '@deephaven/utils';\nimport Panel from './CorePanel';\nimport InputFilter, {\n type InputFilterColumn,\n} from '../controls/input-filter/InputFilter';\nimport { getColumnsForDashboard } from '../redux';\nimport { emitFilterChanged } from '../FilterEvents';\n\nconst INPUT_FILTER_DEBOUNCE = 250;\n\nexport interface PanelState {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n timestamp?: number;\n}\n\ninterface InputFilterPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n panelState: PanelState;\n columns: InputFilterColumn[];\n}\n\ninterface InputFilterPanelState {\n columns: InputFilterColumn[];\n column?: InputFilterColumn;\n value?: string;\n timestamp: number;\n isValueShown: boolean;\n wasFlipped: boolean;\n skipUpdate: boolean;\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState; // Dehydrated panel state that can load this panel}\n}\nclass InputFilterPanel extends Component<\n InputFilterPanelProps,\n InputFilterPanelState\n> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'InputFilterPanel';\n\n // Have to explicitly specify displayName\n // otherwise it gets minified and breaks LayoutUtils.getComponentName\n static displayName = 'InputFilterPanel';\n\n constructor(props: InputFilterPanelProps) {\n super(props);\n\n this.handleChange = debounce(\n this.handleChange.bind(this),\n INPUT_FILTER_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n\n this.inputFilterRef = React.createRef();\n\n const { panelState } = props;\n // if panelstate is null, use destructured defaults\n const {\n value,\n isValueShown = false,\n name,\n type,\n timestamp = Date.now(),\n } = panelState ?? {};\n\n this.state = {\n columns: [],\n column: name != null && type != null ? { name, type } : undefined,\n value,\n timestamp,\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n };\n }\n\n componentDidMount(): void {\n this.updateColumns();\n\n const { column, value, timestamp } = this.state;\n if (column != null) {\n const { name, type } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n\n componentDidUpdate(prevProps: InputFilterPanelProps): void {\n const { columns } = this.props;\n if (columns !== prevProps.columns) {\n this.updateColumns();\n }\n }\n\n inputFilterRef: RefObject<InputFilter>;\n\n handleChange({\n column,\n isValueShown = false,\n value,\n }: {\n column?: InputFilterColumn;\n isValueShown?: boolean;\n value?: string;\n }): void {\n let name: string | undefined;\n let type: string | undefined;\n if (column != null) {\n ({ name, type } = column);\n }\n let sendUpdate = true;\n let timestamp = Date.now();\n this.setState(\n ({ panelState, timestamp: prevTimestamp, wasFlipped, skipUpdate }) => {\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n const isFlip =\n panelState != null &&\n isValueShown !== panelState.isValueShown &&\n name === panelState.name &&\n type === panelState.type &&\n value === panelState.value;\n sendUpdate =\n (!skipUpdate && isValueShown && (!isFlip || !wasFlipped)) ?? false;\n\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp,\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false,\n };\n },\n () => {\n if (sendUpdate) {\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n );\n }\n\n handleClearAllFilters(): void {\n this.inputFilterRef.current?.clearFilter();\n }\n\n sendUpdate(\n name?: string,\n type?: string,\n value?: string,\n timestamp?: number\n ): void {\n const { glEventHub } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitFilterChanged(\n glEventHub,\n panelId,\n name != null && type != null && value != null && timestamp != null\n ? {\n name,\n type,\n value,\n timestamp,\n }\n : null\n );\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param state Filter state to set\n * @param sendUpdate Emit filters changed event if true\n */\n setPanelState(state: PanelState, sendUpdate = false): void {\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({ skipUpdate: !sendUpdate });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n this.inputFilterRef.current?.setFilterState(state);\n }\n\n updateColumns(): void {\n const { columns } = this.props;\n if (columns == null) {\n return;\n }\n\n this.setState(state => {\n const { column } = state;\n\n if (column == null && columns.length > 0) {\n return {\n columns: [...columns],\n column: columns[0],\n };\n }\n\n if (\n column != null &&\n !columns.find(\n ({ name, type }) => column.name === name && column.type === type\n )\n ) {\n return { columns: [...columns, column] };\n }\n\n return { columns: [...columns] };\n });\n }\n\n render(): JSX.Element {\n const { glContainer, glEventHub } = this.props;\n const { column, columns, isValueShown, value } = this.state;\n return (\n <Panel\n className=\"iris-input-filter-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n isClonable\n isRenamable\n >\n <InputFilter\n ref={this.inputFilterRef}\n column={column}\n columns={columns}\n onChange={this.handleChange}\n isValueShown={isValueShown}\n value={value}\n />\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n): Pick<InputFilterPanelProps, 'columns'> => {\n const { localDashboardId } = ownProps;\n\n return {\n columns: getColumnsForDashboard(state, localDashboardId),\n };\n};\n\nconst ConnectedInputFilterPanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(InputFilterPanel);\n\nexport default ConnectedInputFilterPanel;\n"],"mappings":"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"}
|
|
@@ -179,9 +179,9 @@ export declare class IrisGridPanel extends PureComponent<IrisGridPanelProps, Iri
|
|
|
179
179
|
updateGrid(): void;
|
|
180
180
|
render(): ReactElement;
|
|
181
181
|
}
|
|
182
|
-
declare const ConnectedIrisGridPanel: import("react-redux").ConnectedComponent<typeof IrisGridPanel, import("react-redux").Omit<Pick<React.ClassAttributes<IrisGridPanel> & OwnProps & StateProps, "
|
|
182
|
+
declare const ConnectedIrisGridPanel: import("react-redux").ConnectedComponent<typeof IrisGridPanel, import("react-redux").Omit<Pick<React.ClassAttributes<IrisGridPanel> & OwnProps & StateProps, "glEventHub" | "children" | "glContainer" | "metadata" | "localDashboardId" | keyof StateProps | "panelState" | "makeModel" | "getDownloadWorker" | "loadPlugin" | "theme" | keyof React.ClassAttributes<IrisGridPanel>> & Partial<Pick<React.ClassAttributes<IrisGridPanel> & OwnProps & StateProps, "onStateChange" | "onPanelStateUpdate">> & Partial<Pick<{
|
|
183
183
|
onStateChange: () => void;
|
|
184
184
|
onPanelStateUpdate: () => void;
|
|
185
|
-
}, never>>, "
|
|
185
|
+
}, never>>, "user" | "inputFilters" | "links" | "columnSelectionValidator" | "settings"> & OwnProps>;
|
|
186
186
|
export default ConnectedIrisGridPanel;
|
|
187
187
|
//# sourceMappingURL=IrisGridPanel.d.ts.map
|
|
@@ -26,7 +26,7 @@ declare class LogPanel extends PureComponent<LogPanelProps, LogPanelState> {
|
|
|
26
26
|
updateDimensions(): void;
|
|
27
27
|
render(): JSX.Element;
|
|
28
28
|
}
|
|
29
|
-
declare const ConnectedLogPanel: import("react-redux").ConnectedComponent<typeof LogPanel, import("react-redux").Omit<Pick<LogPanelProps, "
|
|
29
|
+
declare const ConnectedLogPanel: import("react-redux").ConnectedComponent<typeof LogPanel, import("react-redux").Omit<Pick<LogPanelProps, "glEventHub" | "glContainer" | "metadata" | "localDashboardId" | "panelState"> & Partial<Pick<LogPanelProps, "session">> & Partial<Pick<{
|
|
30
30
|
session: null;
|
|
31
31
|
}, never>>, "session"> & {
|
|
32
32
|
localDashboardId: string;
|
package/dist/panels/LogPanel.js
CHANGED
|
@@ -8,7 +8,7 @@ import { connect } from 'react-redux';
|
|
|
8
8
|
import { LogView } from '@deephaven/console';
|
|
9
9
|
import Log from '@deephaven/log';
|
|
10
10
|
import "./LogPanel.css";
|
|
11
|
-
import Panel from "./
|
|
11
|
+
import Panel from "./CorePanel.js";
|
|
12
12
|
import { getDashboardSessionWrapper } from "../redux/index.js";
|
|
13
13
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
14
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogPanel.js","names":["React","PureComponent","connect","LogView","Log","Panel","getDashboardSessionWrapper","jsx","_jsx","jsxs","_jsxs","log","module","LogPanel","constructor","props","_defineProperty","handleResize","bind","handleShow","handleHide","handleSessionOpened","handleSessionClosed","isBottomVisible","logView","session","state","updateDimensions","triggerFindWidget","scrollToBottom","debug","setState","render","glContainer","glEventHub","componentPanel","onResize","onHide","onShow","onSessionOpen","onSessionClose","children","className","ref","mapStateToProps","ownProps","_getDashboardSessionW","localDashboardId","ConnectedLogPanel","forwardRef"],"sources":["../../src/panels/LogPanel.tsx"],"sourcesContent":["// Wrapper for the Console for use in a golden layout container\n// Will probably need to handle window popping out from golden layout here.\nimport React, { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport { LogView } from '@deephaven/console';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type DashboardPanelProps } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { type RootState } from '@deephaven/redux';\nimport './LogPanel.scss';\nimport Panel from './
|
|
1
|
+
{"version":3,"file":"LogPanel.js","names":["React","PureComponent","connect","LogView","Log","Panel","getDashboardSessionWrapper","jsx","_jsx","jsxs","_jsxs","log","module","LogPanel","constructor","props","_defineProperty","handleResize","bind","handleShow","handleHide","handleSessionOpened","handleSessionClosed","isBottomVisible","logView","session","state","updateDimensions","triggerFindWidget","scrollToBottom","debug","setState","render","glContainer","glEventHub","componentPanel","onResize","onHide","onShow","onSessionOpen","onSessionClose","children","className","ref","mapStateToProps","ownProps","_getDashboardSessionW","localDashboardId","ConnectedLogPanel","forwardRef"],"sources":["../../src/panels/LogPanel.tsx"],"sourcesContent":["// Wrapper for the Console for use in a golden layout container\n// Will probably need to handle window popping out from golden layout here.\nimport React, { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport { LogView } from '@deephaven/console';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type DashboardPanelProps } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { type RootState } from '@deephaven/redux';\nimport './LogPanel.scss';\nimport Panel from './CorePanel';\nimport { getDashboardSessionWrapper } from '../redux';\n\nconst log = Log.module('LogPanel');\n\ninterface LogPanelProps extends DashboardPanelProps {\n session?: dh.IdeSession;\n}\n\ninterface LogPanelState {\n session?: dh.IdeSession;\n}\n\nclass LogPanel extends PureComponent<LogPanelProps, LogPanelState> {\n static defaultProps = {\n session: null,\n };\n\n static COMPONENT = 'LogPanel';\n\n static TITLE = 'Log';\n\n constructor(props: LogPanelProps) {\n super(props);\n\n this.handleResize = this.handleResize.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n\n this.isBottomVisible = true;\n this.logView = null;\n\n const { session } = this.props;\n\n this.state = { session };\n }\n\n isBottomVisible: boolean;\n\n logView: LogView | null;\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleShow(): void {\n this.updateDimensions();\n if (this.logView) {\n this.logView.triggerFindWidget();\n\n if (this.isBottomVisible) {\n this.logView.scrollToBottom();\n }\n }\n }\n\n handleHide(): void {\n if (this.logView) {\n this.isBottomVisible = this.logView.isBottomVisible();\n }\n }\n\n handleSessionOpened(session: dh.IdeSession): void {\n log.debug('Session opened', [session]);\n this.setState({ session });\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleSessionClosed(session: dh.IdeSession): void {\n log.debug('Session closed', session);\n // Keep the session reference in state unchanged until the session is re-connected\n }\n\n updateDimensions(): void {\n if (this.logView) {\n this.logView.updateDimensions();\n }\n }\n\n render(): JSX.Element {\n const { glContainer, glEventHub } = this.props;\n const { session } = this.state;\n return (\n <Panel\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onResize={this.handleResize}\n onHide={this.handleHide}\n onShow={this.handleShow}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n >\n {session == null && (\n <div className=\"log-panel-disconnected-message\">\n Waiting for session connection\n </div>\n )}\n {session != null && (\n <LogView\n session={session}\n ref={logView => {\n this.logView = logView;\n }}\n />\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n): Pick<LogPanelProps, 'session'> => ({\n session: getDashboardSessionWrapper(state, ownProps.localDashboardId)\n ?.session,\n});\n\nconst ConnectedLogPanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(LogPanel);\n\nexport default ConnectedLogPanel;\n"],"mappings":";;;AAAA;AACA;AACA,OAAOA,KAAK,IAAIC,aAAa,QAAQ,OAAO;AAC5C,SAASC,OAAO,QAAQ,aAAa;AACrC,SAASC,OAAO,QAAQ,oBAAoB;AAG5C,OAAOC,GAAG,MAAM,gBAAgB;AAAC;AAAA,OAG1BC,KAAK;AAAA,SACHC,0BAA0B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAEnC,IAAMC,GAAG,GAAGP,GAAG,CAACQ,MAAM,CAAC,UAAU,CAAC;AAUlC,MAAMC,QAAQ,SAASZ,aAAa,CAA+B;EASjEa,WAAWA,CAACC,KAAoB,EAAE;IAChC,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IAEb,IAAI,CAACC,YAAY,GAAG,IAAI,CAACA,YAAY,CAACC,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACC,UAAU,GAAG,IAAI,CAACA,UAAU,CAACD,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACE,UAAU,GAAG,IAAI,CAACA,UAAU,CAACF,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACG,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACH,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACI,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACJ,IAAI,CAAC,IAAI,CAAC;IAE9D,IAAI,CAACK,eAAe,GAAG,IAAI;IAC3B,IAAI,CAACC,OAAO,GAAG,IAAI;IAEnB,IAAM;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACV,KAAK;IAE9B,IAAI,CAACW,KAAK,GAAG;MAAED;IAAQ,CAAC;EAC1B;EAMAR,YAAYA,CAAA,EAAS;IACnB,IAAI,CAACU,gBAAgB,CAAC,CAAC;EACzB;EAEAR,UAAUA,CAAA,EAAS;IACjB,IAAI,CAACQ,gBAAgB,CAAC,CAAC;IACvB,IAAI,IAAI,CAACH,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAACI,iBAAiB,CAAC,CAAC;MAEhC,IAAI,IAAI,CAACL,eAAe,EAAE;QACxB,IAAI,CAACC,OAAO,CAACK,cAAc,CAAC,CAAC;MAC/B;IACF;EACF;EAEAT,UAAUA,CAAA,EAAS;IACjB,IAAI,IAAI,CAACI,OAAO,EAAE;MAChB,IAAI,CAACD,eAAe,GAAG,IAAI,CAACC,OAAO,CAACD,eAAe,CAAC,CAAC;IACvD;EACF;EAEAF,mBAAmBA,CAACI,OAAsB,EAAQ;IAChDd,GAAG,CAACmB,KAAK,CAAC,gBAAgB,EAAE,CAACL,OAAO,CAAC,CAAC;IACtC,IAAI,CAACM,QAAQ,CAAC;MAAEN;IAAQ,CAAC,CAAC;EAC5B;;EAEA;EACAH,mBAAmBA,CAACG,OAAsB,EAAQ;IAChDd,GAAG,CAACmB,KAAK,CAAC,gBAAgB,EAAEL,OAAO,CAAC;IACpC;EACF;;EAEAE,gBAAgBA,CAAA,EAAS;IACvB,IAAI,IAAI,CAACH,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAACG,gBAAgB,CAAC,CAAC;IACjC;EACF;EAEAK,MAAMA,CAAA,EAAgB;IACpB,IAAM;MAAEC,WAAW;MAAEC;IAAW,CAAC,GAAG,IAAI,CAACnB,KAAK;IAC9C,IAAM;MAAEU;IAAQ,CAAC,GAAG,IAAI,CAACC,KAAK;IAC9B,oBACEhB,KAAA,CAACL,KAAK;MACJ8B,cAAc,EAAE,IAAK;MACrBF,WAAW,EAAEA,WAAY;MACzBC,UAAU,EAAEA,UAAW;MACvBE,QAAQ,EAAE,IAAI,CAACnB,YAAa;MAC5BoB,MAAM,EAAE,IAAI,CAACjB,UAAW;MACxBkB,MAAM,EAAE,IAAI,CAACnB,UAAW;MACxBoB,aAAa,EAAE,IAAI,CAAClB,mBAAoB;MACxCmB,cAAc,EAAE,IAAI,CAAClB,mBAAoB;MAAAmB,QAAA,GAExChB,OAAO,IAAI,IAAI,iBACdjB,IAAA;QAAKkC,SAAS,EAAC,gCAAgC;QAAAD,QAAA,EAAC;MAEhD,CAAK,CACN,EACAhB,OAAO,IAAI,IAAI,iBACdjB,IAAA,CAACL,OAAO;QACNsB,OAAO,EAAEA,OAAQ;QACjBkB,GAAG,EAAEnB,OAAO,IAAI;UACd,IAAI,CAACA,OAAO,GAAGA,OAAO;QACxB;MAAE,CACH,CACF;IAAA,CACI,CAAC;EAEZ;AACF;AAACR,eAAA,CAlGKH,QAAQ,kBACU;EACpBY,OAAO,EAAE;AACX,CAAC;AAAAT,eAAA,CAHGH,QAAQ,eAKO,UAAU;AAAAG,eAAA,CALzBH,QAAQ,WAOG,KAAK;AA6FtB,IAAM+B,eAAe,GAAGA,CACtBlB,KAAgB,EAChBmB,QAAsC;EAAA,IAAAC,qBAAA;EAAA,OACF;IACpCrB,OAAO,GAAAqB,qBAAA,GAAExC,0BAA0B,CAACoB,KAAK,EAAEmB,QAAQ,CAACE,gBAAgB,CAAC,cAAAD,qBAAA,uBAA5DA,qBAAA,CACLrB;EACN,CAAC;AAAA,CAAC;AAEF,IAAMuB,iBAAiB,GAAG9C,OAAO,CAAC0C,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE;EAC7DK,UAAU,EAAE;AACd,CAAC,CAAC,CAACpC,QAAQ,CAAC;AAEZ,eAAemC,iBAAiB"}
|
|
@@ -36,7 +36,7 @@ export declare class MarkdownPanel extends Component<MarkdownPanelProps, Markdow
|
|
|
36
36
|
handleEditorResize(): void;
|
|
37
37
|
render(): ReactElement;
|
|
38
38
|
}
|
|
39
|
-
declare const ConnectedMarkdownPanel: import("react-redux").ConnectedComponent<typeof MarkdownPanel, import("react-redux").Omit<Pick<MarkdownPanelProps, "
|
|
39
|
+
declare const ConnectedMarkdownPanel: import("react-redux").ConnectedComponent<typeof MarkdownPanel, import("react-redux").Omit<Pick<MarkdownPanelProps, "glEventHub" | "glContainer" | "metadata" | "localDashboardId" | "closedPanels"> & Partial<Pick<MarkdownPanelProps, "panelState">> & Partial<Pick<{
|
|
40
40
|
panelState: null;
|
|
41
41
|
}, never>>, "closedPanels"> & {
|
|
42
42
|
localDashboardId: string;
|
|
@@ -8,7 +8,7 @@ import { getClosedPanelsForDashboard, LayoutUtils, PanelEvent } from '@deephaven
|
|
|
8
8
|
import Log from '@deephaven/log';
|
|
9
9
|
import { assertNotNull } from '@deephaven/utils';
|
|
10
10
|
import { LoadingOverlay } from '@deephaven/components';
|
|
11
|
-
import Panel from "./
|
|
11
|
+
import Panel from "./CorePanel.js";
|
|
12
12
|
import MarkdownContainer from "../controls/markdown/MarkdownContainer.js";
|
|
13
13
|
import MarkdownStartPage from "../controls/markdown/MarkdownStartPage.js";
|
|
14
14
|
import "./MarkdownPanel.css";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownPanel.js","names":["React","Component","Suspense","lazy","memoize","connect","getClosedPanelsForDashboard","LayoutUtils","PanelEvent","Log","assertNotNull","LoadingOverlay","Panel","MarkdownContainer","MarkdownStartPage","MarkdownUtils","jsx","_jsx","MarkdownEditor","log","module","MarkdownPanel","constructor","props","_defineProperty","getClosedMarkdowns","handleContainerDoubleClick","bind","handleCreateMarkdown","handleDeleteMarkdown","handleOpenMarkdown","handleEditorInitialized","handleEditorBlur","handleEditorResize","panelState","content","DEFAULT_CONTENT","state","isStartPageShown","closedPanels","length","isEditing","markdownEditor","setEditorPosition","clickPositionY","container","markdownEditorContainer","editor","_this$editor$getModel","_this$editor$getModel2","contentTop","getBoundingClientRect","top","contentScrollTop","scrollTop","contentScrollHeight","scrollHeight","totalLines","getModel","getLineCount","lineToFocus","Math","round","revealLine","setPosition","lineNumber","column","focus","event","dbClickPositionY","clientY","setState","debug","markdown","glContainer","glEventHub","config","getComponentConfigFromContainer","emit","REOPEN","DELETE","_this$editor","contains","relatedTarget","getValue","layout","render","closedMarkdowns","className","componentPanel","onResize","onBlur","isClonable","isRenamable","children","onCreate","onOpen","onDelete","onDoubleClick","fallback","ref","onEditorInitialized","mapStateToProps","ownProps","localDashboardId","ConnectedMarkdownPanel","forwardRef"],"sources":["../../src/panels/MarkdownPanel.tsx"],"sourcesContent":["import React, {\n Component,\n type FocusEvent,\n type MouseEvent,\n type ReactElement,\n Suspense,\n lazy,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport {\n type ClosedPanel,\n type DashboardPanelProps,\n getClosedPanelsForDashboard,\n LayoutUtils,\n PanelEvent,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\nimport type * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport { type RootState } from '@deephaven/redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport Panel from './Panel';\nimport MarkdownContainer from '../controls/markdown/MarkdownContainer';\nimport MarkdownStartPage from '../controls/markdown/MarkdownStartPage';\nimport './MarkdownPanel.scss';\nimport type MarkdownEditorType from '../controls/markdown/MarkdownEditor';\nimport MarkdownUtils from '../controls/markdown/MarkdownUtils';\n\nconst MarkdownEditor = lazy(\n () => import('../controls/markdown/MarkdownEditor')\n);\n\nconst log = Log.module('MarkdownPanel');\n\ninterface PanelState {\n content?: string;\n}\n\ninterface MarkdownPanelProps extends DashboardPanelProps {\n panelState: PanelState;\n closedPanels: ClosedPanel[];\n}\n\ninterface MarkdownPanelState {\n isStartPageShown: boolean;\n isEditing: boolean;\n content?: string | null;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n}\n\nexport class MarkdownPanel extends Component<\n MarkdownPanelProps,\n MarkdownPanelState\n> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'MarkdownPanel';\n\n constructor(props: MarkdownPanelProps) {\n super(props);\n\n this.handleContainerDoubleClick =\n this.handleContainerDoubleClick.bind(this);\n this.handleCreateMarkdown = this.handleCreateMarkdown.bind(this);\n this.handleDeleteMarkdown = this.handleDeleteMarkdown.bind(this);\n this.handleOpenMarkdown = this.handleOpenMarkdown.bind(this);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleEditorResize = this.handleEditorResize.bind(this);\n\n const { panelState } = props;\n let content = null;\n if (panelState != null && panelState.content != null) {\n if (panelState.content !== '') {\n ({ content } = panelState);\n } else {\n content = MarkdownUtils.DEFAULT_CONTENT;\n }\n }\n\n this.state = {\n isStartPageShown:\n content == null &&\n this.getClosedMarkdowns(props.closedPanels).length !== 0,\n isEditing: false,\n content,\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n\n this.markdownEditor = null;\n }\n\n markdownEditor: MarkdownEditorType | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setEditorPosition(clickPositionY: number): void {\n assertNotNull(this.markdownEditor);\n const { container: markdownEditorContainer } = this.markdownEditor;\n if (this.editor && markdownEditorContainer != null) {\n const contentTop = markdownEditorContainer.getBoundingClientRect().top;\n const contentScrollTop = markdownEditorContainer.scrollTop;\n const contentScrollHeight = markdownEditorContainer.scrollHeight;\n const totalLines = this.editor.getModel()?.getLineCount() ?? 0;\n\n let lineToFocus = Math.round(\n ((contentScrollTop + clickPositionY - contentTop) /\n contentScrollHeight) *\n totalLines\n );\n if (lineToFocus > totalLines) {\n lineToFocus = totalLines;\n }\n\n this.editor.revealLine(lineToFocus);\n this.editor.setPosition({\n lineNumber: lineToFocus,\n column: 1,\n });\n this.editor.focus();\n }\n }\n\n getClosedMarkdowns = memoize(MarkdownUtils.getClosedMarkdowns);\n\n handleContainerDoubleClick(event: MouseEvent<Element>): void {\n const { isEditing } = this.state;\n const dbClickPositionY = event.clientY;\n\n if (!isEditing) {\n this.setState({ isEditing: true }, () => {\n this.setEditorPosition(dbClickPositionY);\n });\n }\n }\n\n handleEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor): void {\n log.debug('Markdown Editor Initialized...');\n this.editor = editor;\n }\n\n handleCreateMarkdown(): void {\n log.debug('create markdown...');\n\n this.setState(\n {\n isStartPageShown: false,\n content: '',\n isEditing: true,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content: '' },\n },\n () => {\n if (this.editor != null && this.editor.focus != null) {\n this.editor.focus();\n }\n }\n );\n }\n\n handleOpenMarkdown(markdown: ReactComponentConfig): void {\n log.debug('open markdown...', markdown);\n\n const { glContainer, glEventHub } = this.props;\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n glEventHub.emit(PanelEvent.REOPEN, markdown, config);\n }\n\n handleDeleteMarkdown(markdown: ReactComponentConfig): void {\n const { glEventHub } = this.props;\n glEventHub.emit(PanelEvent.DELETE, markdown);\n }\n\n handleEditorBlur(event: FocusEvent<HTMLDivElement>): void {\n log.debug(`markdown content changed, saving...`);\n const { isEditing } = this.state;\n\n // if not in edit mode, or in edit mode but blur went to an internal monaco field (like search)\n if (\n !isEditing ||\n (this.markdownEditor != null &&\n this.markdownEditor.container != null &&\n this.markdownEditor.container.contains(event.relatedTarget))\n ) {\n return;\n }\n\n const content = this.editor?.getValue();\n\n this.setState({\n content,\n isEditing: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content },\n });\n }\n\n handleEditorResize(): void {\n const { isEditing } = this.state;\n if (isEditing && this.editor) {\n this.editor.layout();\n }\n }\n\n render(): ReactElement {\n const { glContainer, glEventHub, closedPanels } = this.props;\n const { isEditing, isStartPageShown, content } = this.state;\n const closedMarkdowns = this.getClosedMarkdowns(closedPanels);\n\n return (\n <Panel\n glContainer={glContainer}\n glEventHub={glEventHub}\n className=\"markdown-panel\"\n componentPanel={this}\n onResize={this.handleEditorResize}\n onBlur={this.handleEditorBlur}\n isClonable\n isRenamable\n >\n {isStartPageShown ? (\n <MarkdownStartPage\n closedMarkdowns={closedMarkdowns}\n onCreate={this.handleCreateMarkdown}\n onOpen={this.handleOpenMarkdown}\n onDelete={this.handleDeleteMarkdown}\n />\n ) : (\n <MarkdownContainer\n isEditing={isEditing}\n onDoubleClick={this.handleContainerDoubleClick}\n >\n <Suspense fallback={<LoadingOverlay />}>\n <MarkdownEditor\n ref={markdownEditor => {\n this.markdownEditor = markdownEditor;\n }}\n isEditing={isEditing}\n content={content ?? MarkdownUtils.DEFAULT_CONTENT}\n onEditorInitialized={this.handleEditorInitialized}\n />\n </Suspense>\n </MarkdownContainer>\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n): Pick<MarkdownPanelProps, 'closedPanels'> => {\n const { localDashboardId } = ownProps;\n return {\n closedPanels: getClosedPanelsForDashboard(state, localDashboardId),\n };\n};\n\nconst ConnectedMarkdownPanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(MarkdownPanel);\n\nexport default ConnectedMarkdownPanel;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarkdownPanel.js","names":["React","Component","Suspense","lazy","memoize","connect","getClosedPanelsForDashboard","LayoutUtils","PanelEvent","Log","assertNotNull","LoadingOverlay","Panel","MarkdownContainer","MarkdownStartPage","MarkdownUtils","jsx","_jsx","MarkdownEditor","log","module","MarkdownPanel","constructor","props","_defineProperty","getClosedMarkdowns","handleContainerDoubleClick","bind","handleCreateMarkdown","handleDeleteMarkdown","handleOpenMarkdown","handleEditorInitialized","handleEditorBlur","handleEditorResize","panelState","content","DEFAULT_CONTENT","state","isStartPageShown","closedPanels","length","isEditing","markdownEditor","setEditorPosition","clickPositionY","container","markdownEditorContainer","editor","_this$editor$getModel","_this$editor$getModel2","contentTop","getBoundingClientRect","top","contentScrollTop","scrollTop","contentScrollHeight","scrollHeight","totalLines","getModel","getLineCount","lineToFocus","Math","round","revealLine","setPosition","lineNumber","column","focus","event","dbClickPositionY","clientY","setState","debug","markdown","glContainer","glEventHub","config","getComponentConfigFromContainer","emit","REOPEN","DELETE","_this$editor","contains","relatedTarget","getValue","layout","render","closedMarkdowns","className","componentPanel","onResize","onBlur","isClonable","isRenamable","children","onCreate","onOpen","onDelete","onDoubleClick","fallback","ref","onEditorInitialized","mapStateToProps","ownProps","localDashboardId","ConnectedMarkdownPanel","forwardRef"],"sources":["../../src/panels/MarkdownPanel.tsx"],"sourcesContent":["import React, {\n Component,\n type FocusEvent,\n type MouseEvent,\n type ReactElement,\n Suspense,\n lazy,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport {\n type ClosedPanel,\n type DashboardPanelProps,\n getClosedPanelsForDashboard,\n LayoutUtils,\n PanelEvent,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\nimport type * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport { type RootState } from '@deephaven/redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport Panel from './CorePanel';\nimport MarkdownContainer from '../controls/markdown/MarkdownContainer';\nimport MarkdownStartPage from '../controls/markdown/MarkdownStartPage';\nimport './MarkdownPanel.scss';\nimport type MarkdownEditorType from '../controls/markdown/MarkdownEditor';\nimport MarkdownUtils from '../controls/markdown/MarkdownUtils';\n\nconst MarkdownEditor = lazy(\n () => import('../controls/markdown/MarkdownEditor')\n);\n\nconst log = Log.module('MarkdownPanel');\n\ninterface PanelState {\n content?: string;\n}\n\ninterface MarkdownPanelProps extends DashboardPanelProps {\n panelState: PanelState;\n closedPanels: ClosedPanel[];\n}\n\ninterface MarkdownPanelState {\n isStartPageShown: boolean;\n isEditing: boolean;\n content?: string | null;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n}\n\nexport class MarkdownPanel extends Component<\n MarkdownPanelProps,\n MarkdownPanelState\n> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'MarkdownPanel';\n\n constructor(props: MarkdownPanelProps) {\n super(props);\n\n this.handleContainerDoubleClick =\n this.handleContainerDoubleClick.bind(this);\n this.handleCreateMarkdown = this.handleCreateMarkdown.bind(this);\n this.handleDeleteMarkdown = this.handleDeleteMarkdown.bind(this);\n this.handleOpenMarkdown = this.handleOpenMarkdown.bind(this);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleEditorResize = this.handleEditorResize.bind(this);\n\n const { panelState } = props;\n let content = null;\n if (panelState != null && panelState.content != null) {\n if (panelState.content !== '') {\n ({ content } = panelState);\n } else {\n content = MarkdownUtils.DEFAULT_CONTENT;\n }\n }\n\n this.state = {\n isStartPageShown:\n content == null &&\n this.getClosedMarkdowns(props.closedPanels).length !== 0,\n isEditing: false,\n content,\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n\n this.markdownEditor = null;\n }\n\n markdownEditor: MarkdownEditorType | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setEditorPosition(clickPositionY: number): void {\n assertNotNull(this.markdownEditor);\n const { container: markdownEditorContainer } = this.markdownEditor;\n if (this.editor && markdownEditorContainer != null) {\n const contentTop = markdownEditorContainer.getBoundingClientRect().top;\n const contentScrollTop = markdownEditorContainer.scrollTop;\n const contentScrollHeight = markdownEditorContainer.scrollHeight;\n const totalLines = this.editor.getModel()?.getLineCount() ?? 0;\n\n let lineToFocus = Math.round(\n ((contentScrollTop + clickPositionY - contentTop) /\n contentScrollHeight) *\n totalLines\n );\n if (lineToFocus > totalLines) {\n lineToFocus = totalLines;\n }\n\n this.editor.revealLine(lineToFocus);\n this.editor.setPosition({\n lineNumber: lineToFocus,\n column: 1,\n });\n this.editor.focus();\n }\n }\n\n getClosedMarkdowns = memoize(MarkdownUtils.getClosedMarkdowns);\n\n handleContainerDoubleClick(event: MouseEvent<Element>): void {\n const { isEditing } = this.state;\n const dbClickPositionY = event.clientY;\n\n if (!isEditing) {\n this.setState({ isEditing: true }, () => {\n this.setEditorPosition(dbClickPositionY);\n });\n }\n }\n\n handleEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor): void {\n log.debug('Markdown Editor Initialized...');\n this.editor = editor;\n }\n\n handleCreateMarkdown(): void {\n log.debug('create markdown...');\n\n this.setState(\n {\n isStartPageShown: false,\n content: '',\n isEditing: true,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content: '' },\n },\n () => {\n if (this.editor != null && this.editor.focus != null) {\n this.editor.focus();\n }\n }\n );\n }\n\n handleOpenMarkdown(markdown: ReactComponentConfig): void {\n log.debug('open markdown...', markdown);\n\n const { glContainer, glEventHub } = this.props;\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n glEventHub.emit(PanelEvent.REOPEN, markdown, config);\n }\n\n handleDeleteMarkdown(markdown: ReactComponentConfig): void {\n const { glEventHub } = this.props;\n glEventHub.emit(PanelEvent.DELETE, markdown);\n }\n\n handleEditorBlur(event: FocusEvent<HTMLDivElement>): void {\n log.debug(`markdown content changed, saving...`);\n const { isEditing } = this.state;\n\n // if not in edit mode, or in edit mode but blur went to an internal monaco field (like search)\n if (\n !isEditing ||\n (this.markdownEditor != null &&\n this.markdownEditor.container != null &&\n this.markdownEditor.container.contains(event.relatedTarget))\n ) {\n return;\n }\n\n const content = this.editor?.getValue();\n\n this.setState({\n content,\n isEditing: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content },\n });\n }\n\n handleEditorResize(): void {\n const { isEditing } = this.state;\n if (isEditing && this.editor) {\n this.editor.layout();\n }\n }\n\n render(): ReactElement {\n const { glContainer, glEventHub, closedPanels } = this.props;\n const { isEditing, isStartPageShown, content } = this.state;\n const closedMarkdowns = this.getClosedMarkdowns(closedPanels);\n\n return (\n <Panel\n glContainer={glContainer}\n glEventHub={glEventHub}\n className=\"markdown-panel\"\n componentPanel={this}\n onResize={this.handleEditorResize}\n onBlur={this.handleEditorBlur}\n isClonable\n isRenamable\n >\n {isStartPageShown ? (\n <MarkdownStartPage\n closedMarkdowns={closedMarkdowns}\n onCreate={this.handleCreateMarkdown}\n onOpen={this.handleOpenMarkdown}\n onDelete={this.handleDeleteMarkdown}\n />\n ) : (\n <MarkdownContainer\n isEditing={isEditing}\n onDoubleClick={this.handleContainerDoubleClick}\n >\n <Suspense fallback={<LoadingOverlay />}>\n <MarkdownEditor\n ref={markdownEditor => {\n this.markdownEditor = markdownEditor;\n }}\n isEditing={isEditing}\n content={content ?? MarkdownUtils.DEFAULT_CONTENT}\n onEditorInitialized={this.handleEditorInitialized}\n />\n </Suspense>\n </MarkdownContainer>\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n): Pick<MarkdownPanelProps, 'closedPanels'> => {\n const { localDashboardId } = ownProps;\n return {\n closedPanels: getClosedPanelsForDashboard(state, localDashboardId),\n };\n};\n\nconst ConnectedMarkdownPanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(MarkdownPanel);\n\nexport default ConnectedMarkdownPanel;\n"],"mappings":"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"}
|
|
@@ -193,7 +193,7 @@ declare class NotebookPanel extends Component<NotebookPanelProps, NotebookPanelS
|
|
|
193
193
|
getDropdownOverflowActions(): DropdownAction[];
|
|
194
194
|
render(): ReactElement;
|
|
195
195
|
}
|
|
196
|
-
declare const ConnectedNotebookPanel: import("react-redux").ConnectedComponent<typeof NotebookPanel, import("react-redux").Omit<Pick<NotebookPanelProps, "
|
|
196
|
+
declare const ConnectedNotebookPanel: import("react-redux").ConnectedComponent<typeof NotebookPanel, import("react-redux").Omit<Pick<NotebookPanelProps, "glEventHub" | "glContainer" | "metadata" | "localDashboardId" | "panelState" | "fileStorage" | "notebooksUrl" | "updateNotebookSettings"> & Partial<Pick<NotebookPanelProps, "notebookSettings" | "session" | "isDashboardActive" | "isPreview" | "sessionLanguage">> & Partial<Pick<{
|
|
197
197
|
isDashboardActive: boolean;
|
|
198
198
|
isPreview: boolean;
|
|
199
199
|
session: null;
|
|
@@ -23,7 +23,7 @@ import Log from '@deephaven/log';
|
|
|
23
23
|
import { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';
|
|
24
24
|
import { ConsoleEvent, NotebookEvent } from "../events/index.js";
|
|
25
25
|
import { getDashboardSessionWrapper } from "../redux/index.js";
|
|
26
|
-
import Panel from "./
|
|
26
|
+
import Panel from "./CorePanel.js";
|
|
27
27
|
import "./NotebookPanel.css";
|
|
28
28
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
29
29
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|