@deephaven/dashboard-core-plugins 0.109.1-beta.6 → 0.109.1-beta.7

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 (43) hide show
  1. package/dist/FilterEvents.d.ts +86 -0
  2. package/dist/FilterEvents.d.ts.map +1 -0
  3. package/dist/FilterEvents.js +78 -0
  4. package/dist/FilterEvents.js.map +1 -0
  5. package/dist/FilterPlugin.d.ts +1 -12
  6. package/dist/FilterPlugin.d.ts.map +1 -1
  7. package/dist/FilterPlugin.js +30 -23
  8. package/dist/FilterPlugin.js.map +1 -1
  9. package/dist/GridWidgetPlugin.d.ts.map +1 -1
  10. package/dist/GridWidgetPlugin.js +22 -4
  11. package/dist/GridWidgetPlugin.js.map +1 -1
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/linker/Linker.d.ts +3 -2
  17. package/dist/linker/Linker.d.ts.map +1 -1
  18. package/dist/linker/Linker.js +11 -2
  19. package/dist/linker/Linker.js.map +1 -1
  20. package/dist/linker/LinkerUtils.d.ts +2 -2
  21. package/dist/linker/LinkerUtils.d.ts.map +1 -1
  22. package/dist/linker/LinkerUtils.js.map +1 -1
  23. package/dist/panels/ChartPanel.d.ts.map +1 -1
  24. package/dist/panels/ChartPanel.js +4 -1
  25. package/dist/panels/ChartPanel.js.map +1 -1
  26. package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
  27. package/dist/panels/DropdownFilterPanel.js +7 -4
  28. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  29. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  30. package/dist/panels/InputFilterPanel.d.ts +1 -1
  31. package/dist/panels/InputFilterPanel.d.ts.map +1 -1
  32. package/dist/panels/InputFilterPanel.js +8 -4
  33. package/dist/panels/InputFilterPanel.js.map +1 -1
  34. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  35. package/dist/panels/IrisGridPanel.js +11 -4
  36. package/dist/panels/IrisGridPanel.js.map +1 -1
  37. package/dist/redux/selectors.d.ts +1 -1
  38. package/dist/redux/selectors.js.map +1 -1
  39. package/dist/useDashboardColumnFilters.d.ts +17 -0
  40. package/dist/useDashboardColumnFilters.d.ts.map +1 -0
  41. package/dist/useDashboardColumnFilters.js +59 -0
  42. package/dist/useDashboardColumnFilters.js.map +1 -0
  43. package/package.json +24 -24
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridPanel.js","names":["React","PureComponent","memoize","connect","debounce","DEFAULT_DASHBOARD_ID","LayoutUtils","AdvancedSettings","IrisGrid","IrisGridModel","IrisGridCacheUtils","IrisGridUtils","isIrisGridTableModelTemplate","Log","getSettings","getUser","assertNotNull","PromiseUtils","InputFilterEvent","IrisGridEvent","getInputFiltersForDashboard","getLinksForDashboard","getColumnSelectionValidatorForDashboard","WidgetPanel","IrisGridPanelTooltip","isIrisGridPanelMetadata","isLegacyIrisGridPanelMetadata","jsx","_jsx","log","module","DEBOUNCE_PANEL_STATE_UPDATE","getTableNameFromMetadata","metadata","Error","name","table","concat","JSON","stringify","IrisGridPanel","constructor","props","_defineProperty","makeMemoizedGridStateDehydrator","makeMemoizedIrisGridStateDehydrator","columns","inputFilters","getInputFiltersForColumns","filter","_ref","value","excludePanelIds","id","getIdFromPanel","includes","dashboardLinks","pluginFetchColumns","columnSet","Set","i","length","start","panelId","add","columnName","Plugin","model","pluginState","_this$irisGrid$curren","deprecatedProps","panel","className","children","_objectSpread","ref","pluginRef","handlePluginFilter","fetchColumns","handlePluginFetchColumns","tableName","getTableName","selectedRanges","irisGrid","current","state","onStateChange","handlePluginStateChange","isSelectingPartition","partitions","advancedSettings","dehydrateIrisGridPanelState","irisGridPanelState","irisGridState","gridState","description","type","displayType","onPanelStateUpdate","panelState","oldPanelState","irisGridUtils","getCachedPanelState","getDehydratedIrisGridPanelState","irisGridStateDehydrator","gridStateDehydrator","debug","setState","handleAdvancedSettingsChange","bind","handleColumnsChanged","handleTableChanged","handleColumnSelected","handleDataSelected","handleError","handleGridStateChange","handleCreateChart","handleShow","handleTabClicked","handleDisconnect","handleReconnect","handleLoadSuccess","handleLoadError","isColumnSelectionValid","handleContextMenu","handleClearAllFilters","createRef","error","isDisconnected","isLoaded","isLoading","isModelReady","undefined","advancedFilters","Map","aggregationSettings","aggregations","showOnTop","DEFAULTS","customColumns","customColumnFormatMap","isFilterBarShown","quickFilters","sorts","userColumnWidths","userRowHeights","reverse","movedColumns","movedRows","rollupConfig","showSearchBar","searchValue","selectedSearchColumns","invertSearchColumns","pluginFilters","modelQueue","pendingDataMap","frozenColumns","irisGridStateOverrides","gridStateOverrides","isStuckToBottom","isStuckToRight","conditionalFormats","selectDistinctColumns","componentDidMount","initModel","componentDidUpdate","prevProps","prevState","makeModel","stopModelListening","close","startModelListening","componentWillUnmount","savePanelState","cancel","modelPromise","makeCancelable","resolved","then","catch","modelParam","dh","push","m","getModelRollupConfig","originalColumns","initModelQueue","modelInitialized","modelChange","shift","key","_ref2","get","set","filters","_this$irisGridUtils$g","_this$irisGridUtils","formatter","getFiltersFromInputFilters","timeZone","data","_this$pluginRef$curre","_this$pluginRef$curre2","_this$pluginRef$curre3","getMenu","call","tableColumn","columnSelectionValidator","glEventHub","emit","STATE_CHANGED","event","sendColumnsChange","detail","TABLE_CHANGED","settings","flush","sourcePanelId","tableSettings","extractTableSettings","CREATE_CHART","column","COLUMN_SELECTED","row","dataMap","DATA_SELECTED","updateGrid","focus","isCanceled","loadPlugin","loadPanelState","pluginName","clearAllFilters","debug2","COLUMNS_CHANGED","addEventListener","EVENT","DISCONNECT","RECONNECT","removeEventListener","getCoordinateForColumn","_gridWrapper$getBound","_allColumnXs$get","_allColumnWidths$get","gridWrapper","rect","getBoundingClientRect","width","height","metrics","columnHeaderHeight","allColumnXs","allColumnWidths","right","columnHeaderMaxDepth","columnIndex","getColumnIndexByName","visibleIndex","getVisibleColumn","columnX","columnWidth","x","Math","max","left","min","y","top","setFilterMap","filterMap","setAdvancedFilterMap","setFilters","_ref3","indexedQuickFilters","changeFilterColumnNamesToIndexes","_ref4","isFilterable","indexedAdvancedFilters","_ref5","hydrateQuickFilters","hydrateAdvancedFilters","setStateOverrides","overrides","unsetFilterValue","originalIrisGridStateOverrides","savedQuickFilters","savedAdvancedFilters","hydrateIrisGridPanelState","columnHeaderGroups","partitionConfig","hydrateIrisGridState","hydrateGridState","_this$irisGrid$curren2","_this$irisGrid$curren3","grid","handleResize","render","_model$description","_panelState$pluginSta","glContainer","getDownloadWorker","links","user","theme","errorMessage","childrenContent","getPluginContent","permissions","canCopy","canDownloadCsv","widgetPanelDescriptor","getWidgetPanelDescriptor","onClearAllFilters","onShow","onTabFocus","onTabClicked","componentPanel","descriptor","renderTabTooltip","alwaysFetchColumns","getAlwaysFetchColumns","columnAllowedCursor","columnNotAllowedCursor","copyCursor","getGridInputFilters","applyInputFiltersOnInit","isSelectingColumn","onColumnSelected","onCreateChart","onDataSelected","onError","onContextMenu","onAdvancedSettingsChange","customFilters","mapStateToProps","_ref6","localDashboardId","ConnectedIrisGridPanel","forwardRef"],"sources":["../../src/panels/IrisGridPanel.tsx"],"sourcesContent":["// Wrapper for the IrisGrid for use in a golden layout container\n// Will probably need to handle window popping out from golden layout here.\nimport React, {\n PureComponent,\n type ReactElement,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport {\n type DashboardPanelProps,\n DEFAULT_DASHBOARD_ID,\n LayoutUtils,\n type PanelComponent,\n type PanelMetadata,\n} from '@deephaven/dashboard';\nimport {\n AdvancedSettings,\n IrisGrid,\n type IrisGridType,\n IrisGridModel,\n IrisGridCacheUtils,\n IrisGridUtils,\n isIrisGridTableModelTemplate,\n type ColumnName,\n type PendingDataMap,\n type InputFilter,\n type IrisGridThemeType,\n type ReadonlyAdvancedFilterMap,\n type AggregationSettings,\n type AdvancedSettingsType,\n type UIRollupConfig,\n type UIRow,\n type ReadonlyQuickFilterMap,\n type FilterMap,\n type QuickFilter,\n type AdvancedFilter,\n type SidebarFormattingRule,\n type IrisGridState,\n type ChartBuilderSettings,\n type DehydratedIrisGridState,\n type DehydratedIrisGridPanelState,\n type ColumnHeaderGroup,\n type IrisGridContextMenuData,\n type PartitionConfig,\n} from '@deephaven/iris-grid';\nimport {\n type AdvancedFilterOptions,\n type FormattingRule,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n getSettings,\n getUser,\n type RootState,\n type User,\n type WorkspaceSettings,\n} from '@deephaven/redux';\nimport {\n assertNotNull,\n type CancelablePromise,\n type EventT,\n PromiseUtils,\n} from '@deephaven/utils';\nimport { type ResolvableContextAction } from '@deephaven/components';\nimport type { dh } from '@deephaven/jsapi-types';\nimport {\n type GridState,\n type ModelIndex,\n type ModelSizeMap,\n type MoveOperation,\n} from '@deephaven/grid';\nimport type {\n TablePluginComponent,\n TablePluginElement,\n} from '@deephaven/plugin';\nimport { InputFilterEvent, IrisGridEvent } from '../events';\nimport {\n getInputFiltersForDashboard,\n getLinksForDashboard,\n getColumnSelectionValidatorForDashboard,\n} from '../redux';\nimport WidgetPanel from './WidgetPanel';\nimport './IrisGridPanel.scss';\nimport { type Link, type LinkColumn } from '../linker/LinkerUtils';\nimport IrisGridPanelTooltip from './IrisGridPanelTooltip';\nimport {\n isIrisGridPanelMetadata,\n isLegacyIrisGridPanelMetadata,\n} from './IrisGridPanelTypes';\nimport { type WidgetPanelDescriptor } from './WidgetPanelTypes';\n\nconst log = Log.module('IrisGridPanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 500;\n\ntype ModelQueueFunction = (model: IrisGridModel) => void;\n\ntype ModelQueue = ModelQueueFunction[];\n\nexport interface PanelState {\n gridState: {\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n movedColumns: readonly {\n from: string | ModelIndex | [string, string] | [ModelIndex, ModelIndex];\n to: string | ModelIndex;\n }[];\n movedRows: readonly MoveOperation[];\n };\n irisGridState: DehydratedIrisGridState;\n irisGridPanelState: DehydratedIrisGridPanelState;\n pluginState: unknown;\n}\n\n// Some of the properties in the loaded panel state may be omitted\n// even though they can't be undefined in the dehydrated state.\n// This can happen when loading the state saved before the properties were added.\ntype LoadedPanelState = PanelState & {\n irisGridPanelState: PanelState['irisGridPanelState'] & {\n partitions?: (string | null)[];\n partition?: string | null;\n };\n};\n\nexport interface OwnProps extends DashboardPanelProps {\n children?: ReactNode;\n panelState?: LoadedPanelState | null;\n makeModel: () => IrisGridModel | Promise<IrisGridModel>;\n\n onStateChange?: (irisGridState: IrisGridState, gridState: GridState) => void;\n onPanelStateUpdate?: (panelState: PanelState) => void;\n\n /** Override the default worker used by IrisGrid to download CSVs. */\n getDownloadWorker?: () => Promise<ServiceWorker>;\n\n /** Load a plugin defined by the table */\n loadPlugin: (pluginName: string) => TablePluginComponent;\n\n theme?: IrisGridThemeType;\n}\n\ninterface StateProps {\n inputFilters: InputFilter[];\n links: Link[];\n columnSelectionValidator?: (\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ) => boolean;\n user: User;\n settings: WorkspaceSettings;\n}\n\ninterface IrisGridPanelState {\n error: unknown;\n isDisconnected: boolean;\n isLoaded: boolean;\n isLoading: boolean;\n isModelReady: boolean;\n model?: IrisGridModel;\n\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n\n // State is hydrated from panel state when table is loaded\n conditionalFormats: readonly SidebarFormattingRule[];\n selectDistinctColumns: readonly ColumnName[];\n advancedFilters: ReadonlyAdvancedFilterMap;\n aggregationSettings: AggregationSettings;\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n customColumns: readonly ColumnName[];\n customColumnFormatMap: Map<string, FormattingRule>;\n isFilterBarShown: boolean;\n quickFilters: ReadonlyQuickFilterMap;\n sorts: readonly dh.Sort[];\n userColumnWidths: ModelSizeMap;\n userRowHeights: ModelSizeMap;\n reverse: boolean;\n movedColumns: readonly MoveOperation[];\n movedRows: readonly MoveOperation[];\n isSelectingPartition: boolean;\n partitions: (string | null)[];\n partitionConfig?: PartitionConfig;\n rollupConfig?: UIRollupConfig;\n showSearchBar: boolean;\n searchValue: string;\n selectedSearchColumns?: readonly string[];\n invertSearchColumns: boolean;\n Plugin?: TablePluginComponent;\n pluginFilters: readonly dh.FilterCondition[];\n pluginFetchColumns: readonly string[];\n modelQueue: ModelQueue;\n pendingDataMap?: PendingDataMap<UIRow>;\n frozenColumns?: readonly ColumnName[];\n columnHeaderGroups?: readonly ColumnHeaderGroup[];\n\n // eslint-disable-next-line react/no-unused-state\n panelState?: PanelState | null; // Dehydrated panel state that can load this panel\n irisGridStateOverrides: Partial<DehydratedIrisGridState>;\n gridStateOverrides: Partial<GridState>;\n}\n\nfunction getTableNameFromMetadata(\n metadata: PanelMetadata | null | undefined\n): string {\n if (metadata == null) {\n throw new Error('No metadata provided');\n }\n if (isIrisGridPanelMetadata(metadata)) {\n return metadata.name;\n }\n if (isLegacyIrisGridPanelMetadata(metadata)) {\n return metadata.table;\n }\n\n throw new Error(\n `Unable to determine table name from metadata: ${JSON.stringify(metadata)}`\n );\n}\n\nexport type IrisGridPanelProps = OwnProps & StateProps;\n\nexport class IrisGridPanel extends PureComponent<\n IrisGridPanelProps,\n IrisGridPanelState\n> {\n static defaultProps = {\n onStateChange: (): void => undefined,\n onPanelStateUpdate: (): void => undefined,\n };\n\n static displayName = 'IrisGridPanel';\n\n static COMPONENT = 'IrisGridPanel';\n\n constructor(props: IrisGridPanelProps) {\n super(props);\n\n this.handleAdvancedSettingsChange =\n this.handleAdvancedSettingsChange.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handleTableChanged = this.handleTableChanged.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleDataSelected = this.handleDataSelected.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleGridStateChange = this.handleGridStateChange.bind(this);\n this.handlePluginStateChange = this.handlePluginStateChange.bind(this);\n this.handleCreateChart = this.handleCreateChart.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handlePluginFilter = this.handlePluginFilter.bind(this);\n this.handlePluginFetchColumns = this.handlePluginFetchColumns.bind(this);\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n\n this.irisGrid = React.createRef();\n this.pluginRef = React.createRef();\n\n const { panelState } = props;\n\n this.pluginState = null;\n this.irisGridUtils = null;\n\n this.state = {\n error: null,\n isDisconnected: false,\n isLoaded: false,\n isLoading: true,\n isModelReady: false,\n model: undefined,\n\n // State is hydrated from panel state when table is loaded\n advancedFilters: new Map(),\n aggregationSettings: { aggregations: [], showOnTop: false },\n advancedSettings: new Map(AdvancedSettings.DEFAULTS),\n customColumns: [],\n customColumnFormatMap: new Map(),\n isFilterBarShown: false,\n quickFilters: new Map(),\n sorts: [],\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n reverse: false,\n movedColumns: [],\n movedRows: [],\n isSelectingPartition: false,\n partitions: [],\n rollupConfig: undefined,\n showSearchBar: false,\n searchValue: '',\n selectedSearchColumns: undefined,\n invertSearchColumns: true,\n Plugin: undefined,\n pluginFilters: [],\n pluginFetchColumns: [],\n modelQueue: [],\n pendingDataMap: new Map(),\n frozenColumns: undefined,\n\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n irisGridStateOverrides: {},\n gridStateOverrides: {},\n isStuckToBottom: false,\n isStuckToRight: false,\n conditionalFormats: [],\n selectDistinctColumns: [],\n };\n }\n\n componentDidMount(): void {\n this.initModel();\n }\n\n componentDidUpdate(\n prevProps: IrisGridPanelProps,\n prevState: IrisGridPanelState\n ): void {\n const { model } = this.state;\n const { makeModel } = this.props;\n if (model !== prevState.model) {\n if (prevState.model != null) {\n this.stopModelListening(prevState.model);\n prevState.model.close();\n }\n if (model != null) {\n this.startModelListening(model);\n }\n }\n\n if (makeModel !== prevProps.makeModel) {\n this.initModel();\n }\n }\n\n componentWillUnmount(): void {\n this.savePanelState.cancel();\n\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n this.modelPromise = undefined;\n }\n\n const { model } = this.state;\n if (model) {\n this.stopModelListening(model);\n model.close();\n }\n }\n\n irisGrid: RefObject<IrisGridType>;\n\n pluginRef: RefObject<TablePluginElement>;\n\n modelPromise?: CancelablePromise<IrisGridModel>;\n\n irisGridState?: IrisGridState;\n\n gridState?: GridState;\n\n pluginState: unknown;\n\n private irisGridUtils: IrisGridUtils | null;\n\n private gridStateDehydrator =\n IrisGridCacheUtils.makeMemoizedGridStateDehydrator();\n\n private irisGridStateDehydrator =\n IrisGridCacheUtils.makeMemoizedIrisGridStateDehydrator();\n\n getTableName(): string {\n const { metadata } = this.props;\n return getTableNameFromMetadata(metadata);\n }\n\n getGridInputFilters = memoize(\n (columns: readonly dh.Column[], inputFilters: readonly InputFilter[]) =>\n IrisGridUtils.getInputFiltersForColumns(\n columns,\n // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.\n inputFilters.filter(({ value, excludePanelIds }) => {\n const id = LayoutUtils.getIdFromPanel(this);\n return (\n value != null &&\n (excludePanelIds == null ||\n (id != null && !excludePanelIds.includes(id)))\n );\n })\n )\n );\n\n getAlwaysFetchColumns = memoize(\n (\n dashboardLinks: readonly Link[],\n pluginFetchColumns: readonly string[]\n ): string[] => {\n const id = LayoutUtils.getIdFromPanel(this);\n // Always fetch columns which are the start/source of a link or columns specified by a plugin\n const columnSet = new Set(pluginFetchColumns);\n for (let i = 0; i < dashboardLinks.length; i += 1) {\n const { start } = dashboardLinks[i];\n if (start != null && start.panelId === id) {\n columnSet.add(start.columnName);\n }\n }\n return [...columnSet];\n }\n );\n\n getPluginContent = memoize(\n (\n Plugin: TablePluginComponent | undefined,\n model: IrisGridModel | undefined,\n pluginState: unknown\n ) => {\n if (\n !model ||\n !isIrisGridTableModelTemplate(model) ||\n Plugin == null ||\n model.table == null\n ) {\n return null;\n }\n\n // TODO #2093: Find a better way to handle deprecated panel prop\n const deprecatedProps = {\n panel: this,\n };\n\n return (\n <div className=\"iris-grid-plugin\">\n <Plugin\n ref={this.pluginRef}\n filter={this.handlePluginFilter}\n fetchColumns={this.handlePluginFetchColumns}\n model={model}\n table={model.table}\n tableName={this.getTableName()}\n selectedRanges={this.irisGrid.current?.state.selectedRanges}\n onStateChange={this.handlePluginStateChange}\n pluginState={pluginState}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...deprecatedProps}\n />\n </div>\n );\n }\n );\n\n getDehydratedIrisGridPanelState = memoize(\n (\n model: IrisGridModel,\n isSelectingPartition: boolean,\n partitions: (string | null)[],\n advancedSettings: Map<AdvancedSettingsType, boolean>\n ) =>\n IrisGridUtils.dehydrateIrisGridPanelState(model, {\n isSelectingPartition,\n partitions,\n advancedSettings,\n })\n );\n\n getCachedPanelState = memoize(\n (\n irisGridPanelState: PanelState['irisGridPanelState'],\n irisGridState: PanelState['irisGridState'],\n gridState: PanelState['gridState'],\n pluginState: PanelState['pluginState']\n ): PanelState => ({\n irisGridPanelState,\n irisGridState,\n gridState,\n pluginState,\n })\n );\n\n getWidgetPanelDescriptor = memoize(\n (\n metadata: IrisGridPanelProps['metadata'],\n description?: string\n ): WidgetPanelDescriptor => {\n const name = getTableNameFromMetadata(metadata);\n return {\n type: 'Table',\n displayType: 'Table',\n ...metadata,\n name,\n description,\n };\n }\n );\n\n initModel(): void {\n this.setState({\n isModelReady: false,\n isLoading: true,\n error: null,\n isDisconnected: false,\n });\n const { makeModel } = this.props;\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n this.modelPromise = PromiseUtils.makeCancelable(makeModel(), resolved =>\n resolved.close()\n );\n this.modelPromise.then(this.handleLoadSuccess).catch(this.handleLoadError);\n }\n\n handleLoadSuccess(modelParam: IrisGridModel): void {\n const model = modelParam;\n const { panelState, irisGridStateOverrides } = this.state;\n const modelQueue: ((m: IrisGridModel) => void)[] = [];\n this.irisGridUtils = new IrisGridUtils(model.dh);\n if (panelState != null) {\n const { irisGridState } = panelState;\n const {\n aggregationSettings,\n customColumns,\n selectDistinctColumns = [],\n rollupConfig,\n } = { ...irisGridState, ...irisGridStateOverrides };\n\n if (customColumns.length > 0) {\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.customColumns = customColumns;\n });\n }\n\n if (rollupConfig != null && rollupConfig.columns.length > 0) {\n // originalColumns might change by the time this model queue item is applied.\n // Instead of pushing a static object, push the function\n // that calculates the config based on the updated model state.\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.rollupConfig = IrisGridUtils.getModelRollupConfig(\n m.originalColumns,\n rollupConfig,\n aggregationSettings\n );\n });\n }\n\n if (selectDistinctColumns.length > 0) {\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.selectDistinctColumns = selectDistinctColumns;\n });\n }\n }\n\n this.setState({ model, modelQueue });\n this.initModelQueue(model, modelQueue);\n }\n\n initModelQueue(modelParam: IrisGridModel, modelQueue: ModelQueue): void {\n const model = modelParam;\n if (modelQueue.length === 0) {\n this.modelInitialized(model);\n return;\n }\n const modelChange = modelQueue.shift();\n log.debug('initModelQueue', modelChange);\n // Apply next model change. Triggers columnschanged event.\n if (modelChange) {\n modelChange(model);\n }\n this.setState({ modelQueue });\n }\n\n handleAdvancedSettingsChange(\n key: AdvancedSettingsType,\n value: boolean\n ): void {\n log.debug('handleAdvancedSettingsChange', key, value);\n this.setState(({ advancedSettings }) =>\n advancedSettings.get(key) === value\n ? null\n : { advancedSettings: new Map(advancedSettings).set(key, value) }\n );\n }\n\n handlePluginFilter(filters: InputFilter[]): void {\n const { model } = this.state;\n assertNotNull(model);\n const { columns, formatter } = model;\n const pluginFilters =\n this.irisGridUtils?.getFiltersFromInputFilters(\n columns,\n filters,\n formatter.timeZone\n ) ?? [];\n this.setState({ pluginFilters });\n }\n\n handlePluginFetchColumns(pluginFetchColumns: string[]): void {\n this.setState({ pluginFetchColumns });\n }\n\n handleContextMenu(data: IrisGridContextMenuData): ResolvableContextAction[] {\n return this.pluginRef.current?.getMenu?.(data) ?? [];\n }\n\n isColumnSelectionValid(tableColumn: dh.Column | null): boolean {\n const { columnSelectionValidator } = this.props;\n if (columnSelectionValidator && tableColumn) {\n return columnSelectionValidator(this, tableColumn);\n }\n return false;\n }\n\n handleGridStateChange(\n irisGridState: IrisGridState,\n gridState: GridState\n ): void {\n this.irisGridState = irisGridState;\n this.gridState = gridState;\n\n // Grid sends it's first state change after it's finished loading\n this.setState({ isLoaded: true, isLoading: false });\n\n this.savePanelState();\n\n const { glEventHub, onStateChange } = this.props;\n glEventHub.emit(IrisGridEvent.STATE_CHANGED, this);\n onStateChange?.(irisGridState, gridState);\n }\n\n handlePluginStateChange(pluginState: unknown): void {\n const { irisGridState, gridState } = this;\n this.pluginState = pluginState;\n // Do not save if there is null state\n // The save will happen when the grid loads\n if (irisGridState !== null && gridState !== null) {\n this.savePanelState();\n }\n }\n\n handleColumnsChanged(event: EventT): void {\n const { isModelReady, model, modelQueue } = this.state;\n if (isModelReady) {\n this.sendColumnsChange((event as CustomEvent).detail);\n } else {\n assertNotNull(model);\n this.initModelQueue(model, modelQueue);\n }\n }\n\n handleTableChanged(event: EventT): void {\n log.debug('handleTableChanged', event);\n const { glEventHub } = this.props;\n const { detail: table } = event as CustomEvent;\n glEventHub.emit(InputFilterEvent.TABLE_CHANGED, this, table);\n }\n\n /**\n * Create a chart with the specified settings\n * @param settings The settings from the chart builder\n * @param settings.type The settings from the chart builder\n * @param settings.series The names of the series\n * @param model The IrisGridModel object\n */\n handleCreateChart(\n settings: ChartBuilderSettings,\n model: IrisGridModel\n ): void {\n // Panel state is stored with the created chart, so flush it first\n this.savePanelState.flush();\n\n this.setState(\n () => null,\n () => {\n const { glEventHub, inputFilters, metadata } = this.props;\n const table = this.getTableName();\n const { panelState } = this.state;\n const sourcePanelId = LayoutUtils.getIdFromPanel(this);\n let tableSettings;\n\n if (panelState) {\n tableSettings = IrisGridUtils.extractTableSettings(\n panelState,\n inputFilters\n );\n }\n glEventHub.emit(IrisGridEvent.CREATE_CHART, {\n metadata: {\n ...metadata,\n settings,\n sourcePanelId,\n table,\n tableSettings,\n },\n table: isIrisGridTableModelTemplate(model) ? model.table : undefined,\n });\n }\n );\n }\n\n handleColumnSelected(column: dh.Column): void {\n const { glEventHub } = this.props;\n glEventHub.emit(IrisGridEvent.COLUMN_SELECTED, this, column);\n }\n\n handleDataSelected(row: ModelIndex, dataMap: Record<string, unknown>): void {\n const { glEventHub } = this.props;\n glEventHub.emit(IrisGridEvent.DATA_SELECTED, this, dataMap);\n }\n\n handleShow(): void {\n this.updateGrid();\n }\n\n handleTabClicked(): void {\n if (this.irisGrid.current) {\n this.irisGrid.current.focus();\n }\n }\n\n handleError(error: unknown): void {\n log.error(error);\n this.setState({ error, isLoading: false });\n }\n\n handleDisconnect(): void {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n this.handleError(error);\n }\n\n modelInitialized(model: IrisGridModel): void {\n const { glEventHub, loadPlugin } = this.props;\n\n this.modelPromise = undefined;\n\n // Custom columns at this point already initialized, can load state\n this.loadPanelState(model);\n\n this.setState({ isModelReady: true });\n\n if (isIrisGridTableModelTemplate(model)) {\n const { table } = model;\n const { pluginName } = table;\n\n if (pluginName !== '') {\n if (loadPlugin != null && pluginName != null) {\n const Plugin = loadPlugin(pluginName);\n this.setState({ Plugin });\n }\n }\n glEventHub.emit(InputFilterEvent.TABLE_CHANGED, this, table);\n }\n\n this.sendColumnsChange(model.columns);\n }\n\n handleClearAllFilters(): void {\n const irisGrid = this.irisGrid.current;\n const { isDisconnected } = this.state;\n if (irisGrid != null && !isDisconnected) {\n irisGrid.clearAllFilters();\n }\n }\n\n sendColumnsChange(columns: readonly dh.Column[]): void {\n log.debug2('sendColumnsChange', columns);\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMNS_CHANGED,\n LayoutUtils.getIdFromPanel(this),\n columns\n );\n }\n\n startModelListening(model: IrisGridModel): void {\n model.addEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n this.handleDisconnect\n );\n model.addEventListener(IrisGridModel.EVENT.RECONNECT, this.handleReconnect);\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleColumnsChanged\n );\n model.addEventListener(\n IrisGridModel.EVENT.TABLE_CHANGED,\n this.handleTableChanged\n );\n }\n\n stopModelListening(model: IrisGridModel): void {\n model.removeEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n this.handleDisconnect\n );\n model.removeEventListener(\n IrisGridModel.EVENT.RECONNECT,\n this.handleReconnect\n );\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleColumnsChanged\n );\n model.removeEventListener(\n IrisGridModel.EVENT.TABLE_CHANGED,\n this.handleTableChanged\n );\n }\n\n getCoordinateForColumn(columnName: ColumnName): [number, number] | null {\n const { model } = this.state;\n if (!model) {\n return null;\n }\n\n const irisGrid = this.irisGrid.current;\n const { gridWrapper } = irisGrid || {};\n const rect = gridWrapper?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n assertNotNull(irisGrid);\n const { metrics } = irisGrid.state;\n assertNotNull(metrics);\n const {\n columnHeaderHeight,\n allColumnXs,\n allColumnWidths,\n right,\n columnHeaderMaxDepth,\n } = metrics;\n const columnIndex = model.getColumnIndexByName(columnName);\n assertNotNull(columnIndex);\n const visibleIndex = irisGrid.getVisibleColumn(columnIndex);\n const columnX = allColumnXs.get(visibleIndex) ?? 0;\n const columnWidth = allColumnWidths.get(visibleIndex) ?? 0;\n\n const x = Math.max(\n rect.left,\n Math.min(\n visibleIndex > right\n ? rect.right\n : rect.left + columnX + columnWidth * 0.5,\n rect.right\n )\n );\n const y = rect.top + columnHeaderHeight * columnHeaderMaxDepth;\n\n return [x, y];\n }\n\n setFilterMap(filterMap: FilterMap): void {\n const irisGrid = this.irisGrid.current;\n if (irisGrid != null) {\n irisGrid.setFilterMap(filterMap);\n }\n }\n\n setAdvancedFilterMap(filterMap: ReadonlyAdvancedFilterMap): void {\n const irisGrid = this.irisGrid.current;\n if (irisGrid != null) {\n irisGrid.setAdvancedFilterMap(filterMap);\n }\n }\n\n setFilters({\n quickFilters,\n advancedFilters,\n }: {\n quickFilters: { name: ColumnName; filter: QuickFilter }[];\n advancedFilters: { name: ColumnName; filter: AdvancedFilter }[];\n }): void {\n log.debug('setFilters', quickFilters, advancedFilters);\n const { model, isDisconnected } = this.state;\n const irisGrid = this.irisGrid.current;\n if (irisGrid == null || isDisconnected) {\n log.debug('Ignore setFilters, model disconnected');\n return;\n }\n assertNotNull(model);\n const { columns, formatter } = model;\n const indexedQuickFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n quickFilters\n ).filter(([columnIndex]) => model.isFilterable(columnIndex));\n const indexedAdvancedFilters =\n IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n advancedFilters\n ).filter(([columnIndex]) => model.isFilterable(columnIndex));\n assertNotNull(this.irisGridUtils);\n irisGrid.clearAllFilters();\n irisGrid.setFilters({\n quickFilters: this.irisGridUtils.hydrateQuickFilters(\n columns,\n indexedQuickFilters,\n formatter.timeZone\n ),\n advancedFilters: this.irisGridUtils.hydrateAdvancedFilters(\n columns,\n indexedAdvancedFilters,\n formatter.timeZone\n ),\n });\n }\n\n setStateOverrides(overrides: {\n irisGridState: Partial<DehydratedIrisGridState>;\n gridState: Partial<GridState>;\n }): void {\n log.debug('setStateOverrides', overrides);\n const {\n irisGridState: irisGridStateOverrides,\n gridState: gridStateOverrides,\n } = overrides;\n this.setState({ irisGridStateOverrides, gridStateOverrides }, () => {\n this.initModel();\n });\n }\n\n // eslint-disable-next-line class-methods-use-this\n unsetFilterValue(): void {\n // IrisGridPanel retains the set value after the link is broken\n }\n\n loadPanelState(model: IrisGridModel): void {\n const {\n panelState,\n irisGridStateOverrides: originalIrisGridStateOverrides,\n gridStateOverrides,\n } = this.state;\n if (panelState == null) {\n return;\n }\n\n try {\n const { gridState, irisGridState, irisGridPanelState } = panelState;\n const irisGridStateOverrides = { ...originalIrisGridStateOverrides };\n const {\n quickFilters: savedQuickFilters,\n advancedFilters: savedAdvancedFilters,\n } = irisGridStateOverrides;\n if (savedQuickFilters) {\n irisGridStateOverrides.quickFilters =\n IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n savedQuickFilters as unknown as {\n name: string;\n filter: {\n text: string;\n };\n }[]\n );\n }\n if (savedAdvancedFilters) {\n irisGridStateOverrides.advancedFilters =\n IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n savedAdvancedFilters as unknown as {\n name: string;\n filter: { options: AdvancedFilterOptions };\n }[]\n );\n }\n const { isSelectingPartition, partitions, advancedSettings } =\n IrisGridUtils.hydrateIrisGridPanelState(model, irisGridPanelState);\n assertNotNull(this.irisGridUtils);\n const {\n advancedFilters,\n customColumns,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n reverse,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n columnHeaderGroups,\n partitionConfig,\n } = this.irisGridUtils.hydrateIrisGridState(model, {\n ...irisGridState,\n ...irisGridStateOverrides,\n });\n const { isStuckToBottom, isStuckToRight, movedColumns, movedRows } =\n IrisGridUtils.hydrateGridState(\n model,\n { ...gridState, ...gridStateOverrides },\n irisGridState.customColumns\n );\n this.setState({\n advancedFilters,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n isFilterBarShown,\n isSelectingPartition,\n movedColumns,\n movedRows,\n partitions,\n quickFilters,\n reverse,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n isStuckToBottom,\n isStuckToRight,\n columnHeaderGroups,\n partitionConfig,\n });\n } catch (error) {\n log.error('loadPanelState failed to load panelState', panelState, error);\n }\n }\n\n savePanelState = debounce(() => {\n const { irisGridState, gridState, pluginState } = this;\n assertNotNull(irisGridState);\n const { onPanelStateUpdate } = this.props;\n const {\n model,\n panelState: oldPanelState,\n isSelectingPartition,\n partitions,\n advancedSettings,\n } = this.state;\n assertNotNull(this.irisGridUtils);\n assertNotNull(model);\n assertNotNull(gridState);\n\n const panelState = this.getCachedPanelState(\n this.getDehydratedIrisGridPanelState(\n model,\n isSelectingPartition,\n partitions,\n advancedSettings\n ),\n this.irisGridStateDehydrator(model, irisGridState),\n this.gridStateDehydrator(model, gridState),\n pluginState\n );\n\n if (panelState !== oldPanelState) {\n log.debug('Saving panel state', this, panelState);\n\n this.setState({ panelState });\n onPanelStateUpdate?.(panelState);\n }\n }, DEBOUNCE_PANEL_STATE_UPDATE);\n\n updateGrid(): void {\n const grid = this.irisGrid.current?.grid ?? null;\n if (!grid) return;\n\n // handle resize will verify state and draw and update\n grid.handleResize();\n }\n\n render(): ReactElement {\n const {\n children,\n glContainer,\n glEventHub,\n columnSelectionValidator,\n getDownloadWorker,\n inputFilters,\n links,\n metadata,\n panelState,\n user,\n settings,\n theme,\n } = this.props;\n const {\n advancedFilters,\n aggregationSettings,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n error,\n isDisconnected,\n isFilterBarShown,\n isSelectingPartition,\n isStuckToBottom,\n isStuckToRight,\n isLoaded,\n isLoading,\n isModelReady,\n model,\n movedColumns,\n movedRows,\n partitions,\n partitionConfig,\n quickFilters,\n reverse,\n rollupConfig,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n Plugin,\n pluginFilters,\n pluginFetchColumns,\n pendingDataMap,\n frozenColumns,\n columnHeaderGroups,\n } = this.state;\n const errorMessage =\n error != null ? `Unable to open table. ${error}` : undefined;\n const description = model?.description ?? undefined;\n const pluginState = panelState?.pluginState ?? null;\n const childrenContent =\n children ?? this.getPluginContent(Plugin, model, pluginState);\n const { permissions } = user;\n const { canCopy, canDownloadCsv } = permissions;\n const widgetPanelDescriptor = this.getWidgetPanelDescriptor(\n metadata,\n description\n );\n\n return (\n <WidgetPanel\n errorMessage={errorMessage}\n isDisconnected={isDisconnected}\n isLoading={isLoading}\n isLoaded={isLoaded}\n className=\"iris-grid-panel\"\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n onShow={this.handleShow}\n onTabFocus={this.handleShow}\n onTabClicked={this.handleTabClicked}\n componentPanel={this}\n descriptor={widgetPanelDescriptor}\n renderTabTooltip={() => (\n <IrisGridPanelTooltip\n descriptor={widgetPanelDescriptor}\n model={model}\n />\n )}\n >\n {isModelReady && model && (\n <IrisGrid\n advancedFilters={advancedFilters}\n aggregationSettings={aggregationSettings}\n advancedSettings={advancedSettings}\n alwaysFetchColumns={this.getAlwaysFetchColumns(\n links,\n pluginFetchColumns\n )}\n columnAllowedCursor=\"linker\"\n columnNotAllowedCursor=\"linker-not-allowed\"\n copyCursor=\"copy\"\n customColumns={customColumns}\n customColumnFormatMap={customColumnFormatMap}\n columnSelectionValidator={this.isColumnSelectionValid}\n conditionalFormats={conditionalFormats}\n inputFilters={this.getGridInputFilters(model.columns, inputFilters)}\n applyInputFiltersOnInit={panelState == null}\n isFilterBarShown={isFilterBarShown}\n isSelectingColumn={columnSelectionValidator != null}\n isSelectingPartition={isSelectingPartition}\n isStuckToBottom={isStuckToBottom}\n isStuckToRight={isStuckToRight}\n movedColumns={movedColumns}\n movedRows={movedRows}\n partitions={partitions}\n partitionConfig={partitionConfig}\n quickFilters={quickFilters}\n reverse={reverse}\n rollupConfig={rollupConfig}\n settings={settings}\n sorts={sorts}\n userColumnWidths={userColumnWidths}\n userRowHeights={userRowHeights}\n model={model}\n showSearchBar={showSearchBar}\n searchValue={searchValue}\n selectedSearchColumns={selectedSearchColumns}\n selectDistinctColumns={selectDistinctColumns}\n invertSearchColumns={invertSearchColumns}\n onColumnSelected={this.handleColumnSelected}\n onCreateChart={this.handleCreateChart}\n onDataSelected={this.handleDataSelected}\n onError={this.handleError}\n onStateChange={this.handleGridStateChange}\n onContextMenu={this.handleContextMenu}\n onAdvancedSettingsChange={this.handleAdvancedSettingsChange}\n customFilters={pluginFilters}\n pendingDataMap={pendingDataMap}\n canCopy={canCopy}\n canDownloadCsv={canDownloadCsv}\n ref={this.irisGrid}\n getDownloadWorker={getDownloadWorker}\n frozenColumns={frozenColumns}\n theme={theme}\n columnHeaderGroups={columnHeaderGroups}\n >\n {childrenContent}\n </IrisGrid>\n )}\n </WidgetPanel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n { localDashboardId = DEFAULT_DASHBOARD_ID }: OwnProps\n): StateProps => ({\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n user: getUser(state),\n settings: getSettings(state),\n});\n\nconst ConnectedIrisGridPanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(IrisGridPanel);\n\nexport default ConnectedIrisGridPanel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"IrisGridPanel.js","names":["React","PureComponent","memoize","connect","debounce","DEFAULT_DASHBOARD_ID","LayoutUtils","AdvancedSettings","IrisGrid","IrisGridModel","IrisGridCacheUtils","IrisGridUtils","isIrisGridTableModelTemplate","Log","getSettings","getUser","assertNotNull","PromiseUtils","IrisGridEvent","getInputFiltersForDashboard","getLinksForDashboard","getColumnSelectionValidatorForDashboard","WidgetPanel","IrisGridPanelTooltip","isIrisGridPanelMetadata","isLegacyIrisGridPanelMetadata","emitFilterColumnsChanged","emitFilterTableChanged","jsx","_jsx","log","module","DEBOUNCE_PANEL_STATE_UPDATE","getTableNameFromMetadata","metadata","Error","name","table","concat","JSON","stringify","IrisGridPanel","constructor","props","_defineProperty","makeMemoizedGridStateDehydrator","makeMemoizedIrisGridStateDehydrator","columns","inputFilters","getInputFiltersForColumns","filter","_ref","value","excludePanelIds","id","getIdFromPanel","includes","dashboardLinks","pluginFetchColumns","columnSet","Set","i","length","start","panelId","add","columnName","Plugin","model","pluginState","_this$irisGrid$curren","deprecatedProps","panel","className","children","_objectSpread","ref","pluginRef","handlePluginFilter","fetchColumns","handlePluginFetchColumns","tableName","getTableName","selectedRanges","irisGrid","current","state","onStateChange","handlePluginStateChange","isSelectingPartition","partitions","advancedSettings","dehydrateIrisGridPanelState","irisGridPanelState","irisGridState","gridState","description","type","displayType","onPanelStateUpdate","panelState","oldPanelState","irisGridUtils","getCachedPanelState","getDehydratedIrisGridPanelState","irisGridStateDehydrator","gridStateDehydrator","debug","setState","handleAdvancedSettingsChange","bind","handleColumnsChanged","handleTableChanged","handleColumnSelected","handleDataSelected","handleError","handleGridStateChange","handleCreateChart","handleShow","handleTabClicked","handleDisconnect","handleReconnect","handleLoadSuccess","handleLoadError","isColumnSelectionValid","handleContextMenu","handleClearAllFilters","createRef","error","isDisconnected","isLoaded","isLoading","isModelReady","undefined","advancedFilters","Map","aggregationSettings","aggregations","showOnTop","DEFAULTS","customColumns","customColumnFormatMap","isFilterBarShown","quickFilters","sorts","userColumnWidths","userRowHeights","reverse","movedColumns","movedRows","rollupConfig","showSearchBar","searchValue","selectedSearchColumns","invertSearchColumns","pluginFilters","modelQueue","pendingDataMap","frozenColumns","irisGridStateOverrides","gridStateOverrides","isStuckToBottom","isStuckToRight","conditionalFormats","selectDistinctColumns","componentDidMount","initModel","componentDidUpdate","prevProps","prevState","makeModel","stopModelListening","close","startModelListening","componentWillUnmount","savePanelState","cancel","modelPromise","makeCancelable","resolved","then","catch","modelParam","dh","push","m","getModelRollupConfig","originalColumns","initModelQueue","modelInitialized","modelChange","shift","key","_ref2","get","set","filters","_this$irisGridUtils$g","_this$irisGridUtils","formatter","getFiltersFromInputFilters","timeZone","data","_this$pluginRef$curre","_this$pluginRef$curre2","_this$pluginRef$curre3","getMenu","call","tableColumn","columnSelectionValidator","glEventHub","emit","STATE_CHANGED","event","sendColumnsChange","detail","settings","flush","sourcePanelId","tableSettings","extractTableSettings","CREATE_CHART","column","COLUMN_SELECTED","row","dataMap","DATA_SELECTED","updateGrid","focus","isCanceled","loadPlugin","loadPanelState","pluginName","clearAllFilters","debug2","addEventListener","EVENT","DISCONNECT","RECONNECT","COLUMNS_CHANGED","TABLE_CHANGED","removeEventListener","getCoordinateForColumn","_gridWrapper$getBound","_allColumnXs$get","_allColumnWidths$get","gridWrapper","rect","getBoundingClientRect","width","height","metrics","columnHeaderHeight","allColumnXs","allColumnWidths","right","columnHeaderMaxDepth","columnIndex","getColumnIndexByName","visibleIndex","getVisibleColumn","columnX","columnWidth","x","Math","max","left","min","y","top","setFilterMap","filterMap","setAdvancedFilterMap","setFilters","_ref3","indexedQuickFilters","changeFilterColumnNamesToIndexes","_ref4","isFilterable","indexedAdvancedFilters","_ref5","hydrateQuickFilters","hydrateAdvancedFilters","setStateOverrides","overrides","unsetFilterValue","originalIrisGridStateOverrides","savedQuickFilters","savedAdvancedFilters","hydrateIrisGridPanelState","columnHeaderGroups","partitionConfig","hydrateIrisGridState","hydrateGridState","_this$irisGrid$curren2","_this$irisGrid$curren3","grid","handleResize","render","_model$description","_panelState$pluginSta","glContainer","getDownloadWorker","links","user","theme","errorMessage","childrenContent","getPluginContent","permissions","canCopy","canDownloadCsv","widgetPanelDescriptor","getWidgetPanelDescriptor","onClearAllFilters","onShow","onTabFocus","onTabClicked","componentPanel","descriptor","renderTabTooltip","alwaysFetchColumns","getAlwaysFetchColumns","columnAllowedCursor","columnNotAllowedCursor","copyCursor","getGridInputFilters","applyInputFiltersOnInit","isSelectingColumn","onColumnSelected","onCreateChart","onDataSelected","onError","onContextMenu","onAdvancedSettingsChange","customFilters","mapStateToProps","_ref6","localDashboardId","ConnectedIrisGridPanel","forwardRef"],"sources":["../../src/panels/IrisGridPanel.tsx"],"sourcesContent":["// Wrapper for the IrisGrid for use in a golden layout container\n// Will probably need to handle window popping out from golden layout here.\nimport React, {\n PureComponent,\n type ReactElement,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport {\n type DashboardPanelProps,\n DEFAULT_DASHBOARD_ID,\n LayoutUtils,\n type PanelComponent,\n type PanelMetadata,\n} from '@deephaven/dashboard';\nimport {\n AdvancedSettings,\n IrisGrid,\n type IrisGridType,\n IrisGridModel,\n IrisGridCacheUtils,\n IrisGridUtils,\n isIrisGridTableModelTemplate,\n type ColumnName,\n type PendingDataMap,\n type InputFilter,\n type IrisGridThemeType,\n type ReadonlyAdvancedFilterMap,\n type AggregationSettings,\n type AdvancedSettingsType,\n type UIRollupConfig,\n type UIRow,\n type ReadonlyQuickFilterMap,\n type FilterMap,\n type QuickFilter,\n type AdvancedFilter,\n type SidebarFormattingRule,\n type IrisGridState,\n type ChartBuilderSettings,\n type DehydratedIrisGridState,\n type DehydratedIrisGridPanelState,\n type ColumnHeaderGroup,\n type IrisGridContextMenuData,\n type PartitionConfig,\n} from '@deephaven/iris-grid';\nimport {\n type AdvancedFilterOptions,\n type FormattingRule,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n getSettings,\n getUser,\n type RootState,\n type User,\n type WorkspaceSettings,\n} from '@deephaven/redux';\nimport {\n assertNotNull,\n type CancelablePromise,\n type EventT,\n PromiseUtils,\n} from '@deephaven/utils';\nimport { type ResolvableContextAction } from '@deephaven/components';\nimport type { dh } from '@deephaven/jsapi-types';\nimport {\n type GridState,\n type ModelIndex,\n type ModelSizeMap,\n type MoveOperation,\n} from '@deephaven/grid';\nimport type {\n TablePluginComponent,\n TablePluginElement,\n} from '@deephaven/plugin';\nimport { IrisGridEvent } from '../events';\nimport {\n getInputFiltersForDashboard,\n getLinksForDashboard,\n getColumnSelectionValidatorForDashboard,\n} from '../redux';\nimport WidgetPanel from './WidgetPanel';\nimport './IrisGridPanel.scss';\nimport { type Link, type LinkColumn } from '../linker/LinkerUtils';\nimport IrisGridPanelTooltip from './IrisGridPanelTooltip';\nimport {\n isIrisGridPanelMetadata,\n isLegacyIrisGridPanelMetadata,\n} from './IrisGridPanelTypes';\nimport { type WidgetPanelDescriptor } from './WidgetPanelTypes';\nimport {\n emitFilterColumnsChanged,\n emitFilterTableChanged,\n} from '../FilterEvents';\n\nconst log = Log.module('IrisGridPanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 500;\n\ntype ModelQueueFunction = (model: IrisGridModel) => void;\n\ntype ModelQueue = ModelQueueFunction[];\n\nexport interface PanelState {\n gridState: {\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n movedColumns: readonly {\n from: string | ModelIndex | [string, string] | [ModelIndex, ModelIndex];\n to: string | ModelIndex;\n }[];\n movedRows: readonly MoveOperation[];\n };\n irisGridState: DehydratedIrisGridState;\n irisGridPanelState: DehydratedIrisGridPanelState;\n pluginState: unknown;\n}\n\n// Some of the properties in the loaded panel state may be omitted\n// even though they can't be undefined in the dehydrated state.\n// This can happen when loading the state saved before the properties were added.\ntype LoadedPanelState = PanelState & {\n irisGridPanelState: PanelState['irisGridPanelState'] & {\n partitions?: (string | null)[];\n partition?: string | null;\n };\n};\n\nexport interface OwnProps extends DashboardPanelProps {\n children?: ReactNode;\n panelState?: LoadedPanelState | null;\n makeModel: () => IrisGridModel | Promise<IrisGridModel>;\n\n onStateChange?: (irisGridState: IrisGridState, gridState: GridState) => void;\n onPanelStateUpdate?: (panelState: PanelState) => void;\n\n /** Override the default worker used by IrisGrid to download CSVs. */\n getDownloadWorker?: () => Promise<ServiceWorker>;\n\n /** Load a plugin defined by the table */\n loadPlugin: (pluginName: string) => TablePluginComponent;\n\n theme?: IrisGridThemeType;\n}\n\ninterface StateProps {\n inputFilters: InputFilter[];\n links: Link[];\n columnSelectionValidator?: (\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ) => boolean;\n user: User;\n settings: WorkspaceSettings;\n}\n\ninterface IrisGridPanelState {\n error: unknown;\n isDisconnected: boolean;\n isLoaded: boolean;\n isLoading: boolean;\n isModelReady: boolean;\n model?: IrisGridModel;\n\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n\n // State is hydrated from panel state when table is loaded\n conditionalFormats: readonly SidebarFormattingRule[];\n selectDistinctColumns: readonly ColumnName[];\n advancedFilters: ReadonlyAdvancedFilterMap;\n aggregationSettings: AggregationSettings;\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n customColumns: readonly ColumnName[];\n customColumnFormatMap: Map<string, FormattingRule>;\n isFilterBarShown: boolean;\n quickFilters: ReadonlyQuickFilterMap;\n sorts: readonly dh.Sort[];\n userColumnWidths: ModelSizeMap;\n userRowHeights: ModelSizeMap;\n reverse: boolean;\n movedColumns: readonly MoveOperation[];\n movedRows: readonly MoveOperation[];\n isSelectingPartition: boolean;\n partitions: (string | null)[];\n partitionConfig?: PartitionConfig;\n rollupConfig?: UIRollupConfig;\n showSearchBar: boolean;\n searchValue: string;\n selectedSearchColumns?: readonly string[];\n invertSearchColumns: boolean;\n Plugin?: TablePluginComponent;\n pluginFilters: readonly dh.FilterCondition[];\n pluginFetchColumns: readonly string[];\n modelQueue: ModelQueue;\n pendingDataMap?: PendingDataMap<UIRow>;\n frozenColumns?: readonly ColumnName[];\n columnHeaderGroups?: readonly ColumnHeaderGroup[];\n\n // eslint-disable-next-line react/no-unused-state\n panelState?: PanelState | null; // Dehydrated panel state that can load this panel\n irisGridStateOverrides: Partial<DehydratedIrisGridState>;\n gridStateOverrides: Partial<GridState>;\n}\n\nfunction getTableNameFromMetadata(\n metadata: PanelMetadata | null | undefined\n): string {\n if (metadata == null) {\n throw new Error('No metadata provided');\n }\n if (isIrisGridPanelMetadata(metadata)) {\n return metadata.name;\n }\n if (isLegacyIrisGridPanelMetadata(metadata)) {\n return metadata.table;\n }\n\n throw new Error(\n `Unable to determine table name from metadata: ${JSON.stringify(metadata)}`\n );\n}\n\nexport type IrisGridPanelProps = OwnProps & StateProps;\n\nexport class IrisGridPanel extends PureComponent<\n IrisGridPanelProps,\n IrisGridPanelState\n> {\n static defaultProps = {\n onStateChange: (): void => undefined,\n onPanelStateUpdate: (): void => undefined,\n };\n\n static displayName = 'IrisGridPanel';\n\n static COMPONENT = 'IrisGridPanel';\n\n constructor(props: IrisGridPanelProps) {\n super(props);\n\n this.handleAdvancedSettingsChange =\n this.handleAdvancedSettingsChange.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handleTableChanged = this.handleTableChanged.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleDataSelected = this.handleDataSelected.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleGridStateChange = this.handleGridStateChange.bind(this);\n this.handlePluginStateChange = this.handlePluginStateChange.bind(this);\n this.handleCreateChart = this.handleCreateChart.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handlePluginFilter = this.handlePluginFilter.bind(this);\n this.handlePluginFetchColumns = this.handlePluginFetchColumns.bind(this);\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n\n this.irisGrid = React.createRef();\n this.pluginRef = React.createRef();\n\n const { panelState } = props;\n\n this.pluginState = null;\n this.irisGridUtils = null;\n\n this.state = {\n error: null,\n isDisconnected: false,\n isLoaded: false,\n isLoading: true,\n isModelReady: false,\n model: undefined,\n\n // State is hydrated from panel state when table is loaded\n advancedFilters: new Map(),\n aggregationSettings: { aggregations: [], showOnTop: false },\n advancedSettings: new Map(AdvancedSettings.DEFAULTS),\n customColumns: [],\n customColumnFormatMap: new Map(),\n isFilterBarShown: false,\n quickFilters: new Map(),\n sorts: [],\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n reverse: false,\n movedColumns: [],\n movedRows: [],\n isSelectingPartition: false,\n partitions: [],\n rollupConfig: undefined,\n showSearchBar: false,\n searchValue: '',\n selectedSearchColumns: undefined,\n invertSearchColumns: true,\n Plugin: undefined,\n pluginFilters: [],\n pluginFetchColumns: [],\n modelQueue: [],\n pendingDataMap: new Map(),\n frozenColumns: undefined,\n\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n irisGridStateOverrides: {},\n gridStateOverrides: {},\n isStuckToBottom: false,\n isStuckToRight: false,\n conditionalFormats: [],\n selectDistinctColumns: [],\n };\n }\n\n componentDidMount(): void {\n this.initModel();\n }\n\n componentDidUpdate(\n prevProps: IrisGridPanelProps,\n prevState: IrisGridPanelState\n ): void {\n const { model } = this.state;\n const { makeModel } = this.props;\n if (model !== prevState.model) {\n if (prevState.model != null) {\n this.stopModelListening(prevState.model);\n prevState.model.close();\n }\n if (model != null) {\n this.startModelListening(model);\n }\n }\n\n if (makeModel !== prevProps.makeModel) {\n this.initModel();\n }\n }\n\n componentWillUnmount(): void {\n this.savePanelState.cancel();\n\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n this.modelPromise = undefined;\n }\n\n const { model } = this.state;\n if (model) {\n this.stopModelListening(model);\n model.close();\n }\n }\n\n irisGrid: RefObject<IrisGridType>;\n\n pluginRef: RefObject<TablePluginElement>;\n\n modelPromise?: CancelablePromise<IrisGridModel>;\n\n irisGridState?: IrisGridState;\n\n gridState?: GridState;\n\n pluginState: unknown;\n\n private irisGridUtils: IrisGridUtils | null;\n\n private gridStateDehydrator =\n IrisGridCacheUtils.makeMemoizedGridStateDehydrator();\n\n private irisGridStateDehydrator =\n IrisGridCacheUtils.makeMemoizedIrisGridStateDehydrator();\n\n getTableName(): string {\n const { metadata } = this.props;\n return getTableNameFromMetadata(metadata);\n }\n\n getGridInputFilters = memoize(\n (columns: readonly dh.Column[], inputFilters: readonly InputFilter[]) =>\n IrisGridUtils.getInputFiltersForColumns(\n columns,\n // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.\n inputFilters.filter(({ value, excludePanelIds }) => {\n const id = LayoutUtils.getIdFromPanel(this);\n return (\n value != null &&\n (excludePanelIds == null ||\n (id != null && !excludePanelIds.includes(id)))\n );\n })\n )\n );\n\n getAlwaysFetchColumns = memoize(\n (\n dashboardLinks: readonly Link[],\n pluginFetchColumns: readonly string[]\n ): string[] => {\n const id = LayoutUtils.getIdFromPanel(this);\n // Always fetch columns which are the start/source of a link or columns specified by a plugin\n const columnSet = new Set(pluginFetchColumns);\n for (let i = 0; i < dashboardLinks.length; i += 1) {\n const { start } = dashboardLinks[i];\n if (start != null && start.panelId === id) {\n columnSet.add(start.columnName);\n }\n }\n return [...columnSet];\n }\n );\n\n getPluginContent = memoize(\n (\n Plugin: TablePluginComponent | undefined,\n model: IrisGridModel | undefined,\n pluginState: unknown\n ) => {\n if (\n !model ||\n !isIrisGridTableModelTemplate(model) ||\n Plugin == null ||\n model.table == null\n ) {\n return null;\n }\n\n // TODO #2093: Find a better way to handle deprecated panel prop\n const deprecatedProps = {\n panel: this,\n };\n\n return (\n <div className=\"iris-grid-plugin\">\n <Plugin\n ref={this.pluginRef}\n filter={this.handlePluginFilter}\n fetchColumns={this.handlePluginFetchColumns}\n model={model}\n table={model.table}\n tableName={this.getTableName()}\n selectedRanges={this.irisGrid.current?.state.selectedRanges}\n onStateChange={this.handlePluginStateChange}\n pluginState={pluginState}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...deprecatedProps}\n />\n </div>\n );\n }\n );\n\n getDehydratedIrisGridPanelState = memoize(\n (\n model: IrisGridModel,\n isSelectingPartition: boolean,\n partitions: (string | null)[],\n advancedSettings: Map<AdvancedSettingsType, boolean>\n ) =>\n IrisGridUtils.dehydrateIrisGridPanelState(model, {\n isSelectingPartition,\n partitions,\n advancedSettings,\n })\n );\n\n getCachedPanelState = memoize(\n (\n irisGridPanelState: PanelState['irisGridPanelState'],\n irisGridState: PanelState['irisGridState'],\n gridState: PanelState['gridState'],\n pluginState: PanelState['pluginState']\n ): PanelState => ({\n irisGridPanelState,\n irisGridState,\n gridState,\n pluginState,\n })\n );\n\n getWidgetPanelDescriptor = memoize(\n (\n metadata: IrisGridPanelProps['metadata'],\n description?: string\n ): WidgetPanelDescriptor => {\n const name = getTableNameFromMetadata(metadata);\n return {\n type: 'Table',\n displayType: 'Table',\n ...metadata,\n name,\n description,\n };\n }\n );\n\n initModel(): void {\n this.setState({\n isModelReady: false,\n isLoading: true,\n error: null,\n isDisconnected: false,\n });\n const { makeModel } = this.props;\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n this.modelPromise = PromiseUtils.makeCancelable(makeModel(), resolved =>\n resolved.close()\n );\n this.modelPromise.then(this.handleLoadSuccess).catch(this.handleLoadError);\n }\n\n handleLoadSuccess(modelParam: IrisGridModel): void {\n const model = modelParam;\n const { panelState, irisGridStateOverrides } = this.state;\n const modelQueue: ((m: IrisGridModel) => void)[] = [];\n this.irisGridUtils = new IrisGridUtils(model.dh);\n if (panelState != null) {\n const { irisGridState } = panelState;\n const {\n aggregationSettings,\n customColumns,\n selectDistinctColumns = [],\n rollupConfig,\n } = { ...irisGridState, ...irisGridStateOverrides };\n\n if (customColumns.length > 0) {\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.customColumns = customColumns;\n });\n }\n\n if (rollupConfig != null && rollupConfig.columns.length > 0) {\n // originalColumns might change by the time this model queue item is applied.\n // Instead of pushing a static object, push the function\n // that calculates the config based on the updated model state.\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.rollupConfig = IrisGridUtils.getModelRollupConfig(\n m.originalColumns,\n rollupConfig,\n aggregationSettings\n );\n });\n }\n\n if (selectDistinctColumns.length > 0) {\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.selectDistinctColumns = selectDistinctColumns;\n });\n }\n }\n\n this.setState({ model, modelQueue });\n this.initModelQueue(model, modelQueue);\n }\n\n initModelQueue(modelParam: IrisGridModel, modelQueue: ModelQueue): void {\n const model = modelParam;\n if (modelQueue.length === 0) {\n this.modelInitialized(model);\n return;\n }\n const modelChange = modelQueue.shift();\n log.debug('initModelQueue', modelChange);\n // Apply next model change. Triggers columnschanged event.\n if (modelChange) {\n modelChange(model);\n }\n this.setState({ modelQueue });\n }\n\n handleAdvancedSettingsChange(\n key: AdvancedSettingsType,\n value: boolean\n ): void {\n log.debug('handleAdvancedSettingsChange', key, value);\n this.setState(({ advancedSettings }) =>\n advancedSettings.get(key) === value\n ? null\n : { advancedSettings: new Map(advancedSettings).set(key, value) }\n );\n }\n\n handlePluginFilter(filters: InputFilter[]): void {\n const { model } = this.state;\n assertNotNull(model);\n const { columns, formatter } = model;\n const pluginFilters =\n this.irisGridUtils?.getFiltersFromInputFilters(\n columns,\n filters,\n formatter.timeZone\n ) ?? [];\n this.setState({ pluginFilters });\n }\n\n handlePluginFetchColumns(pluginFetchColumns: string[]): void {\n this.setState({ pluginFetchColumns });\n }\n\n handleContextMenu(data: IrisGridContextMenuData): ResolvableContextAction[] {\n return this.pluginRef.current?.getMenu?.(data) ?? [];\n }\n\n isColumnSelectionValid(tableColumn: dh.Column | null): boolean {\n const { columnSelectionValidator } = this.props;\n if (columnSelectionValidator && tableColumn) {\n return columnSelectionValidator(this, tableColumn);\n }\n return false;\n }\n\n handleGridStateChange(\n irisGridState: IrisGridState,\n gridState: GridState\n ): void {\n this.irisGridState = irisGridState;\n this.gridState = gridState;\n\n // Grid sends it's first state change after it's finished loading\n this.setState({ isLoaded: true, isLoading: false });\n\n this.savePanelState();\n\n const { glEventHub, onStateChange } = this.props;\n glEventHub.emit(IrisGridEvent.STATE_CHANGED, this);\n onStateChange?.(irisGridState, gridState);\n }\n\n handlePluginStateChange(pluginState: unknown): void {\n const { irisGridState, gridState } = this;\n this.pluginState = pluginState;\n // Do not save if there is null state\n // The save will happen when the grid loads\n if (irisGridState !== null && gridState !== null) {\n this.savePanelState();\n }\n }\n\n handleColumnsChanged(event: EventT): void {\n const { isModelReady, model, modelQueue } = this.state;\n if (isModelReady) {\n this.sendColumnsChange((event as CustomEvent).detail);\n } else {\n assertNotNull(model);\n this.initModelQueue(model, modelQueue);\n }\n }\n\n handleTableChanged(event: EventT): void {\n log.debug('handleTableChanged', event);\n const { glEventHub } = this.props;\n const { detail: table } = event as CustomEvent;\n const panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitFilterTableChanged(glEventHub, panelId, table);\n }\n\n /**\n * Create a chart with the specified settings\n * @param settings The settings from the chart builder\n * @param settings.type The settings from the chart builder\n * @param settings.series The names of the series\n * @param model The IrisGridModel object\n */\n handleCreateChart(\n settings: ChartBuilderSettings,\n model: IrisGridModel\n ): void {\n // Panel state is stored with the created chart, so flush it first\n this.savePanelState.flush();\n\n this.setState(\n () => null,\n () => {\n const { glEventHub, inputFilters, metadata } = this.props;\n const table = this.getTableName();\n const { panelState } = this.state;\n const sourcePanelId = LayoutUtils.getIdFromPanel(this);\n let tableSettings;\n\n if (panelState) {\n tableSettings = IrisGridUtils.extractTableSettings(\n panelState,\n inputFilters\n );\n }\n glEventHub.emit(IrisGridEvent.CREATE_CHART, {\n metadata: {\n ...metadata,\n settings,\n sourcePanelId,\n table,\n tableSettings,\n },\n table: isIrisGridTableModelTemplate(model) ? model.table : undefined,\n });\n }\n );\n }\n\n handleColumnSelected(column: dh.Column): void {\n const { glEventHub } = this.props;\n glEventHub.emit(IrisGridEvent.COLUMN_SELECTED, this, column);\n }\n\n handleDataSelected(row: ModelIndex, dataMap: Record<string, unknown>): void {\n const { glEventHub } = this.props;\n glEventHub.emit(IrisGridEvent.DATA_SELECTED, this, dataMap);\n }\n\n handleShow(): void {\n this.updateGrid();\n }\n\n handleTabClicked(): void {\n if (this.irisGrid.current) {\n this.irisGrid.current.focus();\n }\n }\n\n handleError(error: unknown): void {\n log.error(error);\n this.setState({ error, isLoading: false });\n }\n\n handleDisconnect(): void {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n this.handleError(error);\n }\n\n modelInitialized(model: IrisGridModel): void {\n const { glEventHub, loadPlugin } = this.props;\n\n this.modelPromise = undefined;\n\n // Custom columns at this point already initialized, can load state\n this.loadPanelState(model);\n\n this.setState({ isModelReady: true });\n\n if (isIrisGridTableModelTemplate(model)) {\n const { table } = model;\n const { pluginName } = table;\n\n if (pluginName !== '') {\n if (loadPlugin != null && pluginName != null) {\n const Plugin = loadPlugin(pluginName);\n this.setState({ Plugin });\n }\n }\n const panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitFilterTableChanged(glEventHub, panelId, table);\n }\n\n this.sendColumnsChange(model.columns);\n }\n\n handleClearAllFilters(): void {\n const irisGrid = this.irisGrid.current;\n const { isDisconnected } = this.state;\n if (irisGrid != null && !isDisconnected) {\n irisGrid.clearAllFilters();\n }\n }\n\n sendColumnsChange(columns: readonly dh.Column[]): void {\n log.debug2('sendColumnsChange', columns);\n const { glEventHub } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitFilterColumnsChanged(glEventHub, panelId, columns);\n }\n\n startModelListening(model: IrisGridModel): void {\n model.addEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n this.handleDisconnect\n );\n model.addEventListener(IrisGridModel.EVENT.RECONNECT, this.handleReconnect);\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleColumnsChanged\n );\n model.addEventListener(\n IrisGridModel.EVENT.TABLE_CHANGED,\n this.handleTableChanged\n );\n }\n\n stopModelListening(model: IrisGridModel): void {\n model.removeEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n this.handleDisconnect\n );\n model.removeEventListener(\n IrisGridModel.EVENT.RECONNECT,\n this.handleReconnect\n );\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleColumnsChanged\n );\n model.removeEventListener(\n IrisGridModel.EVENT.TABLE_CHANGED,\n this.handleTableChanged\n );\n }\n\n getCoordinateForColumn(columnName: ColumnName): [number, number] | null {\n const { model } = this.state;\n if (!model) {\n return null;\n }\n\n const irisGrid = this.irisGrid.current;\n const { gridWrapper } = irisGrid || {};\n const rect = gridWrapper?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n assertNotNull(irisGrid);\n const { metrics } = irisGrid.state;\n assertNotNull(metrics);\n const {\n columnHeaderHeight,\n allColumnXs,\n allColumnWidths,\n right,\n columnHeaderMaxDepth,\n } = metrics;\n const columnIndex = model.getColumnIndexByName(columnName);\n assertNotNull(columnIndex);\n const visibleIndex = irisGrid.getVisibleColumn(columnIndex);\n const columnX = allColumnXs.get(visibleIndex) ?? 0;\n const columnWidth = allColumnWidths.get(visibleIndex) ?? 0;\n\n const x = Math.max(\n rect.left,\n Math.min(\n visibleIndex > right\n ? rect.right\n : rect.left + columnX + columnWidth * 0.5,\n rect.right\n )\n );\n const y = rect.top + columnHeaderHeight * columnHeaderMaxDepth;\n\n return [x, y];\n }\n\n setFilterMap(filterMap: FilterMap): void {\n const irisGrid = this.irisGrid.current;\n if (irisGrid != null) {\n irisGrid.setFilterMap(filterMap);\n }\n }\n\n setAdvancedFilterMap(filterMap: ReadonlyAdvancedFilterMap): void {\n const irisGrid = this.irisGrid.current;\n if (irisGrid != null) {\n irisGrid.setAdvancedFilterMap(filterMap);\n }\n }\n\n setFilters({\n quickFilters,\n advancedFilters,\n }: {\n quickFilters: { name: ColumnName; filter: QuickFilter }[];\n advancedFilters: { name: ColumnName; filter: AdvancedFilter }[];\n }): void {\n log.debug('setFilters', quickFilters, advancedFilters);\n const { model, isDisconnected } = this.state;\n const irisGrid = this.irisGrid.current;\n if (irisGrid == null || isDisconnected) {\n log.debug('Ignore setFilters, model disconnected');\n return;\n }\n assertNotNull(model);\n const { columns, formatter } = model;\n const indexedQuickFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n quickFilters\n ).filter(([columnIndex]) => model.isFilterable(columnIndex));\n const indexedAdvancedFilters =\n IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n advancedFilters\n ).filter(([columnIndex]) => model.isFilterable(columnIndex));\n assertNotNull(this.irisGridUtils);\n irisGrid.clearAllFilters();\n irisGrid.setFilters({\n quickFilters: this.irisGridUtils.hydrateQuickFilters(\n columns,\n indexedQuickFilters,\n formatter.timeZone\n ),\n advancedFilters: this.irisGridUtils.hydrateAdvancedFilters(\n columns,\n indexedAdvancedFilters,\n formatter.timeZone\n ),\n });\n }\n\n setStateOverrides(overrides: {\n irisGridState: Partial<DehydratedIrisGridState>;\n gridState: Partial<GridState>;\n }): void {\n log.debug('setStateOverrides', overrides);\n const {\n irisGridState: irisGridStateOverrides,\n gridState: gridStateOverrides,\n } = overrides;\n this.setState({ irisGridStateOverrides, gridStateOverrides }, () => {\n this.initModel();\n });\n }\n\n // eslint-disable-next-line class-methods-use-this\n unsetFilterValue(): void {\n // IrisGridPanel retains the set value after the link is broken\n }\n\n loadPanelState(model: IrisGridModel): void {\n const {\n panelState,\n irisGridStateOverrides: originalIrisGridStateOverrides,\n gridStateOverrides,\n } = this.state;\n if (panelState == null) {\n return;\n }\n\n try {\n const { gridState, irisGridState, irisGridPanelState } = panelState;\n const irisGridStateOverrides = { ...originalIrisGridStateOverrides };\n const {\n quickFilters: savedQuickFilters,\n advancedFilters: savedAdvancedFilters,\n } = irisGridStateOverrides;\n if (savedQuickFilters) {\n irisGridStateOverrides.quickFilters =\n IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n savedQuickFilters as unknown as {\n name: string;\n filter: {\n text: string;\n };\n }[]\n );\n }\n if (savedAdvancedFilters) {\n irisGridStateOverrides.advancedFilters =\n IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n savedAdvancedFilters as unknown as {\n name: string;\n filter: { options: AdvancedFilterOptions };\n }[]\n );\n }\n const { isSelectingPartition, partitions, advancedSettings } =\n IrisGridUtils.hydrateIrisGridPanelState(model, irisGridPanelState);\n assertNotNull(this.irisGridUtils);\n const {\n advancedFilters,\n customColumns,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n reverse,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n columnHeaderGroups,\n partitionConfig,\n } = this.irisGridUtils.hydrateIrisGridState(model, {\n ...irisGridState,\n ...irisGridStateOverrides,\n });\n const { isStuckToBottom, isStuckToRight, movedColumns, movedRows } =\n IrisGridUtils.hydrateGridState(\n model,\n { ...gridState, ...gridStateOverrides },\n irisGridState.customColumns\n );\n this.setState({\n advancedFilters,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n isFilterBarShown,\n isSelectingPartition,\n movedColumns,\n movedRows,\n partitions,\n quickFilters,\n reverse,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n isStuckToBottom,\n isStuckToRight,\n columnHeaderGroups,\n partitionConfig,\n });\n } catch (error) {\n log.error('loadPanelState failed to load panelState', panelState, error);\n }\n }\n\n savePanelState = debounce(() => {\n const { irisGridState, gridState, pluginState } = this;\n assertNotNull(irisGridState);\n const { onPanelStateUpdate } = this.props;\n const {\n model,\n panelState: oldPanelState,\n isSelectingPartition,\n partitions,\n advancedSettings,\n } = this.state;\n assertNotNull(this.irisGridUtils);\n assertNotNull(model);\n assertNotNull(gridState);\n\n const panelState = this.getCachedPanelState(\n this.getDehydratedIrisGridPanelState(\n model,\n isSelectingPartition,\n partitions,\n advancedSettings\n ),\n this.irisGridStateDehydrator(model, irisGridState),\n this.gridStateDehydrator(model, gridState),\n pluginState\n );\n\n if (panelState !== oldPanelState) {\n log.debug('Saving panel state', this, panelState);\n\n this.setState({ panelState });\n onPanelStateUpdate?.(panelState);\n }\n }, DEBOUNCE_PANEL_STATE_UPDATE);\n\n updateGrid(): void {\n const grid = this.irisGrid.current?.grid ?? null;\n if (!grid) return;\n\n // handle resize will verify state and draw and update\n grid.handleResize();\n }\n\n render(): ReactElement {\n const {\n children,\n glContainer,\n glEventHub,\n columnSelectionValidator,\n getDownloadWorker,\n inputFilters,\n links,\n metadata,\n panelState,\n user,\n settings,\n theme,\n } = this.props;\n const {\n advancedFilters,\n aggregationSettings,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n error,\n isDisconnected,\n isFilterBarShown,\n isSelectingPartition,\n isStuckToBottom,\n isStuckToRight,\n isLoaded,\n isLoading,\n isModelReady,\n model,\n movedColumns,\n movedRows,\n partitions,\n partitionConfig,\n quickFilters,\n reverse,\n rollupConfig,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n Plugin,\n pluginFilters,\n pluginFetchColumns,\n pendingDataMap,\n frozenColumns,\n columnHeaderGroups,\n } = this.state;\n const errorMessage =\n error != null ? `Unable to open table. ${error}` : undefined;\n const description = model?.description ?? undefined;\n const pluginState = panelState?.pluginState ?? null;\n const childrenContent =\n children ?? this.getPluginContent(Plugin, model, pluginState);\n const { permissions } = user;\n const { canCopy, canDownloadCsv } = permissions;\n const widgetPanelDescriptor = this.getWidgetPanelDescriptor(\n metadata,\n description\n );\n\n return (\n <WidgetPanel\n errorMessage={errorMessage}\n isDisconnected={isDisconnected}\n isLoading={isLoading}\n isLoaded={isLoaded}\n className=\"iris-grid-panel\"\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n onShow={this.handleShow}\n onTabFocus={this.handleShow}\n onTabClicked={this.handleTabClicked}\n componentPanel={this}\n descriptor={widgetPanelDescriptor}\n renderTabTooltip={() => (\n <IrisGridPanelTooltip\n descriptor={widgetPanelDescriptor}\n model={model}\n />\n )}\n >\n {isModelReady && model && (\n <IrisGrid\n advancedFilters={advancedFilters}\n aggregationSettings={aggregationSettings}\n advancedSettings={advancedSettings}\n alwaysFetchColumns={this.getAlwaysFetchColumns(\n links,\n pluginFetchColumns\n )}\n columnAllowedCursor=\"linker\"\n columnNotAllowedCursor=\"linker-not-allowed\"\n copyCursor=\"copy\"\n customColumns={customColumns}\n customColumnFormatMap={customColumnFormatMap}\n columnSelectionValidator={this.isColumnSelectionValid}\n conditionalFormats={conditionalFormats}\n inputFilters={this.getGridInputFilters(model.columns, inputFilters)}\n applyInputFiltersOnInit={panelState == null}\n isFilterBarShown={isFilterBarShown}\n isSelectingColumn={columnSelectionValidator != null}\n isSelectingPartition={isSelectingPartition}\n isStuckToBottom={isStuckToBottom}\n isStuckToRight={isStuckToRight}\n movedColumns={movedColumns}\n movedRows={movedRows}\n partitions={partitions}\n partitionConfig={partitionConfig}\n quickFilters={quickFilters}\n reverse={reverse}\n rollupConfig={rollupConfig}\n settings={settings}\n sorts={sorts}\n userColumnWidths={userColumnWidths}\n userRowHeights={userRowHeights}\n model={model}\n showSearchBar={showSearchBar}\n searchValue={searchValue}\n selectedSearchColumns={selectedSearchColumns}\n selectDistinctColumns={selectDistinctColumns}\n invertSearchColumns={invertSearchColumns}\n onColumnSelected={this.handleColumnSelected}\n onCreateChart={this.handleCreateChart}\n onDataSelected={this.handleDataSelected}\n onError={this.handleError}\n onStateChange={this.handleGridStateChange}\n onContextMenu={this.handleContextMenu}\n onAdvancedSettingsChange={this.handleAdvancedSettingsChange}\n customFilters={pluginFilters}\n pendingDataMap={pendingDataMap}\n canCopy={canCopy}\n canDownloadCsv={canDownloadCsv}\n ref={this.irisGrid}\n getDownloadWorker={getDownloadWorker}\n frozenColumns={frozenColumns}\n theme={theme}\n columnHeaderGroups={columnHeaderGroups}\n >\n {childrenContent}\n </IrisGrid>\n )}\n </WidgetPanel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n { localDashboardId = DEFAULT_DASHBOARD_ID }: OwnProps\n): StateProps => ({\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n user: getUser(state),\n settings: getSettings(state),\n});\n\nconst ConnectedIrisGridPanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(IrisGridPanel);\n\nexport default ConnectedIrisGridPanel;\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { dh } from '@deephaven/jsapi-types';
2
2
  import { type SessionWrapper } from '@deephaven/jsapi-utils';
