@deephaven/dashboard-core-plugins 0.85.29 → 0.85.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/FilterEvents.d.ts +86 -0
- package/dist/FilterEvents.d.ts.map +1 -0
- package/dist/FilterEvents.js +78 -0
- package/dist/FilterEvents.js.map +1 -0
- package/dist/FilterPlugin.d.ts +0 -9
- package/dist/FilterPlugin.d.ts.map +1 -1
- package/dist/FilterPlugin.js +37 -24
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridWidgetPlugin.d.ts.map +1 -1
- package/dist/GridWidgetPlugin.js +23 -4
- package/dist/GridWidgetPlugin.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/linker/ColumnSelectionValidator.d.ts +3 -3
- package/dist/linker/ColumnSelectionValidator.d.ts.map +1 -1
- package/dist/linker/ColumnSelectionValidator.js.map +1 -1
- package/dist/linker/Linker.d.ts +17 -9
- package/dist/linker/Linker.d.ts.map +1 -1
- package/dist/linker/Linker.js +147 -81
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerEvent.d.ts +52 -0
- package/dist/linker/LinkerEvent.d.ts.map +1 -0
- package/dist/linker/LinkerEvent.js +28 -0
- package/dist/linker/LinkerEvent.js.map +1 -0
- package/dist/linker/LinkerOverlayContent.d.ts +2 -0
- package/dist/linker/LinkerOverlayContent.d.ts.map +1 -1
- package/dist/linker/LinkerOverlayContent.js +13 -3
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.d.ts +12 -7
- package/dist/linker/LinkerUtils.d.ts.map +1 -1
- package/dist/linker/LinkerUtils.js +8 -30
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +11 -3
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +24 -6
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts +3 -3
- package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +19 -8
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.d.ts +1 -1
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.d.ts +1 -1
- package/dist/panels/InputFilterPanel.d.ts.map +1 -1
- package/dist/panels/InputFilterPanel.js +8 -4
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +5 -5
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +28 -9
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTypes.d.ts +22 -0
- package/dist/panels/WidgetPanelTypes.d.ts.map +1 -0
- package/dist/panels/WidgetPanelTypes.js +2 -0
- package/dist/panels/WidgetPanelTypes.js.map +1 -0
- package/dist/panels/index.d.ts +1 -0
- package/dist/panels/index.d.ts.map +1 -1
- package/dist/panels/index.js +1 -0
- package/dist/panels/index.js.map +1 -1
- package/dist/redux/selectors.d.ts +6 -6
- package/dist/redux/selectors.d.ts.map +1 -1
- package/dist/redux/selectors.js.map +1 -1
- package/dist/useDashboardColumnFilters.d.ts +19 -0
- package/dist/useDashboardColumnFilters.d.ts.map +1 -0
- package/dist/useDashboardColumnFilters.js +61 -0
- package/dist/useDashboardColumnFilters.js.map +1 -0
- package/dist/useGridLinker.d.ts +4 -0
- package/dist/useGridLinker.d.ts.map +1 -0
- package/dist/useGridLinker.js +107 -0
- package/dist/useGridLinker.js.map +1 -0
- package/package.json +19 -19
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import { PanelComponent } from '@deephaven/dashboard';
|
|
1
|
+
import { type PanelComponent } from '@deephaven/dashboard';
|
|
2
2
|
import { TypeValue as FilterTypeValue } from '@deephaven/filters';
|
|
3
3
|
export type LinkType = 'invalid' | 'filterSource' | 'tableLink' | 'chartLink';
|
|
4
4
|
export type LinkPoint = {
|
|
5
|
-
panelId: string
|
|
6
|
-
panelComponent?: string | null;
|
|
5
|
+
panelId: string;
|
|
7
6
|
columnName: string;
|
|
8
7
|
columnType: string | null;
|
|
9
8
|
};
|
|
9
|
+
export type LinkPointOptions = {
|
|
10
|
+
/**
|
|
11
|
+
* The type of link this point is associated with.
|
|
12
|
+
* If this point is the end point of a link, this will set the type of the link.
|
|
13
|
+
*/
|
|
14
|
+
type: LinkType;
|
|
15
|
+
};
|
|
10
16
|
export type Link = {
|
|
11
17
|
start: LinkPoint;
|
|
12
18
|
end?: LinkPoint;
|
|
@@ -27,7 +33,7 @@ export type LinkDataValue<T = unknown> = {
|
|
|
27
33
|
startColumnIndex: number;
|
|
28
34
|
};
|
|
29
35
|
export type LinkFilterMapValue<T = unknown> = {
|
|
30
|
-
columnType: string;
|
|
36
|
+
columnType: string | null;
|
|
31
37
|
filterList: LinkDataValue<T>[];
|
|
32
38
|
};
|
|
33
39
|
export type LinkFilterMap<T = unknown> = Map<string, LinkFilterMapValue<T>>;
|
|
@@ -46,7 +52,6 @@ export declare function isLinkableColumn(column: LinkColumn): boolean;
|
|
|
46
52
|
* Collection of utility functions for use with the Linker
|
|
47
53
|
*/
|
|
48
54
|
declare class LinkerUtils {
|
|
49
|
-
static ALLOWED_LINKS: Map<string, string[]>;
|
|
50
55
|
/**
|
|
51
56
|
* Retrieve the type of link given parameters.
|
|
52
57
|
* @param start The link start
|
|
@@ -54,7 +59,7 @@ declare class LinkerUtils {
|
|
|
54
59
|
* @param isolatedLinkerPanelId Whether there's an isolated linker
|
|
55
60
|
* @returns The type of link, or invalid if there's an error
|
|
56
61
|
*/
|
|
57
|
-
static
|
|
62
|
+
static isLinkValid(start: LinkPoint, end: LinkPoint, isolatedLinkerPanelId?: string | string[]): boolean;
|
|
58
63
|
/**
|
|
59
64
|
* Find column matching the link point
|
|
60
65
|
* @param columns Columns to search in
|
|
@@ -63,7 +68,7 @@ declare class LinkerUtils {
|
|
|
63
68
|
* @param linkPoint.columnType Column type to find
|
|
64
69
|
* @returns Column matching the link point, undefined if not found
|
|
65
70
|
*/
|
|
66
|
-
static findColumn(columns: LinkColumn[], { columnName, columnType }: LinkPoint): LinkColumn | undefined;
|
|
71
|
+
static findColumn(columns: readonly LinkColumn[], { columnName, columnType }: LinkPoint): LinkColumn | undefined;
|
|
67
72
|
/**
|
|
68
73
|
* Clone links for a given panel id
|
|
69
74
|
* @param links Original links array
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerUtils.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerUtils.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"LinkerUtils.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGlE,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,GAAG,WAAW,CAAC;AAE9E,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI;IACvC,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,CAAC;IACT,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,OAAO,IAAI;IAC5C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAG5E,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,sBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,gBAAgB,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG;IAC9C,YAAY,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC/D,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,GACpB,KAAK,IAAI,iBAAiB,CAG5B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,KAAK,IAAI,aAAa,CAO7E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAM5D;AAID;;GAEG;AACH,cAAM,WAAW;IACf;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAChB,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,SAAS,EACd,qBAAqB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GACxC,OAAO;IAiCV;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CACf,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,SAAS,GACpC,UAAU,GAAG,SAAS;IAMzB;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CACvB,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,MAAM,GACd,IAAI,EAAE;CAmBV;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -4,10 +4,11 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
|
|
|
4
4
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
5
5
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
6
6
|
import { nanoid } from 'nanoid';
|
|
7
|
-
import { LayoutUtils } from '@deephaven/dashboard';
|
|
8
7
|
import { TableUtils } from '@deephaven/jsapi-utils';
|
|
9
8
|
import Log from '@deephaven/log';
|
|
10
|
-
|
|
9
|
+
|
|
10
|
+
// [x,y] screen coordinates used by the Linker
|
|
11
|
+
|
|
11
12
|
export function isLinkableFromPanel(panel) {
|
|
12
13
|
var p = panel;
|
|
13
14
|
return typeof p.getCoordinateForColumn === 'function';
|
|
@@ -33,23 +34,13 @@ class LinkerUtils {
|
|
|
33
34
|
* @param isolatedLinkerPanelId Whether there's an isolated linker
|
|
34
35
|
* @returns The type of link, or invalid if there's an error
|
|
35
36
|
*/
|
|
36
|
-
static
|
|
37
|
-
var _LinkerUtils$ALLOWED_;
|
|
37
|
+
static isLinkValid(start, end, isolatedLinkerPanelId) {
|
|
38
38
|
// Panel compatibility checks:
|
|
39
39
|
// Link ends should point to different non-null panelIds
|
|
40
40
|
// For isolated linker one of the panels should match isolated panel id
|
|
41
|
-
if (
|
|
41
|
+
if (start.panelId == null || end.panelId == null || start.panelId === end.panelId || isolatedLinkerPanelId != null && isolatedLinkerPanelId !== start.panelId && isolatedLinkerPanelId !== end.panelId) {
|
|
42
42
|
log.debug2('Incompatible panel ids', start, end, isolatedLinkerPanelId);
|
|
43
|
-
return
|
|
44
|
-
}
|
|
45
|
-
if (start.panelComponent == null || end.panelComponent == null) {
|
|
46
|
-
log.error('PanelComponent should not be null', start, end);
|
|
47
|
-
return 'invalid';
|
|
48
|
-
}
|
|
49
|
-
var isCompatibleComponent = (_LinkerUtils$ALLOWED_ = LinkerUtils.ALLOWED_LINKS.get(start.panelComponent)) === null || _LinkerUtils$ALLOWED_ === void 0 ? void 0 : _LinkerUtils$ALLOWED_.includes(end.panelComponent);
|
|
50
|
-
if (isCompatibleComponent === undefined || !isCompatibleComponent) {
|
|
51
|
-
log.debug2('Incompatible panel components', start, end);
|
|
52
|
-
return 'invalid';
|
|
43
|
+
return false;
|
|
53
44
|
}
|
|
54
45
|
|
|
55
46
|
// Check column type compatibility
|
|
@@ -64,21 +55,9 @@ class LinkerUtils {
|
|
|
64
55
|
var isCompatibleType = endColumnType === null || TableUtils.isCompatibleType(startColumnType, endColumnType);
|
|
65
56
|
if (!isCompatibleType) {
|
|
66
57
|
log.debug2('Incompatible type', startColumnType, endColumnType);
|
|
67
|
-
return
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// If all checks pass, link type is determined by the target panel component
|
|
71
|
-
switch (end.panelComponent) {
|
|
72
|
-
case LayoutUtils.getComponentName(ChartPanel):
|
|
73
|
-
return 'chartLink';
|
|
74
|
-
case LayoutUtils.getComponentName(IrisGridPanel):
|
|
75
|
-
return 'tableLink';
|
|
76
|
-
case LayoutUtils.getComponentName(DropdownFilterPanel):
|
|
77
|
-
return 'filterSource';
|
|
78
|
-
default:
|
|
58
|
+
return false;
|
|
79
59
|
}
|
|
80
|
-
|
|
81
|
-
return 'invalid';
|
|
60
|
+
return true;
|
|
82
61
|
}
|
|
83
62
|
|
|
84
63
|
/**
|
|
@@ -133,6 +112,5 @@ class LinkerUtils {
|
|
|
133
112
|
return clonedLinks;
|
|
134
113
|
}
|
|
135
114
|
}
|
|
136
|
-
_defineProperty(LinkerUtils, "ALLOWED_LINKS", new Map([[LayoutUtils.getComponentName(IrisGridPanel), [LayoutUtils.getComponentName(IrisGridPanel), LayoutUtils.getComponentName(ChartPanel), LayoutUtils.getComponentName(DropdownFilterPanel)]]]));
|
|
137
115
|
export default LinkerUtils;
|
|
138
116
|
//# sourceMappingURL=LinkerUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerUtils.js","names":["nanoid","LayoutUtils","TableUtils","Log","ChartPanel","IrisGridPanel","DropdownFilterPanel","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","isLinkableColumn","column","description","startsWith","log","module","LinkerUtils","getLinkType","start","end","isolatedLinkerPanelId","_LinkerUtils$ALLOWED_","panelId","debug2","panelComponent","error","isCompatibleComponent","ALLOWED_LINKS","get","includes","undefined","columnType","startColumnType","endColumnType","isCompatibleType","getComponentName","findColumn","columns","_ref","columnName","find","_ref2","name","type","cloneLinksForPanel","links","cloneId","clonedLinks","forEach","link","_link$end","push","_objectSpread","id","_defineProperty","Map"],"sources":["../../src/linker/LinkerUtils.ts"],"sourcesContent":["import { nanoid } from 'nanoid';\nimport { LayoutUtils, PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { ChartPanel, IrisGridPanel, DropdownFilterPanel } from '../panels';\n\nexport type LinkType = 'invalid' | 'filterSource' | 'tableLink' | 'chartLink';\n\nexport type LinkPoint = {\n panelId: string | string[];\n panelComponent?: string | null;\n columnName: string;\n columnType: string | null;\n};\n\nexport type Link = {\n start: LinkPoint;\n end?: LinkPoint;\n id: string;\n isReversed?: boolean;\n type: LinkType;\n operator?: FilterTypeValue;\n};\n\nexport type LinkColumn = {\n name: string;\n type: string | null;\n description?: string | null;\n};\n\nexport type LinkDataValue<T = unknown> = {\n operator: FilterTypeValue;\n text: string;\n value: T;\n startColumnIndex: number;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string;\n filterList: LinkDataValue<T>[];\n};\n\nexport type LinkFilterMap<T = unknown> = Map<string, LinkFilterMapValue<T>>;\n\n// [x,y] screen coordinates used by the Linker\nexport type LinkerCoordinate = [number, number];\n\nexport type LinkableFromPanel = PanelComponent & {\n getCoordinateForColumn: (name: string) => LinkerCoordinate;\n};\n\nexport type LinkablePanel = LinkableFromPanel & {\n setFilterMap: (filterMap: LinkFilterMap) => void;\n unsetFilterValue: (name: string, type: string | null) => void;\n};\n\nexport function isLinkableFromPanel(\n panel: PanelComponent\n): panel is LinkableFromPanel {\n const p = panel as LinkableFromPanel;\n return typeof p.getCoordinateForColumn === 'function';\n}\n\nexport function isLinkablePanel(panel: PanelComponent): panel is LinkablePanel {\n const p = panel as LinkablePanel;\n return (\n isLinkableFromPanel(panel) &&\n typeof p.setFilterMap === 'function' &&\n typeof p.unsetFilterValue === 'function'\n );\n}\n\nexport function isLinkableColumn(column: LinkColumn): boolean {\n // TODO: core/#3358 Use preview/original type property instead of checking description\n return (\n column.description == null ||\n !column.description.startsWith('Preview of type: ')\n );\n}\n\nconst log = Log.module('LinkerUtils');\n\n/**\n * Collection of utility functions for use with the Linker\n */\nclass LinkerUtils {\n static ALLOWED_LINKS = new Map([\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n LayoutUtils.getComponentName(ChartPanel),\n LayoutUtils.getComponentName(DropdownFilterPanel),\n ],\n ],\n ]);\n\n /**\n * Retrieve the type of link given parameters.\n * @param start The link start\n * @param end The link end\n * @param isolatedLinkerPanelId Whether there's an isolated linker\n * @returns The type of link, or invalid if there's an error\n */\n static getLinkType(\n start?: LinkPoint,\n end?: LinkPoint,\n isolatedLinkerPanelId?: string | string[]\n ): LinkType {\n // Panel compatibility checks:\n // Link ends should point to different non-null panelIds\n // For isolated linker one of the panels should match isolated panel id\n if (\n start?.panelId == null ||\n end?.panelId == null ||\n start.panelId === end.panelId ||\n (isolatedLinkerPanelId != null &&\n isolatedLinkerPanelId !== start.panelId &&\n isolatedLinkerPanelId !== end.panelId)\n ) {\n log.debug2('Incompatible panel ids', start, end, isolatedLinkerPanelId);\n return 'invalid';\n }\n\n if (start.panelComponent == null || end.panelComponent == null) {\n log.error('PanelComponent should not be null', start, end);\n return 'invalid';\n }\n\n const isCompatibleComponent = LinkerUtils.ALLOWED_LINKS.get(\n start.panelComponent\n )?.includes(end.panelComponent);\n\n if (isCompatibleComponent === undefined || !isCompatibleComponent) {\n log.debug2('Incompatible panel components', start, end);\n return 'invalid';\n }\n\n // Check column type compatibility\n const { columnType: startColumnType } = start;\n const { columnType: endColumnType } = end;\n\n // Null columnType in ending link point allows linking to any type\n const isCompatibleType =\n endColumnType === null ||\n TableUtils.isCompatibleType(startColumnType, endColumnType);\n\n if (!isCompatibleType) {\n log.debug2('Incompatible type', startColumnType, endColumnType);\n return 'invalid';\n }\n\n // If all checks pass, link type is determined by the target panel component\n switch (end.panelComponent) {\n case LayoutUtils.getComponentName(ChartPanel):\n return 'chartLink';\n case LayoutUtils.getComponentName(IrisGridPanel):\n return 'tableLink';\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n return 'filterSource';\n default:\n }\n\n log.debug2('Incompatible target panel component', end.panelComponent);\n return 'invalid';\n }\n\n /**\n * Find column matching the link point\n * @param columns Columns to search in\n * @param linkPoint Link point to find column for\n * @param linkPoint.columnName Column name to find\n * @param linkPoint.columnType Column type to find\n * @returns Column matching the link point, undefined if not found\n */\n static findColumn(\n columns: LinkColumn[],\n { columnName, columnType }: LinkPoint\n ): LinkColumn | undefined {\n return columns.find(\n ({ name, type }) => name === columnName && type === columnType\n );\n }\n\n /**\n * Clone links for a given panel id\n * @param links Original links array\n * @param panelId Original panel id\n * @param cloneId Cloned panel id\n * @returns Cloned links array or empty array if no new links added\n */\n static cloneLinksForPanel(\n links: Link[],\n panelId: string | string[],\n cloneId: string\n ): Link[] {\n const clonedLinks: Link[] = [];\n links.forEach(link => {\n if (link.start.panelId === panelId && link.type !== 'filterSource') {\n clonedLinks.push({\n ...link,\n id: nanoid(),\n start: { ...link.start, panelId: cloneId },\n });\n } else if (link.end?.panelId === panelId) {\n clonedLinks.push({\n ...link,\n id: nanoid(),\n end: { ...link.end, panelId: cloneId },\n });\n }\n });\n return clonedLinks;\n }\n}\n\nexport default LinkerUtils;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LinkerUtils.js","names":["nanoid","TableUtils","Log","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","isLinkableColumn","column","description","startsWith","log","module","LinkerUtils","isLinkValid","start","end","isolatedLinkerPanelId","panelId","debug2","columnType","startColumnType","endColumnType","isCompatibleType","findColumn","columns","_ref","columnName","find","_ref2","name","type","cloneLinksForPanel","links","cloneId","clonedLinks","forEach","link","_link$end","push","_objectSpread","id"],"sources":["../../src/linker/LinkerUtils.ts"],"sourcesContent":["import { nanoid } from 'nanoid';\nimport { type PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport Log from '@deephaven/log';\n\nexport type LinkType = 'invalid' | 'filterSource' | 'tableLink' | 'chartLink';\n\nexport type LinkPoint = {\n panelId: string;\n columnName: string;\n columnType: string | null;\n};\n\nexport type LinkPointOptions = {\n /**\n * The type of link this point is associated with.\n * If this point is the end point of a link, this will set the type of the link.\n */\n type: LinkType;\n};\n\nexport type Link = {\n start: LinkPoint;\n end?: LinkPoint;\n id: string;\n isReversed?: boolean;\n type: LinkType;\n operator?: FilterTypeValue;\n};\n\nexport type LinkColumn = {\n name: string;\n type: string | null;\n description?: string | null;\n};\n\nexport type LinkDataValue<T = unknown> = {\n operator: FilterTypeValue;\n text: string;\n value: T;\n startColumnIndex: number;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string | null;\n filterList: LinkDataValue<T>[];\n};\n\nexport type LinkFilterMap<T = unknown> = Map<string, LinkFilterMapValue<T>>;\n\n// [x,y] screen coordinates used by the Linker\nexport type LinkerCoordinate = [number, number];\n\nexport type LinkableFromPanel = PanelComponent & {\n getCoordinateForColumn: (name: string) => LinkerCoordinate;\n};\n\nexport type LinkablePanel = LinkableFromPanel & {\n setFilterMap: (filterMap: LinkFilterMap) => void;\n unsetFilterValue: (name: string, type: string | null) => void;\n};\n\nexport function isLinkableFromPanel(\n panel: PanelComponent\n): panel is LinkableFromPanel {\n const p = panel as LinkableFromPanel;\n return typeof p.getCoordinateForColumn === 'function';\n}\n\nexport function isLinkablePanel(panel: PanelComponent): panel is LinkablePanel {\n const p = panel as LinkablePanel;\n return (\n isLinkableFromPanel(panel) &&\n typeof p.setFilterMap === 'function' &&\n typeof p.unsetFilterValue === 'function'\n );\n}\n\nexport function isLinkableColumn(column: LinkColumn): boolean {\n // TODO: core/#3358 Use preview/original type property instead of checking description\n return (\n column.description == null ||\n !column.description.startsWith('Preview of type: ')\n );\n}\n\nconst log = Log.module('LinkerUtils');\n\n/**\n * Collection of utility functions for use with the Linker\n */\nclass LinkerUtils {\n /**\n * Retrieve the type of link given parameters.\n * @param start The link start\n * @param end The link end\n * @param isolatedLinkerPanelId Whether there's an isolated linker\n * @returns The type of link, or invalid if there's an error\n */\n static isLinkValid(\n start: LinkPoint,\n end: LinkPoint,\n isolatedLinkerPanelId?: string | string[]\n ): boolean {\n // Panel compatibility checks:\n // Link ends should point to different non-null panelIds\n // For isolated linker one of the panels should match isolated panel id\n if (\n start.panelId == null ||\n end.panelId == null ||\n start.panelId === end.panelId ||\n (isolatedLinkerPanelId != null &&\n isolatedLinkerPanelId !== start.panelId &&\n isolatedLinkerPanelId !== end.panelId)\n ) {\n log.debug2('Incompatible panel ids', start, end, isolatedLinkerPanelId);\n return false;\n }\n\n // Check column type compatibility\n const { columnType: startColumnType } = start;\n const { columnType: endColumnType } = end;\n\n // Null columnType in ending link point allows linking to any type\n const isCompatibleType =\n endColumnType === null ||\n TableUtils.isCompatibleType(startColumnType, endColumnType);\n\n if (!isCompatibleType) {\n log.debug2('Incompatible type', startColumnType, endColumnType);\n return false;\n }\n\n return true;\n }\n\n /**\n * Find column matching the link point\n * @param columns Columns to search in\n * @param linkPoint Link point to find column for\n * @param linkPoint.columnName Column name to find\n * @param linkPoint.columnType Column type to find\n * @returns Column matching the link point, undefined if not found\n */\n static findColumn(\n columns: readonly LinkColumn[],\n { columnName, columnType }: LinkPoint\n ): LinkColumn | undefined {\n return columns.find(\n ({ name, type }) => name === columnName && type === columnType\n );\n }\n\n /**\n * Clone links for a given panel id\n * @param links Original links array\n * @param panelId Original panel id\n * @param cloneId Cloned panel id\n * @returns Cloned links array or empty array if no new links added\n */\n static cloneLinksForPanel(\n links: Link[],\n panelId: string | string[],\n cloneId: string\n ): Link[] {\n const clonedLinks: Link[] = [];\n links.forEach(link => {\n if (link.start.panelId === panelId && link.type !== 'filterSource') {\n clonedLinks.push({\n ...link,\n id: nanoid(),\n start: { ...link.start, panelId: cloneId },\n });\n } else if (link.end?.panelId === panelId) {\n clonedLinks.push({\n ...link,\n id: nanoid(),\n end: { ...link.end, panelId: cloneId },\n });\n }\n });\n return clonedLinks;\n }\n}\n\nexport default LinkerUtils;\n"],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import { ColumnMap } from './ChartFilterOverlay';
|
|
|
10
10
|
import { SelectorColumn } from './ChartColumnSelectorOverlay';
|
|
11
11
|
import './ChartPanel.scss';
|
|
12
12
|
import { Link, LinkFilterMap } from '../linker/LinkerUtils';
|
|
13
|
-
import { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';
|
|
13
|
+
import { type ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';
|
|
14
14
|
export type InputFilterMap = Map<string, InputFilter>;
|
|
15
15
|
export type LinkedColumnMap = Map<string, {
|
|
16
16
|
name: string;
|
|
@@ -87,7 +87,15 @@ interface ChartPanelState {
|
|
|
87
87
|
isLoading: boolean;
|
|
88
88
|
isLoaded: boolean;
|
|
89
89
|
isLinked: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Map of all non-empty filters applied to the chart.
|
|
92
|
+
* Initialize the filter map to the previously stored values; input filters will be applied after load.
|
|
93
|
+
*/
|
|
90
94
|
filterMap: FilterMap;
|
|
95
|
+
/**
|
|
96
|
+
* Map of filter values set from links, stored in panelState.
|
|
97
|
+
* Combined with inputFilters to get applied filters (filterMap).
|
|
98
|
+
*/
|
|
91
99
|
filterValueMap: FilterMap;
|
|
92
100
|
model?: ChartModel;
|
|
93
101
|
columnMap: ColumnMap;
|
|
@@ -183,7 +191,7 @@ export declare class ChartPanel extends Component<ChartPanelProps, ChartPanelSta
|
|
|
183
191
|
pruneFilterMaps(): void;
|
|
184
192
|
render(): ReactElement;
|
|
185
193
|
}
|
|
186
|
-
declare const ConnectedChartPanel: import("react-redux").ConnectedComponent<typeof ChartPanel, import("react-redux").Omit<Pick<OwnProps & StateProps & DispatchProps & React.RefAttributes<ChartPanel>, "glContainer" | "glEventHub" | "links" | "metadata" | "
|
|
194
|
+
declare const ConnectedChartPanel: import("react-redux").ConnectedComponent<typeof ChartPanel, import("react-redux").Omit<Pick<OwnProps & StateProps & DispatchProps & React.RefAttributes<ChartPanel>, "glContainer" | "glEventHub" | "links" | "metadata" | "makeModel" | "localDashboardId" | "Plotly" | "inputFilters" | keyof DispatchProps | keyof React.RefAttributes<ChartPanel>> & Partial<Pick<OwnProps & StateProps & DispatchProps & React.RefAttributes<ChartPanel>, "settings" | "source" | "panelState" | "containerRef" | "isLinkerActive" | "sourcePanel" | "columnSelectionValidator">> & Partial<Pick<{
|
|
187
195
|
columnSelectionValidator: null;
|
|
188
196
|
isLinkerActive: boolean;
|
|
189
197
|
source: null;
|
|
@@ -191,6 +199,6 @@ declare const ConnectedChartPanel: import("react-redux").ConnectedComponent<type
|
|
|
191
199
|
panelState: null;
|
|
192
200
|
settings: {};
|
|
193
201
|
containerRef: null;
|
|
194
|
-
}, never>>, "settings" | "links" | "source" | "inputFilters" | "
|
|
202
|
+
}, never>>, "settings" | "links" | "source" | "inputFilters" | "isLinkerActive" | "sourcePanel" | "columnSelectionValidator" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId"> & OwnProps>;
|
|
195
203
|
export default ConnectedChartPanel;
|
|
196
204
|
//# sourceMappingURL=ChartPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKlE,OAAO,EAEL,UAAU,EACV,kBAAkB,EAElB,SAAS,EAEV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,UAAU,MAAM,WAAW,CAAC;AACxC,OAAO,EACL,mBAAmB,EAGnB,cAAc,EACd,aAAa,EAEd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,WAAW,EACX,UAAU,EACV,aAAa,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAGjD,OAAO,EAKL,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,OAAO,EAGR,MAAM,kBAAkB,CAAC;AAY1B,OAA2B,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAmC,EACjC,cAAc,EACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,mBAAmB,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAM5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -17,12 +17,14 @@ import { getActiveTool, getSettings, setActiveTool as setActiveToolAction } from
|
|
|
17
17
|
import { assertNotNull, Pending, PromiseUtils, TextUtils } from '@deephaven/utils';
|
|
18
18
|
import WidgetPanel from "./WidgetPanel.js";
|
|
19
19
|
import ToolType from "../linker/ToolType.js";
|
|
20
|
-
import { InputFilterEvent
|
|
20
|
+
import { InputFilterEvent } from "../events/index.js";
|
|
21
21
|
import { getColumnSelectionValidatorForDashboard, getInputFiltersForDashboard, getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, getTableMapForDashboard, setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction } from "../redux/index.js";
|
|
22
22
|
import ChartFilterOverlay from "./ChartFilterOverlay.js";
|
|
23
23
|
import ChartColumnSelectorOverlay from "./ChartColumnSelectorOverlay.js";
|
|
24
24
|
import "./ChartPanel.css";
|
|
25
25
|
import { isChartPanelFigureMetadata, isChartPanelTableMetadata } from "./ChartPanelUtils.js";
|
|
26
|
+
import { emitFilterColumnsChanged } from "../FilterEvents.js";
|
|
27
|
+
import { emitLinkPointSelected } from "../linker/LinkerEvent.js";
|
|
26
28
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
27
29
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
28
30
|
var log = Log.module('ChartPanel');
|
|
@@ -104,7 +106,9 @@ export class ChartPanel extends Component {
|
|
|
104
106
|
_defineProperty(this, "getSelectorColumns", memoize((columnMap, linkedColumnMap, columnSelectionValidator) => Array.from(columnMap.values()).map(column => ({
|
|
105
107
|
name: column.name,
|
|
106
108
|
type: column.type,
|
|
107
|
-
isValid: columnSelectionValidator ? columnSelectionValidator(this, column
|
|
109
|
+
isValid: columnSelectionValidator ? columnSelectionValidator(this, column, {
|
|
110
|
+
type: 'chartLink'
|
|
111
|
+
}) : false,
|
|
108
112
|
isActive: linkedColumnMap.has(column.name)
|
|
109
113
|
}))));
|
|
110
114
|
this.handleColumnSelected = this.handleColumnSelected.bind(this);
|
|
@@ -297,7 +301,15 @@ export class ChartPanel extends Component {
|
|
|
297
301
|
var {
|
|
298
302
|
columnMap
|
|
299
303
|
} = this.state;
|
|
300
|
-
|
|
304
|
+
var panelId = LayoutUtils.getIdFromPanel(this);
|
|
305
|
+
assertNotNull(panelId);
|
|
306
|
+
var column = columnMap.get(columnName);
|
|
307
|
+
if (column == null) {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
emitLinkPointSelected(glEventHub, panelId, column, {
|
|
311
|
+
type: 'chartLink'
|
|
312
|
+
});
|
|
301
313
|
}
|
|
302
314
|
handleColumnMouseEnter(_ref) {
|
|
303
315
|
var {
|
|
@@ -314,6 +326,8 @@ export class ChartPanel extends Component {
|
|
|
314
326
|
columnSelectionValidator(this, {
|
|
315
327
|
type,
|
|
316
328
|
name
|
|
329
|
+
}, {
|
|
330
|
+
type: 'chartLink'
|
|
317
331
|
});
|
|
318
332
|
}
|
|
319
333
|
handleColumnMouseLeave() {
|
|
@@ -324,7 +338,9 @@ export class ChartPanel extends Component {
|
|
|
324
338
|
if (!columnSelectionValidator) {
|
|
325
339
|
return;
|
|
326
340
|
}
|
|
327
|
-
columnSelectionValidator(this, undefined
|
|
341
|
+
columnSelectionValidator(this, undefined, {
|
|
342
|
+
type: 'chartLink'
|
|
343
|
+
});
|
|
328
344
|
}
|
|
329
345
|
handleDisconnect() {
|
|
330
346
|
this.setState({
|
|
@@ -560,7 +576,9 @@ export class ChartPanel extends Component {
|
|
|
560
576
|
var {
|
|
561
577
|
glEventHub
|
|
562
578
|
} = this.props;
|
|
563
|
-
|
|
579
|
+
var panelId = LayoutUtils.getIdFromPanel(this);
|
|
580
|
+
assertNotNull(panelId);
|
|
581
|
+
emitFilterColumnsChanged(glEventHub, panelId, Array.from(model.getFilterColumnMap().values()));
|
|
564
582
|
}
|
|
565
583
|
getCoordinateForColumn(columnName) {
|
|
566
584
|
var _element$getBoundingC;
|
|
@@ -601,7 +619,7 @@ export class ChartPanel extends Component {
|
|
|
601
619
|
if (column == null || column.type !== columnType) {
|
|
602
620
|
return;
|
|
603
621
|
}
|
|
604
|
-
if (filterList.length
|
|
622
|
+
if (filterList.length === 0) {
|
|
605
623
|
log.debug('Ignoring empty filterList for column', columnName);
|
|
606
624
|
return;
|
|
607
625
|
}
|