@deephaven/dashboard-core-plugins 1.26.1 → 1.27.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 +1 @@
1
- {"version":3,"file":"WidgetLoaderPlugin.d.ts","sourceRoot":"","sources":["../src/WidgetLoaderPlugin.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,6BAA6B,EAIlC,KAAK,UAAU,EAGhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAML,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAC;AAgB3B,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GACnB,KAAK,CAAC,yBAAyB,CAAC,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CA2C5E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,CAAC,6BAA6B,CAAC,GAC5C,GAAG,CAAC,OAAO,GAAG,IAAI,CAgNpB;AAED,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"WidgetLoaderPlugin.d.ts","sourceRoot":"","sources":["../src/WidgetLoaderPlugin.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,6BAA6B,EAIlC,KAAK,UAAU,EAGhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAU3B,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GACnB,KAAK,CAAC,yBAAyB,CAAC,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CA2C5E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,CAAC,6BAA6B,CAAC,GAC5C,GAAG,CAAC,OAAO,GAAG,IAAI,CA6GpB;AAED,eAAe,kBAAkB,CAAC"}
@@ -13,15 +13,11 @@ import { useMemo, useCallback, useEffect, forwardRef } from 'react';
13
13
  import { nanoid } from 'nanoid';
14
14
  import { assertIsDashboardPluginProps, LayoutUtils, canHaveRef, usePanelOpenListener } from '@deephaven/dashboard';
15
15
  import Log from '@deephaven/log';
16
- import { isWidgetPlugin, isWidgetMiddlewarePlugin, createChainedComponent, createChainedPanelComponent, usePlugins } from '@deephaven/plugin';
16
+ import { createChainedComponent, createChainedPanelComponent, usePlugins } from '@deephaven/plugin';
17
17
  import { WidgetPanel } from "./panels/index.js";
18
+ import { getSupportedWidgetTypes, getUniqueWidgetPluginInfos } from "./WidgetLoaderUtils.js";
18
19
  import { jsx as _jsx } from "react/jsx-runtime";
19
20
  var log = Log.module('WidgetLoaderPlugin');
20
-
21
- /**
22
- * Information about a widget type including its base plugin and any middleware.
23
- */
24
-
25
21
  export function WrapWidgetPlugin(plugin) {
26
22
  var _plugin$component$dis;
27
23
  function Wrapper(props, ref) {
@@ -69,68 +65,7 @@ export function WrapWidgetPlugin(plugin) {
69
65
  */
70
66
  export function WidgetLoaderPlugin(props) {
71
67
  var plugins = usePlugins();
72
-
73
- /**
74
- * Build a map of widget types to their plugin chain info.
75
- * For each type, we have a base plugin and a list of middleware to apply.
76
- */
77
- var supportedTypes = useMemo(() => {
78
- var typeMap = new Map();
79
- plugins.forEach(plugin => {
80
- var isMiddleware = isWidgetMiddlewarePlugin(plugin);
81
- if (!isWidgetPlugin(plugin) && !isMiddleware) {
82
- return;
83
- }
84
- [plugin.supportedTypes].flat().forEach(supportedType => {
85
- if (supportedType == null || supportedType === '') {
86
- return;
87
- }
88
- var existing = typeMap.get(supportedType);
89
- if (isMiddleware) {
90
- // Add middleware to existing chain or create pending chain
91
- if (existing != null) {
92
- existing.middleware.push(plugin);
93
- log.debug("Adding middleware ".concat(plugin.name, " to chain for type ").concat(supportedType));
94
- } else {
95
- // No base plugin yet, create entry with just middleware
96
- // The base plugin will be set when a non-middleware plugin is registered
97
- typeMap.set(supportedType, {
98
- basePlugin: null,
99
- middleware: [plugin]
100
- });
101
- log.debug("Creating pending middleware chain for type ".concat(supportedType, " with ").concat(plugin.name));
102
- }
103
- } else {
104
- // Non-middleware plugin: becomes the base plugin
105
- if (existing != null) {
106
- if (existing.basePlugin != null) {
107
- // Already have a base plugin, warn about replacement
108
- log.warn("Multiple WidgetPlugins handling type ".concat(supportedType, ". ") + "Replacing ".concat(existing.basePlugin.name, " with ").concat(plugin.name, " as base plugin"));
109
- }
110
- // Keep existing middleware, update the base plugin
111
- existing.basePlugin = plugin;
112
- } else {
113
- typeMap.set(supportedType, {
114
- basePlugin: plugin,
115
- middleware: []
116
- });
117
- }
118
- log.debug("Set base plugin ".concat(plugin.name, " for type ").concat(supportedType));
119
- }
120
- });
121
- });
122
-
123
- // Filter out entries that only have middleware (no base plugin)
124
- var validEntries = new Map();
125
- typeMap.forEach((info, type) => {
126
- if (info.basePlugin != null) {
127
- validEntries.set(type, info);
128
- } else {
129
- log.warn("No base plugin found for type ".concat(type, ", middleware will not be applied"));
130
- }
131
- });
132
- return validEntries;
133
- }, [plugins]);
68
+ var supportedTypes = useMemo(() => getSupportedWidgetTypes(plugins), [plugins]);
134
69
  assertIsDashboardPluginProps(props);
135
70
  var id = props.id,
136
71
  layout = props.layout,
@@ -169,29 +104,7 @@ export function WidgetLoaderPlugin(props) {
169
104
  }, [id, layout, supportedTypes]);
170
105
  useEffect(() => {
171
106
  // Get unique base plugins (a plugin may handle multiple types)
172
- // supportedTypes is already filtered to entries with non-null basePlugin
173
-
174
- var uniquePluginInfos = new Map();
175
- supportedTypes.forEach((info, _type) => {
176
- // Use the base plugin name as the key to get unique plugins
177
- if (!uniquePluginInfos.has(info.basePlugin.name)) {
178
- // Clone to avoid mutating the useMemo result
179
- uniquePluginInfos.set(info.basePlugin.name, {
180
- basePlugin: info.basePlugin,
181
- middleware: [...info.middleware]
182
- });
183
- } else {
184
- // Merge middleware from multiple type registrations for the same base plugin
185
- var existingInfo = uniquePluginInfos.get(info.basePlugin.name);
186
- if (existingInfo != null) {
187
- info.middleware.forEach(m => {
188
- if (!existingInfo.middleware.includes(m)) {
189
- existingInfo.middleware.push(m);
190
- }
191
- });
192
- }
193
- }
194
- });
107
+ var uniquePluginInfos = getUniqueWidgetPluginInfos(supportedTypes);
195
108
  log.debug('Registering widget components', [...uniquePluginInfos.entries()].map(_ref2 => {
196
109
  var _ref3 = _slicedToArray(_ref2, 2),
197
110
  name = _ref3[0],
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetLoaderPlugin.js","names":["useMemo","useCallback","useEffect","forwardRef","nanoid","assertIsDashboardPluginProps","LayoutUtils","canHaveRef","usePanelOpenListener","Log","isWidgetPlugin","isWidgetMiddlewarePlugin","createChainedComponent","createChainedPanelComponent","usePlugins","WidgetPanel","jsx","_jsx","log","module","WrapWidgetPlugin","plugin","_plugin$component$dis","Wrapper","props","ref","_metadata$type","_metadata$name","C","component","metadata","panelDescriptor","_objectSpread","type","name","hasRef","className","concat","descriptor","children","displayName","WidgetLoaderPlugin","plugins","supportedTypes","typeMap","Map","forEach","isMiddleware","flat","supportedType","existing","get","middleware","push","debug","set","basePlugin","warn","validEntries","info","id","layout","registerComponent","handlePanelOpen","_ref","_widget$name","dragEvent","_ref$panelId","panelId","fetch","widget","typeInfo","panelProps","localDashboardId","config","title","root","openComponent","uniquePluginInfos","_type","has","existingInfo","m","includes","entries","map","_ref2","_ref3","_slicedToArray","hasPanel","panelComponent","deregisterFns","values","_ref4","chainedComponent","wrappedPlugin","chainedPanelComponent","deregister","eventHub"],"sources":["../src/WidgetLoaderPlugin.tsx"],"sourcesContent":["import { useMemo, useCallback, useEffect, forwardRef } from 'react';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\nimport { nanoid } from 'nanoid';\nimport {\n assertIsDashboardPluginProps,\n type DashboardPluginComponentProps,\n type DehydratedDashboardPanelProps,\n type PanelOpenEventDetail,\n LayoutUtils,\n type PanelProps,\n canHaveRef,\n usePanelOpenListener,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport {\n isWidgetPlugin,\n isWidgetMiddlewarePlugin,\n createChainedComponent,\n createChainedPanelComponent,\n usePlugins,\n type WidgetPlugin,\n type WidgetMiddlewarePlugin,\n} from '@deephaven/plugin';\nimport { WidgetPanel } from './panels';\nimport { type WidgetPanelDescriptor } from './panels/WidgetPanelTypes';\n\nconst log = Log.module('WidgetLoaderPlugin');\n\n/**\n * Information about a widget type including its base plugin and any middleware.\n */\ninterface WidgetTypeInfo {\n /** The base plugin that handles this widget type, or null if only middleware registered so far */\n basePlugin: WidgetPlugin | null;\n /** Middleware plugins to apply, in order from outermost to innermost */\n middleware: WidgetMiddlewarePlugin[];\n}\n\nexport function WrapWidgetPlugin(\n plugin: WidgetPlugin\n): React.ForwardRefExoticComponent<PanelProps & React.RefAttributes<unknown>> {\n function Wrapper(props: PanelProps, ref: React.ForwardedRef<unknown>) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const C = plugin.component as any;\n const { metadata } = props;\n\n const panelDescriptor: WidgetPanelDescriptor = {\n ...metadata,\n type: metadata?.type ?? plugin.type,\n name: metadata?.name ?? 'Widget',\n };\n\n const hasRef = canHaveRef(C);\n const className = `widget-loader-${panelDescriptor.type}`;\n\n return (\n <WidgetPanel\n descriptor={panelDescriptor}\n className={className}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n >\n {hasRef ? (\n <C\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n ref={ref}\n />\n ) : (\n <C\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n )}\n </WidgetPanel>\n );\n }\n\n Wrapper.displayName = `WidgetLoaderPlugin(${\n plugin.component.displayName ?? plugin.name\n })`;\n\n return forwardRef(Wrapper);\n}\n\n/**\n * Widget to automatically open any supported WidgetPlugin types as panels\n * if the widget is emitted from the server as the result of executed code.\n *\n * Does not open panels for widgets that are not supported by any plugins.\n * Does not open panels for widgets that are a component of a larger widget or UI element.\n *\n * Supports plugin chaining via middleware plugins. When multiple plugins\n * support the same widget type, middleware plugins are chained around\n * the base plugin in registration order.\n *\n * @param props Dashboard plugin props\n * @returns React element\n */\nexport function WidgetLoaderPlugin(\n props: Partial<DashboardPluginComponentProps>\n): JSX.Element | null {\n const plugins = usePlugins();\n\n /**\n * Build a map of widget types to their plugin chain info.\n * For each type, we have a base plugin and a list of middleware to apply.\n */\n const supportedTypes = useMemo(() => {\n const typeMap = new Map<string, WidgetTypeInfo>();\n\n plugins.forEach(plugin => {\n const isMiddleware = isWidgetMiddlewarePlugin(plugin);\n if (!isWidgetPlugin(plugin) && !isMiddleware) {\n return;\n }\n\n [plugin.supportedTypes].flat().forEach(supportedType => {\n if (supportedType == null || supportedType === '') {\n return;\n }\n\n const existing = typeMap.get(supportedType);\n\n if (isMiddleware) {\n // Add middleware to existing chain or create pending chain\n if (existing != null) {\n existing.middleware.push(plugin);\n log.debug(\n `Adding middleware ${plugin.name} to chain for type ${supportedType}`\n );\n } else {\n // No base plugin yet, create entry with just middleware\n // The base plugin will be set when a non-middleware plugin is registered\n typeMap.set(supportedType, {\n basePlugin: null,\n middleware: [plugin],\n });\n log.debug(\n `Creating pending middleware chain for type ${supportedType} with ${plugin.name}`\n );\n }\n } else {\n // Non-middleware plugin: becomes the base plugin\n if (existing != null) {\n if (existing.basePlugin != null) {\n // Already have a base plugin, warn about replacement\n log.warn(\n `Multiple WidgetPlugins handling type ${supportedType}. ` +\n `Replacing ${existing.basePlugin.name} with ${plugin.name} as base plugin`\n );\n }\n // Keep existing middleware, update the base plugin\n existing.basePlugin = plugin;\n } else {\n typeMap.set(supportedType, {\n basePlugin: plugin,\n middleware: [],\n });\n }\n log.debug(`Set base plugin ${plugin.name} for type ${supportedType}`);\n }\n });\n });\n\n // Filter out entries that only have middleware (no base plugin)\n const validEntries = new Map<\n string,\n WidgetTypeInfo & { basePlugin: WidgetPlugin }\n >();\n typeMap.forEach((info, type) => {\n if (info.basePlugin != null) {\n validEntries.set(\n type,\n info as WidgetTypeInfo & { basePlugin: WidgetPlugin }\n );\n } else {\n log.warn(\n `No base plugin found for type ${type}, middleware will not be applied`\n );\n }\n });\n\n return validEntries;\n }, [plugins]);\n\n assertIsDashboardPluginProps(props);\n const { id, layout, registerComponent } = props;\n\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n panelId = nanoid(),\n fetch,\n widget,\n }: PanelOpenEventDetail) => {\n const { type } = widget;\n const typeInfo = type != null ? supportedTypes.get(type) : null;\n if (typeInfo == null) {\n return;\n }\n const name = widget.name ?? type;\n\n const panelProps: DehydratedDashboardPanelProps & {\n fetch?: () => Promise<unknown>;\n } = {\n localDashboardId: id,\n metadata: widget,\n fetch,\n };\n\n const config: ReactComponentConfig = {\n type: 'react-component',\n component: typeInfo.basePlugin.name,\n props: panelProps,\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [id, layout, supportedTypes]\n );\n\n useEffect(() => {\n // Get unique base plugins (a plugin may handle multiple types)\n // supportedTypes is already filtered to entries with non-null basePlugin\n type ValidWidgetTypeInfo = WidgetTypeInfo & { basePlugin: WidgetPlugin };\n const uniquePluginInfos = new Map<string, ValidWidgetTypeInfo>();\n supportedTypes.forEach((info, _type) => {\n // Use the base plugin name as the key to get unique plugins\n if (!uniquePluginInfos.has(info.basePlugin.name)) {\n // Clone to avoid mutating the useMemo result\n uniquePluginInfos.set(info.basePlugin.name, {\n basePlugin: info.basePlugin,\n middleware: [...info.middleware],\n });\n } else {\n // Merge middleware from multiple type registrations for the same base plugin\n const existingInfo = uniquePluginInfos.get(info.basePlugin.name);\n if (existingInfo != null) {\n info.middleware.forEach(m => {\n if (!existingInfo.middleware.includes(m)) {\n existingInfo.middleware.push(m);\n }\n });\n }\n }\n });\n\n log.debug(\n 'Registering widget components',\n [...uniquePluginInfos.entries()].map(([name, info]) => ({\n plugin: name,\n middleware: info.middleware.map(m => m.name),\n hasPanel: info.basePlugin.panelComponent != null,\n }))\n );\n\n const deregisterFns = [...uniquePluginInfos.values()].map(\n ({ basePlugin, middleware }) => {\n const { panelComponent } = basePlugin;\n\n if (panelComponent == null) {\n // No panel component - chain the widget components and wrap in default panel\n log.debug(\n `Chaining widget components for ${basePlugin.name} (no panel component, using default wrapper)`\n );\n const chainedComponent = createChainedComponent(\n basePlugin.component,\n middleware\n );\n const wrappedPlugin: WidgetPlugin = {\n ...basePlugin,\n component: chainedComponent,\n };\n return registerComponent(\n basePlugin.name,\n WrapWidgetPlugin(wrappedPlugin)\n );\n }\n\n // Has panel component - chain middleware around the panel.\n // Only middleware that defines panelComponent is applied here.\n // Middleware with only component is skipped in this path.\n log.debug(\n `Chaining panel components for ${basePlugin.name} (has custom panel component)`\n );\n const chainedPanelComponent = createChainedPanelComponent(\n panelComponent,\n middleware\n );\n\n return registerComponent(basePlugin.name, chainedPanelComponent);\n }\n );\n\n return () => {\n deregisterFns.forEach(deregister => deregister());\n };\n }, [registerComponent, supportedTypes]);\n\n /**\n * Listen for panel open events so we know when to open a panel\n */\n usePanelOpenListener(layout.eventHub, handlePanelOpen);\n\n return null;\n}\n\nexport default WidgetLoaderPlugin;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"WidgetLoaderPlugin.js","names":["useMemo","useCallback","useEffect","forwardRef","nanoid","assertIsDashboardPluginProps","LayoutUtils","canHaveRef","usePanelOpenListener","Log","createChainedComponent","createChainedPanelComponent","usePlugins","WidgetPanel","getSupportedWidgetTypes","getUniqueWidgetPluginInfos","jsx","_jsx","log","module","WrapWidgetPlugin","plugin","_plugin$component$dis","Wrapper","props","ref","_metadata$type","_metadata$name","C","component","metadata","panelDescriptor","_objectSpread","type","name","hasRef","className","concat","descriptor","children","displayName","WidgetLoaderPlugin","plugins","supportedTypes","id","layout","registerComponent","handlePanelOpen","_ref","_widget$name","dragEvent","_ref$panelId","panelId","fetch","widget","typeInfo","get","panelProps","localDashboardId","config","basePlugin","title","root","openComponent","uniquePluginInfos","debug","entries","map","_ref2","_ref3","_slicedToArray","info","middleware","m","hasPanel","panelComponent","deregisterFns","values","_ref4","chainedComponent","wrappedPlugin","chainedPanelComponent","forEach","deregister","eventHub"],"sources":["../src/WidgetLoaderPlugin.tsx"],"sourcesContent":["import { useMemo, useCallback, useEffect, forwardRef } from 'react';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\nimport { nanoid } from 'nanoid';\nimport {\n assertIsDashboardPluginProps,\n type DashboardPluginComponentProps,\n type DehydratedDashboardPanelProps,\n type PanelOpenEventDetail,\n LayoutUtils,\n type PanelProps,\n canHaveRef,\n usePanelOpenListener,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport {\n createChainedComponent,\n createChainedPanelComponent,\n usePlugins,\n type WidgetPlugin,\n} from '@deephaven/plugin';\nimport { WidgetPanel } from './panels';\nimport { type WidgetPanelDescriptor } from './panels/WidgetPanelTypes';\nimport {\n getSupportedWidgetTypes,\n getUniqueWidgetPluginInfos,\n} from './WidgetLoaderUtils';\n\nconst log = Log.module('WidgetLoaderPlugin');\n\nexport function WrapWidgetPlugin(\n plugin: WidgetPlugin\n): React.ForwardRefExoticComponent<PanelProps & React.RefAttributes<unknown>> {\n function Wrapper(props: PanelProps, ref: React.ForwardedRef<unknown>) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const C = plugin.component as any;\n const { metadata } = props;\n\n const panelDescriptor: WidgetPanelDescriptor = {\n ...metadata,\n type: metadata?.type ?? plugin.type,\n name: metadata?.name ?? 'Widget',\n };\n\n const hasRef = canHaveRef(C);\n const className = `widget-loader-${panelDescriptor.type}`;\n\n return (\n <WidgetPanel\n descriptor={panelDescriptor}\n className={className}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n >\n {hasRef ? (\n <C\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n ref={ref}\n />\n ) : (\n <C\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n )}\n </WidgetPanel>\n );\n }\n\n Wrapper.displayName = `WidgetLoaderPlugin(${\n plugin.component.displayName ?? plugin.name\n })`;\n\n return forwardRef(Wrapper);\n}\n\n/**\n * Widget to automatically open any supported WidgetPlugin types as panels\n * if the widget is emitted from the server as the result of executed code.\n *\n * Does not open panels for widgets that are not supported by any plugins.\n * Does not open panels for widgets that are a component of a larger widget or UI element.\n *\n * Supports plugin chaining via middleware plugins. When multiple plugins\n * support the same widget type, middleware plugins are chained around\n * the base plugin in registration order.\n *\n * @param props Dashboard plugin props\n * @returns React element\n */\nexport function WidgetLoaderPlugin(\n props: Partial<DashboardPluginComponentProps>\n): JSX.Element | null {\n const plugins = usePlugins();\n\n const supportedTypes = useMemo(\n () => getSupportedWidgetTypes(plugins),\n [plugins]\n );\n\n assertIsDashboardPluginProps(props);\n const { id, layout, registerComponent } = props;\n\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n panelId = nanoid(),\n fetch,\n widget,\n }: PanelOpenEventDetail) => {\n const { type } = widget;\n const typeInfo = type != null ? supportedTypes.get(type) : null;\n if (typeInfo == null) {\n return;\n }\n const name = widget.name ?? type;\n\n const panelProps: DehydratedDashboardPanelProps & {\n fetch?: () => Promise<unknown>;\n } = {\n localDashboardId: id,\n metadata: widget,\n fetch,\n };\n\n const config: ReactComponentConfig = {\n type: 'react-component',\n component: typeInfo.basePlugin.name,\n props: panelProps,\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [id, layout, supportedTypes]\n );\n\n useEffect(() => {\n // Get unique base plugins (a plugin may handle multiple types)\n const uniquePluginInfos = getUniqueWidgetPluginInfos(supportedTypes);\n\n log.debug(\n 'Registering widget components',\n [...uniquePluginInfos.entries()].map(([name, info]) => ({\n plugin: name,\n middleware: info.middleware.map(m => m.name),\n hasPanel: info.basePlugin.panelComponent != null,\n }))\n );\n\n const deregisterFns = [...uniquePluginInfos.values()].map(\n ({ basePlugin, middleware }) => {\n const { panelComponent } = basePlugin;\n\n if (panelComponent == null) {\n // No panel component - chain the widget components and wrap in default panel\n log.debug(\n `Chaining widget components for ${basePlugin.name} (no panel component, using default wrapper)`\n );\n const chainedComponent = createChainedComponent(\n basePlugin.component,\n middleware\n );\n const wrappedPlugin: WidgetPlugin = {\n ...basePlugin,\n component: chainedComponent,\n };\n return registerComponent(\n basePlugin.name,\n WrapWidgetPlugin(wrappedPlugin)\n );\n }\n\n // Has panel component - chain middleware around the panel.\n // Only middleware that defines panelComponent is applied here.\n // Middleware with only component is skipped in this path.\n log.debug(\n `Chaining panel components for ${basePlugin.name} (has custom panel component)`\n );\n const chainedPanelComponent = createChainedPanelComponent(\n panelComponent,\n middleware\n );\n\n return registerComponent(basePlugin.name, chainedPanelComponent);\n }\n );\n\n return () => {\n deregisterFns.forEach(deregister => deregister());\n };\n }, [registerComponent, supportedTypes]);\n\n /**\n * Listen for panel open events so we know when to open a panel\n */\n usePanelOpenListener(layout.eventHub, handlePanelOpen);\n\n return null;\n}\n\nexport default WidgetLoaderPlugin;\n"],"mappings":";;;;;;;;;;;AAAA,SAASA,OAAO,EAAEC,WAAW,EAAEC,SAAS,EAAEC,UAAU,QAAQ,OAAO;AAEnE,SAASC,MAAM,QAAQ,QAAQ;AAC/B,SACEC,4BAA4B,EAI5BC,WAAW,EAEXC,UAAU,EACVC,oBAAoB,QACf,sBAAsB;AAC7B,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SACEC,sBAAsB,EACtBC,2BAA2B,EAC3BC,UAAU,QAEL,mBAAmB;AAAC,SAClBC,WAAW;AAAA,SAGlBC,uBAAuB,EACvBC,0BAA0B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG5B,IAAMC,GAAG,GAAGT,GAAG,CAACU,MAAM,CAAC,oBAAoB,CAAC;AAE5C,OAAO,SAASC,gBAAgBA,CAC9BC,MAAoB,EACwD;EAAA,IAAAC,qBAAA;EAC5E,SAASC,OAAOA,CAACC,KAAiB,EAAEC,GAAgC,EAAE;IAAA,IAAAC,cAAA,EAAAC,cAAA;IACpE;IACA,IAAMC,CAAC,GAAGP,MAAM,CAACQ,SAAgB;IACjC,IAAQC,QAAQ,GAAKN,KAAK,CAAlBM,QAAQ;IAEhB,IAAMC,eAAsC,GAAAC,aAAA,CAAAA,aAAA,KACvCF,QAAQ;MACXG,IAAI,GAAAP,cAAA,GAAEI,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEG,IAAI,cAAAP,cAAA,cAAAA,cAAA,GAAIL,MAAM,CAACY,IAAI;MACnCC,IAAI,GAAAP,cAAA,GAAEG,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEI,IAAI,cAAAP,cAAA,cAAAA,cAAA,GAAI;IAAQ,EACjC;IAED,IAAMQ,MAAM,GAAG5B,UAAU,CAACqB,CAAC,CAAC;IAC5B,IAAMQ,SAAS,oBAAAC,MAAA,CAAoBN,eAAe,CAACE,IAAI,CAAE;IAEzD,oBACEhB,IAAA,CAACJ,WAAW,EAAAmB,aAAA,CAAAA,aAAA;MACVM,UAAU,EAAEP,eAAgB;MAC5BK,SAAS,EAAEA;MACX;IAAA,GACIZ,KAAK;MAAAe,QAAA,EAERJ,MAAM,gBACLlB,IAAA,CAACW;MACC;MAAA,EAAAI,aAAA,CAAAA,aAAA,KACIR,KAAK;QACTC,GAAG,EAAEA;MAAI,EACV,CAAC,gBAEFR,IAAA,CAACW;MACC;MAAA,EAAAI,aAAA,KACIR,KAAK,CACV;IACF,EACU,CAAC;EAElB;EAEAD,OAAO,CAACiB,WAAW,yBAAAH,MAAA,EAAAf,qBAAA,GACjBD,MAAM,CAACQ,SAAS,CAACW,WAAW,cAAAlB,qBAAA,cAAAA,qBAAA,GAAID,MAAM,CAACa,IAAI,MAC1C;EAEH,oBAAO/B,UAAU,CAACoB,OAAO,CAAC;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASkB,kBAAkBA,CAChCjB,KAA6C,EACzB;EACpB,IAAMkB,OAAO,GAAG9B,UAAU,CAAC,CAAC;EAE5B,IAAM+B,cAAc,GAAG3C,OAAO,CAC5B,MAAMc,uBAAuB,CAAC4B,OAAO,CAAC,EACtC,CAACA,OAAO,CACV,CAAC;EAEDrC,4BAA4B,CAACmB,KAAK,CAAC;EACnC,IAAQoB,EAAE,GAAgCpB,KAAK,CAAvCoB,EAAE;IAAEC,MAAM,GAAwBrB,KAAK,CAAnCqB,MAAM;IAAEC,iBAAiB,GAAKtB,KAAK,CAA3BsB,iBAAiB;EAErC,IAAMC,eAAe,GAAG9C,WAAW,CACjC+C,IAAA,IAK4B;IAAA,IAAAC,YAAA;IAAA,IAJ1BC,SAAS,GAAAF,IAAA,CAATE,SAAS;MAAAC,YAAA,GAAAH,IAAA,CACTI,OAAO;MAAPA,OAAO,GAAAD,YAAA,cAAG/C,MAAM,CAAC,CAAC,GAAA+C,YAAA;MAClBE,KAAK,GAAAL,IAAA,CAALK,KAAK;MACLC,MAAM,GAAAN,IAAA,CAANM,MAAM;IAEN,IAAQrB,IAAI,GAAKqB,MAAM,CAAfrB,IAAI;IACZ,IAAMsB,QAAQ,GAAGtB,IAAI,IAAI,IAAI,GAAGU,cAAc,CAACa,GAAG,CAACvB,IAAI,CAAC,GAAG,IAAI;IAC/D,IAAIsB,QAAQ,IAAI,IAAI,EAAE;MACpB;IACF;IACA,IAAMrB,IAAI,IAAAe,YAAA,GAAGK,MAAM,CAACpB,IAAI,cAAAe,YAAA,cAAAA,YAAA,GAAIhB,IAAI;IAEhC,IAAMwB,UAEL,GAAG;MACFC,gBAAgB,EAAEd,EAAE;MACpBd,QAAQ,EAAEwB,MAAM;MAChBD;IACF,CAAC;IAED,IAAMM,MAA4B,GAAG;MACnC1B,IAAI,EAAE,iBAAiB;MACvBJ,SAAS,EAAE0B,QAAQ,CAACK,UAAU,CAAC1B,IAAI;MACnCV,KAAK,EAAEiC,UAAU;MACjBI,KAAK,EAAE3B,IAAI;MACXU,EAAE,EAAEQ;IACN,CAAC;IAED,IAAQU,IAAI,GAAKjB,MAAM,CAAfiB,IAAI;IACZxD,WAAW,CAACyD,aAAa,CAAC;MAAED,IAAI;MAAEH,MAAM;MAAET;IAAU,CAAC,CAAC;EACxD,CAAC,EACD,CAACN,EAAE,EAAEC,MAAM,EAAEF,cAAc,CAC7B,CAAC;EAEDzC,SAAS,CAAC,MAAM;IACd;IACA,IAAM8D,iBAAiB,GAAGjD,0BAA0B,CAAC4B,cAAc,CAAC;IAEpEzB,GAAG,CAAC+C,KAAK,CACP,+BAA+B,EAC/B,CAAC,GAAGD,iBAAiB,CAACE,OAAO,CAAC,CAAC,CAAC,CAACC,GAAG,CAACC,KAAA;MAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,KAAA;QAAElC,IAAI,GAAAmC,KAAA;QAAEE,IAAI,GAAAF,KAAA;MAAA,OAAO;QACtDhD,MAAM,EAAEa,IAAI;QACZsC,UAAU,EAAED,IAAI,CAACC,UAAU,CAACL,GAAG,CAACM,CAAC,IAAIA,CAAC,CAACvC,IAAI,CAAC;QAC5CwC,QAAQ,EAAEH,IAAI,CAACX,UAAU,CAACe,cAAc,IAAI;MAC9C,CAAC;IAAA,CAAC,CACJ,CAAC;IAED,IAAMC,aAAa,GAAG,CAAC,GAAGZ,iBAAiB,CAACa,MAAM,CAAC,CAAC,CAAC,CAACV,GAAG,CACvDW,KAAA,IAAgC;MAAA,IAA7BlB,UAAU,GAAAkB,KAAA,CAAVlB,UAAU;QAAEY,UAAU,GAAAM,KAAA,CAAVN,UAAU;MACvB,IAAQG,cAAc,GAAKf,UAAU,CAA7Be,cAAc;MAEtB,IAAIA,cAAc,IAAI,IAAI,EAAE;QAC1B;QACAzD,GAAG,CAAC+C,KAAK,mCAAA5B,MAAA,CAC2BuB,UAAU,CAAC1B,IAAI,iDACnD,CAAC;QACD,IAAM6C,gBAAgB,GAAGrE,sBAAsB,CAC7CkD,UAAU,CAAC/B,SAAS,EACpB2C,UACF,CAAC;QACD,IAAMQ,aAA2B,GAAAhD,aAAA,CAAAA,aAAA,KAC5B4B,UAAU;UACb/B,SAAS,EAAEkD;QAAgB,EAC5B;QACD,OAAOjC,iBAAiB,CACtBc,UAAU,CAAC1B,IAAI,EACfd,gBAAgB,CAAC4D,aAAa,CAChC,CAAC;MACH;;MAEA;MACA;MACA;MACA9D,GAAG,CAAC+C,KAAK,kCAAA5B,MAAA,CAC0BuB,UAAU,CAAC1B,IAAI,kCAClD,CAAC;MACD,IAAM+C,qBAAqB,GAAGtE,2BAA2B,CACvDgE,cAAc,EACdH,UACF,CAAC;MAED,OAAO1B,iBAAiB,CAACc,UAAU,CAAC1B,IAAI,EAAE+C,qBAAqB,CAAC;IAClE,CACF,CAAC;IAED,OAAO,MAAM;MACXL,aAAa,CAACM,OAAO,CAACC,UAAU,IAAIA,UAAU,CAAC,CAAC,CAAC;IACnD,CAAC;EACH,CAAC,EAAE,CAACrC,iBAAiB,EAAEH,cAAc,CAAC,CAAC;;EAEvC;AACF;AACA;EACEnC,oBAAoB,CAACqC,MAAM,CAACuC,QAAQ,EAAErC,eAAe,CAAC;EAEtD,OAAO,IAAI;AACb;AAEA,eAAeN,kBAAkB","ignoreList":[]}
@@ -0,0 +1,35 @@
1
+ import { type PluginModuleMap, type WidgetPlugin, type WidgetMiddlewarePlugin } from '@deephaven/plugin';
2
+ /**
3
+ * Information about a widget type including its base plugin and any middleware.
4
+ */
5
+ export interface WidgetTypeInfo {
6
+ /** The base plugin that handles this widget type, or null if only middleware registered so far */
7
+ basePlugin: WidgetPlugin | null;
8
+ /** Middleware plugins to apply, in order from outermost to innermost */
9
+ middleware: WidgetMiddlewarePlugin[];
10
+ }
11
+ /**
12
+ * Widget type info that is guaranteed to have a base plugin.
13
+ */
14
+ export type ValidWidgetTypeInfo = WidgetTypeInfo & {
15
+ basePlugin: WidgetPlugin;
16
+ };
17
+ /**
18
+ * Build a map of widget types to their plugin chain info.
19
+ * For each type, we have a base plugin and a list of middleware to apply.
20
+ *
21
+ * Types that only have middleware registered (no base plugin) are omitted.
22
+ *
23
+ * @param plugins Map of all registered plugin modules
24
+ * @returns Map of widget type to the base plugin and middleware for that type
25
+ */
26
+ export declare function getSupportedWidgetTypes(plugins: PluginModuleMap): Map<string, ValidWidgetTypeInfo>;
27
+ /**
28
+ * Get the unique base plugins from a supported types map, merging the middleware
29
+ * from each type a given base plugin handles.
30
+ *
31
+ * @param supportedTypes Map of widget type to base plugin and middleware
32
+ * @returns Map of base plugin name to the base plugin and its merged middleware
33
+ */
34
+ export declare function getUniqueWidgetPluginInfos(supportedTypes: Map<string, ValidWidgetTypeInfo>): Map<string, ValidWidgetTypeInfo>;
35
+ //# sourceMappingURL=WidgetLoaderUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetLoaderUtils.d.ts","sourceRoot":"","sources":["../src/WidgetLoaderUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAI3B;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kGAAkG;IAClG,UAAU,EAAE,YAAY,GAAG,IAAI,CAAC;IAChC,wEAAwE;IACxE,UAAU,EAAE,sBAAsB,EAAE,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG;IACjD,UAAU,EAAE,YAAY,CAAC;CAC1B,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,eAAe,GACvB,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAsElC;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAC/C,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAuBlC"}
@@ -0,0 +1,109 @@
1
+ import Log from '@deephaven/log';
2
+ import { isWidgetPlugin, isWidgetMiddlewarePlugin } from '@deephaven/plugin';
3
+ var log = Log.module('WidgetLoaderUtils');
4
+
5
+ /**
6
+ * Information about a widget type including its base plugin and any middleware.
7
+ */
8
+
9
+ /**
10
+ * Widget type info that is guaranteed to have a base plugin.
11
+ */
12
+
13
+ /**
14
+ * Build a map of widget types to their plugin chain info.
15
+ * For each type, we have a base plugin and a list of middleware to apply.
16
+ *
17
+ * Types that only have middleware registered (no base plugin) are omitted.
18
+ *
19
+ * @param plugins Map of all registered plugin modules
20
+ * @returns Map of widget type to the base plugin and middleware for that type
21
+ */
22
+ export function getSupportedWidgetTypes(plugins) {
23
+ var typeMap = new Map();
24
+ plugins.forEach(plugin => {
25
+ var isMiddleware = isWidgetMiddlewarePlugin(plugin);
26
+ if (!isWidgetPlugin(plugin) && !isMiddleware) {
27
+ return;
28
+ }
29
+ [plugin.supportedTypes].flat().forEach(supportedType => {
30
+ if (supportedType == null || supportedType === '') {
31
+ return;
32
+ }
33
+ var existing = typeMap.get(supportedType);
34
+ if (isMiddleware) {
35
+ // Add middleware to existing chain or create pending chain
36
+ if (existing != null) {
37
+ existing.middleware.push(plugin);
38
+ log.debug("Adding middleware ".concat(plugin.name, " to chain for type ").concat(supportedType));
39
+ } else {
40
+ // No base plugin yet, create entry with just middleware
41
+ // The base plugin will be set when a non-middleware plugin is registered
42
+ typeMap.set(supportedType, {
43
+ basePlugin: null,
44
+ middleware: [plugin]
45
+ });
46
+ log.debug("Creating pending middleware chain for type ".concat(supportedType, " with ").concat(plugin.name));
47
+ }
48
+ } else {
49
+ // Non-middleware plugin: becomes the base plugin
50
+ if (existing != null) {
51
+ if (existing.basePlugin != null) {
52
+ // Already have a base plugin, warn about replacement
53
+ log.warn("Multiple WidgetPlugins handling type ".concat(supportedType, ". ") + "Replacing ".concat(existing.basePlugin.name, " with ").concat(plugin.name, " as base plugin"));
54
+ }
55
+ // Keep existing middleware, update the base plugin
56
+ existing.basePlugin = plugin;
57
+ } else {
58
+ typeMap.set(supportedType, {
59
+ basePlugin: plugin,
60
+ middleware: []
61
+ });
62
+ }
63
+ log.debug("Set base plugin ".concat(plugin.name, " for type ").concat(supportedType));
64
+ }
65
+ });
66
+ });
67
+
68
+ // Filter out entries that only have middleware (no base plugin)
69
+ var validEntries = new Map();
70
+ typeMap.forEach((info, type) => {
71
+ if (info.basePlugin != null) {
72
+ validEntries.set(type, info);
73
+ } else {
74
+ log.warn("No base plugin found for type ".concat(type, ", middleware will not be applied"));
75
+ }
76
+ });
77
+ return validEntries;
78
+ }
79
+
80
+ /**
81
+ * Get the unique base plugins from a supported types map, merging the middleware
82
+ * from each type a given base plugin handles.
83
+ *
84
+ * @param supportedTypes Map of widget type to base plugin and middleware
85
+ * @returns Map of base plugin name to the base plugin and its merged middleware
86
+ */
87
+ export function getUniqueWidgetPluginInfos(supportedTypes) {
88
+ var uniquePluginInfos = new Map();
89
+ supportedTypes.forEach(info => {
90
+ var existingInfo = uniquePluginInfos.get(info.basePlugin.name);
91
+ if (existingInfo == null) {
92
+ // Clone so the source map is not mutated
93
+ uniquePluginInfos.set(info.basePlugin.name, {
94
+ basePlugin: info.basePlugin,
95
+ middleware: [...info.middleware]
96
+ });
97
+ return;
98
+ }
99
+
100
+ // Merge middleware from multiple type registrations for the same base plugin
101
+ info.middleware.forEach(m => {
102
+ if (!existingInfo.middleware.includes(m)) {
103
+ existingInfo.middleware.push(m);
104
+ }
105
+ });
106
+ });
107
+ return uniquePluginInfos;
108
+ }
109
+ //# sourceMappingURL=WidgetLoaderUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetLoaderUtils.js","names":["Log","isWidgetPlugin","isWidgetMiddlewarePlugin","log","module","getSupportedWidgetTypes","plugins","typeMap","Map","forEach","plugin","isMiddleware","supportedTypes","flat","supportedType","existing","get","middleware","push","debug","concat","name","set","basePlugin","warn","validEntries","info","type","getUniqueWidgetPluginInfos","uniquePluginInfos","existingInfo","m","includes"],"sources":["../src/WidgetLoaderUtils.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport {\n isWidgetPlugin,\n isWidgetMiddlewarePlugin,\n type PluginModuleMap,\n type WidgetPlugin,\n type WidgetMiddlewarePlugin,\n} from '@deephaven/plugin';\n\nconst log = Log.module('WidgetLoaderUtils');\n\n/**\n * Information about a widget type including its base plugin and any middleware.\n */\nexport interface WidgetTypeInfo {\n /** The base plugin that handles this widget type, or null if only middleware registered so far */\n basePlugin: WidgetPlugin | null;\n /** Middleware plugins to apply, in order from outermost to innermost */\n middleware: WidgetMiddlewarePlugin[];\n}\n\n/**\n * Widget type info that is guaranteed to have a base plugin.\n */\nexport type ValidWidgetTypeInfo = WidgetTypeInfo & {\n basePlugin: WidgetPlugin;\n};\n\n/**\n * Build a map of widget types to their plugin chain info.\n * For each type, we have a base plugin and a list of middleware to apply.\n *\n * Types that only have middleware registered (no base plugin) are omitted.\n *\n * @param plugins Map of all registered plugin modules\n * @returns Map of widget type to the base plugin and middleware for that type\n */\nexport function getSupportedWidgetTypes(\n plugins: PluginModuleMap\n): Map<string, ValidWidgetTypeInfo> {\n const typeMap = new Map<string, WidgetTypeInfo>();\n\n plugins.forEach(plugin => {\n const isMiddleware = isWidgetMiddlewarePlugin(plugin);\n if (!isWidgetPlugin(plugin) && !isMiddleware) {\n return;\n }\n\n [plugin.supportedTypes].flat().forEach(supportedType => {\n if (supportedType == null || supportedType === '') {\n return;\n }\n\n const existing = typeMap.get(supportedType);\n\n if (isMiddleware) {\n // Add middleware to existing chain or create pending chain\n if (existing != null) {\n existing.middleware.push(plugin);\n log.debug(\n `Adding middleware ${plugin.name} to chain for type ${supportedType}`\n );\n } else {\n // No base plugin yet, create entry with just middleware\n // The base plugin will be set when a non-middleware plugin is registered\n typeMap.set(supportedType, {\n basePlugin: null,\n middleware: [plugin],\n });\n log.debug(\n `Creating pending middleware chain for type ${supportedType} with ${plugin.name}`\n );\n }\n } else {\n // Non-middleware plugin: becomes the base plugin\n if (existing != null) {\n if (existing.basePlugin != null) {\n // Already have a base plugin, warn about replacement\n log.warn(\n `Multiple WidgetPlugins handling type ${supportedType}. ` +\n `Replacing ${existing.basePlugin.name} with ${plugin.name} as base plugin`\n );\n }\n // Keep existing middleware, update the base plugin\n existing.basePlugin = plugin;\n } else {\n typeMap.set(supportedType, {\n basePlugin: plugin,\n middleware: [],\n });\n }\n log.debug(`Set base plugin ${plugin.name} for type ${supportedType}`);\n }\n });\n });\n\n // Filter out entries that only have middleware (no base plugin)\n const validEntries = new Map<string, ValidWidgetTypeInfo>();\n typeMap.forEach((info, type) => {\n if (info.basePlugin != null) {\n validEntries.set(type, info as ValidWidgetTypeInfo);\n } else {\n log.warn(\n `No base plugin found for type ${type}, middleware will not be applied`\n );\n }\n });\n\n return validEntries;\n}\n\n/**\n * Get the unique base plugins from a supported types map, merging the middleware\n * from each type a given base plugin handles.\n *\n * @param supportedTypes Map of widget type to base plugin and middleware\n * @returns Map of base plugin name to the base plugin and its merged middleware\n */\nexport function getUniqueWidgetPluginInfos(\n supportedTypes: Map<string, ValidWidgetTypeInfo>\n): Map<string, ValidWidgetTypeInfo> {\n const uniquePluginInfos = new Map<string, ValidWidgetTypeInfo>();\n\n supportedTypes.forEach(info => {\n const existingInfo = uniquePluginInfos.get(info.basePlugin.name);\n if (existingInfo == null) {\n // Clone so the source map is not mutated\n uniquePluginInfos.set(info.basePlugin.name, {\n basePlugin: info.basePlugin,\n middleware: [...info.middleware],\n });\n return;\n }\n\n // Merge middleware from multiple type registrations for the same base plugin\n info.middleware.forEach(m => {\n if (!existingInfo.middleware.includes(m)) {\n existingInfo.middleware.push(m);\n }\n });\n });\n\n return uniquePluginInfos;\n}\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,gBAAgB;AAChC,SACEC,cAAc,EACdC,wBAAwB,QAInB,mBAAmB;AAE1B,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAM,CAAC,mBAAmB,CAAC;;AAE3C;AACA;AACA;;AAQA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CACrCC,OAAwB,EACU;EAClC,IAAMC,OAAO,GAAG,IAAIC,GAAG,CAAyB,CAAC;EAEjDF,OAAO,CAACG,OAAO,CAACC,MAAM,IAAI;IACxB,IAAMC,YAAY,GAAGT,wBAAwB,CAACQ,MAAM,CAAC;IACrD,IAAI,CAACT,cAAc,CAACS,MAAM,CAAC,IAAI,CAACC,YAAY,EAAE;MAC5C;IACF;IAEA,CAACD,MAAM,CAACE,cAAc,CAAC,CAACC,IAAI,CAAC,CAAC,CAACJ,OAAO,CAACK,aAAa,IAAI;MACtD,IAAIA,aAAa,IAAI,IAAI,IAAIA,aAAa,KAAK,EAAE,EAAE;QACjD;MACF;MAEA,IAAMC,QAAQ,GAAGR,OAAO,CAACS,GAAG,CAACF,aAAa,CAAC;MAE3C,IAAIH,YAAY,EAAE;QAChB;QACA,IAAII,QAAQ,IAAI,IAAI,EAAE;UACpBA,QAAQ,CAACE,UAAU,CAACC,IAAI,CAACR,MAAM,CAAC;UAChCP,GAAG,CAACgB,KAAK,sBAAAC,MAAA,CACcV,MAAM,CAACW,IAAI,yBAAAD,MAAA,CAAsBN,aAAa,CACrE,CAAC;QACH,CAAC,MAAM;UACL;UACA;UACAP,OAAO,CAACe,GAAG,CAACR,aAAa,EAAE;YACzBS,UAAU,EAAE,IAAI;YAChBN,UAAU,EAAE,CAACP,MAAM;UACrB,CAAC,CAAC;UACFP,GAAG,CAACgB,KAAK,+CAAAC,MAAA,CACuCN,aAAa,YAAAM,MAAA,CAASV,MAAM,CAACW,IAAI,CACjF,CAAC;QACH;MACF,CAAC,MAAM;QACL;QACA,IAAIN,QAAQ,IAAI,IAAI,EAAE;UACpB,IAAIA,QAAQ,CAACQ,UAAU,IAAI,IAAI,EAAE;YAC/B;YACApB,GAAG,CAACqB,IAAI,CACN,wCAAAJ,MAAA,CAAwCN,aAAa,uBAAAM,MAAA,CACtCL,QAAQ,CAACQ,UAAU,CAACF,IAAI,YAAAD,MAAA,CAASV,MAAM,CAACW,IAAI,oBAC7D,CAAC;UACH;UACA;UACAN,QAAQ,CAACQ,UAAU,GAAGb,MAAM;QAC9B,CAAC,MAAM;UACLH,OAAO,CAACe,GAAG,CAACR,aAAa,EAAE;YACzBS,UAAU,EAAEb,MAAM;YAClBO,UAAU,EAAE;UACd,CAAC,CAAC;QACJ;QACAd,GAAG,CAACgB,KAAK,oBAAAC,MAAA,CAAoBV,MAAM,CAACW,IAAI,gBAAAD,MAAA,CAAaN,aAAa,CAAE,CAAC;MACvE;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;EACA,IAAMW,YAAY,GAAG,IAAIjB,GAAG,CAA8B,CAAC;EAC3DD,OAAO,CAACE,OAAO,CAAC,CAACiB,IAAI,EAAEC,IAAI,KAAK;IAC9B,IAAID,IAAI,CAACH,UAAU,IAAI,IAAI,EAAE;MAC3BE,YAAY,CAACH,GAAG,CAACK,IAAI,EAAED,IAA2B,CAAC;IACrD,CAAC,MAAM;MACLvB,GAAG,CAACqB,IAAI,kCAAAJ,MAAA,CAC2BO,IAAI,qCACvC,CAAC;IACH;EACF,CAAC,CAAC;EAEF,OAAOF,YAAY;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,0BAA0BA,CACxChB,cAAgD,EACd;EAClC,IAAMiB,iBAAiB,GAAG,IAAIrB,GAAG,CAA8B,CAAC;EAEhEI,cAAc,CAACH,OAAO,CAACiB,IAAI,IAAI;IAC7B,IAAMI,YAAY,GAAGD,iBAAiB,CAACb,GAAG,CAACU,IAAI,CAACH,UAAU,CAACF,IAAI,CAAC;IAChE,IAAIS,YAAY,IAAI,IAAI,EAAE;MACxB;MACAD,iBAAiB,CAACP,GAAG,CAACI,IAAI,CAACH,UAAU,CAACF,IAAI,EAAE;QAC1CE,UAAU,EAAEG,IAAI,CAACH,UAAU;QAC3BN,UAAU,EAAE,CAAC,GAAGS,IAAI,CAACT,UAAU;MACjC,CAAC,CAAC;MACF;IACF;;IAEA;IACAS,IAAI,CAACT,UAAU,CAACR,OAAO,CAACsB,CAAC,IAAI;MAC3B,IAAI,CAACD,YAAY,CAACb,UAAU,CAACe,QAAQ,CAACD,CAAC,CAAC,EAAE;QACxCD,YAAY,CAACb,UAAU,CAACC,IAAI,CAACa,CAAC,CAAC;MACjC;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,OAAOF,iBAAiB;AAC1B","ignoreList":[]}
package/dist/index.d.ts CHANGED
@@ -18,6 +18,7 @@ export { default as PandasWidgetPlugin } from './PandasWidgetPlugin';
18
18
  export { default as PandasPluginConfig } from './PandasPluginConfig';
19
19
  export { default as WidgetLoaderPlugin } from './WidgetLoaderPlugin';
20
20
  export { default as WidgetLoaderPluginConfig } from './WidgetLoaderPluginConfig';
21
+ export * from './WidgetLoaderUtils';
21
22
  export { default as ControlType } from './controls/ControlType';
22
23
  export { default as LinkerUtils } from './linker/LinkerUtils';
23
24
  export type { Link } from './linker/LinkerUtils';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAE3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACjF,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAE3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -18,6 +18,7 @@ export { default as PandasWidgetPlugin } from "./PandasWidgetPlugin.js";
18
18
  export { default as PandasPluginConfig } from "./PandasPluginConfig.js";
19
19
  export { default as WidgetLoaderPlugin } from "./WidgetLoaderPlugin.js";
20
20
  export { default as WidgetLoaderPluginConfig } from "./WidgetLoaderPluginConfig.js";
21
+ export * from "./WidgetLoaderUtils.js";
21
22
  export { default as ControlType } from "./controls/ControlType.js";
22
23
  export { default as LinkerUtils } from "./linker/LinkerUtils.js";
23
24
  export { default as ToolType } from "./linker/ToolType.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","ChartPanelPlugin","ChartWidgetPlugin","ChartPluginConfig","ChartBuilderPlugin","ChartBuilderPluginConfig","ConsolePlugin","FilterPlugin","FilterPluginConfig","GridPanelPlugin","GridWidgetPlugin","GridPluginConfig","LinkerPlugin","LinkerPluginConfig","MarkdownPlugin","MarkdownPluginConfig","PandasPanelPlugin","PandasWidgetPlugin","PandasPluginConfig","WidgetLoaderPlugin","WidgetLoaderPluginConfig","ControlType","LinkerUtils","ToolType"],"sources":["../src/index.ts"],"sourcesContent":["export { default as ChartPanelPlugin } from './ChartPanelPlugin';\nexport { default as ChartWidgetPlugin } from './ChartWidgetPlugin';\nexport { default as ChartPluginConfig } from './ChartPluginConfig';\nexport { default as ChartBuilderPlugin } from './ChartBuilderPlugin';\nexport { default as ChartBuilderPluginConfig } from './ChartBuilderPluginConfig';\nexport { default as ConsolePlugin } from './ConsolePlugin';\nexport { default as FilterPlugin } from './FilterPlugin';\nexport { default as FilterPluginConfig } from './FilterPluginConfig';\nexport { default as GridPanelPlugin } from './GridPanelPlugin';\nexport { default as GridWidgetPlugin } from './GridWidgetPlugin';\nexport { default as GridPluginConfig } from './GridPluginConfig';\nexport { default as LinkerPlugin } from './LinkerPlugin';\nexport { default as LinkerPluginConfig } from './LinkerPluginConfig';\nexport { default as MarkdownPlugin } from './MarkdownPlugin';\nexport { default as MarkdownPluginConfig } from './MarkdownPluginConfig';\nexport { default as PandasPanelPlugin } from './PandasPanelPlugin';\nexport { default as PandasWidgetPlugin } from './PandasWidgetPlugin';\nexport { default as PandasPluginConfig } from './PandasPluginConfig';\nexport { default as WidgetLoaderPlugin } from './WidgetLoaderPlugin';\nexport { default as WidgetLoaderPluginConfig } from './WidgetLoaderPluginConfig';\nexport { default as ControlType } from './controls/ControlType';\nexport { default as LinkerUtils } from './linker/LinkerUtils';\nexport type { Link } from './linker/LinkerUtils';\nexport { default as ToolType } from './linker/ToolType';\nexport * from './useConfigureRuff';\nexport * from './useDashboardColumnFilters';\nexport * from './useGridLinker';\nexport * from './useLoadTablePlugin';\nexport * from './useTablePlugin';\nexport * from './TablePluginLoaderContext';\n\nexport * from './ConsoleEvents';\nexport * from './events';\nexport * from './panels';\nexport * from './redux';\nexport * from './prop-types';\nexport * from './linker';\n"],"mappings":"SAASA,OAAO,IAAIC,gBAAgB;AAAA,SAC3BD,OAAO,IAAIE,iBAAiB;AAAA,SAC5BF,OAAO,IAAIG,iBAAiB;AAAA,SAC5BH,OAAO,IAAII,kBAAkB;AAAA,SAC7BJ,OAAO,IAAIK,wBAAwB;AAAA,SACnCL,OAAO,IAAIM,aAAa;AAAA,SACxBN,OAAO,IAAIO,YAAY;AAAA,SACvBP,OAAO,IAAIQ,kBAAkB;AAAA,SAC7BR,OAAO,IAAIS,eAAe;AAAA,SAC1BT,OAAO,IAAIU,gBAAgB;AAAA,SAC3BV,OAAO,IAAIW,gBAAgB;AAAA,SAC3BX,OAAO,IAAIY,YAAY;AAAA,SACvBZ,OAAO,IAAIa,kBAAkB;AAAA,SAC7Bb,OAAO,IAAIc,cAAc;AAAA,SACzBd,OAAO,IAAIe,oBAAoB;AAAA,SAC/Bf,OAAO,IAAIgB,iBAAiB;AAAA,SAC5BhB,OAAO,IAAIiB,kBAAkB;AAAA,SAC7BjB,OAAO,IAAIkB,kBAAkB;AAAA,SAC7BlB,OAAO,IAAImB,kBAAkB;AAAA,SAC7BnB,OAAO,IAAIoB,wBAAwB;AAAA,SACnCpB,OAAO,IAAIqB,WAAW;AAAA,SACtBrB,OAAO,IAAIsB,WAAW;AAAA,SAEtBtB,OAAO,IAAIuB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["default","ChartPanelPlugin","ChartWidgetPlugin","ChartPluginConfig","ChartBuilderPlugin","ChartBuilderPluginConfig","ConsolePlugin","FilterPlugin","FilterPluginConfig","GridPanelPlugin","GridWidgetPlugin","GridPluginConfig","LinkerPlugin","LinkerPluginConfig","MarkdownPlugin","MarkdownPluginConfig","PandasPanelPlugin","PandasWidgetPlugin","PandasPluginConfig","WidgetLoaderPlugin","WidgetLoaderPluginConfig","ControlType","LinkerUtils","ToolType"],"sources":["../src/index.ts"],"sourcesContent":["export { default as ChartPanelPlugin } from './ChartPanelPlugin';\nexport { default as ChartWidgetPlugin } from './ChartWidgetPlugin';\nexport { default as ChartPluginConfig } from './ChartPluginConfig';\nexport { default as ChartBuilderPlugin } from './ChartBuilderPlugin';\nexport { default as ChartBuilderPluginConfig } from './ChartBuilderPluginConfig';\nexport { default as ConsolePlugin } from './ConsolePlugin';\nexport { default as FilterPlugin } from './FilterPlugin';\nexport { default as FilterPluginConfig } from './FilterPluginConfig';\nexport { default as GridPanelPlugin } from './GridPanelPlugin';\nexport { default as GridWidgetPlugin } from './GridWidgetPlugin';\nexport { default as GridPluginConfig } from './GridPluginConfig';\nexport { default as LinkerPlugin } from './LinkerPlugin';\nexport { default as LinkerPluginConfig } from './LinkerPluginConfig';\nexport { default as MarkdownPlugin } from './MarkdownPlugin';\nexport { default as MarkdownPluginConfig } from './MarkdownPluginConfig';\nexport { default as PandasPanelPlugin } from './PandasPanelPlugin';\nexport { default as PandasWidgetPlugin } from './PandasWidgetPlugin';\nexport { default as PandasPluginConfig } from './PandasPluginConfig';\nexport { default as WidgetLoaderPlugin } from './WidgetLoaderPlugin';\nexport { default as WidgetLoaderPluginConfig } from './WidgetLoaderPluginConfig';\nexport * from './WidgetLoaderUtils';\nexport { default as ControlType } from './controls/ControlType';\nexport { default as LinkerUtils } from './linker/LinkerUtils';\nexport type { Link } from './linker/LinkerUtils';\nexport { default as ToolType } from './linker/ToolType';\nexport * from './useConfigureRuff';\nexport * from './useDashboardColumnFilters';\nexport * from './useGridLinker';\nexport * from './useLoadTablePlugin';\nexport * from './useTablePlugin';\nexport * from './TablePluginLoaderContext';\n\nexport * from './ConsoleEvents';\nexport * from './events';\nexport * from './panels';\nexport * from './redux';\nexport * from './prop-types';\nexport * from './linker';\n"],"mappings":"SAASA,OAAO,IAAIC,gBAAgB;AAAA,SAC3BD,OAAO,IAAIE,iBAAiB;AAAA,SAC5BF,OAAO,IAAIG,iBAAiB;AAAA,SAC5BH,OAAO,IAAII,kBAAkB;AAAA,SAC7BJ,OAAO,IAAIK,wBAAwB;AAAA,SACnCL,OAAO,IAAIM,aAAa;AAAA,SACxBN,OAAO,IAAIO,YAAY;AAAA,SACvBP,OAAO,IAAIQ,kBAAkB;AAAA,SAC7BR,OAAO,IAAIS,eAAe;AAAA,SAC1BT,OAAO,IAAIU,gBAAgB;AAAA,SAC3BV,OAAO,IAAIW,gBAAgB;AAAA,SAC3BX,OAAO,IAAIY,YAAY;AAAA,SACvBZ,OAAO,IAAIa,kBAAkB;AAAA,SAC7Bb,OAAO,IAAIc,cAAc;AAAA,SACzBd,OAAO,IAAIe,oBAAoB;AAAA,SAC/Bf,OAAO,IAAIgB,iBAAiB;AAAA,SAC5BhB,OAAO,IAAIiB,kBAAkB;AAAA,SAC7BjB,OAAO,IAAIkB,kBAAkB;AAAA,SAC7BlB,OAAO,IAAImB,kBAAkB;AAAA,SAC7BnB,OAAO,IAAIoB,wBAAwB;AAAA;AAAA,SAEnCpB,OAAO,IAAIqB,WAAW;AAAA,SACtBrB,OAAO,IAAIsB,WAAW;AAAA,SAEtBtB,OAAO,IAAIuB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","ignoreList":[]}
@@ -180,6 +180,10 @@ export declare class IrisGridPanel extends PureComponent<IrisGridPanelProps, Iri
180
180
  handleLoadError(error: unknown): void;
181
181
  modelInitialized(model: IrisGridModel): void;
182
182
  handleClearAllFilters(): void;
183
+ /**
184
+ * Called when a user clicks the "Reset" button for an error message on the LoadingOverlay.
185
+ */
186
+ handleErrorAction(): void;
183
187
  sendColumnsChange(columns: readonly dh.Column[]): void;
184
188
  startModelListening(model: IrisGridModel): void;
185
189
  stopModelListening(model: IrisGridModel): void;
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridPanel.d.ts","sourceRoot":"","sources":["../../src/panels/IrisGridPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EACZ,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,OAAO,EACL,KAAK,mBAAmB,EAGxB,KAAK,cAAc,EAEpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,YAAY,EACjB,aAAa,EAIb,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,KAAK,EACV,KAAK,sBAAsB,EAC3B,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAIL,KAAK,IAAI,EACT,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,MAAM,EAEZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAchE,KAAK,kBAAkB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAEzD,KAAK,UAAU,GAAG,kBAAkB,EAAE,CAAC;AAEvC,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE;QACT,eAAe,EAAE,OAAO,CAAC;QACzB,cAAc,EAAE,OAAO,CAAC;QACxB,YAAY,EAAE,SAAS;YACrB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACxE,EAAE,EAAE,MAAM,GAAG,UAAU,CAAC;SACzB,EAAE,CAAC;QACJ,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;KACrC,CAAC;IACF,aAAa,EAAE,uBAAuB,CAAC;IACvC,kBAAkB,EAAE,4BAA4B,CAAC;IACjD,WAAW,EAAE,OAAO,CAAC;CACtB;AAKD,KAAK,gBAAgB,GAAG,UAAU,GAAG;IACnC,kBAAkB,EAAE,UAAU,CAAC,oBAAoB,CAAC,GAAG;QACrD,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;QAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,QAAS,SAAQ,mBAAmB;IACnD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAExD,aAAa,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IAC7E,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAEtD,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAEjD,yCAAyC;IACzC,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,oBAAoB,CAAC;IAEzD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE3C;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAE9C;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAEhD;;;;;OAKG;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED,UAAU,UAAU;IAClB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,wBAAwB,CAAC,EAAE,CACzB,KAAK,EAAE,cAAc,EACrB,WAAW,EAAE,UAAU,EACvB,OAAO,EAAE,gBAAgB,KACtB,OAAO,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IAGxB,kBAAkB,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACrD,qBAAqB,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7C,eAAe,EAAE,yBAAyB,CAAC;IAC3C,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,gBAAgB,EAAE,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACrD,aAAa,EAAE,SAAS,UAAU,EAAE,CAAC;IACrC,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnD,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACjD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,sBAAsB,CAAC;IACrC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IACjC,gBAAgB,EAAE,YAAY,CAAC;IAC/B,sBAAsB,EAAE,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACxD,cAAc,EAAE,YAAY,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;IACvC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IACpC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,UAAU,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,aAAa,EAAE,SAAS,EAAE,CAAC,eAAe,EAAE,CAAC;IAC7C,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,kBAAkB,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAGlD,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACzD,kBAAkB,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;CACxC;AAoBD,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEvD,qBAAa,aAAc,SAAQ,aAAa,CAC9C,kBAAkB,EAClB,kBAAkB,CACnB;IACC,MAAM,CAAC,YAAY;6BACE,IAAI;kCACC,IAAI;MAC5B;IAEF,MAAM,CAAC,WAAW,SAAmB;IAErC,MAAM,CAAC,SAAS,SAAmB;gBAEvB,KAAK,EAAE,kBAAkB;IAkFrC,iBAAiB,IAAI,IAAI;IAIzB,kBAAkB,CAChB,SAAS,EAAE,kBAAkB,EAC7B,SAAS,EAAE,kBAAkB,GAC5B,IAAI;IAkBP,oBAAoB,IAAI,IAAI;IAe5B,QAAQ,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;IAElC,SAAS,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAEzC,YAAY,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAEhD,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,WAAW,EAAE,OAAO,CAAC;IAErB,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,mBAAmB,CAC4B;IAEvD,OAAO,CAAC,uBAAuB,CAC4B;IAE3D,YAAY,IAAI,MAAM;IAKtB,mBAAmB,YACP,SAAS,EAAE,CAAC,MAAM,EAAE,gBAAgB,SAAS,WAAW,EAAE,mBAapE;IAEF,qBAAqB,mBAED,SAAS,IAAI,EAAE,sBACX,SAAS,MAAM,EAAE,KACpC,MAAM,EAAE,CAYX;IAEF,gBAAgB,WAEJ,oBAAoB,GAAG,SAAS,SACjC,aAAa,GAAG,SAAS,eACnB,OAAO,oDAkCtB;IAEF,+BAA+B,UAEpB,aAAa,wBACE,OAAO,cACjB,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,oBACX,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC,kCAOtD;IAEF,mBAAmB,uBAEK,UAAU,CAAC,oBAAoB,CAAC,iBACrC,UAAU,CAAC,eAAe,CAAC,aAC/B,UAAU,CAAC,WAAW,CAAC,eACrB,UAAU,CAAC,aAAa,CAAC,KACrC,UAAU,CAMb;IAEF,wBAAwB,aAEV,kBAAkB,CAAC,UAAU,CAAC,gBAC1B,MAAM,KACnB,qBAAqB,CAUxB;IAEF,SAAS,IAAI,IAAI;IAgCjB,iBAAiB,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI;IA+ClD,cAAc,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAevE,4BAA4B,CAC1B,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,OAAO,GACb,IAAI;IASP,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI;IAahD,wBAAwB,CAAC,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI;IAI5D,iBAAiB,CAAC,IAAI,EAAE,uBAAuB,GAAG,uBAAuB,EAAE;IAI3E,sBAAsB,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,OAAO;IAU9D,qBAAqB,CACnB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,GACnB,IAAI;IAcP,uBAAuB,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAUnD,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAUzC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASvC;;;;;;OAMG;IACH,iBAAiB,CACf,QAAQ,EAAE,oBAAoB,EAC9B,KAAK,EAAE,aAAa,GACnB,IAAI;IAiCP,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI;IAO7C,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAO9D,UAAU,IAAI,IAAI;IAIlB,gBAAgB,IAAI,IAAI;IAMxB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAKjC,gBAAgB,IAAI,IAAI;IAQxB,eAAe,IAAI,IAAI;IAIvB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAQrC,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IA8B5C,qBAAqB,IAAI,IAAI;IAQ7B,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI;IAQtD,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAgB/C,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAmB9C,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAwCvE,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAOxC,oBAAoB,CAAC,SAAS,EAAE,yBAAyB,GAAG,IAAI;IAOhE,UAAU,CAAC,EACT,YAAY,EACZ,eAAe,GAChB,EAAE;QACD,YAAY,EAAE;YAAE,IAAI,EAAE,UAAU,CAAC;YAAC,MAAM,EAAE,WAAW,CAAA;SAAE,EAAE,CAAC;QAC1D,eAAe,EAAE;YAAE,IAAI,EAAE,UAAU,CAAC;YAAC,MAAM,EAAE,cAAc,CAAA;SAAE,EAAE,CAAC;KACjE,GAAG,IAAI;IAmCR,iBAAiB,CAAC,SAAS,EAAE;QAC3B,aAAa,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAChD,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;KAC/B,GAAG,IAAI;IAYR,gBAAgB,IAAI,IAAI;IAKxB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAiH1C,cAAc,6CAiCkB;IAEhC,UAAU,IAAI,IAAI;IAQlB,MAAM,IAAI,YAAY;CA+JvB;AAgBD,QAAA,MAAM,sBAAsB;qBAnrCV,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI;0BACvD,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI;gGAorCtC,CAAC;AAElB,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"IrisGridPanel.d.ts","sourceRoot":"","sources":["../../src/panels/IrisGridPanel.tsx"],"names":[],"mappings":"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"}
@@ -174,6 +174,7 @@ export class IrisGridPanel extends PureComponent {
174
174
  this.handlePluginFilter = this.handlePluginFilter.bind(this);
175
175
  this.handlePluginFetchColumns = this.handlePluginFetchColumns.bind(this);
176
176
  this.handleClearAllFilters = this.handleClearAllFilters.bind(this);
177
+ this.handleErrorAction = this.handleErrorAction.bind(this);
177
178
  this.irisGrid = /*#__PURE__*/React.createRef();
178
179
  this.pluginRef = /*#__PURE__*/React.createRef();
179
180
  var _panelState = props.panelState;
@@ -560,6 +561,19 @@ export class IrisGridPanel extends PureComponent {
560
561
  irisGrid.clearAllFilters();
561
562
  }
562
563
  }
564
+
565
+ /**
566
+ * Called when a user clicks the "Reset" button for an error message on the LoadingOverlay.
567
+ */
568
+ handleErrorAction() {
569
+ if (this.irisGrid.current != null) {
570
+ this.irisGrid.current.rollback();
571
+ this.setState({
572
+ error: null,
573
+ isLoading: false
574
+ });
575
+ }
576
+ }
563
577
  sendColumnsChange(columns) {
564
578
  log.debug2('sendColumnsChange', columns);
565
579
  var glEventHub = this.props.glEventHub;
@@ -838,6 +852,7 @@ export class IrisGridPanel extends PureComponent {
838
852
  isDisconnected: isDisconnected,
839
853
  isLoading: isLoading,
840
854
  isLoaded: isLoaded,
855
+ onErrorAction: this.irisGrid.current != null ? this.handleErrorAction : undefined,
841
856
  className: "iris-grid-panel",
842
857
  glContainer: glContainer,
843
858
  glEventHub: glEventHub,
@@ -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","_this$state","oldPanelState","panelState","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","_this$props","transformModel","Promise","resolve","then","_ref2","_asyncToGenerator","transformedModel","e","_x","apply","arguments","makeCancelable","resolved","catch","modelParam","_this$state2","dh","_irisGridState$irisGr","_irisGridState$irisGr2","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","_this$props2","glEventHub","emit","STATE_CHANGED","event","_this$state3","sendColumnsChange","detail","_ref4","settings","flush","_this$props3","sourcePanelId","tableSettings","extractTableSettings","CREATE_CHART","column","row","dataMap","updateGrid","focus","isCanceled","_this$props4","loadPlugin","onModelChanged","loadPanelState","pluginName","clearAllFilters","debug2","addEventListener","EVENT","DISCONNECT","RECONNECT","COLUMNS_CHANGED","TABLE_CHANGED","removeEventListener","getCoordinateForColumn","_gridWrapper$getBound","_allColumnXs$get","_allColumnWidths$get","_ref5","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","_ref6","_this$state4","indexedQuickFilters","changeFilterColumnNamesToIndexes","_ref7","_ref8","_slicedToArray","isFilterable","indexedAdvancedFilters","_ref9","_ref0","hydrateQuickFilters","hydrateAdvancedFilters","setStateOverrides","overrides","unsetFilterValue","_this$state5","originalIrisGridStateOverrides","savedQuickFilters","savedAdvancedFilters","_IrisGridUtils$hydrat","hydrateIrisGridPanelState","_this$irisGridUtils$h","hydrateIrisGridState","columnHeaderGroups","partitionConfig","_IrisGridUtils$hydrat2","hydrateGridState","_this$irisGrid$curren2","_this$irisGrid$curren3","grid","handleResize","render","_model$description","_panelState$pluginSta","_this$props5","glContainer","getDownloadWorker","links","user","irisGridProps","transformTableOptions","_this$state6","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","_ref1","_ref1$localDashboardI","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","_this$state","oldPanelState","panelState","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","handleErrorAction","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","_this$props","transformModel","Promise","resolve","then","_ref2","_asyncToGenerator","transformedModel","e","_x","apply","arguments","makeCancelable","resolved","catch","modelParam","_this$state2","dh","_irisGridState$irisGr","_irisGridState$irisGr2","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","_this$props2","glEventHub","emit","STATE_CHANGED","event","_this$state3","sendColumnsChange","detail","_ref4","settings","flush","_this$props3","sourcePanelId","tableSettings","extractTableSettings","CREATE_CHART","column","row","dataMap","updateGrid","focus","isCanceled","_this$props4","loadPlugin","onModelChanged","loadPanelState","pluginName","clearAllFilters","rollback","debug2","addEventListener","EVENT","DISCONNECT","RECONNECT","COLUMNS_CHANGED","TABLE_CHANGED","removeEventListener","getCoordinateForColumn","_gridWrapper$getBound","_allColumnXs$get","_allColumnWidths$get","_ref5","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","_ref6","_this$state4","indexedQuickFilters","changeFilterColumnNamesToIndexes","_ref7","_ref8","_slicedToArray","isFilterable","indexedAdvancedFilters","_ref9","_ref0","hydrateQuickFilters","hydrateAdvancedFilters","setStateOverrides","overrides","unsetFilterValue","_this$state5","originalIrisGridStateOverrides","savedQuickFilters","savedAdvancedFilters","_IrisGridUtils$hydrat","hydrateIrisGridPanelState","_this$irisGridUtils$h","hydrateIrisGridState","columnHeaderGroups","partitionConfig","_IrisGridUtils$hydrat2","hydrateGridState","_this$irisGrid$curren2","_this$irisGrid$curren3","grid","handleResize","render","_model$description","_panelState$pluginSta","_this$props5","glContainer","getDownloadWorker","links","user","irisGridProps","transformTableOptions","_this$state6","errorMessage","childrenContent","getPluginContent","permissions","canCopy","canDownloadCsv","widgetPanelDescriptor","getWidgetPanelDescriptor","onErrorAction","onClearAllFilters","onShow","onTabFocus","onTabClicked","componentPanel","descriptor","renderTabTooltip","alwaysFetchColumns","getAlwaysFetchColumns","columnAllowedCursor","columnNotAllowedCursor","copyCursor","getGridInputFilters","applyInputFiltersOnInit","isSelectingColumn","onColumnSelected","onCreateChart","onDataSelected","onError","onContextMenu","onAdvancedSettingsChange","customFilters","mapStateToProps","_ref1","_ref1$localDashboardI","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 this.handleErrorAction = this.handleErrorAction.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 /**\n * Called when a user clicks the \"Reset\" button for an error message on the LoadingOverlay.\n */\n handleErrorAction(): void {\n if (this.irisGrid.current != null) {\n this.irisGrid.current.rollback();\n this.setState({ error: null, isLoading: false });\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 onErrorAction={\n this.irisGrid.current != null ? this.handleErrorAction : undefined\n }\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 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../../../../node_modules/@deephaven/components/scss/custom.scss","../../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss","../../src/panels/NotebookPanel.scss","../../../../node_modules/@deephaven/components/scss/new_variables.scss"],"names":[],"mappings":"AAAA;AC6LA;ACxLE;EACE;;;AAIJ;EACE,SCNS;EDOT,ODUS;;;ACPX;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA,YDYS;ECXT;EACA;EACA,KCtBO;EDuBP;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE,ODjCE;;ACoCJ;EACE;;;AAQN;EACE;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;IACE","file":"NotebookPanel.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n@import './util.scss';\n","// Styling overrides for bootstrap\n@use 'sass:map';\n\n// Override / set color variables\n$red: var(--dh-color-visual-red);\n$orange: var(--dh-color-visual-orange);\n$yellow: var(--dh-color-visual-yellow);\n$green: var(--dh-color-visual-green);\n$blue: var(--dh-color-visual-blue);\n$purple: var(--dh-color-visual-purple);\n\n// Fallback colors are used if theme isn't loaded\n// this is required for error messages if the API doesn't load\n\n//Define our Gray scale\n$gray-100: var(--dh-color-gray-900, #fcfcfa);\n$gray-200: var(--dh-color-gray-800);\n$gray-300: var(--dh-color-gray-700);\n$gray-400: var(--dh-color-gray-600);\n$gray-500: var(--dh-color-gray-500);\n// intentional duplicate, scale doesn't line up otherwise\n// as we have gray-850 and spectrum doesn't and it is needed\n$gray-600: var(--dh-color-gray-500);\n$gray-700: var(--dh-color-gray-400);\n$gray-800: var(--dh-color-gray-300);\n$gray-850: var(--dh-color-gray-200);\n$gray-900: var(--dh-color-gray-75);\n$black: var(--dh-color-black, #1a171a);\n$white: var(--dh-color-white, #f0f0ee);\n\n//Define some UI colors\n$interfacegray: var(--dh-color-content-bg, #2d2a2e);\n$interfaceblue: var(--dh-color-accent-bg);\n$interfacewhite: $white;\n$interfaceblack: $black;\n$content-bg: var(--dh-color-content-bg, #2d2a2e);\n$background: var(--dh-color-bg, #1a171a);\n$foreground: var(--dh-color-fg, #f0f0ee);\n\n// Extend default Bootstrap $grays map\n$grays-custom: (\n '850': $gray-850,\n);\n$grays: () !default;\n$grays: map-merge($grays, $grays-custom);\n\n// Extend default Bootstrap $colors map\n$colors-custom: (\n 'black': $black,\n);\n$colors: () !default;\n$colors: map-merge($colors, $colors-custom);\n\n// Override default Bootstrap $theme-colors map by mapping each key to itself.\n// These will then be re-mapped inside of `button-outline-variant` and\n// `button-outline-variant` mixins in `bootstrap_override_mixins_buttons.scss`\n$theme-colors-self-map: ();\n@each $key\n in (\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'light',\n 'dark'\n )\n{\n $theme-colors-self-map: map.set($theme-colors-self-map, $key, $key);\n}\n$theme-colors: () !default;\n$theme-colors: map-merge($theme-colors, $theme-colors-self-map);\n\n// Used by bootstrap_override_mixins_buttons.scss to map Bootstrap colors to\n// DH semantic colors\n$bootstrap-dh-semantic-map: (\n 'primary': 'accent',\n 'secondary': 'neutral',\n 'success': 'positive',\n 'info': 'info',\n 'warning': 'notice',\n 'danger': 'negative',\n // We shouldn't be using these, but mapping so they work with our custom\n // `color-yiq` mixin. If we find a way to remove $light + $dark that are\n // defined in Bootstrap _variables.scss, we should remove these\n 'light': 'neutral',\n 'dark': 'neutral',\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: var(--dh-color-accent-bg);\n$primary-hover: var(--dh-color-accent-hover-bg);\n$primary-dark: var(--dh-color-accent-down-bg);\n$secondary: var(--dh-color-neutral-bg);\n$secondary-hover: var(--dh-color-neutral-hover-bg);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: var(--dh-color-negative-bg);\n$danger-hover: var(--dh-color-negative-hover-bg);\n// We really don't want to use $light or $dark variables, but Bootstrap defines\n// them in _variables.scss. Explicitly setting them to ensure we are in control\n// of their values. If we can find a way to remove them, we should\n$light: var(--dh-color-gray-light);\n$dark: var(--dh-color-gray-dark);\n// Bootstrap doesn't define $mid, and we want to move away from this particular\n// semantic. Should be deleted by #1635\n$mid: var(--dh-color-gray-mid);\n\n$semantic-colors: (\n 'primary-hover': $primary-hover,\n 'primary-dark': $primary-dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n 'secondary-hover': $secondary-hover,\n 'danger-hover': $danger-hover,\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif:\n 'Fira Sans',\n -apple-system,\n blinkmacsystemfont,\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n arial,\n sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n$text-select-color: var(--dh-color-text-highlight);\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem var(--dh-color-dropshadow);\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition:\n color 0.12s ease-in-out,\n background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out,\n box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n$btn-font-weight: var(--spectrum-global-font-weight-bold);\n$btn-line-height: 1.3;\n\n//Override Inputs\n$input-bg: var(--dh-color-input-bg);\n$input-disabled-bg: var(--dh-color-input-disabled-bg);\n$input-color: var(--dh-color-input-fg);\n$input-border-color: var(--dh-color-input-border);\n$input-placeholder-color: var(--dh-color-input-placeholder);\n$input-focus-border-color: var(--dh-color-input-focus-border);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: color-mix(\n in srgb,\n var(--dh-color-accent) 35%,\n transparent\n);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n$input-btn-line-height: 1.3;\n// Bootstrap uses a calc expression to determine the input height (calc(line-height + 2*padding-y + border)).\n// The padding-y value has to be in rem to match units as it is a SASS calc.\n// Using 0.42145rem with 1.3 line height gets us to spectrum's 32px.\n/* stylelint-disable-next-line number-max-precision */\n$input-btn-padding-y: 0.42145rem;\n\n//checkbox\n$custom-control-indicator-bg: var(--dh-color-input-bg);\n$custom-control-indicator-border-color: var(--dh-color-input-border);\n$custom-checkbox-indicator-border-radius: 2px;\n$custom-control-indicator-border-width: 2px;\n$custom-control-indicator-active-bg: var(--dh-color-input-bg);\n$custom-control-indicator-active-border-color: var(--dh-color-input-fg);\n$custom-control-indicator-checked-bg: var(--dh-color-input-fg);\n$custom-control-indicator-checked-color: black; // used as mask fill color\n$custom-checkbox-indicator-indeterminate-bg: var(--dh-color-input-fg);\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: var(--dh-color-input-disabled-bg);\n$custom-control-indicator-checked-disabled-bg: var(\n --dh-color-input-disabled-bg\n);\n$custom-control-label-disabled-color: var(--dh-color-input-disabled-fg);\n\n// The $custom-select-indicator variable is used by Bootstrap to provide the\n// icon for the select dropdown. Inline svgs can't use CSS variables, so we hard\n// code the color to #929192 (the default value of --dh-color-gray-600). PR #1651\n// overrides this icon altogether for known dropdowns, so technically we may not\n// need this, but it's here in case there are any remaining instances.\n$custom-select-indicator-color: #929192;\n$custom-select-bg: var(--dh-color-selector-bg);\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: $gray-500;\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $content-bg;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n$close-color: var(--dh-color-text);\n$close-text-shadow: none;\n\n// Toast notification\n$toast-bg: var(--dh-color-accent-100);\n$toast-color: var(--dh-color-text);\n$toast-error-bg: var(--dh-color-negative-bg);\n$toast-error-color: var(--dh-color-text);\n\n//tooltips\n$tooltip-bg: var(--dh-color-tooltip-bg);\n$tooltip-color: var(--dh-color-tooltip-fg);\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem var(--dh-color-tooltip-box-shadow);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: var(--dh-color-item-list-hover-bg);\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: var(--dh-color-popover-bg);\n$contextmenu-color: var(--dh-color-text);\n$contextmenu-disabled-color: var(--dh-color-text-disabled);\n$contextmenu-keyboard-selected-bg: var(--dh-color-keyboard-selected-bg);\n$contextmenu-selected-bg: var(--dh-color-item-list-hover-bg);\n$contextmenu-selected-color: var(--dh-color-item-list-selected-fg);\n\n//hr\n$hr-border-color: var(--dh-color-hr);\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: $danger;\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n\n// This section of variables is not consumed directly by DH, but they need to be\n// defined for sass to compile _variables\n$table-dark-bg: $gray-800;\n$table-dark-accent-bg: var(--dh-color-highlight-hover);\n$table-dark-hover-bg: var(--dh-color-highlight-active);\n$table-dark-border-color: $gray-700;\n$popover-bg: var(--dh-color-tooltip-bg);\n$popover-border-color: var(--dh-color-overlay-modal-bg);\n$popover-header-bg: #000;\n$popover-arrow-outer-color: var(--dh-color-dropshadow);\n$custom-range-thumb-active-bg: var(--dh-color-accent-1100);\n","@import '@deephaven/components/scss/custom.scss';\n\n$toolbar-bg: $content-bg;\n\n.notebook-title {\n &.is-preview {\n font-style: italic;\n }\n}\n\n.notebook-session-not-connected {\n padding: $spacer-2;\n color: $gray-600;\n}\n\n.notebook-container {\n display: flex;\n flex-direction: column;\n\n .notebook-toolbar {\n display: flex;\n justify-content: flex-start;\n flex-direction: row;\n background: $toolbar-bg;\n border-bottom: 2px solid $background;\n padding: $spacer-1 $spacer-2;\n gap: $spacer-1;\n container-type: inline-size;\n overflow: hidden;\n\n .notebook-toolbar-actions {\n display: contents;\n }\n\n .btn-overflow {\n margin-left: auto;\n }\n\n .btn-play:hover,\n .btn-play-selected:hover {\n color: $green;\n }\n\n .icon-create-pq {\n transform: translate(0, -4px);\n }\n }\n}\n\n// Hide toolbar action buttons one-by-one as the toolbar narrows.\n// Each button is ~32px; breakpoints account for padding (16px) and gaps (4px each).\n// The overflow (⋮) button is always visible.\n@container (width < 128px) {\n .notebook-toolbar .btn-save {\n display: none;\n }\n}\n\n@container (width < 96px) {\n .notebook-toolbar .btn-run-selected {\n display: none;\n }\n}\n\n@container (width < 64px) {\n .notebook-toolbar .btn-run {\n display: none;\n }\n}\n","@use 'sass:math';\n\n//Set of spacer variables from the spacer map\n$spacer-0: map-get($spacers, 0); //0\n$spacer-1: map-get($spacers, 1);\n$spacer-2: map-get($spacers, 2);\n$spacer-3: map-get($spacers, 3);\n$spacer-4: map-get($spacers, 4);\n$spacer-5: map-get($spacers, 5);\n\n//Marching Ants for golden layout dropzone and drag and drop\n//top bottom, left right.\n//create 4 background images that are 50% color 1, 50% color 2 using graidents, two veritical, two horizontal\n//size them to ant-size and thickness\n//position those images along the egdes and make top/bottom repeat-x and left/right repeat-y\n//then offest each of those background positions by ant-size in animation to make them march.\n$ant-size: 8px;\n$ant-thickness: 1px;\n\n@mixin ants-base($color-1: black, $color-2: white) {\n background-image: linear-gradient(to right, $color-2 50%, $color-1 50%),\n linear-gradient(to right, $color-2 50%, $color-1 50%),\n linear-gradient(to bottom, $color-2 50%, $color-1 50%),\n linear-gradient(to bottom, $color-2 50%, $color-1 50%);\n background-size:\n $ant-size $ant-thickness,\n $ant-size $ant-thickness,\n $ant-thickness $ant-size,\n $ant-thickness $ant-size;\n background-position:\n 0 top,\n 0 bottom,\n left 0,\n right 0;\n background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;\n animation: march 0.5s;\n animation-timing-function: linear;\n animation-iteration-count: infinite;\n}\n\n@mixin drag-stack($pseudo-element) {\n &::#{$pseudo-element} {\n content: ' ';\n background: $primary;\n box-shadow: $box-shadow;\n border-radius: $border-radius;\n position: absolute;\n height: 100%;\n width: 100%;\n @content;\n }\n}\n\n$focus-bg-transparency: 12%;\n$hover-bg-transparency: 14%;\n$active-bg-transparency: 28%;\n$exception-transparency: 28%;\n"]}
1
+ {"version":3,"sourceRoot":"","sources":["../../../../node_modules/@deephaven/components/scss/custom.scss","../../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss","../../src/panels/NotebookPanel.scss","../../../../node_modules/@deephaven/components/scss/new_variables.scss"],"names":[],"mappings":"AAAA;AC6LA;ACxLE;EACE;;;AAIJ;EACE,SCNS;EDOT,ODUS;;;ACPX;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA,YDYS;ECXT;EACA;EACA,KCtBO;EDuBP;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE,ODjCE;;ACoCJ;EACE;;;AAgBN;EACE;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;IACE","file":"NotebookPanel.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n@import './util.scss';\n","// Styling overrides for bootstrap\n@use 'sass:map';\n\n// Override / set color variables\n$red: var(--dh-color-visual-red);\n$orange: var(--dh-color-visual-orange);\n$yellow: var(--dh-color-visual-yellow);\n$green: var(--dh-color-visual-green);\n$blue: var(--dh-color-visual-blue);\n$purple: var(--dh-color-visual-purple);\n\n// Fallback colors are used if theme isn't loaded\n// this is required for error messages if the API doesn't load\n\n//Define our Gray scale\n$gray-100: var(--dh-color-gray-900, #fcfcfa);\n$gray-200: var(--dh-color-gray-800);\n$gray-300: var(--dh-color-gray-700);\n$gray-400: var(--dh-color-gray-600);\n$gray-500: var(--dh-color-gray-500);\n// intentional duplicate, scale doesn't line up otherwise\n// as we have gray-850 and spectrum doesn't and it is needed\n$gray-600: var(--dh-color-gray-500);\n$gray-700: var(--dh-color-gray-400);\n$gray-800: var(--dh-color-gray-300);\n$gray-850: var(--dh-color-gray-200);\n$gray-900: var(--dh-color-gray-75);\n$black: var(--dh-color-black, #1a171a);\n$white: var(--dh-color-white, #f0f0ee);\n\n//Define some UI colors\n$interfacegray: var(--dh-color-content-bg, #2d2a2e);\n$interfaceblue: var(--dh-color-accent-bg);\n$interfacewhite: $white;\n$interfaceblack: $black;\n$content-bg: var(--dh-color-content-bg, #2d2a2e);\n$background: var(--dh-color-bg, #1a171a);\n$foreground: var(--dh-color-fg, #f0f0ee);\n\n// Extend default Bootstrap $grays map\n$grays-custom: (\n '850': $gray-850,\n);\n$grays: () !default;\n$grays: map-merge($grays, $grays-custom);\n\n// Extend default Bootstrap $colors map\n$colors-custom: (\n 'black': $black,\n);\n$colors: () !default;\n$colors: map-merge($colors, $colors-custom);\n\n// Override default Bootstrap $theme-colors map by mapping each key to itself.\n// These will then be re-mapped inside of `button-outline-variant` and\n// `button-outline-variant` mixins in `bootstrap_override_mixins_buttons.scss`\n$theme-colors-self-map: ();\n@each $key\n in (\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'light',\n 'dark'\n )\n{\n $theme-colors-self-map: map.set($theme-colors-self-map, $key, $key);\n}\n$theme-colors: () !default;\n$theme-colors: map-merge($theme-colors, $theme-colors-self-map);\n\n// Used by bootstrap_override_mixins_buttons.scss to map Bootstrap colors to\n// DH semantic colors\n$bootstrap-dh-semantic-map: (\n 'primary': 'accent',\n 'secondary': 'neutral',\n 'success': 'positive',\n 'info': 'info',\n 'warning': 'notice',\n 'danger': 'negative',\n // We shouldn't be using these, but mapping so they work with our custom\n // `color-yiq` mixin. If we find a way to remove $light + $dark that are\n // defined in Bootstrap _variables.scss, we should remove these\n 'light': 'neutral',\n 'dark': 'neutral',\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: var(--dh-color-accent-bg);\n$primary-hover: var(--dh-color-accent-hover-bg);\n$primary-dark: var(--dh-color-accent-down-bg);\n$secondary: var(--dh-color-neutral-bg);\n$secondary-hover: var(--dh-color-neutral-hover-bg);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: var(--dh-color-negative-bg);\n$danger-hover: var(--dh-color-negative-hover-bg);\n// We really don't want to use $light or $dark variables, but Bootstrap defines\n// them in _variables.scss. Explicitly setting them to ensure we are in control\n// of their values. If we can find a way to remove them, we should\n$light: var(--dh-color-gray-light);\n$dark: var(--dh-color-gray-dark);\n// Bootstrap doesn't define $mid, and we want to move away from this particular\n// semantic. Should be deleted by #1635\n$mid: var(--dh-color-gray-mid);\n\n$semantic-colors: (\n 'primary-hover': $primary-hover,\n 'primary-dark': $primary-dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n 'secondary-hover': $secondary-hover,\n 'danger-hover': $danger-hover,\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif:\n 'Fira Sans',\n -apple-system,\n blinkmacsystemfont,\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n arial,\n sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n$text-select-color: var(--dh-color-text-highlight);\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem var(--dh-color-dropshadow);\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition:\n color 0.12s ease-in-out,\n background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out,\n box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n$btn-font-weight: var(--spectrum-global-font-weight-bold);\n$btn-line-height: 1.3;\n\n//Override Inputs\n$input-bg: var(--dh-color-input-bg);\n$input-disabled-bg: var(--dh-color-input-disabled-bg);\n$input-color: var(--dh-color-input-fg);\n$input-border-color: var(--dh-color-input-border);\n$input-placeholder-color: var(--dh-color-input-placeholder);\n$input-focus-border-color: var(--dh-color-input-focus-border);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: color-mix(\n in srgb,\n var(--dh-color-accent) 35%,\n transparent\n);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n$input-btn-line-height: 1.3;\n// Bootstrap uses a calc expression to determine the input height (calc(line-height + 2*padding-y + border)).\n// The padding-y value has to be in rem to match units as it is a SASS calc.\n// Using 0.42145rem with 1.3 line height gets us to spectrum's 32px.\n/* stylelint-disable-next-line number-max-precision */\n$input-btn-padding-y: 0.42145rem;\n\n//checkbox\n$custom-control-indicator-bg: var(--dh-color-input-bg);\n$custom-control-indicator-border-color: var(--dh-color-input-border);\n$custom-checkbox-indicator-border-radius: 2px;\n$custom-control-indicator-border-width: 2px;\n$custom-control-indicator-active-bg: var(--dh-color-input-bg);\n$custom-control-indicator-active-border-color: var(--dh-color-input-fg);\n$custom-control-indicator-checked-bg: var(--dh-color-input-fg);\n$custom-control-indicator-checked-color: black; // used as mask fill color\n$custom-checkbox-indicator-indeterminate-bg: var(--dh-color-input-fg);\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: var(--dh-color-input-disabled-bg);\n$custom-control-indicator-checked-disabled-bg: var(\n --dh-color-input-disabled-bg\n);\n$custom-control-label-disabled-color: var(--dh-color-input-disabled-fg);\n\n// The $custom-select-indicator variable is used by Bootstrap to provide the\n// icon for the select dropdown. Inline svgs can't use CSS variables, so we hard\n// code the color to #929192 (the default value of --dh-color-gray-600). PR #1651\n// overrides this icon altogether for known dropdowns, so technically we may not\n// need this, but it's here in case there are any remaining instances.\n$custom-select-indicator-color: #929192;\n$custom-select-bg: var(--dh-color-selector-bg);\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: $gray-500;\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $content-bg;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n$close-color: var(--dh-color-text);\n$close-text-shadow: none;\n\n// Toast notification\n$toast-bg: var(--dh-color-accent-100);\n$toast-color: var(--dh-color-text);\n$toast-error-bg: var(--dh-color-negative-bg);\n$toast-error-color: var(--dh-color-text);\n\n//tooltips\n$tooltip-bg: var(--dh-color-tooltip-bg);\n$tooltip-color: var(--dh-color-tooltip-fg);\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem var(--dh-color-tooltip-box-shadow);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: var(--dh-color-item-list-hover-bg);\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: var(--dh-color-popover-bg);\n$contextmenu-color: var(--dh-color-text);\n$contextmenu-disabled-color: var(--dh-color-text-disabled);\n$contextmenu-keyboard-selected-bg: var(--dh-color-keyboard-selected-bg);\n$contextmenu-selected-bg: var(--dh-color-item-list-hover-bg);\n$contextmenu-selected-color: var(--dh-color-item-list-selected-fg);\n\n//hr\n$hr-border-color: var(--dh-color-hr);\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: $danger;\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n\n// This section of variables is not consumed directly by DH, but they need to be\n// defined for sass to compile _variables\n$table-dark-bg: $gray-800;\n$table-dark-accent-bg: var(--dh-color-highlight-hover);\n$table-dark-hover-bg: var(--dh-color-highlight-active);\n$table-dark-border-color: $gray-700;\n$popover-bg: var(--dh-color-tooltip-bg);\n$popover-border-color: var(--dh-color-overlay-modal-bg);\n$popover-header-bg: #000;\n$popover-arrow-outer-color: var(--dh-color-dropshadow);\n$custom-range-thumb-active-bg: var(--dh-color-accent-1100);\n","@import '@deephaven/components/scss/custom.scss';\n\n$toolbar-bg: $content-bg;\n\n.notebook-title {\n &.is-preview {\n font-style: italic;\n }\n}\n\n.notebook-session-not-connected {\n padding: $spacer-2;\n color: $gray-600;\n}\n\n.notebook-container {\n display: flex;\n flex-direction: column;\n\n .notebook-toolbar {\n display: flex;\n justify-content: flex-start;\n flex-direction: row;\n background: $toolbar-bg;\n border-bottom: 2px solid $background;\n padding: $spacer-1 $spacer-2;\n gap: $spacer-1;\n container-type: inline-size;\n overflow: hidden;\n\n .notebook-toolbar-actions {\n display: contents;\n }\n\n .btn-overflow {\n margin-left: auto;\n }\n\n .btn-play:hover,\n .btn-play-selected:hover {\n color: $green;\n }\n\n .icon-create-pq {\n transform: translate(0, -4px);\n }\n }\n}\n\n// Hide buttons one-by-one (right-to-left) as the toolbar narrows; the overflow\n// (⋮) menu keeps every action reachable.\n$toolbar-btn-width: 32px; // action button incl. gap\n$toolbar-overflow-btn-width: 32px; // always-visible overflow (⋮) button\n\n// Breakpoint at which a button hides: overflow button + $buttons kept visible.\n@function toolbar-breakpoint($buttons) {\n // stylelint-disable-next-line at-rule-no-unknown\n @return $toolbar-overflow-btn-width + ($buttons * $toolbar-btn-width);\n}\n\n@container (width < #{toolbar-breakpoint(3)}) {\n .notebook-toolbar .btn-save {\n display: none;\n }\n}\n\n@container (width < #{toolbar-breakpoint(2)}) {\n .notebook-toolbar .btn-run-selected {\n display: none;\n }\n}\n\n@container (width < #{toolbar-breakpoint(1)}) {\n .notebook-toolbar .btn-run {\n display: none;\n }\n}\n","@use 'sass:math';\n\n//Set of spacer variables from the spacer map\n$spacer-0: map-get($spacers, 0); //0\n$spacer-1: map-get($spacers, 1);\n$spacer-2: map-get($spacers, 2);\n$spacer-3: map-get($spacers, 3);\n$spacer-4: map-get($spacers, 4);\n$spacer-5: map-get($spacers, 5);\n\n//Marching Ants for golden layout dropzone and drag and drop\n//top bottom, left right.\n//create 4 background images that are 50% color 1, 50% color 2 using graidents, two veritical, two horizontal\n//size them to ant-size and thickness\n//position those images along the egdes and make top/bottom repeat-x and left/right repeat-y\n//then offest each of those background positions by ant-size in animation to make them march.\n$ant-size: 8px;\n$ant-thickness: 1px;\n\n@mixin ants-base($color-1: black, $color-2: white) {\n background-image: linear-gradient(to right, $color-2 50%, $color-1 50%),\n linear-gradient(to right, $color-2 50%, $color-1 50%),\n linear-gradient(to bottom, $color-2 50%, $color-1 50%),\n linear-gradient(to bottom, $color-2 50%, $color-1 50%);\n background-size:\n $ant-size $ant-thickness,\n $ant-size $ant-thickness,\n $ant-thickness $ant-size,\n $ant-thickness $ant-size;\n background-position:\n 0 top,\n 0 bottom,\n left 0,\n right 0;\n background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;\n animation: march 0.5s;\n animation-timing-function: linear;\n animation-iteration-count: infinite;\n}\n\n@mixin drag-stack($pseudo-element) {\n &::#{$pseudo-element} {\n content: ' ';\n background: $primary;\n box-shadow: $box-shadow;\n border-radius: $border-radius;\n position: absolute;\n height: 100%;\n width: 100%;\n @content;\n }\n}\n\n$focus-bg-transparency: 12%;\n$hover-bg-transparency: 14%;\n$active-bg-transparency: 28%;\n$exception-transparency: 28%;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetPanel.d.ts","sourceRoot":"","sources":["../../src/panels/WidgetPanel.tsx"],"names":[],"mappings":"AAUA,OAAc,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG;IAC9C,UAAU,EAAE,qBAAqB,CAAC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAoLF,QAAA,MAAM,YAAY,kEAAkD,CAAC;AAErE,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"WidgetPanel.d.ts","sourceRoot":"","sources":["../../src/panels/WidgetPanel.tsx"],"names":[],"mappings":"AAUA,OAAc,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG;IAC9C,UAAU,EAAE,qBAAqB,CAAC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAsLF,QAAA,MAAM,YAAY,kEAAkD,CAAC;AAErE,eAAe,YAAY,CAAC"}
@@ -99,6 +99,7 @@ class WidgetPanel extends PureComponent {
99
99
  showTabTooltip = _this$props2$showTabT === void 0 ? false : _this$props2$showTabT,
100
100
  renderTabTooltip = _this$props2.renderTabTooltip,
101
101
  onClearAllFilters = _this$props2.onClearAllFilters,
102
+ onErrorAction = _this$props2.onErrorAction,
102
103
  onHide = _this$props2.onHide,
103
104
  onFocus = _this$props2.onFocus,
104
105
  onBlur = _this$props2.onBlur,
@@ -125,6 +126,7 @@ class WidgetPanel extends PureComponent {
125
126
  glContainer: glContainer,
126
127
  glEventHub: glEventHub,
127
128
  onClearAllFilters: onClearAllFilters,
129
+ onErrorAction: onErrorAction,
128
130
  onHide: onHide,
129
131
  onFocus: onFocus,
130
132
  onBlur: onBlur,
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetPanel.js","names":["React","PureComponent","classNames","memoize","ContextActions","createXComponent","copyToClipboard","EMPTY_ARRAY","Panel","WidgetPanelTooltip","jsx","_jsx","jsxs","_jsxs","WidgetPanel","constructor","props","_this","this","_defineProperty","showTabTooltip","descriptor","undefined","_descriptor$displayTy","propsAdditionalActions","arguments","length","title","concat","displayType","type","group","groups","medium","order","action","handleCopyName","handleSessionClosed","bind","state","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","isPanelInactive","name","getErrorMessage","_this$props","errorMessage","_this$state","session","onSessionClose","setState","render","_this$props2","children","className","componentPanel","isLoaded","isLoading","glContainer","glEventHub","isDisconnected","isClonable","isRenamable","_this$props2$showTabT","renderTabTooltip","onClearAllFilters","onHide","onFocus","onBlur","onResize","onSessionOpen","onShow","onTabBlur","onTabFocus","onTabClicked","additionalActions","_this$state2","doRenderTabTooltip","getCachedRenderTabTooltip","getCachedActions","disconnected","inactive","XWidgetPanel"],"sources":["../../src/panels/WidgetPanel.tsx"],"sourcesContent":["import React, { PureComponent, type ReactElement } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n ContextActions,\n createXComponent,\n type ResolvableContextAction,\n} from '@deephaven/components';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { copyToClipboard, EMPTY_ARRAY } from '@deephaven/utils';\nimport Panel, { type CorePanelProps } from './CorePanel';\nimport WidgetPanelTooltip from './WidgetPanelTooltip';\nimport './WidgetPanel.scss';\nimport { type WidgetPanelDescriptor } from './WidgetPanelTypes';\n\nexport type WidgetPanelProps = CorePanelProps & {\n descriptor: WidgetPanelDescriptor;\n showTabTooltip?: boolean;\n isDisconnected?: boolean;\n};\n\ninterface WidgetPanelState {\n isClientDisconnected: boolean;\n isPanelDisconnected: boolean;\n isWidgetDisconnected: boolean;\n isWaitingForReconnect: boolean;\n isPanelInactive: boolean;\n}\n/**\n * Widget panel component that has a loading spinner and displays an error message when set\n */\nclass WidgetPanel extends PureComponent<WidgetPanelProps, WidgetPanelState> {\n static defaultProps = {\n className: '',\n isClonable: true,\n isDisconnected: false,\n isLoading: false,\n isLoaded: true,\n isRenamable: true,\n showTabTooltip: true,\n };\n\n constructor(props: WidgetPanelProps) {\n super(props);\n\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleCopyName = this.handleCopyName.bind(this);\n\n this.state = {\n isClientDisconnected: false,\n isPanelDisconnected: false,\n isWidgetDisconnected: false,\n isWaitingForReconnect: false,\n isPanelInactive: false,\n };\n }\n\n handleCopyName(): void {\n const { descriptor } = this.props;\n copyToClipboard(descriptor.name);\n }\n\n getErrorMessage(): string | undefined {\n const { descriptor, errorMessage } = this.props;\n const {\n isClientDisconnected,\n isPanelDisconnected,\n isWidgetDisconnected,\n isWaitingForReconnect,\n } = this.state;\n if (errorMessage != null && errorMessage !== '') {\n return `${errorMessage}`;\n }\n if (isClientDisconnected && isPanelDisconnected && isWaitingForReconnect) {\n return 'Disconnected from server.\\nCheck your internet connection.';\n }\n if (isClientDisconnected && isPanelDisconnected) {\n return 'Disconnected from server.';\n }\n if (isPanelDisconnected) {\n const { name, type } = descriptor;\n return `Variable \"${name}\" not set.\\n${type} does not exist yet.`;\n }\n if (isWidgetDisconnected) {\n return `${descriptor.name} is unavailable.`;\n }\n return undefined;\n }\n\n getCachedRenderTabTooltip = memoize(\n (showTabTooltip: boolean, descriptor: WidgetPanelDescriptor) =>\n showTabTooltip\n ? () => <WidgetPanelTooltip descriptor={descriptor} />\n : undefined\n );\n\n getCachedActions = memoize(\n (\n descriptor: WidgetPanelDescriptor,\n propsAdditionalActions: readonly ResolvableContextAction[] = EMPTY_ARRAY\n ) => [\n ...propsAdditionalActions,\n {\n title: `Copy ${descriptor.displayType ?? descriptor.type} Name`,\n group: ContextActions.groups.medium,\n order: 20,\n action: this.handleCopyName,\n },\n ]\n );\n\n handleSessionClosed(session: dh.IdeSession): void {\n const { onSessionClose } = this.props;\n // The session has closed and we won't be able to reconnect, as this widget isn't persisted\n this.setState({\n isPanelDisconnected: true,\n isWaitingForReconnect: false,\n });\n onSessionClose?.(session);\n }\n\n render(): ReactElement {\n const {\n children,\n className,\n componentPanel,\n descriptor,\n isLoaded,\n isLoading,\n glContainer,\n glEventHub,\n isDisconnected,\n isClonable,\n isRenamable,\n showTabTooltip = false,\n renderTabTooltip,\n\n onClearAllFilters,\n onHide,\n onFocus,\n onBlur,\n onResize,\n onSessionOpen,\n onShow,\n onTabBlur,\n onTabFocus,\n onTabClicked,\n\n additionalActions: propsAdditionalActions,\n } = this.props;\n\n const { isPanelDisconnected, isWidgetDisconnected, isPanelInactive } =\n this.state;\n const errorMessage = this.getErrorMessage();\n const doRenderTabTooltip =\n renderTabTooltip ??\n this.getCachedRenderTabTooltip(showTabTooltip, descriptor);\n\n const additionalActions = this.getCachedActions(\n descriptor,\n propsAdditionalActions\n );\n\n return (\n <Panel\n className={classNames(className, {\n disconnected:\n isPanelDisconnected || isWidgetDisconnected || isDisconnected,\n inactive: isPanelInactive,\n })}\n componentPanel={componentPanel}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={onClearAllFilters}\n onHide={onHide}\n onFocus={onFocus}\n onBlur={onBlur}\n onResize={onResize}\n onShow={onShow}\n onSessionClose={this.handleSessionClosed}\n onSessionOpen={onSessionOpen}\n onTabBlur={onTabBlur}\n onTabFocus={onTabFocus}\n onTabClicked={onTabClicked}\n renderTabTooltip={doRenderTabTooltip}\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n isClonable={isClonable}\n isRenamable={isRenamable}\n additionalActions={additionalActions}\n >\n {children}\n {isPanelInactive && <div className=\"fill-parent-absolute\" />}\n </Panel>\n );\n }\n}\n\nconst XWidgetPanel = createXComponent<WidgetPanelProps>(WidgetPanel);\n\nexport default XWidgetPanel;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,aAAa,QAA2B,OAAO;AAC/D,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,OAAO,MAAM,aAAa;AACjC,SACEC,cAAc,EACdC,gBAAgB,QAEX,uBAAuB;AAE9B,SAASC,eAAe,EAAEC,WAAW,QAAQ,kBAAkB;AAAC,OACzDC,KAAK;AAAA,OACLC,kBAAkB;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAiBzB;AACA;AACA;AACA,MAAMC,WAAW,SAASb,aAAa,CAAqC;EAW1Ec,WAAWA,CAACC,KAAuB,EAAE;IAAA,IAAAC,KAAA;IACnC,KAAK,CAACD,KAAK,CAAC;IAAAC,KAAA,GAAAC,IAAA;IAAAC,eAAA,oCA8CchB,OAAO,CACjC,CAACiB,cAAuB,EAAEC,UAAiC,KACzDD,cAAc,GACV,mBAAMT,IAAA,CAACF,kBAAkB;MAACY,UAAU,EAAEA;IAAW,CAAE,CAAC,GACpDC,SACR,CAAC;IAAAH,eAAA,2BAEkBhB,OAAO,CACxB,UACEkB,UAAiC;MAAA,IAAAE,qBAAA;MAAA,IACjCC,sBAA0D,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAH,SAAA,GAAAG,SAAA,MAAGlB,WAAW;MAAA,OACrE,CACH,GAAGiB,sBAAsB,EACzB;QACEG,KAAK,UAAAC,MAAA,EAAAL,qBAAA,GAAUF,UAAU,CAACQ,WAAW,cAAAN,qBAAA,cAAAA,qBAAA,GAAIF,UAAU,CAACS,IAAI,UAAO;QAC/DC,KAAK,EAAE3B,cAAc,CAAC4B,MAAM,CAACC,MAAM;QACnCC,KAAK,EAAE,EAAE;QACTC,MAAM,EAAElB,KAAI,CAACmB;MACf,CAAC,CACF;IAAA,CACH,CAAC;IAhEC,IAAI,CAACC,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACC,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACF,cAAc,GAAG,IAAI,CAACA,cAAc,CAACE,IAAI,CAAC,IAAI,CAAC;IAEpD,IAAI,CAACC,KAAK,GAAG;MACXC,oBAAoB,EAAE,KAAK;MAC3BC,mBAAmB,EAAE,KAAK;MAC1BC,oBAAoB,EAAE,KAAK;MAC3BC,qBAAqB,EAAE,KAAK;MAC5BC,eAAe,EAAE;IACnB,CAAC;EACH;EAEAR,cAAcA,CAAA,EAAS;IACrB,IAAQf,UAAU,GAAK,IAAI,CAACL,KAAK,CAAzBK,UAAU;IAClBf,eAAe,CAACe,UAAU,CAACwB,IAAI,CAAC;EAClC;EAEAC,eAAeA,CAAA,EAAuB;IACpC,IAAAC,WAAA,GAAqC,IAAI,CAAC/B,KAAK;MAAvCK,UAAU,GAAA0B,WAAA,CAAV1B,UAAU;MAAE2B,YAAY,GAAAD,WAAA,CAAZC,YAAY;IAChC,IAAAC,WAAA,GAKI,IAAI,CAACV,KAAK;MAJZC,oBAAoB,GAAAS,WAAA,CAApBT,oBAAoB;MACpBC,mBAAmB,GAAAQ,WAAA,CAAnBR,mBAAmB;MACnBC,oBAAoB,GAAAO,WAAA,CAApBP,oBAAoB;MACpBC,qBAAqB,GAAAM,WAAA,CAArBN,qBAAqB;IAEvB,IAAIK,YAAY,IAAI,IAAI,IAAIA,YAAY,KAAK,EAAE,EAAE;MAC/C,UAAApB,MAAA,CAAUoB,YAAY;IACxB;IACA,IAAIR,oBAAoB,IAAIC,mBAAmB,IAAIE,qBAAqB,EAAE;MACxE,OAAO,4DAA4D;IACrE;IACA,IAAIH,oBAAoB,IAAIC,mBAAmB,EAAE;MAC/C,OAAO,2BAA2B;IACpC;IACA,IAAIA,mBAAmB,EAAE;MACvB,IAAQI,IAAI,GAAWxB,UAAU,CAAzBwB,IAAI;QAAEf,IAAI,GAAKT,UAAU,CAAnBS,IAAI;MAClB,qBAAAF,MAAA,CAAoBiB,IAAI,mBAAAjB,MAAA,CAAeE,IAAI;IAC7C;IACA,IAAIY,oBAAoB,EAAE;MACxB,UAAAd,MAAA,CAAUP,UAAU,CAACwB,IAAI;IAC3B;IACA,OAAOvB,SAAS;EAClB;EAwBAe,mBAAmBA,CAACa,OAAsB,EAAQ;IAChD,IAAQC,cAAc,GAAK,IAAI,CAACnC,KAAK,CAA7BmC,cAAc;IACtB;IACA,IAAI,CAACC,QAAQ,CAAC;MACZX,mBAAmB,EAAE,IAAI;MACzBE,qBAAqB,EAAE;IACzB,CAAC,CAAC;IACFQ,cAAc,aAAdA,cAAc,eAAdA,cAAc,CAAGD,OAAO,CAAC;EAC3B;EAEAG,MAAMA,CAAA,EAAiB;IACrB,IAAAC,YAAA,GA2BI,IAAI,CAACtC,KAAK;MA1BZuC,QAAQ,GAAAD,YAAA,CAARC,QAAQ;MACRC,SAAS,GAAAF,YAAA,CAATE,SAAS;MACTC,cAAc,GAAAH,YAAA,CAAdG,cAAc;MACdpC,UAAU,GAAAiC,YAAA,CAAVjC,UAAU;MACVqC,QAAQ,GAAAJ,YAAA,CAARI,QAAQ;MACRC,SAAS,GAAAL,YAAA,CAATK,SAAS;MACTC,WAAW,GAAAN,YAAA,CAAXM,WAAW;MACXC,UAAU,GAAAP,YAAA,CAAVO,UAAU;MACVC,cAAc,GAAAR,YAAA,CAAdQ,cAAc;MACdC,UAAU,GAAAT,YAAA,CAAVS,UAAU;MACVC,WAAW,GAAAV,YAAA,CAAXU,WAAW;MAAAC,qBAAA,GAAAX,YAAA,CACXlC,cAAc;MAAdA,cAAc,GAAA6C,qBAAA,cAAG,KAAK,GAAAA,qBAAA;MACtBC,gBAAgB,GAAAZ,YAAA,CAAhBY,gBAAgB;MAEhBC,iBAAiB,GAAAb,YAAA,CAAjBa,iBAAiB;MACjBC,MAAM,GAAAd,YAAA,CAANc,MAAM;MACNC,OAAO,GAAAf,YAAA,CAAPe,OAAO;MACPC,MAAM,GAAAhB,YAAA,CAANgB,MAAM;MACNC,QAAQ,GAAAjB,YAAA,CAARiB,QAAQ;MACRC,aAAa,GAAAlB,YAAA,CAAbkB,aAAa;MACbC,MAAM,GAAAnB,YAAA,CAANmB,MAAM;MACNC,SAAS,GAAApB,YAAA,CAAToB,SAAS;MACTC,UAAU,GAAArB,YAAA,CAAVqB,UAAU;MACVC,YAAY,GAAAtB,YAAA,CAAZsB,YAAY;MAEOpD,sBAAsB,GAAA8B,YAAA,CAAzCuB,iBAAiB;IAGnB,IAAAC,YAAA,GACE,IAAI,CAACvC,KAAK;MADJE,mBAAmB,GAAAqC,YAAA,CAAnBrC,mBAAmB;MAAEC,oBAAoB,GAAAoC,YAAA,CAApBpC,oBAAoB;MAAEE,eAAe,GAAAkC,YAAA,CAAflC,eAAe;IAElE,IAAMI,YAAY,GAAG,IAAI,CAACF,eAAe,CAAC,CAAC;IAC3C,IAAMiC,kBAAkB,GACtBb,gBAAgB,aAAhBA,gBAAgB,cAAhBA,gBAAgB,GAChB,IAAI,CAACc,yBAAyB,CAAC5D,cAAc,EAAEC,UAAU,CAAC;IAE5D,IAAMwD,iBAAiB,GAAG,IAAI,CAACI,gBAAgB,CAC7C5D,UAAU,EACVG,sBACF,CAAC;IAED,oBACEX,KAAA,CAACL,KAAK;MACJgD,SAAS,EAAEtD,UAAU,CAACsD,SAAS,EAAE;QAC/B0B,YAAY,EACVzC,mBAAmB,IAAIC,oBAAoB,IAAIoB,cAAc;QAC/DqB,QAAQ,EAAEvC;MACZ,CAAC,CAAE;MACHa,cAAc,EAAEA,cAAe;MAC/BG,WAAW,EAAEA,WAAY;MACzBC,UAAU,EAAEA,UAAW;MACvBM,iBAAiB,EAAEA,iBAAkB;MACrCC,MAAM,EAAEA,MAAO;MACfC,OAAO,EAAEA,OAAQ;MACjBC,MAAM,EAAEA,MAAO;MACfC,QAAQ,EAAEA,QAAS;MACnBE,MAAM,EAAEA,MAAO;MACftB,cAAc,EAAE,IAAI,CAACd,mBAAoB;MACzCmC,aAAa,EAAEA,aAAc;MAC7BE,SAAS,EAAEA,SAAU;MACrBC,UAAU,EAAEA,UAAW;MACvBC,YAAY,EAAEA,YAAa;MAC3BV,gBAAgB,EAAEa,kBAAmB;MACrC/B,YAAY,EAAEA,YAAa;MAC3BU,QAAQ,EAAEA,QAAS;MACnBC,SAAS,EAAEA,SAAU;MACrBI,UAAU,EAAEA,UAAW;MACvBC,WAAW,EAAEA,WAAY;MACzBa,iBAAiB,EAAEA,iBAAkB;MAAAtB,QAAA,GAEpCA,QAAQ,EACRX,eAAe,iBAAIjC,IAAA;QAAK6C,SAAS,EAAC;MAAsB,CAAE,CAAC;IAAA,CACvD,CAAC;EAEZ;AACF;AAACrC,eAAA,CAtKKL,WAAW,kBACO;EACpB0C,SAAS,EAAE,EAAE;EACbO,UAAU,EAAE,IAAI;EAChBD,cAAc,EAAE,KAAK;EACrBH,SAAS,EAAE,KAAK;EAChBD,QAAQ,EAAE,IAAI;EACdM,WAAW,EAAE,IAAI;EACjB5C,cAAc,EAAE;AAClB,CAAC;AA+JH,IAAMgE,YAAY,GAAG/E,gBAAgB,CAAmBS,WAAW,CAAC;AAEpE,eAAesE,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"WidgetPanel.js","names":["React","PureComponent","classNames","memoize","ContextActions","createXComponent","copyToClipboard","EMPTY_ARRAY","Panel","WidgetPanelTooltip","jsx","_jsx","jsxs","_jsxs","WidgetPanel","constructor","props","_this","this","_defineProperty","showTabTooltip","descriptor","undefined","_descriptor$displayTy","propsAdditionalActions","arguments","length","title","concat","displayType","type","group","groups","medium","order","action","handleCopyName","handleSessionClosed","bind","state","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","isPanelInactive","name","getErrorMessage","_this$props","errorMessage","_this$state","session","onSessionClose","setState","render","_this$props2","children","className","componentPanel","isLoaded","isLoading","glContainer","glEventHub","isDisconnected","isClonable","isRenamable","_this$props2$showTabT","renderTabTooltip","onClearAllFilters","onErrorAction","onHide","onFocus","onBlur","onResize","onSessionOpen","onShow","onTabBlur","onTabFocus","onTabClicked","additionalActions","_this$state2","doRenderTabTooltip","getCachedRenderTabTooltip","getCachedActions","disconnected","inactive","XWidgetPanel"],"sources":["../../src/panels/WidgetPanel.tsx"],"sourcesContent":["import React, { PureComponent, type ReactElement } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n ContextActions,\n createXComponent,\n type ResolvableContextAction,\n} from '@deephaven/components';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { copyToClipboard, EMPTY_ARRAY } from '@deephaven/utils';\nimport Panel, { type CorePanelProps } from './CorePanel';\nimport WidgetPanelTooltip from './WidgetPanelTooltip';\nimport './WidgetPanel.scss';\nimport { type WidgetPanelDescriptor } from './WidgetPanelTypes';\n\nexport type WidgetPanelProps = CorePanelProps & {\n descriptor: WidgetPanelDescriptor;\n showTabTooltip?: boolean;\n isDisconnected?: boolean;\n};\n\ninterface WidgetPanelState {\n isClientDisconnected: boolean;\n isPanelDisconnected: boolean;\n isWidgetDisconnected: boolean;\n isWaitingForReconnect: boolean;\n isPanelInactive: boolean;\n}\n/**\n * Widget panel component that has a loading spinner and displays an error message when set\n */\nclass WidgetPanel extends PureComponent<WidgetPanelProps, WidgetPanelState> {\n static defaultProps = {\n className: '',\n isClonable: true,\n isDisconnected: false,\n isLoading: false,\n isLoaded: true,\n isRenamable: true,\n showTabTooltip: true,\n };\n\n constructor(props: WidgetPanelProps) {\n super(props);\n\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleCopyName = this.handleCopyName.bind(this);\n\n this.state = {\n isClientDisconnected: false,\n isPanelDisconnected: false,\n isWidgetDisconnected: false,\n isWaitingForReconnect: false,\n isPanelInactive: false,\n };\n }\n\n handleCopyName(): void {\n const { descriptor } = this.props;\n copyToClipboard(descriptor.name);\n }\n\n getErrorMessage(): string | undefined {\n const { descriptor, errorMessage } = this.props;\n const {\n isClientDisconnected,\n isPanelDisconnected,\n isWidgetDisconnected,\n isWaitingForReconnect,\n } = this.state;\n if (errorMessage != null && errorMessage !== '') {\n return `${errorMessage}`;\n }\n if (isClientDisconnected && isPanelDisconnected && isWaitingForReconnect) {\n return 'Disconnected from server.\\nCheck your internet connection.';\n }\n if (isClientDisconnected && isPanelDisconnected) {\n return 'Disconnected from server.';\n }\n if (isPanelDisconnected) {\n const { name, type } = descriptor;\n return `Variable \"${name}\" not set.\\n${type} does not exist yet.`;\n }\n if (isWidgetDisconnected) {\n return `${descriptor.name} is unavailable.`;\n }\n return undefined;\n }\n\n getCachedRenderTabTooltip = memoize(\n (showTabTooltip: boolean, descriptor: WidgetPanelDescriptor) =>\n showTabTooltip\n ? () => <WidgetPanelTooltip descriptor={descriptor} />\n : undefined\n );\n\n getCachedActions = memoize(\n (\n descriptor: WidgetPanelDescriptor,\n propsAdditionalActions: readonly ResolvableContextAction[] = EMPTY_ARRAY\n ) => [\n ...propsAdditionalActions,\n {\n title: `Copy ${descriptor.displayType ?? descriptor.type} Name`,\n group: ContextActions.groups.medium,\n order: 20,\n action: this.handleCopyName,\n },\n ]\n );\n\n handleSessionClosed(session: dh.IdeSession): void {\n const { onSessionClose } = this.props;\n // The session has closed and we won't be able to reconnect, as this widget isn't persisted\n this.setState({\n isPanelDisconnected: true,\n isWaitingForReconnect: false,\n });\n onSessionClose?.(session);\n }\n\n render(): ReactElement {\n const {\n children,\n className,\n componentPanel,\n descriptor,\n isLoaded,\n isLoading,\n glContainer,\n glEventHub,\n isDisconnected,\n isClonable,\n isRenamable,\n showTabTooltip = false,\n renderTabTooltip,\n\n onClearAllFilters,\n onErrorAction,\n onHide,\n onFocus,\n onBlur,\n onResize,\n onSessionOpen,\n onShow,\n onTabBlur,\n onTabFocus,\n onTabClicked,\n\n additionalActions: propsAdditionalActions,\n } = this.props;\n\n const { isPanelDisconnected, isWidgetDisconnected, isPanelInactive } =\n this.state;\n const errorMessage = this.getErrorMessage();\n const doRenderTabTooltip =\n renderTabTooltip ??\n this.getCachedRenderTabTooltip(showTabTooltip, descriptor);\n\n const additionalActions = this.getCachedActions(\n descriptor,\n propsAdditionalActions\n );\n\n return (\n <Panel\n className={classNames(className, {\n disconnected:\n isPanelDisconnected || isWidgetDisconnected || isDisconnected,\n inactive: isPanelInactive,\n })}\n componentPanel={componentPanel}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={onClearAllFilters}\n onErrorAction={onErrorAction}\n onHide={onHide}\n onFocus={onFocus}\n onBlur={onBlur}\n onResize={onResize}\n onShow={onShow}\n onSessionClose={this.handleSessionClosed}\n onSessionOpen={onSessionOpen}\n onTabBlur={onTabBlur}\n onTabFocus={onTabFocus}\n onTabClicked={onTabClicked}\n renderTabTooltip={doRenderTabTooltip}\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n isClonable={isClonable}\n isRenamable={isRenamable}\n additionalActions={additionalActions}\n >\n {children}\n {isPanelInactive && <div className=\"fill-parent-absolute\" />}\n </Panel>\n );\n }\n}\n\nconst XWidgetPanel = createXComponent<WidgetPanelProps>(WidgetPanel);\n\nexport default XWidgetPanel;\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.26.1",
3
+ "version": "1.27.1",
4
4
  "description": "Deephaven Dashboard Core Plugins",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -22,22 +22,22 @@
22
22
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
23
23
  },
24
24
  "dependencies": {
25
- "@deephaven/chart": "^1.26.0",
26
- "@deephaven/components": "^1.22.1",
27
- "@deephaven/console": "^1.26.0",
28
- "@deephaven/dashboard": "^1.24.0",
29
- "@deephaven/file-explorer": "^1.22.1",
25
+ "@deephaven/chart": "^1.27.0",
26
+ "@deephaven/components": "^1.27.0",
27
+ "@deephaven/console": "^1.27.0",
28
+ "@deephaven/dashboard": "^1.27.0",
29
+ "@deephaven/file-explorer": "^1.27.0",
30
30
  "@deephaven/filters": "^1.1.0",
31
- "@deephaven/golden-layout": "^1.24.0",
31
+ "@deephaven/golden-layout": "^1.27.0",
32
32
  "@deephaven/grid": "^1.25.0",
33
33
  "@deephaven/icons": "^1.2.0",
34
- "@deephaven/iris-grid": "^1.26.1",
35
- "@deephaven/jsapi-bootstrap": "^1.23.0",
36
- "@deephaven/jsapi-components": "^1.26.1",
34
+ "@deephaven/iris-grid": "^1.27.0",
35
+ "@deephaven/jsapi-bootstrap": "^1.27.0",
36
+ "@deephaven/jsapi-components": "^1.27.0",
37
37
  "@deephaven/jsapi-types": "^1.0.0-dev0.40.4",
38
38
  "@deephaven/jsapi-utils": "^1.23.0",
39
39
  "@deephaven/log": "^1.8.0",
40
- "@deephaven/plugin": "^1.26.1",
40
+ "@deephaven/plugin": "^1.27.0",
41
41
  "@deephaven/react-hooks": "^1.21.1",
42
42
  "@deephaven/redux": "^1.23.0",
43
43
  "@deephaven/storage": "^1.8.0",
@@ -79,5 +79,5 @@
79
79
  "publishConfig": {
80
80
  "access": "public"
81
81
  },
82
- "gitHead": "9d0c4b05d92671e7690be73f7b7784656d75e0c5"
82
+ "gitHead": "b59031cd25be9b9b9fa5c7caff5612aaf99b6339"
83
83
  }