3
3
  import { type RootState } from '@deephaven/redux';
4
- import { type FilterChangeEvent } from '../FilterPlugin';
4
+ import { type FilterChangeEvent } from '../FilterEvents';
5
5
  import { type Link } from '../linker/LinkerUtils';
6
6
  import { type FilterSet } from '../panels';
7
7
  import { type ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.js","names":["getDashboardData","EMPTY_OBJECT","Object","freeze","EMPTY_MAP","Map","EMPTY_ARRAY","getColumnsForDashboard","store","dashboardId","_getDashboardData$col","columns","getFilterSetsForDashboard","_getDashboardData$fil","filterSets","getInputFiltersForDashboard","_getDashboardData$fil2","filters","getTableMapForDashboard","_getDashboardData$tab","tableMap","getIsolatedLinkerPanelIdForDashboard","isolatedLinkerPanelId","getLinksForDashboard","_getDashboardData$lin","links","getColumnSelectionValidatorForDashboard","columnSelectionValidator","getDashboardConsoleSettings","_getDashboardData$con","consoleSettings","getDashboardConnection","connection","getDashboardSessionWrapper","sessionWrapper"],"sources":["../../src/redux/selectors.ts"],"sourcesContent":["import { getDashboardData } from '@deephaven/dashboard';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type SessionWrapper } from '@deephaven/jsapi-utils';\nimport { type RootState } from '@deephaven/redux';\nimport { type FilterChangeEvent } from '../FilterPlugin';\nimport { type Link } from '../linker/LinkerUtils';\nimport { type FilterSet } from '../panels';\nimport { type ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst EMPTY_OBJECT = Object.freeze({});\n\nconst EMPTY_MAP = new Map();\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns All column objects found in all panels in this dashboard\n */\nexport const getColumnsForDashboard = (\n store: RootState,\n dashboardId: string\n): dh.Column[] =>\n (getDashboardData(store, dashboardId).columns ?? EMPTY_ARRAY) as dh.Column[];\n\n/**\n * Get the known filter sets for the dashboard.\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filter sets set on this dashboard\n */\nexport const getFilterSetsForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterSet[] =>\n (getDashboardData(store, dashboardId).filterSets ??\n EMPTY_ARRAY) as FilterSet[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filters set on this dashboard\n */\nexport const getInputFiltersForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterChangeEvent[] =>\n (getDashboardData(store, dashboardId).filters ??\n EMPTY_ARRAY) as FilterChangeEvent[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns Map from panel ID to the table used in that panel\n */\nexport const getTableMapForDashboard = (\n store: RootState,\n dashboardId: string\n): Map<string, dh.Table> =>\n (getDashboardData(store, dashboardId).tableMap ?? EMPTY_MAP) as Map<\n string,\n dh.Table\n >;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data for\n * @returns The panel ID that is isolated, undefined if none is isolated\n */\nexport const getIsolatedLinkerPanelIdForDashboard = (\n store: RootState,\n dashboardId: string\n): string | undefined =>\n getDashboardData(store, dashboardId).isolatedLinkerPanelId as\n | string\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data from\n * @returns The links for the dashboard\n */\nexport const getLinksForDashboard = (\n store: RootState,\n dashboardId: string\n): Link[] =>\n (getDashboardData(store, dashboardId).links ?? EMPTY_ARRAY) as Link[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the column selection validators for\n * @returns Column selection validator active on a dashboard\n */\nexport const getColumnSelectionValidatorForDashboard = (\n store: RootState,\n dashboardId: string\n): ColumnSelectionValidator | undefined =>\n getDashboardData(store, dashboardId).columnSelectionValidator as\n | ColumnSelectionValidator\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the console settings for\n * @returns Console settings for this dashboard\n */\nexport const getDashboardConsoleSettings = (\n store: RootState,\n dashboardId: string\n): Record<string, unknown> =>\n (getDashboardData(store, dashboardId).consoleSettings ??\n EMPTY_OBJECT) as Record<string, unknown>;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the IdeConnection for\n * @returns The connection for the dashboard\n */\nexport const getDashboardConnection = (\n store: RootState,\n dashboardId: string\n): dh.IdeConnection | undefined =>\n getDashboardData(store, dashboardId).connection as\n | dh.IdeConnection\n | undefined;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the SessionWrapper for\n * @returns The session wrapper for the dashboard\n */\nexport const getDashboardSessionWrapper = (\n store: RootState,\n dashboardId: string\n): SessionWrapper | undefined =>\n getDashboardData(store, dashboardId).sessionWrapper as\n | SessionWrapper\n | undefined;\n"],"mappings":"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"}
1
+ {"version":3,"file":"selectors.js","names":["getDashboardData","EMPTY_OBJECT","Object","freeze","EMPTY_MAP","Map","EMPTY_ARRAY","getColumnsForDashboard","store","dashboardId","_getDashboardData$col","columns","getFilterSetsForDashboard","_getDashboardData$fil","filterSets","getInputFiltersForDashboard","_getDashboardData$fil2","filters","getTableMapForDashboard","_getDashboardData$tab","tableMap","getIsolatedLinkerPanelIdForDashboard","isolatedLinkerPanelId","getLinksForDashboard","_getDashboardData$lin","links","getColumnSelectionValidatorForDashboard","columnSelectionValidator","getDashboardConsoleSettings","_getDashboardData$con","consoleSettings","getDashboardConnection","connection","getDashboardSessionWrapper","sessionWrapper"],"sources":["../../src/redux/selectors.ts"],"sourcesContent":["import { getDashboardData } from '@deephaven/dashboard';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type SessionWrapper } from '@deephaven/jsapi-utils';\nimport { type RootState } from '@deephaven/redux';\nimport { type FilterChangeEvent } from '../FilterEvents';\nimport { type Link } from '../linker/LinkerUtils';\nimport { type FilterSet } from '../panels';\nimport { type ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst EMPTY_OBJECT = Object.freeze({});\n\nconst EMPTY_MAP = new Map();\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns All column objects found in all panels in this dashboard\n */\nexport const getColumnsForDashboard = (\n store: RootState,\n dashboardId: string\n): dh.Column[] =>\n (getDashboardData(store, dashboardId).columns ?? EMPTY_ARRAY) as dh.Column[];\n\n/**\n * Get the known filter sets for the dashboard.\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filter sets set on this dashboard\n */\nexport const getFilterSetsForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterSet[] =>\n (getDashboardData(store, dashboardId).filterSets ??\n EMPTY_ARRAY) as FilterSet[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filters set on this dashboard\n */\nexport const getInputFiltersForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterChangeEvent[] =>\n (getDashboardData(store, dashboardId).filters ??\n EMPTY_ARRAY) as FilterChangeEvent[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns Map from panel ID to the table used in that panel\n */\nexport const getTableMapForDashboard = (\n store: RootState,\n dashboardId: string\n): Map<string, dh.Table> =>\n (getDashboardData(store, dashboardId).tableMap ?? EMPTY_MAP) as Map<\n string,\n dh.Table\n >;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data for\n * @returns The panel ID that is isolated, undefined if none is isolated\n */\nexport const getIsolatedLinkerPanelIdForDashboard = (\n store: RootState,\n dashboardId: string\n): string | undefined =>\n getDashboardData(store, dashboardId).isolatedLinkerPanelId as\n | string\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data from\n * @returns The links for the dashboard\n */\nexport const getLinksForDashboard = (\n store: RootState,\n dashboardId: string\n): Link[] =>\n (getDashboardData(store, dashboardId).links ?? EMPTY_ARRAY) as Link[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the column selection validators for\n * @returns Column selection validator active on a dashboard\n */\nexport const getColumnSelectionValidatorForDashboard = (\n store: RootState,\n dashboardId: string\n): ColumnSelectionValidator | undefined =>\n getDashboardData(store, dashboardId).columnSelectionValidator as\n | ColumnSelectionValidator\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the console settings for\n * @returns Console settings for this dashboard\n */\nexport const getDashboardConsoleSettings = (\n store: RootState,\n dashboardId: string\n): Record<string, unknown> =>\n (getDashboardData(store, dashboardId).consoleSettings ??\n EMPTY_OBJECT) as Record<string, unknown>;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the IdeConnection for\n * @returns The connection for the dashboard\n */\nexport const getDashboardConnection = (\n store: RootState,\n dashboardId: string\n): dh.IdeConnection | undefined =>\n getDashboardData(store, dashboardId).connection as\n | dh.IdeConnection\n | undefined;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the SessionWrapper for\n * @returns The session wrapper for the dashboard\n */\nexport const getDashboardSessionWrapper = (\n store: RootState,\n dashboardId: string\n): SessionWrapper | undefined =>\n getDashboardData(store, dashboardId).sessionWrapper as\n | SessionWrapper\n | undefined;\n"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { dh } from '@deephaven/jsapi-types';
2
+ import { type InputFilter } from '@deephaven/iris-grid';
3
+ /**
4
+ * Subscribes to the dashboard column filters (a.k.a. InputFilter) for the current panel or widget, and
5
+ * adds the columns provided to the filter options in the dashboard.
6
+ * @param columns The columns this source has available for filtering.
7
+ * These are used to populate filter options in the UI (InputFilter, DropdownFilter)
8
+ * @param table The table for this source if applicable.
9
+ * This is used to enable ChartBuilder from IrisGrid.
10
+ * @returns The dashboard column filters (InputFilter[]) that apply to the columns provided.
11
+ */
12
+ export declare function useDashboardColumnFilters(columns: readonly {
13
+ name: string;
14
+ type: string;
15
+ }[], table?: dh.Table): InputFilter[];
16
+ export default useDashboardColumnFilters;
17
+ //# sourceMappingURL=useDashboardColumnFilters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDashboardColumnFilters.d.ts","sourceRoot":"","sources":["../src/useDashboardColumnFilters.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAevE;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAClD,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GACf,WAAW,EAAE,CA+Df;AAED,eAAe,yBAAyB,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { useCallback, useEffect, useMemo } from 'react';
2
+ import { IrisGridUtils } from '@deephaven/iris-grid';
3
+ import { useLayoutManager, useDashboardId, useAppSelector, useDhId } from '@deephaven/dashboard';
4
+ import { getInputFiltersForDashboard } from "./redux/index.js";
5
+ import { emitFilterColumnsChanged, emitFilterTableChanged } from "./FilterEvents.js";
6
+ /**
7
+ * Subscribes to the dashboard column filters (a.k.a. InputFilter) for the current panel or widget, and
8
+ * adds the columns provided to the filter options in the dashboard.
9
+ * @param columns The columns this source has available for filtering.
10
+ * These are used to populate filter options in the UI (InputFilter, DropdownFilter)
11
+ * @param table The table for this source if applicable.
12
+ * This is used to enable ChartBuilder from IrisGrid.
13
+ * @returns The dashboard column filters (InputFilter[]) that apply to the columns provided.
14
+ */
15
+ export function useDashboardColumnFilters(columns, table) {
16
+ var {
17
+ eventHub
18
+ } = useLayoutManager();
19
+ var dashboardId = useDashboardId();
20
+ var panelId = useDhId();
21
+ useEffect(function columnsChanged() {
22
+ if (panelId == null) {
23
+ return;
24
+ }
25
+ emitFilterColumnsChanged(eventHub, panelId, columns);
26
+ }, [eventHub, panelId, columns]);
27
+ useEffect(function tableChanged() {
28
+ if (table == null || panelId == null) {
29
+ return;
30
+ }
31
+ emitFilterTableChanged(eventHub, panelId, table);
32
+ }, [eventHub, panelId, table]);
33
+
34
+ // Cleanup separately because filtering the table or other operations can get a new columns array,
35
+ // and we are using null to indicate unmount, not change
36
+ useEffect(function cleanupOnUnmount() {
37
+ if (panelId == null) {
38
+ return;
39
+ }
40
+ return () => {
41
+ emitFilterColumnsChanged(eventHub, panelId, null);
42
+ emitFilterTableChanged(eventHub, panelId, null);
43
+ };
44
+ }, [eventHub, panelId]);
45
+ var getInputFilters = useCallback(s => getInputFiltersForDashboard(s, dashboardId), [dashboardId]);
46
+ var reduxInputFilters = useAppSelector(getInputFilters);
47
+ var inputFilters = useMemo(() => IrisGridUtils.getInputFiltersForColumns(columns,
48
+ // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.
49
+ reduxInputFilters.filter(_ref => {
50
+ var {
51
+ value,
52
+ excludePanelIds
53
+ } = _ref;
54
+ return value != null && (excludePanelIds == null || panelId != null && !excludePanelIds.includes(panelId));
55
+ })), [columns, panelId, reduxInputFilters]);
56
+ return inputFilters;
57
+ }
58
+ export default useDashboardColumnFilters;
59
+ //# sourceMappingURL=useDashboardColumnFilters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDashboardColumnFilters.js","names":["useCallback","useEffect","useMemo","IrisGridUtils","useLayoutManager","useDashboardId","useAppSelector","useDhId","getInputFiltersForDashboard","emitFilterColumnsChanged","emitFilterTableChanged","useDashboardColumnFilters","columns","table","eventHub","dashboardId","panelId","columnsChanged","tableChanged","cleanupOnUnmount","getInputFilters","s","reduxInputFilters","inputFilters","getInputFiltersForColumns","filter","_ref","value","excludePanelIds","includes"],"sources":["../src/useDashboardColumnFilters.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { IrisGridUtils, type InputFilter } from '@deephaven/iris-grid';\nimport {\n useLayoutManager,\n useDashboardId,\n useAppSelector,\n useDhId,\n} from '@deephaven/dashboard';\nimport { type RootState } from '@deephaven/redux';\nimport { getInputFiltersForDashboard } from './redux';\nimport {\n type FilterColumnSourceId,\n emitFilterColumnsChanged,\n emitFilterTableChanged,\n} from './FilterEvents';\n\n/**\n * Subscribes to the dashboard column filters (a.k.a. InputFilter) for the current panel or widget, and\n * adds the columns provided to the filter options in the dashboard.\n * @param columns The columns this source has available for filtering.\n * These are used to populate filter options in the UI (InputFilter, DropdownFilter)\n * @param table The table for this source if applicable.\n * This is used to enable ChartBuilder from IrisGrid.\n * @returns The dashboard column filters (InputFilter[]) that apply to the columns provided.\n */\nexport function useDashboardColumnFilters(\n columns: readonly { name: string; type: string }[],\n table?: dh.Table\n): InputFilter[] {\n const { eventHub } = useLayoutManager();\n const dashboardId = useDashboardId();\n const panelId = useDhId() as FilterColumnSourceId | null;\n\n useEffect(\n function columnsChanged() {\n if (panelId == null) {\n return;\n }\n emitFilterColumnsChanged(eventHub, panelId, columns);\n },\n [eventHub, panelId, columns]\n );\n\n useEffect(\n function tableChanged() {\n if (table == null || panelId == null) {\n return;\n }\n emitFilterTableChanged(eventHub, panelId, table);\n },\n [eventHub, panelId, table]\n );\n\n // Cleanup separately because filtering the table or other operations can get a new columns array,\n // and we are using null to indicate unmount, not change\n useEffect(\n function cleanupOnUnmount() {\n if (panelId == null) {\n return;\n }\n return () => {\n emitFilterColumnsChanged(eventHub, panelId, null);\n emitFilterTableChanged(eventHub, panelId, null);\n };\n },\n [eventHub, panelId]\n );\n\n const getInputFilters = useCallback(\n (s: RootState) => getInputFiltersForDashboard(s, dashboardId),\n [dashboardId]\n );\n\n const reduxInputFilters = useAppSelector(getInputFilters);\n\n const inputFilters = useMemo(\n () =>\n IrisGridUtils.getInputFiltersForColumns(\n columns,\n // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.\n reduxInputFilters.filter(\n ({ value, excludePanelIds }) =>\n value != null &&\n (excludePanelIds == null ||\n (panelId != null && !excludePanelIds.includes(panelId)))\n )\n ),\n [columns, panelId, reduxInputFilters]\n );\n\n return inputFilters;\n}\n\nexport default useDashboardColumnFilters;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAEvD,SAASC,aAAa,QAA0B,sBAAsB;AACtE,SACEC,gBAAgB,EAChBC,cAAc,EACdC,cAAc,EACdC,OAAO,QACF,sBAAsB;AAAC,SAErBC,2BAA2B;AAAA,SAGlCC,wBAAwB,EACxBC,sBAAsB;AAGxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,yBAAyBA,CACvCC,OAAkD,EAClDC,KAAgB,EACD;EACf,IAAM;IAAEC;EAAS,CAAC,GAAGV,gBAAgB,CAAC,CAAC;EACvC,IAAMW,WAAW,GAAGV,cAAc,CAAC,CAAC;EACpC,IAAMW,OAAO,GAAGT,OAAO,CAAC,CAAgC;EAExDN,SAAS,CACP,SAASgB,cAAcA,CAAA,EAAG;IACxB,IAAID,OAAO,IAAI,IAAI,EAAE;MACnB;IACF;IACAP,wBAAwB,CAACK,QAAQ,EAAEE,OAAO,EAAEJ,OAAO,CAAC;EACtD,CAAC,EACD,CAACE,QAAQ,EAAEE,OAAO,EAAEJ,OAAO,CAC7B,CAAC;EAEDX,SAAS,CACP,SAASiB,YAAYA,CAAA,EAAG;IACtB,IAAIL,KAAK,IAAI,IAAI,IAAIG,OAAO,IAAI,IAAI,EAAE;MACpC;IACF;IACAN,sBAAsB,CAACI,QAAQ,EAAEE,OAAO,EAAEH,KAAK,CAAC;EAClD,CAAC,EACD,CAACC,QAAQ,EAAEE,OAAO,EAAEH,KAAK,CAC3B,CAAC;;EAED;EACA;EACAZ,SAAS,CACP,SAASkB,gBAAgBA,CAAA,EAAG;IAC1B,IAAIH,OAAO,IAAI,IAAI,EAAE;MACnB;IACF;IACA,OAAO,MAAM;MACXP,wBAAwB,CAACK,QAAQ,EAAEE,OAAO,EAAE,IAAI,CAAC;MACjDN,sBAAsB,CAACI,QAAQ,EAAEE,OAAO,EAAE,IAAI,CAAC;IACjD,CAAC;EACH,CAAC,EACD,CAACF,QAAQ,EAAEE,OAAO,CACpB,CAAC;EAED,IAAMI,eAAe,GAAGpB,WAAW,CAChCqB,CAAY,IAAKb,2BAA2B,CAACa,CAAC,EAAEN,WAAW,CAAC,EAC7D,CAACA,WAAW,CACd,CAAC;EAED,IAAMO,iBAAiB,GAAGhB,cAAc,CAACc,eAAe,CAAC;EAEzD,IAAMG,YAAY,GAAGrB,OAAO,CAC1B,MACEC,aAAa,CAACqB,yBAAyB,CACrCZ,OAAO;EACP;EACAU,iBAAiB,CAACG,MAAM,CACtBC,IAAA;IAAA,IAAC;MAAEC,KAAK;MAAEC;IAAgB,CAAC,GAAAF,IAAA;IAAA,OACzBC,KAAK,IAAI,IAAI,KACZC,eAAe,IAAI,IAAI,IACrBZ,OAAO,IAAI,IAAI,IAAI,CAACY,eAAe,CAACC,QAAQ,CAACb,OAAO,CAAE,CAAC;EAAA,CAC9D,CACF,CAAC,EACH,CAACJ,OAAO,EAAEI,OAAO,EAAEM,iBAAiB,CACtC,CAAC;EAED,OAAOC,YAAY;AACrB;AAEA,eAAeZ,yBAAyB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/dashboard-core-plugins",
3
- "version": "0.109.1-beta.6+5b34cd6f",
3
+ "version": "0.109.1-beta.7+9de971f4",
4
4
  "description": "Deephaven Dashboard Core Plugins",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -22,26 +22,26 @@
22
22
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
23
23
  },
24
24
  "dependencies": {
25
- "@deephaven/chart": "^0.109.1-beta.6+5b34cd6f",
26
- "@deephaven/components": "^0.109.1-beta.6+5b34cd6f",
27
- "@deephaven/console": "^0.109.1-beta.6+5b34cd6f",
28
- "@deephaven/dashboard": "^0.109.1-beta.6+5b34cd6f",
29
- "@deephaven/file-explorer": "^0.109.1-beta.6+5b34cd6f",
30
- "@deephaven/filters": "^0.109.1-beta.6+5b34cd6f",
31
- "@deephaven/golden-layout": "^0.109.1-beta.6+5b34cd6f",
32
- "@deephaven/grid": "^0.109.1-beta.6+5b34cd6f",
33
- "@deephaven/icons": "^0.109.1-beta.6+5b34cd6f",
34
- "@deephaven/iris-grid": "^0.109.1-beta.6+5b34cd6f",
35
- "@deephaven/jsapi-bootstrap": "^0.109.1-beta.6+5b34cd6f",
36
- "@deephaven/jsapi-components": "^0.109.1-beta.6+5b34cd6f",
25
+ "@deephaven/chart": "^0.109.1-beta.7+9de971f4",
26
+ "@deephaven/components": "^0.109.1-beta.7+9de971f4",
27
+ "@deephaven/console": "^0.109.1-beta.7+9de971f4",
28
+ "@deephaven/dashboard": "^0.109.1-beta.7+9de971f4",
29
+ "@deephaven/file-explorer": "^0.109.1-beta.7+9de971f4",
30
+ "@deephaven/filters": "^0.109.1-beta.7+9de971f4",
31
+ "@deephaven/golden-layout": "^0.109.1-beta.7+9de971f4",
32
+ "@deephaven/grid": "^0.109.1-beta.7+9de971f4",
33
+ "@deephaven/icons": "^0.109.1-beta.7+9de971f4",
34
+ "@deephaven/iris-grid": "^0.109.1-beta.7+9de971f4",
35
+ "@deephaven/jsapi-bootstrap": "^0.109.1-beta.7+9de971f4",
36
+ "@deephaven/jsapi-components": "^0.109.1-beta.7+9de971f4",
37
37
  "@deephaven/jsapi-types": "^1.0.0-dev0.37.2",
38
- "@deephaven/jsapi-utils": "^0.109.1-beta.6+5b34cd6f",
39
- "@deephaven/log": "^0.109.1-beta.6+5b34cd6f",
40
- "@deephaven/plugin": "^0.109.1-beta.6+5b34cd6f",
41
- "@deephaven/react-hooks": "^0.109.1-beta.6+5b34cd6f",
42
- "@deephaven/redux": "^0.109.1-beta.6+5b34cd6f",
43
- "@deephaven/storage": "^0.109.1-beta.6+5b34cd6f",
44
- "@deephaven/utils": "^0.109.1-beta.6+5b34cd6f",
38
+ "@deephaven/jsapi-utils": "^0.109.1-beta.7+9de971f4",
39
+ "@deephaven/log": "^0.109.1-beta.7+9de971f4",
40
+ "@deephaven/plugin": "^0.109.1-beta.7+9de971f4",
41
+ "@deephaven/react-hooks": "^0.109.1-beta.7+9de971f4",
42
+ "@deephaven/redux": "^0.109.1-beta.7+9de971f4",
43
+ "@deephaven/storage": "^0.109.1-beta.7+9de971f4",
44
+ "@deephaven/utils": "^0.109.1-beta.7+9de971f4",
45
45
  "@fortawesome/react-fontawesome": "^0.2.0",
46
46
  "classnames": "^2.3.1",
47
47
  "fast-deep-equal": "^3.1.3",
@@ -65,9 +65,9 @@
65
65
  "react-redux": "^7.2.4"
66
66
  },
67
67
  "devDependencies": {
68
- "@deephaven/jsapi-shim": "^0.109.1-beta.6+5b34cd6f",
69
- "@deephaven/mocks": "^0.109.1-beta.6+5b34cd6f",
70
- "@deephaven/test-utils": "^0.109.1-beta.6+5b34cd6f"
68
+ "@deephaven/jsapi-shim": "^0.109.1-beta.7+9de971f4",
69
+ "@deephaven/mocks": "^0.109.1-beta.7+9de971f4",
70
+ "@deephaven/test-utils": "^0.109.1-beta.7+9de971f4"
71
71
  },
72
72
  "files": [
73
73
  "dist",
@@ -79,5 +79,5 @@
79
79
  "publishConfig": {
80
80
  "access": "public"
81
81
  },
82
- "gitHead": "5b34cd6f09c5ba4c109d09323bb830a36ae949da"
82
+ "gitHead": "9de971f433cd3b8ee9e95719f6641d3428659520"
83
83
  }