@deephaven/dashboard-core-plugins 1.22.1-alpha-pivot-builder.0 → 1.22.1

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.
@@ -1,15 +1,5 @@
1
1
  import { type WidgetComponentProps } from '@deephaven/plugin';
2
2
  import { type dh as DhType } from '@deephaven/jsapi-types';
3
- import { type IrisGridViewProps, type IrisGridModel, type IrisGridTableOptionsWidgetProps, type IrisGridModelWidgetProps } from '@deephaven/iris-grid';
4
- export declare function GridWidgetPlugin({ fetch, transformTableOptions, transformModel, irisGridProps, onModelChanged, }: WidgetComponentProps<DhType.Table> & IrisGridTableOptionsWidgetProps & IrisGridModelWidgetProps & {
5
- /**
6
- * View-concern overrides (theme, renderer, mouse handlers, metric
7
- * calculator) forwarded as a single bag to `<IrisGrid>`. Lets a plugin
8
- * contribute presentation without this host knowing each concern by name.
9
- */
10
- irisGridProps?: Partial<IrisGridViewProps>;
11
- /** Called once the model is built, so middleware can observe it. */
12
- onModelChanged?: (model: IrisGridModel) => void;
13
- }): JSX.Element | null;
3
+ export declare function GridWidgetPlugin({ fetch, }: WidgetComponentProps<DhType.Table>): JSX.Element | null;
14
4
  export default GridWidgetPlugin;
15
5
  //# sourceMappingURL=GridWidgetPlugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GridWidgetPlugin.d.ts","sourceRoot":"","sources":["../src/GridWidgetPlugin.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAOL,KAAK,iBAAiB,EAGtB,KAAK,aAAa,EAClB,KAAK,+BAA+B,EACpC,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAkB9B,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,cAAc,GACf,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,GACnC,+BAA+B,GAC/B,wBAAwB,GAAG;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3C,oEAAoE;IACpE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CACjD,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAgKvB;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"GridWidgetPlugin.d.ts","sourceRoot":"","sources":["../src/GridWidgetPlugin.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AA4B3D,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,GACN,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAsJzD;AAED,eAAe,gBAAgB,CAAC"}
@@ -6,7 +6,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
6
6
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
7
7
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
8
8
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
9
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
9
+ import { useCallback, useMemo, useRef, useState } from 'react';
10
10
  import { IrisGrid, IrisGridCacheUtils, IrisGridUtils, isIrisGridTableModelTemplate } from '@deephaven/iris-grid';
11
11
  import { useSelector } from 'react-redux';
12
12
  import { getSettings } from '@deephaven/redux';
@@ -23,25 +23,14 @@ import { jsx as _jsx } from "react/jsx-runtime";
23
23
  export function GridWidgetPlugin(_ref) {
24
24
  var _model$columns;
25
25
  var {
26
- fetch,
27
- transformTableOptions,
28
- transformModel,
29
- irisGridProps,
30
- onModelChanged
26
+ fetch
31
27
  } = _ref;
32
28
  var settings = useSelector(getSettings);
33
29
  var {
34
30
  eventHub
35
31
  } = useLayoutManager();
36
- var fetchResult = useIrisGridModel(fetch, transformModel);
32
+ var fetchResult = useIrisGridModel(fetch);
37
33
  var model = fetchResult.status === 'success' ? fetchResult.model : undefined;
38
-
39
- // Notify observers (e.g. middleware) when the built model changes.
40
- useEffect(() => {
41
- if (model != null) {
42
- onModelChanged === null || onModelChanged === void 0 || onModelChanged(model);
43
- }
44
- }, [model, onModelChanged]);
45
34
  var dh = useApi();
46
35
  var irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);
47
36
  var [state, setState] = usePersistentState(undefined, {
@@ -107,7 +96,7 @@ export function GridWidgetPlugin(_ref) {
107
96
  });
108
97
  }
109
98
  assertNotNull(model, 'Model should be defined when fetch is successful');
110
- return /*#__PURE__*/_jsx(IrisGrid, _objectSpread(_objectSpread(_objectSpread(_objectSpread({
99
+ return /*#__PURE__*/_jsx(IrisGrid, _objectSpread(_objectSpread(_objectSpread({
111
100
  ref: irisGridRef,
112
101
  model: model,
113
102
  settings: settings,
@@ -115,10 +104,9 @@ export function GridWidgetPlugin(_ref) {
115
104
  onSelectionChanged: setSelection,
116
105
  onContextMenu: onContextMenu,
117
106
  inputFilters: inputFilters,
118
- customFilters: customFilters,
119
- transformTableOptions: transformTableOptions
107
+ customFilters: customFilters
120
108
  // eslint-disable-next-line react/jsx-props-no-spreading
121
- }, irisGridProps), linkerProps), {}, {
109
+ }, linkerProps), {}, {
122
110
  alwaysFetchColumns: alwaysFetchColumns
123
111
  // eslint-disable-next-line react/jsx-props-no-spreading
124
112
  }, hydratedState), {}, {
@@ -1 +1 @@
1
- {"version":3,"file":"GridWidgetPlugin.js","names":["useCallback","useEffect","useMemo","useRef","useState","IrisGrid","IrisGridCacheUtils","IrisGridUtils","isIrisGridTableModelTemplate","useSelector","getSettings","LoadingOverlay","useLayoutManager","useListener","usePersistentState","assertNotNull","getErrorMessage","useApi","useIrisGridModel","useDashboardColumnFilters","InputFilterEvent","useGridLinker","useTablePlugin","jsx","_jsx","GridWidgetPlugin","_ref","_model$columns","fetch","transformTableOptions","transformModel","irisGridProps","onModelChanged","settings","eventHub","fetchResult","model","status","undefined","dh","irisGridUtils","state","setState","version","type","initialState","hydratedState","current","_objectSpread","hydrateIrisGridState","hydrateGridState","dehydrateIrisGridState","makeMemoizedCombinedGridStateDehydrator","handleIrisGridChange","irisGridState","gridState","newState","inputFilters","columns","table","irisGridRef","_useGridLinker","alwaysFetchColumns","linkerAlwaysFetchColumns","linkerProps","_objectWithoutProperties","_excluded","handleClearAllFilters","clearAllFilters","CLEAR_ALL_FILTERS","selection","setSelection","Plugin","customFilters","filterFetchColumns","onContextMenu","selectedRanges","columnSet","Set","isLoading","errorMessage","error","ref","onStateChange","onSelectionChanged","children"],"sources":["../src/GridWidgetPlugin.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { type WidgetComponentProps } from '@deephaven/plugin';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type DehydratedGridState,\n type DehydratedIrisGridState,\n IrisGrid,\n IrisGridCacheUtils,\n type IrisGridState,\n type IrisGridType,\n type IrisGridViewProps,\n IrisGridUtils,\n isIrisGridTableModelTemplate,\n type IrisGridModel,\n type IrisGridTableOptionsWidgetProps,\n type IrisGridModelWidgetProps,\n} from '@deephaven/iris-grid';\nimport { useSelector } from 'react-redux';\nimport { getSettings, type RootState } from '@deephaven/redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport {\n useLayoutManager,\n useListener,\n usePersistentState,\n} from '@deephaven/dashboard';\nimport { assertNotNull, getErrorMessage } from '@deephaven/utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { type GridRange, type GridState } from '@deephaven/grid';\nimport { useIrisGridModel } from './useIrisGridModel';\nimport useDashboardColumnFilters from './useDashboardColumnFilters';\nimport { InputFilterEvent } from './events';\nimport useGridLinker from './useGridLinker';\nimport { useTablePlugin } from './useTablePlugin';\n\nexport function GridWidgetPlugin({\n fetch,\n transformTableOptions,\n transformModel,\n irisGridProps,\n onModelChanged,\n}: WidgetComponentProps<DhType.Table> &\n IrisGridTableOptionsWidgetProps &\n IrisGridModelWidgetProps & {\n /**\n * View-concern overrides (theme, renderer, mouse handlers, metric\n * calculator) forwarded as a single bag to `<IrisGrid>`. Lets a plugin\n * contribute presentation without this host knowing each concern by name.\n */\n irisGridProps?: Partial<IrisGridViewProps>;\n /** Called once the model is built, so middleware can observe it. */\n onModelChanged?: (model: IrisGridModel) => void;\n }): JSX.Element | null {\n const settings = useSelector(getSettings<RootState>);\n const { eventHub } = useLayoutManager();\n\n const fetchResult = useIrisGridModel(fetch, transformModel);\n const model =\n fetchResult.status === 'success' ? fetchResult.model : undefined;\n\n // Notify observers (e.g. middleware) when the built model changes.\n useEffect(() => {\n if (model != null) {\n onModelChanged?.(model);\n }\n }, [model, onModelChanged]);\n\n const dh = useApi();\n const irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);\n\n const [state, setState] = usePersistentState<\n (DehydratedIrisGridState & DehydratedGridState) | undefined\n >(undefined, {\n version: 1,\n type: 'GridWidgetPlugin',\n });\n const initialState = useRef(state);\n const hydratedState = useMemo(() => {\n if (\n fetchResult.status !== 'success' ||\n initialState.current === undefined\n ) {\n return;\n }\n return {\n ...irisGridUtils.hydrateIrisGridState(\n fetchResult.model,\n initialState.current\n ),\n ...IrisGridUtils.hydrateGridState(\n fetchResult.model,\n initialState.current\n ),\n };\n }, [fetchResult, irisGridUtils]);\n\n const dehydrateIrisGridState = useMemo(\n () => IrisGridCacheUtils.makeMemoizedCombinedGridStateDehydrator(),\n []\n );\n\n const handleIrisGridChange = useCallback(\n (irisGridState: IrisGridState, gridState: GridState) => {\n if (\n fetchResult.status !== 'success' ||\n irisGridState == null ||\n gridState == null\n ) {\n return;\n }\n\n const newState = dehydrateIrisGridState(\n fetchResult.model,\n irisGridState,\n gridState\n );\n\n setState(newState);\n },\n [fetchResult, setState, dehydrateIrisGridState]\n );\n\n const inputFilters = useDashboardColumnFilters(\n model?.columns ?? null,\n model != null && isIrisGridTableModelTemplate(model)\n ? model.table\n : undefined\n );\n\n const irisGridRef = useRef<IrisGridType | null>(null);\n\n const { alwaysFetchColumns: linkerAlwaysFetchColumns, ...linkerProps } =\n useGridLinker(\n fetchResult.status === 'success' ? fetchResult.model : null,\n irisGridRef.current\n );\n\n const handleClearAllFilters = useCallback(() => {\n if (irisGridRef.current == null) {\n return;\n }\n irisGridRef.current.clearAllFilters();\n }, []);\n\n useListener(\n eventHub,\n InputFilterEvent.CLEAR_ALL_FILTERS,\n handleClearAllFilters\n );\n\n const [selection, setSelection] = useState<readonly GridRange[]>([]);\n\n const {\n Plugin,\n customFilters,\n alwaysFetchColumns: filterFetchColumns,\n onContextMenu,\n } = useTablePlugin({\n model,\n irisGridRef,\n irisGridUtils,\n selectedRanges: selection,\n });\n\n const alwaysFetchColumns = useMemo(() => {\n const columnSet = new Set([\n ...linkerAlwaysFetchColumns,\n ...filterFetchColumns,\n ]);\n return [...columnSet];\n }, [linkerAlwaysFetchColumns, filterFetchColumns]);\n\n if (fetchResult.status === 'loading') {\n return (\n <LoadingOverlay isLoading data-testid=\"grid-widget-plugin-loading\" />\n );\n }\n\n if (fetchResult.status === 'error') {\n return (\n <LoadingOverlay\n data-testid=\"grid-widget-plugin-loading-error\"\n errorMessage={getErrorMessage(fetchResult.error)}\n isLoading={false}\n />\n );\n }\n\n assertNotNull(model, 'Model should be defined when fetch is successful');\n\n return (\n <IrisGrid\n ref={irisGridRef}\n model={model}\n settings={settings}\n onStateChange={handleIrisGridChange}\n onSelectionChanged={setSelection}\n onContextMenu={onContextMenu}\n inputFilters={inputFilters}\n customFilters={customFilters}\n transformTableOptions={transformTableOptions}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...irisGridProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...linkerProps}\n alwaysFetchColumns={alwaysFetchColumns}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...hydratedState}\n >\n {Plugin}\n </IrisGrid>\n );\n}\n\nexport default GridWidgetPlugin;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"GridWidgetPlugin.js","names":["useCallback","useMemo","useRef","useState","IrisGrid","IrisGridCacheUtils","IrisGridUtils","isIrisGridTableModelTemplate","useSelector","getSettings","LoadingOverlay","useLayoutManager","useListener","usePersistentState","assertNotNull","getErrorMessage","useApi","useIrisGridModel","useDashboardColumnFilters","InputFilterEvent","useGridLinker","useTablePlugin","jsx","_jsx","GridWidgetPlugin","_ref","_model$columns","fetch","settings","eventHub","fetchResult","model","status","undefined","dh","irisGridUtils","state","setState","version","type","initialState","hydratedState","current","_objectSpread","hydrateIrisGridState","hydrateGridState","dehydrateIrisGridState","makeMemoizedCombinedGridStateDehydrator","handleIrisGridChange","irisGridState","gridState","newState","inputFilters","columns","table","irisGridRef","_useGridLinker","alwaysFetchColumns","linkerAlwaysFetchColumns","linkerProps","_objectWithoutProperties","_excluded","handleClearAllFilters","clearAllFilters","CLEAR_ALL_FILTERS","selection","setSelection","Plugin","customFilters","filterFetchColumns","onContextMenu","selectedRanges","columnSet","Set","isLoading","errorMessage","error","ref","onStateChange","onSelectionChanged","children"],"sources":["../src/GridWidgetPlugin.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport { type WidgetComponentProps } from '@deephaven/plugin';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type DehydratedGridState,\n type DehydratedIrisGridState,\n IrisGrid,\n IrisGridCacheUtils,\n type IrisGridState,\n type IrisGridType,\n IrisGridUtils,\n isIrisGridTableModelTemplate,\n} from '@deephaven/iris-grid';\nimport { useSelector } from 'react-redux';\nimport { getSettings, type RootState } from '@deephaven/redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport {\n useLayoutManager,\n useListener,\n usePersistentState,\n} from '@deephaven/dashboard';\nimport { assertNotNull, getErrorMessage } from '@deephaven/utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { type GridRange, type GridState } from '@deephaven/grid';\nimport { useIrisGridModel } from './useIrisGridModel';\nimport useDashboardColumnFilters from './useDashboardColumnFilters';\nimport { InputFilterEvent } from './events';\nimport useGridLinker from './useGridLinker';\nimport { useTablePlugin } from './useTablePlugin';\n\nexport function GridWidgetPlugin({\n fetch,\n}: WidgetComponentProps<DhType.Table>): JSX.Element | null {\n const settings = useSelector(getSettings<RootState>);\n const { eventHub } = useLayoutManager();\n\n const fetchResult = useIrisGridModel(fetch);\n const model =\n fetchResult.status === 'success' ? fetchResult.model : undefined;\n\n const dh = useApi();\n const irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);\n\n const [state, setState] = usePersistentState<\n (DehydratedIrisGridState & DehydratedGridState) | undefined\n >(undefined, {\n version: 1,\n type: 'GridWidgetPlugin',\n });\n const initialState = useRef(state);\n const hydratedState = useMemo(() => {\n if (\n fetchResult.status !== 'success' ||\n initialState.current === undefined\n ) {\n return;\n }\n return {\n ...irisGridUtils.hydrateIrisGridState(\n fetchResult.model,\n initialState.current\n ),\n ...IrisGridUtils.hydrateGridState(\n fetchResult.model,\n initialState.current\n ),\n };\n }, [fetchResult, irisGridUtils]);\n\n const dehydrateIrisGridState = useMemo(\n () => IrisGridCacheUtils.makeMemoizedCombinedGridStateDehydrator(),\n []\n );\n\n const handleIrisGridChange = useCallback(\n (irisGridState: IrisGridState, gridState: GridState) => {\n if (\n fetchResult.status !== 'success' ||\n irisGridState == null ||\n gridState == null\n ) {\n return;\n }\n\n const newState = dehydrateIrisGridState(\n fetchResult.model,\n irisGridState,\n gridState\n );\n\n setState(newState);\n },\n [fetchResult, setState, dehydrateIrisGridState]\n );\n\n const inputFilters = useDashboardColumnFilters(\n model?.columns ?? null,\n model != null && isIrisGridTableModelTemplate(model)\n ? model.table\n : undefined\n );\n\n const irisGridRef = useRef<IrisGridType | null>(null);\n\n const { alwaysFetchColumns: linkerAlwaysFetchColumns, ...linkerProps } =\n useGridLinker(\n fetchResult.status === 'success' ? fetchResult.model : null,\n irisGridRef.current\n );\n\n const handleClearAllFilters = useCallback(() => {\n if (irisGridRef.current == null) {\n return;\n }\n irisGridRef.current.clearAllFilters();\n }, []);\n\n useListener(\n eventHub,\n InputFilterEvent.CLEAR_ALL_FILTERS,\n handleClearAllFilters\n );\n\n const [selection, setSelection] = useState<readonly GridRange[]>([]);\n\n const {\n Plugin,\n customFilters,\n alwaysFetchColumns: filterFetchColumns,\n onContextMenu,\n } = useTablePlugin({\n model,\n irisGridRef,\n irisGridUtils,\n selectedRanges: selection,\n });\n\n const alwaysFetchColumns = useMemo(() => {\n const columnSet = new Set([\n ...linkerAlwaysFetchColumns,\n ...filterFetchColumns,\n ]);\n return [...columnSet];\n }, [linkerAlwaysFetchColumns, filterFetchColumns]);\n\n if (fetchResult.status === 'loading') {\n return (\n <LoadingOverlay isLoading data-testid=\"grid-widget-plugin-loading\" />\n );\n }\n\n if (fetchResult.status === 'error') {\n return (\n <LoadingOverlay\n data-testid=\"grid-widget-plugin-loading-error\"\n errorMessage={getErrorMessage(fetchResult.error)}\n isLoading={false}\n />\n );\n }\n\n assertNotNull(model, 'Model should be defined when fetch is successful');\n\n return (\n <IrisGrid\n ref={irisGridRef}\n model={model}\n settings={settings}\n onStateChange={handleIrisGridChange}\n onSelectionChanged={setSelection}\n onContextMenu={onContextMenu}\n inputFilters={inputFilters}\n customFilters={customFilters}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...linkerProps}\n alwaysFetchColumns={alwaysFetchColumns}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...hydratedState}\n >\n {Plugin}\n </IrisGrid>\n );\n}\n\nexport default GridWidgetPlugin;\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import React, { PureComponent, type ReactElement, type ReactNode, type RefObject } from 'react';
2
2
  import { type DashboardPanelProps, type PanelComponent } from '@deephaven/dashboard';
3
- import { type IrisGridType, IrisGridModel, type ColumnName, type PendingDataMap, type InputFilter, type ReadonlyAdvancedFilterMap, type AggregationSettings, type AdvancedSettingsType, type UIRollupConfig, type UIRow, type ReadonlyQuickFilterMap, type FilterMap, type QuickFilter, type AdvancedFilter, type SidebarFormattingRule, type IrisGridState, type ChartBuilderSettings, type DehydratedIrisGridState, type DehydratedIrisGridPanelState, type ColumnHeaderGroup, type IrisGridContextMenuData, type PartitionConfig, type IrisGridViewProps, type TableOptionsTransform, type IrisGridModelTransform } from '@deephaven/iris-grid';
3
+ import { type IrisGridType, IrisGridModel, type ColumnName, type PendingDataMap, type InputFilter, type IrisGridThemeType, type ReadonlyAdvancedFilterMap, type AggregationSettings, type AdvancedSettingsType, type UIRollupConfig, type UIRow, type ReadonlyQuickFilterMap, type FilterMap, type QuickFilter, type AdvancedFilter, type SidebarFormattingRule, type IrisGridState, type ChartBuilderSettings, type DehydratedIrisGridState, type DehydratedIrisGridPanelState, type ColumnHeaderGroup, type IrisGridContextMenuData, type PartitionConfig, type IrisGridRenderer, type MouseHandlersProp, type GetMetricCalculatorType } from '@deephaven/iris-grid';
4
4
  import { type RowDataMap, type FormattingRule, type SortDescriptor } from '@deephaven/jsapi-utils';
5
5
  import { type User, type WorkspaceSettings } from '@deephaven/redux';
6
6
  import { type CancelablePromise, type EventT } from '@deephaven/utils';
@@ -43,32 +43,10 @@ export interface OwnProps extends DashboardPanelProps {
43
43
  getDownloadWorker?: () => Promise<ServiceWorker>;
44
44
  /** Load a plugin defined by the table */
45
45
  loadPlugin: (pluginName: string) => TablePluginComponent;
46
- /**
47
- * View-concern overrides (theme, renderer, mouse handlers, metric
48
- * calculator) forwarded as a single bag to `IrisGrid`. Lets IrisGrid-aware
49
- * middleware contribute presentation without this panel knowing each
50
- * concern by name. Threaded down the middleware chain.
51
- */
52
- irisGridProps?: Partial<IrisGridViewProps>;
53
- /**
54
- * Transform applied to the built-in Table Options items before they are
55
- * rendered. Forwarded to `IrisGrid#transformTableOptions`. Threaded down
56
- * the middleware chain by IrisGrid-aware plugins.
57
- */
58
- transformTableOptions?: TableOptionsTransform;
59
- /**
60
- * Called with the resolved `IrisGridModel` once it is initialized, so
61
- * middleware can subscribe to model events (e.g. to recompute a
62
- * `transformTableOptions` snapshot).
63
- */
64
- onModelChanged?: (model: IrisGridModel) => void;
65
- /**
66
- * Transform applied to the model built by `makeModel` before it is handed
67
- * to `IrisGrid`. Lets IrisGrid-aware middleware wrap the host-built model
68
- * (e.g. in a proxy) without taking over model construction. Applied when
69
- * the model is (re)built, so it must be referentially stable.
70
- */
71
- transformModel?: IrisGridModelTransform;
46
+ theme?: Partial<IrisGridThemeType> & Record<string, unknown>;
47
+ mouseHandlers?: MouseHandlersProp;
48
+ renderer?: IrisGridRenderer;
49
+ getMetricCalculator?: GetMetricCalculatorType;
72
50
  }
73
51
  interface StateProps {
74
52
  inputFilters: InputFilter[];
@@ -206,7 +184,7 @@ export declare class IrisGridPanel extends PureComponent<IrisGridPanelProps, Iri
206
184
  updateGrid(): void;
207
185
  render(): ReactElement;
208
186
  }
209
- declare const ConnectedIrisGridPanel: import("react-redux").ConnectedComponent<typeof IrisGridPanel, import("react-redux").Omit<Pick<React.ClassAttributes<IrisGridPanel> & OwnProps & StateProps, "glEventHub" | "children" | "glContainer" | "metadata" | "makeModel" | "localDashboardId" | "panelState" | "getDownloadWorker" | "loadPlugin" | "irisGridProps" | "transformTableOptions" | "onModelChanged" | "transformModel" | keyof StateProps | keyof React.ClassAttributes<IrisGridPanel>> & {
187
+ declare const ConnectedIrisGridPanel: import("react-redux").ConnectedComponent<typeof IrisGridPanel, import("react-redux").Omit<Pick<React.ClassAttributes<IrisGridPanel> & OwnProps & StateProps, "glEventHub" | "children" | "glContainer" | "metadata" | "makeModel" | "localDashboardId" | "panelState" | "theme" | "getDownloadWorker" | "loadPlugin" | "mouseHandlers" | "renderer" | "getMetricCalculator" | keyof StateProps | keyof React.ClassAttributes<IrisGridPanel>> & {
210
188
  onStateChange?: ((irisGridState: IrisGridState, gridState: GridState) => void) | undefined;
211
189
  onPanelStateUpdate?: ((panelState: PanelState) => void) | undefined;
212
190
  } & {}, "user" | "settings" | "inputFilters" | "links" | "columnSelectionValidator"> & OwnProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridPanel.d.ts","sourceRoot":"","sources":["../../src/panels/IrisGridPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IrisGridPanel.d.ts","sourceRoot":"","sources":["../../src/panels/IrisGridPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,3 @@
1
- function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
2
- function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
3
1
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
2
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
3
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
@@ -285,30 +283,12 @@ export class IrisGridPanel extends PureComponent {
285
283
  isDisconnected: false
286
284
  });
287
285
  var {
288
- makeModel,
289
- transformModel
286
+ makeModel
290
287
  } = this.props;
291
288
  if (this.modelPromise != null) {
292
289
  this.modelPromise.cancel();
293
290
  }
294
- var modelPromise = transformModel != null ? Promise.resolve(makeModel()).then(/*#__PURE__*/function () {
295
- var _ref2 = _asyncToGenerator(function* (model) {
296
- try {
297
- var transformedModel = yield transformModel(model);
298
- return transformedModel;
299
- } catch (e) {
300
- // The host owns the base model's lifecycle; if the transform
301
- // rejects it never returns a model for us to close, so close
302
- // the base model here to avoid leaking it.
303
- model.close();
304
- throw e;
305
- }
306
- });
307
- return function (_x) {
308
- return _ref2.apply(this, arguments);
309
- };
310
- }()) : Promise.resolve(makeModel());
311
- this.modelPromise = PromiseUtils.makeCancelable(modelPromise, resolved => resolved.close());
291
+ this.modelPromise = PromiseUtils.makeCancelable(makeModel(), resolved => resolved.close());
312
292
  this.modelPromise.then(this.handleLoadSuccess).catch(this.handleLoadError);
313
293
  }
314
294
  handleLoadSuccess(modelParam) {
@@ -375,10 +355,10 @@ export class IrisGridPanel extends PureComponent {
375
355
  }
376
356
  handleAdvancedSettingsChange(key, value) {
377
357
  log.debug('handleAdvancedSettingsChange', key, value);
378
- this.setState(_ref3 => {
358
+ this.setState(_ref2 => {
379
359
  var {
380
360
  advancedSettings
381
- } = _ref3;
361
+ } = _ref2;
382
362
  return advancedSettings.get(key) === value ? null : {
383
363
  advancedSettings: new Map(advancedSettings).set(key, value)
384
364
  };
@@ -565,8 +545,7 @@ export class IrisGridPanel extends PureComponent {
565
545
  modelInitialized(model) {
566
546
  var {
567
547
  glEventHub,
568
- loadPlugin,
569
- onModelChanged
548
+ loadPlugin
570
549
  } = this.props;
571
550
  this.modelPromise = undefined;
572
551
 
@@ -575,7 +554,6 @@ export class IrisGridPanel extends PureComponent {
575
554
  this.setState({
576
555
  isModelReady: true
577
556
  });
578
- onModelChanged === null || onModelChanged === void 0 || onModelChanged(model);
579
557
  if (isIrisGridTableModelTemplate(model)) {
580
558
  var {
581
559
  table
@@ -676,11 +654,11 @@ export class IrisGridPanel extends PureComponent {
676
654
  irisGrid.setAdvancedFilterMap(filterMap);
677
655
  }
678
656
  }
679
- setFilters(_ref4) {
657
+ setFilters(_ref3) {
680
658
  var {
681
659
  quickFilters,
682
660
  advancedFilters
683
- } = _ref4;
661
+ } = _ref3;
684
662
  log.debug('setFilters', quickFilters, advancedFilters);
685
663
  var {
686
664
  model,
@@ -696,12 +674,12 @@ export class IrisGridPanel extends PureComponent {
696
674
  columns,
697
675
  formatter
698
676
  } = model;
699
- var indexedQuickFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(model.columns, quickFilters).filter(_ref5 => {
700
- var [columnIndex] = _ref5;
677
+ var indexedQuickFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(model.columns, quickFilters).filter(_ref4 => {
678
+ var [columnIndex] = _ref4;
701
679
  return model.isFilterable(columnIndex);
702
680
  });
703
- var indexedAdvancedFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(model.columns, advancedFilters).filter(_ref6 => {
704
- var [columnIndex] = _ref6;
681
+ var indexedAdvancedFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(model.columns, advancedFilters).filter(_ref5 => {
682
+ var [columnIndex] = _ref5;
705
683
  return model.isFilterable(columnIndex);
706
684
  });
707
685
  assertNotNull(this.irisGridUtils);
@@ -848,11 +826,13 @@ export class IrisGridPanel extends PureComponent {
848
826
  inputFilters,
849
827
  links,
850
828
  metadata,
829
+ mouseHandlers,
851
830
  panelState,
852
831
  user,
832
+ renderer,
853
833
  settings,
854
- irisGridProps,
855
- transformTableOptions
834
+ getMetricCalculator,
835
+ theme
856
836
  } = this.props;
857
837
  var {
858
838
  advancedFilters,
@@ -925,7 +905,7 @@ export class IrisGridPanel extends PureComponent {
925
905
  descriptor: widgetPanelDescriptor,
926
906
  model: model
927
907
  }),
928
- children: isModelReady && model && /*#__PURE__*/_jsx(IrisGrid, _objectSpread(_objectSpread({
908
+ children: isModelReady && model && /*#__PURE__*/_jsx(IrisGrid, {
929
909
  advancedFilters: advancedFilters,
930
910
  aggregationSettings: aggregationSettings,
931
911
  advancedSettings: advancedSettings,
@@ -945,11 +925,13 @@ export class IrisGridPanel extends PureComponent {
945
925
  isSelectingPartition: isSelectingPartition,
946
926
  isStuckToBottom: isStuckToBottom,
947
927
  isStuckToRight: isStuckToRight,
928
+ mouseHandlers: mouseHandlers,
948
929
  movedColumns: movedColumns,
949
930
  movedRows: movedRows,
950
931
  partitions: partitions,
951
932
  partitionConfig: partitionConfig,
952
933
  quickFilters: quickFilters,
934
+ renderer: renderer,
953
935
  reverse: reverse,
954
936
  rollupConfig: rollupConfig,
955
937
  settings: settings,
@@ -977,12 +959,11 @@ export class IrisGridPanel extends PureComponent {
977
959
  ref: this.irisGrid,
978
960
  getDownloadWorker: getDownloadWorker,
979
961
  frozenColumns: frozenColumns,
962
+ theme: theme,
980
963
  columnHeaderGroups: columnHeaderGroups,
981
- transformTableOptions: transformTableOptions
982
- // eslint-disable-next-line react/jsx-props-no-spreading
983
- }, irisGridProps), {}, {
964
+ getMetricCalculator: getMetricCalculator,
984
965
  children: childrenContent
985
- }))
966
+ })
986
967
  });
987
968
  }
988
969
  }
@@ -992,11 +973,11 @@ _defineProperty(IrisGridPanel, "defaultProps", {
992
973
  });
993
974
  _defineProperty(IrisGridPanel, "displayName", 'IrisGridPanel');
994
975
  _defineProperty(IrisGridPanel, "COMPONENT", 'IrisGridPanel');
995
- var mapStateToProps = (state, _ref7) => {
976
+ var mapStateToProps = (state, _ref6) => {
996
977
  var {
997
978
  localDashboardId = DEFAULT_DASHBOARD_ID,
998
979
  glContainer
999
- } = _ref7;
980
+ } = _ref6;
1000
981
  return {
1001
982
  inputFilters: getInputFiltersForDashboard(state, localDashboardId),
1002
983
  links: getLinksForDashboard(state, localDashboardId),
@@ -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","clamp","IrisGridEvent","getInputFiltersForDashboard","getLinksForDashboard","getColumnSelectionValidatorForDashboard","WidgetPanel","IrisGridPanelTooltip","isIrisGridPanelMetadata","isLegacyIrisGridPanelMetadata","emitFilterColumnsChanged","emitFilterTableChanged","emitLinkPointSelected","emitLinkSourceDataSelected","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","columnAlignmentMap","isFilterBarShown","quickFilters","sorts","userColumnWidths","userColumnWidthsByName","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","transformModel","Promise","resolve","then","_ref2","_asyncToGenerator","transformedModel","e","_x","apply","arguments","makeCancelable","resolved","catch","modelParam","dh","push","m","getModelRollupConfig","originalColumns","initModelQueue","modelInitialized","modelChange","shift","key","_ref3","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","row","dataMap","updateGrid","focus","isCanceled","loadPlugin","onModelChanged","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","left","y","top","setFilterMap","filterMap","setAdvancedFilterMap","setFilters","_ref4","indexedQuickFilters","changeFilterColumnNamesToIndexes","_ref5","isFilterable","indexedAdvancedFilters","_ref6","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","irisGridProps","transformTableOptions","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","_ref7","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 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 type IrisGridViewProps,\n type TableOptionsTransform,\n type IrisGridModelTransform,\n} from '@deephaven/iris-grid';\nimport {\n type RowDataMap,\n type AdvancedFilterOptions,\n type FormattingRule,\n type SortDescriptor,\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 clamp from 'lodash.clamp';\nimport { IrisGridEvent } from '../events';\nimport {\n getInputFiltersForDashboard,\n getLinksForDashboard,\n getColumnSelectionValidatorForDashboard,\n} from '../redux';\nimport WidgetPanel from './WidgetPanel';\nimport './IrisGridPanel.scss';\nimport {\n type Link,\n type LinkColumn,\n type LinkPointOptions,\n} 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';\nimport {\n emitLinkPointSelected,\n emitLinkSourceDataSelected,\n} from '../linker/LinkerEvent';\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 /**\n * View-concern overrides (theme, renderer, mouse handlers, metric\n * calculator) forwarded as a single bag to `IrisGrid`. Lets IrisGrid-aware\n * middleware contribute presentation without this panel knowing each\n * concern by name. Threaded down the middleware chain.\n */\n irisGridProps?: Partial<IrisGridViewProps>;\n\n /**\n * Transform applied to the built-in Table Options items before they are\n * rendered. Forwarded to `IrisGrid#transformTableOptions`. Threaded down\n * the middleware chain by IrisGrid-aware plugins.\n */\n transformTableOptions?: TableOptionsTransform;\n\n /**\n * Called with the resolved `IrisGridModel` once it is initialized, so\n * middleware can subscribe to model events (e.g. to recompute a\n * `transformTableOptions` snapshot).\n */\n onModelChanged?: (model: IrisGridModel) => void;\n\n /**\n * Transform applied to the model built by `makeModel` before it is handed\n * to `IrisGrid`. Lets IrisGrid-aware middleware wrap the host-built model\n * (e.g. in a proxy) without taking over model construction. Applied when\n * the model is (re)built, so it must be referentially stable.\n */\n transformModel?: IrisGridModelTransform;\n}\n\ninterface StateProps {\n inputFilters: InputFilter[];\n links: Link[];\n columnSelectionValidator?: (\n panel: PanelComponent,\n tableColumn: LinkColumn,\n options: LinkPointOptions\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 columnAlignmentMap: Map<string, CanvasTextAlign>;\n isFilterBarShown: boolean;\n quickFilters: ReadonlyQuickFilterMap;\n sorts: readonly SortDescriptor[];\n userColumnWidths: ModelSizeMap;\n userColumnWidthsByName: ReadonlyMap<ColumnName, number>;\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 columnAlignmentMap: new Map(),\n isFilterBarShown: false,\n quickFilters: new Map(),\n sorts: [],\n userColumnWidths: new Map(),\n userColumnWidthsByName: 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, transformModel } = this.props;\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n const modelPromise =\n transformModel != null\n ? Promise.resolve(makeModel()).then(async model => {\n try {\n const transformedModel = await transformModel(model);\n return transformedModel;\n } catch (e) {\n // The host owns the base model's lifecycle; if the transform\n // rejects it never returns a model for us to close, so close\n // the base model here to avoid leaking it.\n model.close();\n throw e;\n }\n })\n : Promise.resolve(makeModel());\n this.modelPromise = PromiseUtils.makeCancelable(modelPromise, 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 type: 'tableLink',\n });\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 const panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitLinkPointSelected(glEventHub, panelId, column, { type: 'tableLink' });\n }\n\n handleDataSelected(row: ModelIndex, dataMap: RowDataMap): void {\n const { glEventHub } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitLinkSourceDataSelected(glEventHub, panelId, 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, onModelChanged } = 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 onModelChanged?.(model);\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 = clamp(\n visibleIndex > right\n ? rect.right\n : rect.left + columnX + columnWidth * 0.5,\n rect.left,\n rect.right\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 // We need to define this so LinkerUtils#isLinkablePanel passes the check\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 columnAlignmentMap,\n isFilterBarShown,\n quickFilters,\n reverse,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userColumnWidthsByName,\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 columnAlignmentMap,\n isFilterBarShown,\n isSelectingPartition,\n movedColumns,\n movedRows,\n partitions,\n quickFilters,\n reverse,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userColumnWidthsByName,\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 irisGridProps,\n transformTableOptions,\n } = this.props;\n const {\n advancedFilters,\n aggregationSettings,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n columnAlignmentMap,\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 userColumnWidthsByName,\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 columnAlignmentMap={columnAlignmentMap}\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 userColumnWidthsByName={userColumnWidthsByName}\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 columnHeaderGroups={columnHeaderGroups}\n transformTableOptions={transformTableOptions}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...irisGridProps}\n >\n {childrenContent}\n </IrisGrid>\n )}\n </WidgetPanel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n { localDashboardId = DEFAULT_DASHBOARD_ID, glContainer }: 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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","ignoreList":[]}
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","clamp","IrisGridEvent","getInputFiltersForDashboard","getLinksForDashboard","getColumnSelectionValidatorForDashboard","WidgetPanel","IrisGridPanelTooltip","isIrisGridPanelMetadata","isLegacyIrisGridPanelMetadata","emitFilterColumnsChanged","emitFilterTableChanged","emitLinkPointSelected","emitLinkSourceDataSelected","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","columnAlignmentMap","isFilterBarShown","quickFilters","sorts","userColumnWidths","userColumnWidthsByName","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","row","dataMap","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","left","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","mouseHandlers","user","renderer","getMetricCalculator","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 type IrisGridRenderer,\n type MouseHandlersProp,\n type GetMetricCalculatorType,\n} from '@deephaven/iris-grid';\nimport {\n type RowDataMap,\n type AdvancedFilterOptions,\n type FormattingRule,\n type SortDescriptor,\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 clamp from 'lodash.clamp';\nimport { IrisGridEvent } from '../events';\nimport {\n getInputFiltersForDashboard,\n getLinksForDashboard,\n getColumnSelectionValidatorForDashboard,\n} from '../redux';\nimport WidgetPanel from './WidgetPanel';\nimport './IrisGridPanel.scss';\nimport {\n type Link,\n type LinkColumn,\n type LinkPointOptions,\n} 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';\nimport {\n emitLinkPointSelected,\n emitLinkSourceDataSelected,\n} from '../linker/LinkerEvent';\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?: Partial<IrisGridThemeType> & Record<string, unknown>;\n\n mouseHandlers?: MouseHandlersProp;\n\n renderer?: IrisGridRenderer;\n\n getMetricCalculator?: GetMetricCalculatorType;\n}\n\ninterface StateProps {\n inputFilters: InputFilter[];\n links: Link[];\n columnSelectionValidator?: (\n panel: PanelComponent,\n tableColumn: LinkColumn,\n options: LinkPointOptions\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 columnAlignmentMap: Map<string, CanvasTextAlign>;\n isFilterBarShown: boolean;\n quickFilters: ReadonlyQuickFilterMap;\n sorts: readonly SortDescriptor[];\n userColumnWidths: ModelSizeMap;\n userColumnWidthsByName: ReadonlyMap<ColumnName, number>;\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 columnAlignmentMap: new Map(),\n isFilterBarShown: false,\n quickFilters: new Map(),\n sorts: [],\n userColumnWidths: new Map(),\n userColumnWidthsByName: 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 type: 'tableLink',\n });\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 const panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitLinkPointSelected(glEventHub, panelId, column, { type: 'tableLink' });\n }\n\n handleDataSelected(row: ModelIndex, dataMap: RowDataMap): void {\n const { glEventHub } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitLinkSourceDataSelected(glEventHub, panelId, 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 = clamp(\n visibleIndex > right\n ? rect.right\n : rect.left + columnX + columnWidth * 0.5,\n rect.left,\n rect.right\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 // We need to define this so LinkerUtils#isLinkablePanel passes the check\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 columnAlignmentMap,\n isFilterBarShown,\n quickFilters,\n reverse,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userColumnWidthsByName,\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 columnAlignmentMap,\n isFilterBarShown,\n isSelectingPartition,\n movedColumns,\n movedRows,\n partitions,\n quickFilters,\n reverse,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userColumnWidthsByName,\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 mouseHandlers,\n panelState,\n user,\n renderer,\n settings,\n getMetricCalculator,\n theme,\n } = this.props;\n const {\n advancedFilters,\n aggregationSettings,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n columnAlignmentMap,\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 userColumnWidthsByName,\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 columnAlignmentMap={columnAlignmentMap}\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 mouseHandlers={mouseHandlers}\n movedColumns={movedColumns}\n movedRows={movedRows}\n partitions={partitions}\n partitionConfig={partitionConfig}\n quickFilters={quickFilters}\n renderer={renderer}\n reverse={reverse}\n rollupConfig={rollupConfig}\n settings={settings}\n sorts={sorts}\n userColumnWidths={userColumnWidths}\n userColumnWidthsByName={userColumnWidthsByName}\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 getMetricCalculator={getMetricCalculator}\n >\n {childrenContent}\n </IrisGrid>\n )}\n </WidgetPanel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n { localDashboardId = DEFAULT_DASHBOARD_ID, glContainer }: 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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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { type dh } from '@deephaven/jsapi-types';
2
- import { IrisGridModel, type IrisGridModelTransform } from '@deephaven/iris-grid';
2
+ import { IrisGridModel } from '@deephaven/iris-grid';
3
3
  export type IrisGridModelFetch = () => Promise<dh.Table>;
4
4
  export type IrisGridModelFetchErrorResult = {
5
5
  error: NonNullable<unknown>;
@@ -16,5 +16,5 @@ export type IrisGridModelFetchResult = (IrisGridModelFetchErrorResult | IrisGrid
16
16
  reload: () => void;
17
17
  };
18
18
  /** Pass in a table `fetch` function, will load the model and handle any errors */
19
- export declare function useIrisGridModel(fetch: IrisGridModelFetch, transformModel?: IrisGridModelTransform): IrisGridModelFetchResult;
19
+ export declare function useIrisGridModel(fetch: IrisGridModelFetch): IrisGridModelFetchResult;
20
20
  //# sourceMappingURL=useIrisGridModel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useIrisGridModel.d.ts","sourceRoot":"","sources":["../src/useIrisGridModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EACL,aAAa,EAEb,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAG9B,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEzD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CACnC,6BAA6B,GAC7B,+BAA+B,GAC/B,+BAA+B,CAClC,GAAG;IACF,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,kFAAkF;AAClF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,EACzB,cAAc,CAAC,EAAE,sBAAsB,GACtC,wBAAwB,CAuG1B"}
1
+ {"version":3,"file":"useIrisGridModel.d.ts","sourceRoot":"","sources":["../src/useIrisGridModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAwB,MAAM,sBAAsB,CAAC;AAG3E,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEzD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CACnC,6BAA6B,GAC7B,+BAA+B,GAC/B,+BAA+B,CAClC,GAAG;IACF,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,kFAAkF;AAClF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,GACxB,wBAAwB,CA0F1B"}
@@ -4,28 +4,15 @@ import { useApi } from '@deephaven/jsapi-bootstrap';
4
4
  import { IrisGridModel, IrisGridModelFactory } from '@deephaven/iris-grid';
5
5
  import { useCallback, useEffect, useMemo, useState } from 'react';
6
6
  /** Pass in a table `fetch` function, will load the model and handle any errors */
7
- export function useIrisGridModel(fetch, transformModel) {
7
+ export function useIrisGridModel(fetch) {
8
8
  var dh = useApi();
9
9
  var [model, setModel] = useState();
10
10
  var [error, setError] = useState();
11
11
  var [isLoading, setIsLoading] = useState(true);
12
12
  var makeModel = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {
13
13
  var table = yield fetch();
14
- var newModel = yield IrisGridModelFactory.makeModel(dh, table);
15
- if (transformModel == null) {
16
- return newModel;
17
- }
18
- try {
19
- var transformedModel = yield transformModel(newModel);
20
- return transformedModel;
21
- } catch (e) {
22
- // The host owns the base model's lifecycle; if the transform rejects it
23
- // never returns a model for us to close, so close the base model here to
24
- // avoid leaking it.
25
- newModel.close();
26
- throw e;
27
- }
28
- }), [dh, fetch, transformModel]);
14
+ return IrisGridModelFactory.makeModel(dh, table);
15
+ }), [dh, fetch]);
29
16
  var reload = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {
30
17
  setIsLoading(true);
31
18
  setError(undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"useIrisGridModel.js","names":["useApi","IrisGridModel","IrisGridModelFactory","useCallback","useEffect","useMemo","useState","useIrisGridModel","fetch","transformModel","dh","model","setModel","error","setError","isLoading","setIsLoading","makeModel","_asyncToGenerator","table","newModel","transformedModel","e","close","reload","undefined","cancelled","init","_init","apply","arguments","startListeningModel","handleDisconnect","Error","addEventListener","EVENT","DISCONNECT","removeEventListener","result","status"],"sources":["../src/useIrisGridModel.ts"],"sourcesContent":["import { type dh } from '@deephaven/jsapi-types';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport {\n IrisGridModel,\n IrisGridModelFactory,\n type IrisGridModelTransform,\n} from '@deephaven/iris-grid';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nexport type IrisGridModelFetch = () => Promise<dh.Table>;\n\nexport type IrisGridModelFetchErrorResult = {\n error: NonNullable<unknown>;\n status: 'error';\n};\n\nexport type IrisGridModelFetchLoadingResult = {\n status: 'loading';\n};\n\nexport type IrisGridModelFetchSuccessResult = {\n status: 'success';\n model: IrisGridModel;\n};\n\nexport type IrisGridModelFetchResult = (\n | IrisGridModelFetchErrorResult\n | IrisGridModelFetchLoadingResult\n | IrisGridModelFetchSuccessResult\n) & {\n reload: () => void;\n};\n\n/** Pass in a table `fetch` function, will load the model and handle any errors */\nexport function useIrisGridModel(\n fetch: IrisGridModelFetch,\n transformModel?: IrisGridModelTransform\n): IrisGridModelFetchResult {\n const dh = useApi();\n const [model, setModel] = useState<IrisGridModel>();\n const [error, setError] = useState<unknown>();\n const [isLoading, setIsLoading] = useState(true);\n\n const makeModel = useCallback(async () => {\n const table = await fetch();\n const newModel = await IrisGridModelFactory.makeModel(dh, table);\n if (transformModel == null) {\n return newModel;\n }\n try {\n const transformedModel = await transformModel(newModel);\n return transformedModel;\n } catch (e) {\n // The host owns the base model's lifecycle; if the transform rejects it\n // never returns a model for us to close, so close the base model here to\n // avoid leaking it.\n newModel.close();\n throw e;\n }\n }, [dh, fetch, transformModel]);\n\n const reload = useCallback(async () => {\n setIsLoading(true);\n setError(undefined);\n try {\n const newModel = await makeModel();\n setModel(newModel);\n setIsLoading(false);\n } catch (e) {\n setError(e);\n setIsLoading(false);\n }\n }, [makeModel]);\n\n useEffect(() => {\n let cancelled = false;\n async function init() {\n setIsLoading(true);\n setError(undefined);\n try {\n const newModel = await makeModel();\n if (!cancelled) {\n setModel(newModel);\n setIsLoading(false);\n }\n } catch (e) {\n if (!cancelled) {\n setError(e);\n setIsLoading(false);\n }\n }\n }\n\n init();\n\n return () => {\n cancelled = true;\n };\n }, [makeModel]);\n\n useEffect(\n function startListeningModel() {\n if (!model) {\n return;\n }\n\n // If the table inside a widget is disconnected, then don't bother trying to listen to reconnect, just close it and show a message\n // Widget closes the table already when it is disconnected, so no need to close it again\n function handleDisconnect() {\n setError(new Error('Table disconnected'));\n setModel(undefined);\n setIsLoading(false);\n }\n\n model.addEventListener(IrisGridModel.EVENT.DISCONNECT, handleDisconnect);\n\n return () => {\n model.removeEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n handleDisconnect\n );\n };\n },\n [model]\n );\n\n const result: IrisGridModelFetchResult = useMemo(() => {\n if (isLoading) {\n return { reload, status: 'loading' };\n }\n if (error != null) {\n return { error, reload, status: 'error' };\n }\n if (model != null) {\n return { model, reload, status: 'success' };\n }\n throw new Error('Invalid state');\n }, [error, isLoading, model, reload]);\n\n return result;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useIrisGridModel.js","names":["useApi","IrisGridModel","IrisGridModelFactory","useCallback","useEffect","useMemo","useState","useIrisGridModel","fetch","dh","model","setModel","error","setError","isLoading","setIsLoading","makeModel","_asyncToGenerator","table","reload","undefined","newModel","e","cancelled","init","_init","apply","arguments","startListeningModel","handleDisconnect","Error","addEventListener","EVENT","DISCONNECT","removeEventListener","result","status"],"sources":["../src/useIrisGridModel.ts"],"sourcesContent":["import { type dh } from '@deephaven/jsapi-types';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { IrisGridModel, IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nexport type IrisGridModelFetch = () => Promise<dh.Table>;\n\nexport type IrisGridModelFetchErrorResult = {\n error: NonNullable<unknown>;\n status: 'error';\n};\n\nexport type IrisGridModelFetchLoadingResult = {\n status: 'loading';\n};\n\nexport type IrisGridModelFetchSuccessResult = {\n status: 'success';\n model: IrisGridModel;\n};\n\nexport type IrisGridModelFetchResult = (\n | IrisGridModelFetchErrorResult\n | IrisGridModelFetchLoadingResult\n | IrisGridModelFetchSuccessResult\n) & {\n reload: () => void;\n};\n\n/** Pass in a table `fetch` function, will load the model and handle any errors */\nexport function useIrisGridModel(\n fetch: IrisGridModelFetch\n): IrisGridModelFetchResult {\n const dh = useApi();\n const [model, setModel] = useState<IrisGridModel>();\n const [error, setError] = useState<unknown>();\n const [isLoading, setIsLoading] = useState(true);\n\n const makeModel = useCallback(async () => {\n const table = await fetch();\n return IrisGridModelFactory.makeModel(dh, table);\n }, [dh, fetch]);\n\n const reload = useCallback(async () => {\n setIsLoading(true);\n setError(undefined);\n try {\n const newModel = await makeModel();\n setModel(newModel);\n setIsLoading(false);\n } catch (e) {\n setError(e);\n setIsLoading(false);\n }\n }, [makeModel]);\n\n useEffect(() => {\n let cancelled = false;\n async function init() {\n setIsLoading(true);\n setError(undefined);\n try {\n const newModel = await makeModel();\n if (!cancelled) {\n setModel(newModel);\n setIsLoading(false);\n }\n } catch (e) {\n if (!cancelled) {\n setError(e);\n setIsLoading(false);\n }\n }\n }\n\n init();\n\n return () => {\n cancelled = true;\n };\n }, [makeModel]);\n\n useEffect(\n function startListeningModel() {\n if (!model) {\n return;\n }\n\n // If the table inside a widget is disconnected, then don't bother trying to listen to reconnect, just close it and show a message\n // Widget closes the table already when it is disconnected, so no need to close it again\n function handleDisconnect() {\n setError(new Error('Table disconnected'));\n setModel(undefined);\n setIsLoading(false);\n }\n\n model.addEventListener(IrisGridModel.EVENT.DISCONNECT, handleDisconnect);\n\n return () => {\n model.removeEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n handleDisconnect\n );\n };\n },\n [model]\n );\n\n const result: IrisGridModelFetchResult = useMemo(() => {\n if (isLoading) {\n return { reload, status: 'loading' };\n }\n if (error != null) {\n return { error, reload, status: 'error' };\n }\n if (model != null) {\n return { model, reload, status: 'success' };\n }\n throw new Error('Invalid state');\n }, [error, isLoading, model, reload]);\n\n return result;\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/dashboard-core-plugins",
3
- "version": "1.22.1-alpha-pivot-builder.0+fb17c45",
3
+ "version": "1.22.1",
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": "^1.22.1-alpha-pivot-builder.0+fb17c45",
26
- "@deephaven/components": "^1.22.1-alpha-pivot-builder.0+fb17c45",
27
- "@deephaven/console": "^1.22.1-alpha-pivot-builder.0+fb17c45",
28
- "@deephaven/dashboard": "^1.22.1-alpha-pivot-builder.0+fb17c45",
29
- "@deephaven/file-explorer": "^1.22.1-alpha-pivot-builder.0+fb17c45",
30
- "@deephaven/filters": "^1.22.1-alpha-pivot-builder.0+fb17c45",
31
- "@deephaven/golden-layout": "^1.22.1-alpha-pivot-builder.0+fb17c45",
32
- "@deephaven/grid": "^1.22.1-alpha-pivot-builder.0+fb17c45",
33
- "@deephaven/icons": "^1.22.1-alpha-pivot-builder.0+fb17c45",
34
- "@deephaven/iris-grid": "^1.22.1-alpha-pivot-builder.0+fb17c45",
35
- "@deephaven/jsapi-bootstrap": "^1.22.1-alpha-pivot-builder.0+fb17c45",
36
- "@deephaven/jsapi-components": "^1.22.1-alpha-pivot-builder.0+fb17c45",
25
+ "@deephaven/chart": "^1.22.1",
26
+ "@deephaven/components": "^1.22.1",
27
+ "@deephaven/console": "^1.22.1",
28
+ "@deephaven/dashboard": "^1.22.1",
29
+ "@deephaven/file-explorer": "^1.22.1",
30
+ "@deephaven/filters": "^1.1.0",
31
+ "@deephaven/golden-layout": "^1.22.1",
32
+ "@deephaven/grid": "^1.22.1",
33
+ "@deephaven/icons": "^1.2.0",
34
+ "@deephaven/iris-grid": "^1.22.1",
35
+ "@deephaven/jsapi-bootstrap": "^1.22.1",
36
+ "@deephaven/jsapi-components": "^1.22.1",
37
37
  "@deephaven/jsapi-types": "^1.0.0-dev0.40.4",
38
- "@deephaven/jsapi-utils": "^1.22.1-alpha-pivot-builder.0+fb17c45",
39
- "@deephaven/log": "^1.22.1-alpha-pivot-builder.0+fb17c45",
40
- "@deephaven/plugin": "^1.22.1-alpha-pivot-builder.0+fb17c45",
41
- "@deephaven/react-hooks": "^1.22.1-alpha-pivot-builder.0+fb17c45",
42
- "@deephaven/redux": "^1.22.1-alpha-pivot-builder.0+fb17c45",
43
- "@deephaven/storage": "^1.22.1-alpha-pivot-builder.0+fb17c45",
44
- "@deephaven/utils": "^1.22.1-alpha-pivot-builder.0+fb17c45",
38
+ "@deephaven/jsapi-utils": "^1.22.1",
39
+ "@deephaven/log": "^1.8.0",
40
+ "@deephaven/plugin": "^1.22.1",
41
+ "@deephaven/react-hooks": "^1.21.1",
42
+ "@deephaven/redux": "^1.22.1",
43
+ "@deephaven/storage": "^1.8.0",
44
+ "@deephaven/utils": "^1.10.0",
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": "^1.22.1-alpha-pivot-builder.0+fb17c45",
69
- "@deephaven/mocks": "^1.22.1-alpha-pivot-builder.0+fb17c45",
70
- "@deephaven/test-utils": "^1.22.1-alpha-pivot-builder.0+fb17c45"
68
+ "@deephaven/jsapi-shim": "^1.9.0",
69
+ "@deephaven/mocks": "^1.1.0",
70
+ "@deephaven/test-utils": "^1.8.0"
71
71
  },
72
72
  "files": [
73
73
  "dist",
@@ -79,5 +79,5 @@
79
79
  "publishConfig": {
80
80
  "access": "public"
81
81
  },
82
- "gitHead": "fb17c45114ceb8f1ab670ac20dac74f8e8bd65fb"
82
+ "gitHead": "d0ac1eabfef8efac88058247aeaef0ed526722d1"
83
83
  }