@deephaven/dashboard-core-plugins 0.15.5-vite.12 → 0.15.5
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/ChartBuilderPlugin.d.ts.map +1 -1
- package/dist/ChartBuilderPlugin.js +2 -1
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/ChartPlugin.js.map +1 -1
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.js +1 -1
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridPlugin.js.map +1 -1
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPlugin.js.map +1 -1
- package/dist/controls/ControlType.d.ts +1 -1
- package/dist/controls/ControlType.d.ts.map +1 -1
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts +73 -81
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +41 -58
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.d.ts +46 -46
- package/dist/controls/input-filter/InputFilter.d.ts.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +32 -39
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.d.ts +11 -16
- package/dist/controls/markdown/MarkdownContainer.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js +5 -8
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.d.ts +17 -19
- package/dist/controls/markdown/MarkdownEditor.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js +5 -8
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.d.ts +24 -28
- package/dist/controls/markdown/MarkdownStartPage.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js +19 -23
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.d.ts +4 -4
- package/dist/controls/markdown/MarkdownUtils.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.js +2 -2
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/events/ChartEvent.d.ts +1 -1
- package/dist/events/ChartEvent.d.ts.map +1 -1
- package/dist/events/ChartEvent.js.map +1 -1
- package/dist/events/ConsoleEvent.d.ts +1 -1
- package/dist/events/ConsoleEvent.d.ts.map +1 -1
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/events/InputFilterEvent.d.ts +1 -1
- package/dist/events/InputFilterEvent.d.ts.map +1 -1
- package/dist/events/InputFilterEvent.js.map +1 -1
- package/dist/events/IrisGridEvent.d.ts +1 -1
- package/dist/events/IrisGridEvent.d.ts.map +1 -1
- package/dist/events/IrisGridEvent.js.map +1 -1
- package/dist/events/MarkdownEvent.js.map +1 -1
- package/dist/events/NotebookEvent.d.ts +1 -1
- package/dist/events/NotebookEvent.d.ts.map +1 -1
- package/dist/events/NotebookEvent.js.map +1 -1
- package/dist/events/PQEvent.d.ts +1 -1
- package/dist/events/PQEvent.d.ts.map +1 -1
- package/dist/events/PQEvent.js.map +1 -1
- package/dist/events/PandasEvent.d.ts +1 -1
- package/dist/events/PandasEvent.d.ts.map +1 -1
- package/dist/events/PandasEvent.js.map +1 -1
- package/dist/events/TabEvent.d.ts +1 -1
- package/dist/events/TabEvent.d.ts.map +1 -1
- package/dist/events/TabEvent.js.map +1 -1
- package/dist/events/index.d.ts +8 -8
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/linker/ColumnSelectionValidator.d.ts +4 -0
- package/dist/linker/ColumnSelectionValidator.d.ts.map +1 -0
- package/dist/linker/ColumnSelectionValidator.js +2 -0
- package/dist/linker/ColumnSelectionValidator.js.map +1 -0
- package/dist/linker/Linker.d.ts +11 -11
- package/dist/linker/Linker.js +1 -1
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.d.ts +3 -3
- package/dist/linker/LinkerUtils.d.ts.map +1 -1
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/linker/ToolType.d.ts +1 -1
- package/dist/linker/ToolType.d.ts.map +1 -1
- package/dist/linker/ToolType.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.d.ts +22 -26
- package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js +5 -14
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.d.ts +27 -21
- package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +149 -152
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +65 -73
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.d.ts +41 -56
- package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
- package/dist/panels/CommandHistoryPanel.js +13 -35
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.d.ts +63 -73
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js +67 -83
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts +110 -106
- package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +60 -62
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.d.ts +5 -7
- package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.d.ts +3 -1
- package/dist/panels/FilterSetManager.d.ts.map +1 -1
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.d.ts +83 -62
- package/dist/panels/FilterSetManagerPanel.d.ts.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js +58 -36
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.d.ts +50 -51
- package/dist/panels/InputFilterPanel.d.ts.map +1 -1
- package/dist/panels/InputFilterPanel.js +35 -34
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +191 -178
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +150 -179
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/LogPanel.d.ts +29 -45
- package/dist/panels/LogPanel.d.ts.map +1 -1
- package/dist/panels/LogPanel.js +9 -11
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.d.ts +34 -34
- package/dist/panels/MarkdownNotebook.d.ts.map +1 -1
- package/dist/panels/MarkdownNotebook.js +21 -18
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.d.ts +41 -47
- package/dist/panels/MarkdownPanel.d.ts.map +1 -1
- package/dist/panels/MarkdownPanel.js +17 -19
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/NotebookPanel.d.ts +137 -115
- package/dist/panels/NotebookPanel.d.ts.map +1 -1
- package/dist/panels/NotebookPanel.js +95 -68
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.d.ts +20 -17
- package/dist/panels/PandasPanel.d.ts.map +1 -1
- package/dist/panels/PandasPanel.js +18 -14
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/Panel.d.ts +87 -123
- package/dist/panels/Panel.d.ts.map +1 -1
- package/dist/panels/Panel.js +29 -54
- package/dist/panels/Panel.js.map +1 -1
- package/dist/panels/PanelContextMenu.d.ts +16 -31
- package/dist/panels/PanelContextMenu.d.ts.map +1 -1
- package/dist/panels/PanelContextMenu.js +12 -15
- package/dist/panels/PanelContextMenu.js.map +1 -1
- package/dist/panels/RenameDialog.d.ts +26 -28
- package/dist/panels/RenameDialog.d.ts.map +1 -1
- package/dist/panels/RenameDialog.js +15 -19
- package/dist/panels/RenameDialog.js.map +1 -1
- package/dist/panels/WidgetPanel.d.ts +72 -106
- package/dist/panels/WidgetPanel.d.ts.map +1 -1
- package/dist/panels/WidgetPanel.js +17 -47
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.d.ts +29 -22
- package/dist/panels/WidgetPanelTooltip.d.ts.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js +1 -1
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/panels/index.js.map +1 -1
- package/dist/prop-types/CommonPropTypes.d.ts +4 -4
- package/dist/prop-types/CommonPropTypes.d.ts.map +1 -1
- package/dist/prop-types/CommonPropTypes.js +1 -1
- package/dist/prop-types/CommonPropTypes.js.map +1 -1
- package/dist/prop-types/UIPropTypes.d.ts +2 -7
- package/dist/prop-types/UIPropTypes.d.ts.map +1 -1
- package/dist/prop-types/UIPropTypes.js +0 -7
- package/dist/prop-types/UIPropTypes.js.map +1 -1
- package/dist/prop-types/index.d.ts +2 -2
- package/dist/prop-types/index.d.ts.map +1 -1
- package/dist/prop-types/index.js.map +1 -1
- package/dist/redux/actionTypes.d.ts +1 -1
- package/dist/redux/actionTypes.d.ts.map +1 -1
- package/dist/redux/actionTypes.js.map +1 -1
- package/dist/redux/actions.d.ts +63 -8
- package/dist/redux/actions.d.ts.map +1 -1
- package/dist/redux/actions.js +17 -17
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/index.js.map +1 -1
- package/dist/redux/reducers/index.d.ts +3 -4
- package/dist/redux/reducers/index.d.ts.map +1 -1
- package/dist/redux/reducers/index.js.map +1 -1
- package/dist/redux/reducers/sessionWrapper.d.ts +1 -1
- package/dist/redux/reducers/sessionWrapper.d.ts.map +1 -1
- package/dist/redux/reducers/sessionWrapper.js.map +1 -1
- package/dist/redux/selectors.d.ts +63 -9
- package/dist/redux/selectors.d.ts.map +1 -1
- package/dist/redux/selectors.js +24 -24
- package/dist/redux/selectors.js.map +1 -1
- package/package.json +21 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/events/MarkdownEvent.ts"],"names":["Object","freeze","OPEN"],"mappings":"AAAA,eAAeA,MAAM,CAACC,MAAP,CAAc;AAAEC,EAAAA,IAAI,EAAE;AAAR,CAAd,CAAf","sourcesContent":["export default Object.freeze({ OPEN: 'MarkdownEvent.OPEN' });\n"],"file":"MarkdownEvent.js"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export default NotebookEvent;
|
|
2
1
|
declare class NotebookEvent {
|
|
3
2
|
static CREATE_NOTEBOOK: string;
|
|
4
3
|
static SELECT_NOTEBOOK: string;
|
|
@@ -9,4 +8,5 @@ declare class NotebookEvent {
|
|
|
9
8
|
static SEND_TO_NOTEBOOK: string;
|
|
10
9
|
static UNREGISTER_FILE: string;
|
|
11
10
|
}
|
|
11
|
+
export default NotebookEvent;
|
|
12
12
|
//# sourceMappingURL=NotebookEvent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotebookEvent.d.ts","sourceRoot":"","sources":["../../src/events/NotebookEvent.
|
|
1
|
+
{"version":3,"file":"NotebookEvent.d.ts","sourceRoot":"","sources":["../../src/events/NotebookEvent.ts"],"names":[],"mappings":"AAAA,cAAM,aAAa;IACjB,MAAM,CAAC,eAAe,SAAkC;IAExD,MAAM,CAAC,eAAe,SAAkC;IAExD,MAAM,CAAC,UAAU,SAA6B;IAE9C,MAAM,CAAC,MAAM,SAA0B;IAEvC,MAAM,CAAC,WAAW,SAA8B;IAEhD,MAAM,CAAC,aAAa,SAAgC;IAEpD,MAAM,CAAC,gBAAgB,SAAkC;IAEzD,MAAM,CAAC,eAAe,SAAkC;CACzD;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/events/NotebookEvent.ts"],"names":["NotebookEvent"],"mappings":";;AAAA,MAAMA,aAAN,CAAoB;;gBAAdA,a,qBACqB,8B;;gBADrBA,a,qBAGqB,8B;;gBAHrBA,a,gBAKgB,yB;;gBALhBA,a,YAOY,sB;;gBAPZA,a,iBASiB,0B;;gBATjBA,a,mBAWmB,4B;;gBAXnBA,a,sBAasB,8B;;gBAbtBA,a,qBAeqB,8B;;AAG3B,eAAeA,aAAf","sourcesContent":["class NotebookEvent {\n static CREATE_NOTEBOOK = 'NotebookEvent.createNotebook';\n\n static SELECT_NOTEBOOK = 'NotebookEvent.selectNotebook';\n\n static CLOSE_FILE = 'NotebookEvent.closeFile';\n\n static RENAME = 'NotebookEvent.rename';\n\n static RENAME_FILE = 'NotebookEvent.renameFile';\n\n static REGISTER_FILE = 'NotebookEvent.registerFile';\n\n static SEND_TO_NOTEBOOK = 'NotebookEvent.sendToNotebook';\n\n static UNREGISTER_FILE = 'NotebookEvent.unregisterFile';\n}\n\nexport default NotebookEvent;\n"],"file":"NotebookEvent.js"}
|
package/dist/events/PQEvent.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PQEvent.d.ts","sourceRoot":"","sources":["../../src/events/PQEvent.
|
|
1
|
+
{"version":3,"file":"PQEvent.d.ts","sourceRoot":"","sources":["../../src/events/PQEvent.ts"],"names":[],"mappings":"AAAA,cAAM,OAAO;IACX,MAAM,CAAC,IAAI,SAAkB;IAE7B,MAAM,CAAC,KAAK,SAAmB;IAE/B,MAAM,CAAC,MAAM,SAAoB;CAClC;AAED,eAAe,OAAO,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/events/PQEvent.ts"],"names":["PQEvent"],"mappings":";;AAAA,MAAMA,OAAN,CAAc;;gBAARA,O,UACU,c;;gBADVA,O,WAGW,e;;gBAHXA,O,YAKY,gB;;AAGlB,eAAeA,OAAf","sourcesContent":["class PQEvent {\n static OPEN = 'PQEvent.open';\n\n static CLOSE = 'PQEvent.close';\n\n static RENAME = 'PQEvent.rename';\n}\n\nexport default PQEvent;\n"],"file":"PQEvent.js"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export default PandasEvent;
|
|
2
1
|
declare class PandasEvent {
|
|
3
2
|
/** @deprecated Use PanelEvent.OPEN */
|
|
4
3
|
static OPEN: string;
|
|
5
4
|
/** @deprecated Use PanelEvent.CLOSE */
|
|
6
5
|
static CLOSE: string;
|
|
7
6
|
}
|
|
7
|
+
export default PandasEvent;
|
|
8
8
|
//# sourceMappingURL=PandasEvent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PandasEvent.d.ts","sourceRoot":"","sources":["../../src/events/PandasEvent.
|
|
1
|
+
{"version":3,"file":"PandasEvent.d.ts","sourceRoot":"","sources":["../../src/events/PandasEvent.ts"],"names":[],"mappings":"AAAA,cAAM,WAAW;IACf,sCAAsC;IACtC,MAAM,CAAC,IAAI,SAAsB;IAEjC,uCAAuC;IACvC,MAAM,CAAC,KAAK,SAAuB;CACpC;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/events/PandasEvent.ts"],"names":["PandasEvent"],"mappings":";;AAAA,MAAMA,WAAN,CAAkB;;gBAAZA,W,UAEU,kB;;gBAFVA,W,WAKW,mB;;AAGjB,eAAeA,WAAf","sourcesContent":["class PandasEvent {\n /** @deprecated Use PanelEvent.OPEN */\n static OPEN = 'PandasEvent.OPEN';\n\n /** @deprecated Use PanelEvent.CLOSE */\n static CLOSE = 'PandasEvent.CLOSE';\n}\n\nexport default PandasEvent;\n"],"file":"PandasEvent.js"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export default TabEvent;
|
|
2
1
|
declare class TabEvent {
|
|
3
2
|
static focus: string;
|
|
4
3
|
static blur: string;
|
|
@@ -7,4 +6,5 @@ declare class TabEvent {
|
|
|
7
6
|
static reload: string;
|
|
8
7
|
static clearAllFilters: string;
|
|
9
8
|
}
|
|
9
|
+
export default TabEvent;
|
|
10
10
|
//# sourceMappingURL=TabEvent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabEvent.d.ts","sourceRoot":"","sources":["../../src/events/TabEvent.
|
|
1
|
+
{"version":3,"file":"TabEvent.d.ts","sourceRoot":"","sources":["../../src/events/TabEvent.ts"],"names":[],"mappings":"AAAA,cAAM,QAAQ;IACZ,MAAM,CAAC,KAAK,SAAoB;IAEhC,MAAM,CAAC,IAAI,SAAmB;IAE9B,MAAM,CAAC,YAAY,SAA2B;IAE9C,MAAM,CAAC,WAAW,SAA0B;IAE5C,MAAM,CAAC,MAAM,SAAqB;IAElC,MAAM,CAAC,eAAe,SAA8B;CACrD;AAED,eAAe,QAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/events/TabEvent.ts"],"names":["TabEvent"],"mappings":";;AAAA,MAAMA,QAAN,CAAe;;gBAATA,Q,WACW,gB;;gBADXA,Q,UAGU,e;;gBAHVA,Q,kBAKkB,uB;;gBALlBA,Q,iBAOiB,sB;;gBAPjBA,Q,YASY,iB;;gBATZA,Q,qBAWqB,0B;;AAG3B,eAAeA,QAAf","sourcesContent":["class TabEvent {\n static focus = 'TabEvent.focus';\n\n static blur = 'TabEvent.blur';\n\n static openPQObject = 'TabEvent.openPQObject';\n\n static openControl = 'TabEvent.openControl';\n\n static reload = 'TabEvent.reload';\n\n static clearAllFilters = 'TabEvent.clearAllFilters';\n}\n\nexport default TabEvent;\n"],"file":"TabEvent.js"}
|
package/dist/events/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { default as ChartEvent } from
|
|
2
|
-
export { default as ConsoleEvent } from
|
|
3
|
-
export { default as InputFilterEvent } from
|
|
4
|
-
export { default as IrisGridEvent } from
|
|
5
|
-
export { default as MarkdownEvent } from
|
|
6
|
-
export { default as NotebookEvent } from
|
|
7
|
-
export { default as PandasEvent } from
|
|
8
|
-
export { default as TabEvent } from
|
|
1
|
+
export { default as ChartEvent } from './ChartEvent';
|
|
2
|
+
export { default as ConsoleEvent } from './ConsoleEvent';
|
|
3
|
+
export { default as InputFilterEvent } from './InputFilterEvent';
|
|
4
|
+
export { default as IrisGridEvent } from './IrisGridEvent';
|
|
5
|
+
export { default as MarkdownEvent } from './MarkdownEvent';
|
|
6
|
+
export { default as NotebookEvent } from './NotebookEvent';
|
|
7
|
+
export { default as PandasEvent } from './PandasEvent';
|
|
8
|
+
export { default as TabEvent } from './TabEvent';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/events/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/events/index.ts"],"names":["default","ChartEvent","ConsoleEvent","InputFilterEvent","IrisGridEvent","MarkdownEvent","NotebookEvent","PandasEvent","TabEvent"],"mappings":"SAASA,OAAO,IAAIC,U;SACXD,OAAO,IAAIE,Y;SACXF,OAAO,IAAIG,gB;SACXH,OAAO,IAAII,a;SACXJ,OAAO,IAAIK,a;SACXL,OAAO,IAAIM,a;SACXN,OAAO,IAAIO,W;SACXP,OAAO,IAAIQ,Q","sourcesContent":["export { default as ChartEvent } from './ChartEvent';\nexport { default as ConsoleEvent } from './ConsoleEvent';\nexport { default as InputFilterEvent } from './InputFilterEvent';\nexport { default as IrisGridEvent } from './IrisGridEvent';\nexport { default as MarkdownEvent } from './MarkdownEvent';\nexport { default as NotebookEvent } from './NotebookEvent';\nexport { default as PandasEvent } from './PandasEvent';\nexport { default as TabEvent } from './TabEvent';\n"],"file":"index.js"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["default","ChartPlugin","ChartBuilderPlugin","ConsolePlugin","FilterPlugin","GridPlugin","LinkerPlugin","MarkdownPlugin","PandasPlugin","ControlType","LinkerUtils","ToolType"],"mappings":"SAASA,OAAO,IAAIC,W;SACXD,OAAO,IAAIE,kB;SACXF,OAAO,IAAIG,a;SACXH,OAAO,IAAII,Y;SACXJ,OAAO,IAAIK,U;SACXL,OAAO,IAAIM,Y;SACXN,OAAO,IAAIO,c;SACXP,OAAO,IAAIQ,Y;SACXR,OAAO,IAAIS,W;SACXT,OAAO,IAAIU,W;SAEXV,OAAO,IAAIW,Q","sourcesContent":["export { default as ChartPlugin } from './ChartPlugin';\nexport { default as ChartBuilderPlugin } from './ChartBuilderPlugin';\nexport { default as ConsolePlugin } from './ConsolePlugin';\nexport { default as FilterPlugin } from './FilterPlugin';\nexport { default as GridPlugin } from './GridPlugin';\nexport { default as LinkerPlugin } from './LinkerPlugin';\nexport { default as MarkdownPlugin } from './MarkdownPlugin';\nexport { default as PandasPlugin } from './PandasPlugin';\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';\n\nexport * from './events';\nexport * from './panels';\nexport * from './redux';\nexport * from './prop-types';\n"],"file":"index.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColumnSelectionValidator.d.ts","sourceRoot":"","sources":["../../src/linker/ColumnSelectionValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,oBAAY,wBAAwB,GAAG,CACrC,KAAK,EAAE,cAAc,EACrB,WAAW,CAAC,EAAE,UAAU,KACrB,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"ColumnSelectionValidator.js"}
|
package/dist/linker/Linker.d.ts
CHANGED
|
@@ -16,11 +16,11 @@ interface OwnProps {
|
|
|
16
16
|
}
|
|
17
17
|
declare const connector: import("react-redux").InferableComponentEnhancerWithProps<StateProps & {
|
|
18
18
|
setActiveTool: import("@deephaven/redux").PayloadActionCreator<string>;
|
|
19
|
-
setDashboardLinks: (id: string, links: Link[]) =>
|
|
20
|
-
addDashboardLinks: (id: string, newLinks: Link[]) =>
|
|
21
|
-
deleteDashboardLinks: (id: string, linkIds: string[]) =>
|
|
22
|
-
setDashboardIsolatedLinkerPanelId: (id: string, isolatedLinkerPanelId: string | string[] | undefined) =>
|
|
23
|
-
setDashboardColumnSelectionValidator: (id: string, columnSelectionValidator:
|
|
19
|
+
setDashboardLinks: (id: string, links: Link[]) => unknown;
|
|
20
|
+
addDashboardLinks: (id: string, newLinks: Link[]) => unknown;
|
|
21
|
+
deleteDashboardLinks: (id: string, linkIds: string[]) => unknown;
|
|
22
|
+
setDashboardIsolatedLinkerPanelId: (id: string, isolatedLinkerPanelId: string | string[] | undefined) => unknown;
|
|
23
|
+
setDashboardColumnSelectionValidator: (id: string, columnSelectionValidator: import("./ColumnSelectionValidator").ColumnSelectionValidator | undefined) => unknown;
|
|
24
24
|
}, OwnProps>;
|
|
25
25
|
export declare type LinkerProps = OwnProps & StateProps & ConnectedProps<typeof connector>;
|
|
26
26
|
export declare type LinkerState = {
|
|
@@ -81,11 +81,11 @@ export declare class Linker extends Component<LinkerProps, LinkerState> {
|
|
|
81
81
|
}
|
|
82
82
|
declare const _default: import("react-redux").ConnectedComponent<typeof Linker, import("react-redux").Omit<React.ClassAttributes<Linker> & OwnProps & StateProps & {
|
|
83
83
|
setActiveTool: import("@deephaven/redux").PayloadActionCreator<string>;
|
|
84
|
-
setDashboardLinks: (id: string, links: Link[]) =>
|
|
85
|
-
addDashboardLinks: (id: string, newLinks: Link[]) =>
|
|
86
|
-
deleteDashboardLinks: (id: string, linkIds: string[]) =>
|
|
87
|
-
setDashboardIsolatedLinkerPanelId: (id: string, isolatedLinkerPanelId: string | string[] | undefined) =>
|
|
88
|
-
setDashboardColumnSelectionValidator: (id: string, columnSelectionValidator:
|
|
89
|
-
}, "activeTool" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId" | "
|
|
84
|
+
setDashboardLinks: (id: string, links: Link[]) => unknown;
|
|
85
|
+
addDashboardLinks: (id: string, newLinks: Link[]) => unknown;
|
|
86
|
+
deleteDashboardLinks: (id: string, linkIds: string[]) => unknown;
|
|
87
|
+
setDashboardIsolatedLinkerPanelId: (id: string, isolatedLinkerPanelId: string | string[] | undefined) => unknown;
|
|
88
|
+
setDashboardColumnSelectionValidator: (id: string, columnSelectionValidator: import("./ColumnSelectionValidator").ColumnSelectionValidator | undefined) => unknown;
|
|
89
|
+
}, "activeTool" | "links" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId" | "timeZone" | "isolatedLinkerPanelId" | "setDashboardLinks" | "addDashboardLinks" | "deleteDashboardLinks" | "setDashboardColumnSelectionValidator"> & OwnProps>;
|
|
90
90
|
export default _default;
|
|
91
91
|
//# sourceMappingURL=Linker.d.ts.map
|
package/dist/linker/Linker.js
CHANGED
|
@@ -496,7 +496,7 @@ export class Linker extends Component {
|
|
|
496
496
|
} = dataMap[start.columnName];
|
|
497
497
|
var text = "".concat(value);
|
|
498
498
|
|
|
499
|
-
if (TableUtils.isDateType(columnType)) {
|
|
499
|
+
if (columnType != null && TableUtils.isDateType(columnType)) {
|
|
500
500
|
var dateFilterFormatter = new DateTimeColumnFormatter({
|
|
501
501
|
timeZone,
|
|
502
502
|
showTimeZone: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Linker.js","names":["React","Component","connect","shortid","memoize","CSSTransition","ThemeExport","LayoutUtils","PanelEvent","DateTimeColumnFormatter","DateUtils","TableUtils","Log","getActiveTool","getTimeZone","setActiveTool","setActiveToolAction","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","InputFilterEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","log","module","mapState","state","ownProps","activeTool","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","constructor","props","linkInProgress","isolateForPanelId","combinedLinks","start","push","undefined","filter","link","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleFilterColumnSelect","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","isColumnSelectionValid","componentDidMount","layout","startListening","updateSelectionValidators","componentDidUpdate","prevProps","stopListening","componentDidCatch","error","info","componentWillUnmount","on","eventHub","COLUMN_SELECTED","DATA_SELECTED","STATE_CHANGED","CLONED","COLUMNS_CHANGED","CLOSED","off","DEFAULT","setState","panel","column","columnSelected","debug","isOverlayShown","getIdFromPanel","panelLinks","LINKER","length","columns","linksToDelete","findColumn","deleteLinks","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","name","columnName","type","columnType","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","addLinks","unsetFilterValueForLink","panelManager","endPanel","getOpenedPanelById","unsetFilterValue","setPanelFilterMap","filterMap","setFilterMap","clearAll","forEach","map","isolatedLinks","linkId","find","l","dataMap","panelFilterMap","Map","i","endPanelId","has","get","value","text","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","set","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","deleteLinksForPanelId","forceUpdate","updateLinkInProgressType","tableColumn","render","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks"],"sources":["../../src/linker/Linker.tsx"],"sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport {\n LayoutUtils,\n PanelComponent,\n PanelEvent,\n PanelManager,\n} from '@deephaven/dashboard';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport {\n DateTimeColumnFormatter,\n DateUtils,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getTimeZone,\n setActiveTool as setActiveToolAction,\n RootState,\n} from '@deephaven/redux';\nimport {\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n setDashboardLinks as setDashboardLinksAction,\n addDashboardLinks as addDashboardLinksAction,\n deleteDashboardLinks as deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction,\n} from '../redux';\nimport ToolType from './ToolType';\nimport { ChartEvent, IrisGridEvent, InputFilterEvent } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkDataMap,\n LinkFilterMap,\n LinkType,\n} from './LinkerUtils';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n isolatedLinkerPanelId?: string;\n links: Link[];\n timeZone: string;\n}\n\ninterface OwnProps {\n layout: GoldenLayout;\n panelManager: PanelManager;\n localDashboardId: string;\n}\n\nconst mapState = (state: RootState, ownProps: OwnProps): StateProps => ({\n activeTool: getActiveTool(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(\n state,\n ownProps.localDashboardId\n ),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n});\n\nconst connector = connect(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link;\n};\n\nexport class Linker extends Component<LinkerProps, LinkerState> {\n constructor(props: LinkerProps) {\n super(props);\n\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n\n this.state = { linkInProgress: undefined };\n }\n\n componentDidMount(): void {\n const { layout } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n\n componentDidUpdate(prevProps: LinkerProps): void {\n const { activeTool, layout } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n const { layout } = this.props;\n this.stopListening(layout);\n }\n\n startListening(layout: GoldenLayout): void {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.on(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n stopListening(layout: GoldenLayout): void {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n handleCancel(): void {\n const { linkInProgress } = this.state;\n if (linkInProgress == null) {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleDone(): void {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n this.setState({ linkInProgress: undefined });\n }\n\n handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column, true);\n }\n\n handleFilterColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const panelLinks = links.filter(\n link => link.start?.panelId === panelId || link.end?.panelId === panelId\n );\n\n if (!this.isOverlayShown() && panelId != null) {\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);\n\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n\n handleColumnsChanged(panel: PanelComponent, columns: LinkColumn[]): void {\n log.debug('handleColumnsChanged', panel, columns);\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\n // Delete links that start or end on non-existent column in the updated panel\n const linksToDelete = links.filter(\n ({ start, end }) =>\n (start.panelId === panelId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === panelId &&\n LinkerUtils.findColumn(columns, end) == null)\n );\n this.deleteLinks(linksToDelete);\n }\n\n handleGridColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(\n panel: PanelComponent,\n column: LinkColumn,\n isAlwaysEndPoint = false,\n overrideIsolatedLinkerPanelId?: string | string[]\n ): void {\n if (overrideIsolatedLinkerPanelId === undefined && !this.isOverlayShown()) {\n return;\n }\n const { isolatedLinkerPanelId } = this.props;\n const { linkInProgress } = this.state;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n const panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n const { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType,\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n log.debug('starting link', newLink);\n\n this.setState({ linkInProgress: newLink });\n } else {\n const { start, id, isReversed } = linkInProgress;\n const end = {\n panelId,\n panelComponent,\n columnName,\n columnType,\n };\n\n const type = LinkerUtils.getLinkType(\n isReversed ? end : start,\n isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n switch (type) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource': {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n const { links } = this.props;\n const existingLinkPanelId = isReversed ? start.panelId : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd }) =>\n panelLinkEnd?.panelId === existingLinkPanelId\n );\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n const newLink = {\n start: isReversed ? end : start,\n end: isReversed ? start : end,\n id,\n type,\n };\n log.info('creating link', newLink);\n\n this.setState({ linkInProgress: undefined }, () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([newLink]);\n });\n }\n }\n\n unsetFilterValueForLink(link: Link): void {\n const { panelManager } = this.props;\n if (link.end) {\n const { end } = link;\n const { panelId, columnName, columnType } = end;\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists, ignoring unsetFilterValue',\n panelId\n );\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId: string, filterMap: LinkFilterMap): void {\n log.debug('Set filter data for panel:', panelId, filterMap);\n const { panelManager } = this.props;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n\n addLinks(links: Link[]): void {\n const { addDashboardLinks, localDashboardId } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n\n deleteLinks(links: Link[], clearAll = false): void {\n const { localDashboardId } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n const { setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n const { deleteDashboardLinks } = this.props;\n deleteDashboardLinks(\n localDashboardId,\n links.map(({ id }) => id)\n );\n }\n }\n\n handleAllLinksDeleted(): void {\n const { links, isolatedLinkerPanelId } = this.props;\n if (isolatedLinkerPanelId === undefined) {\n this.deleteLinks(links, true);\n } else {\n const isolatedLinks = links.filter(\n link =>\n link?.start?.panelId === isolatedLinkerPanelId ||\n link?.end?.panelId === isolatedLinkerPanelId\n );\n this.deleteLinks(isolatedLinks);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleLinkDeleted(linkId: string): void {\n const { links } = this.props;\n const link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n\n handleUpdateValues(panel: PanelComponent, dataMap: LinkDataMap): void {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const { links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (let i = 0; i < links.length; i += 1) {\n const { start, end } = links[i];\n if (start.panelId === panelId && end != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const filterMap = panelFilterMap.has(endPanelId)\n ? panelFilterMap.get(endPanelId)\n : new Map();\n const { value } = dataMap[start.columnName];\n let text = `${value}`;\n if (TableUtils.isDateType(columnType)) {\n const dateFilterFormatter = new DateTimeColumnFormatter({\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT,\n });\n // The values are Dates for dateType values, not string like everything else\n text = dateFilterFormatter.format((value as unknown) as Date);\n }\n filterMap.set(columnName, {\n columnType,\n text,\n value,\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n\n handlePanelCloned(panel: PanelComponent, cloneConfig: { id: string }): void {\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const cloneId = cloneConfig.id;\n if (panelId != null) {\n const linksToAdd = LinkerUtils.cloneLinksForPanel(\n links,\n panelId,\n cloneId\n );\n this.addLinks(linksToAdd);\n }\n }\n\n handlePanelClosed(panelId: string): void {\n // Delete links on PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(`Panel ${panelId} closed, deleting links.`);\n this.deleteLinksForPanelId(panelId);\n }\n\n handleLayoutStateChanged(): void {\n this.forceUpdate();\n }\n\n handleStateChange(): void {\n this.forceUpdate();\n }\n\n handleExited(): void {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n const { localDashboardId, setDashboardIsolatedLinkerPanelId } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId: string): void {\n const { links } = this.props;\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n const { start, end, id } = link;\n if (start.panelId === panelId || end?.panelId === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n\n getCachedLinks = memoize((links, linkInProgress, isolateForPanelId) => {\n const combinedLinks = [...links];\n\n if (linkInProgress && linkInProgress.start) {\n combinedLinks.push(linkInProgress);\n }\n\n if (isolateForPanelId !== undefined) {\n return combinedLinks.filter(\n link =>\n link?.start?.panelId === isolateForPanelId ||\n link?.end?.panelId === isolateForPanelId ||\n link?.end == null\n );\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n });\n\n isOverlayShown(): boolean {\n const { activeTool } = this.props;\n return activeTool === ToolType.LINKER;\n }\n\n updateSelectionValidators(): void {\n const {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId,\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(\n localDashboardId,\n this.isColumnSelectionValid\n );\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n\n updateLinkInProgressType(\n linkInProgress: Link,\n type: LinkType = 'invalid'\n ): void {\n this.setState({\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n });\n }\n\n isColumnSelectionValid(\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\n }\n\n if (tableColumn == null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType(linkInProgress);\n return false;\n }\n\n const { isReversed, start } = linkInProgress;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n\n const end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const type = isReversed\n ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId)\n : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(linkInProgress, type);\n\n return type !== 'invalid';\n }\n\n render(): JSX.Element {\n const { links, isolatedLinkerPanelId, panelManager } = this.props;\n const { linkInProgress } = this.state;\n\n const isLinkOverlayShown = this.isOverlayShown();\n const disabled = linkInProgress != null && linkInProgress.start != null;\n const linkerOverlayMessage =\n isolatedLinkerPanelId === undefined\n ? 'Click a column source, then click a column target to create a filter link. Remove a filter link by clicking again to erase. Click done when finished.'\n : 'Create a link between the source column button and a table column by clicking on one, then the other. Remove the link by clicking it directly. Click done when finished.';\n return (\n <>\n <CSSTransition\n in={isLinkOverlayShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n onExited={this.handleExited}\n >\n <LinkerOverlayContent\n disabled={disabled}\n panelManager={panelManager}\n links={this.getCachedLinks(\n links,\n linkInProgress,\n isolatedLinkerPanelId\n )}\n messageText={linkerOverlayMessage}\n onLinkDeleted={this.handleLinkDeleted}\n onAllLinksDeleted={this.handleAllLinksDeleted}\n onDone={this.handleDone}\n onCancel={this.handleCancel}\n />\n </CSSTransition>\n </>\n );\n }\n}\n\nexport default connector(Linker);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/linker/Linker.tsx"],"names":["React","Component","connect","shortid","memoize","CSSTransition","ThemeExport","LayoutUtils","PanelEvent","DateTimeColumnFormatter","DateUtils","TableUtils","Log","getActiveTool","getTimeZone","setActiveTool","setActiveToolAction","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","InputFilterEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","log","module","mapState","state","ownProps","activeTool","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","constructor","props","linkInProgress","isolateForPanelId","combinedLinks","start","push","undefined","filter","link","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleFilterColumnSelect","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","isColumnSelectionValid","componentDidMount","layout","startListening","updateSelectionValidators","componentDidUpdate","prevProps","stopListening","componentDidCatch","error","info","componentWillUnmount","on","eventHub","COLUMN_SELECTED","DATA_SELECTED","STATE_CHANGED","CLONED","COLUMNS_CHANGED","CLOSED","off","DEFAULT","setState","panel","column","columnSelected","debug","isOverlayShown","getIdFromPanel","panelLinks","LINKER","length","columns","linksToDelete","findColumn","deleteLinks","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","name","columnName","type","columnType","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","addLinks","unsetFilterValueForLink","panelManager","endPanel","getOpenedPanelById","unsetFilterValue","setPanelFilterMap","filterMap","setFilterMap","clearAll","forEach","map","isolatedLinks","linkId","find","l","dataMap","panelFilterMap","Map","i","endPanelId","has","get","value","text","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","set","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","deleteLinksForPanelId","forceUpdate","updateLinkInProgressType","tableColumn","render","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks"],"mappings":"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","sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport {\n LayoutUtils,\n PanelComponent,\n PanelEvent,\n PanelManager,\n} from '@deephaven/dashboard';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport {\n DateTimeColumnFormatter,\n DateUtils,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getTimeZone,\n setActiveTool as setActiveToolAction,\n RootState,\n} from '@deephaven/redux';\nimport {\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n setDashboardLinks as setDashboardLinksAction,\n addDashboardLinks as addDashboardLinksAction,\n deleteDashboardLinks as deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction,\n} from '../redux';\nimport ToolType from './ToolType';\nimport { ChartEvent, IrisGridEvent, InputFilterEvent } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkDataMap,\n LinkFilterMap,\n LinkType,\n} from './LinkerUtils';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n isolatedLinkerPanelId?: string;\n links: Link[];\n timeZone: string;\n}\n\ninterface OwnProps {\n layout: GoldenLayout;\n panelManager: PanelManager;\n localDashboardId: string;\n}\n\nconst mapState = (state: RootState, ownProps: OwnProps): StateProps => ({\n activeTool: getActiveTool(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(\n state,\n ownProps.localDashboardId\n ),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n});\n\nconst connector = connect(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link;\n};\n\nexport class Linker extends Component<LinkerProps, LinkerState> {\n constructor(props: LinkerProps) {\n super(props);\n\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n\n this.state = { linkInProgress: undefined };\n }\n\n componentDidMount(): void {\n const { layout } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n\n componentDidUpdate(prevProps: LinkerProps): void {\n const { activeTool, layout } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n const { layout } = this.props;\n this.stopListening(layout);\n }\n\n startListening(layout: GoldenLayout): void {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.on(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n stopListening(layout: GoldenLayout): void {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n handleCancel(): void {\n const { linkInProgress } = this.state;\n if (linkInProgress == null) {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleDone(): void {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n this.setState({ linkInProgress: undefined });\n }\n\n handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column, true);\n }\n\n handleFilterColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const panelLinks = links.filter(\n link => link.start?.panelId === panelId || link.end?.panelId === panelId\n );\n\n if (!this.isOverlayShown() && panelId != null) {\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);\n\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n\n handleColumnsChanged(panel: PanelComponent, columns: LinkColumn[]): void {\n log.debug('handleColumnsChanged', panel, columns);\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\n // Delete links that start or end on non-existent column in the updated panel\n const linksToDelete = links.filter(\n ({ start, end }) =>\n (start.panelId === panelId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === panelId &&\n LinkerUtils.findColumn(columns, end) == null)\n );\n this.deleteLinks(linksToDelete);\n }\n\n handleGridColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(\n panel: PanelComponent,\n column: LinkColumn,\n isAlwaysEndPoint = false,\n overrideIsolatedLinkerPanelId?: string | string[]\n ): void {\n if (overrideIsolatedLinkerPanelId === undefined && !this.isOverlayShown()) {\n return;\n }\n const { isolatedLinkerPanelId } = this.props;\n const { linkInProgress } = this.state;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n const panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n const { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType,\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n log.debug('starting link', newLink);\n\n this.setState({ linkInProgress: newLink });\n } else {\n const { start, id, isReversed } = linkInProgress;\n const end = {\n panelId,\n panelComponent,\n columnName,\n columnType,\n };\n\n const type = LinkerUtils.getLinkType(\n isReversed ? end : start,\n isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n switch (type) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource': {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n const { links } = this.props;\n const existingLinkPanelId = isReversed ? start.panelId : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd }) =>\n panelLinkEnd?.panelId === existingLinkPanelId\n );\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n const newLink = {\n start: isReversed ? end : start,\n end: isReversed ? start : end,\n id,\n type,\n };\n log.info('creating link', newLink);\n\n this.setState({ linkInProgress: undefined }, () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([newLink]);\n });\n }\n }\n\n unsetFilterValueForLink(link: Link): void {\n const { panelManager } = this.props;\n if (link.end) {\n const { end } = link;\n const { panelId, columnName, columnType } = end;\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists, ignoring unsetFilterValue',\n panelId\n );\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId: string, filterMap: LinkFilterMap): void {\n log.debug('Set filter data for panel:', panelId, filterMap);\n const { panelManager } = this.props;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n\n addLinks(links: Link[]): void {\n const { addDashboardLinks, localDashboardId } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n\n deleteLinks(links: Link[], clearAll = false): void {\n const { localDashboardId } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n const { setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n const { deleteDashboardLinks } = this.props;\n deleteDashboardLinks(\n localDashboardId,\n links.map(({ id }) => id)\n );\n }\n }\n\n handleAllLinksDeleted(): void {\n const { links, isolatedLinkerPanelId } = this.props;\n if (isolatedLinkerPanelId === undefined) {\n this.deleteLinks(links, true);\n } else {\n const isolatedLinks = links.filter(\n link =>\n link?.start?.panelId === isolatedLinkerPanelId ||\n link?.end?.panelId === isolatedLinkerPanelId\n );\n this.deleteLinks(isolatedLinks);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleLinkDeleted(linkId: string): void {\n const { links } = this.props;\n const link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n\n handleUpdateValues(panel: PanelComponent, dataMap: LinkDataMap): void {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const { links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (let i = 0; i < links.length; i += 1) {\n const { start, end } = links[i];\n if (start.panelId === panelId && end != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const filterMap = panelFilterMap.has(endPanelId)\n ? panelFilterMap.get(endPanelId)\n : new Map();\n const { value } = dataMap[start.columnName];\n let text = `${value}`;\n if (columnType != null && TableUtils.isDateType(columnType)) {\n const dateFilterFormatter = new DateTimeColumnFormatter({\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT,\n });\n // The values are Dates for dateType values, not string like everything else\n text = dateFilterFormatter.format((value as unknown) as Date);\n }\n filterMap.set(columnName, {\n columnType,\n text,\n value,\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n\n handlePanelCloned(panel: PanelComponent, cloneConfig: { id: string }): void {\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const cloneId = cloneConfig.id;\n if (panelId != null) {\n const linksToAdd = LinkerUtils.cloneLinksForPanel(\n links,\n panelId,\n cloneId\n );\n this.addLinks(linksToAdd);\n }\n }\n\n handlePanelClosed(panelId: string): void {\n // Delete links on PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(`Panel ${panelId} closed, deleting links.`);\n this.deleteLinksForPanelId(panelId);\n }\n\n handleLayoutStateChanged(): void {\n this.forceUpdate();\n }\n\n handleStateChange(): void {\n this.forceUpdate();\n }\n\n handleExited(): void {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n const { localDashboardId, setDashboardIsolatedLinkerPanelId } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId: string): void {\n const { links } = this.props;\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n const { start, end, id } = link;\n if (start.panelId === panelId || end?.panelId === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n\n getCachedLinks = memoize((links, linkInProgress, isolateForPanelId) => {\n const combinedLinks = [...links];\n\n if (linkInProgress && linkInProgress.start) {\n combinedLinks.push(linkInProgress);\n }\n\n if (isolateForPanelId !== undefined) {\n return combinedLinks.filter(\n link =>\n link?.start?.panelId === isolateForPanelId ||\n link?.end?.panelId === isolateForPanelId ||\n link?.end == null\n );\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n });\n\n isOverlayShown(): boolean {\n const { activeTool } = this.props;\n return activeTool === ToolType.LINKER;\n }\n\n updateSelectionValidators(): void {\n const {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId,\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(\n localDashboardId,\n this.isColumnSelectionValid\n );\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n\n updateLinkInProgressType(\n linkInProgress: Link,\n type: LinkType = 'invalid'\n ): void {\n this.setState({\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n });\n }\n\n isColumnSelectionValid(\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\n }\n\n if (tableColumn == null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType(linkInProgress);\n return false;\n }\n\n const { isReversed, start } = linkInProgress;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n\n const end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const type = isReversed\n ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId)\n : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(linkInProgress, type);\n\n return type !== 'invalid';\n }\n\n render(): JSX.Element {\n const { links, isolatedLinkerPanelId, panelManager } = this.props;\n const { linkInProgress } = this.state;\n\n const isLinkOverlayShown = this.isOverlayShown();\n const disabled = linkInProgress != null && linkInProgress.start != null;\n const linkerOverlayMessage =\n isolatedLinkerPanelId === undefined\n ? 'Click a column source, then click a column target to create a filter link. Remove a filter link by clicking again to erase. Click done when finished.'\n : 'Create a link between the source column button and a table column by clicking on one, then the other. Remove the link by clicking it directly. Click done when finished.';\n return (\n <>\n <CSSTransition\n in={isLinkOverlayShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n onExited={this.handleExited}\n >\n <LinkerOverlayContent\n disabled={disabled}\n panelManager={panelManager}\n links={this.getCachedLinks(\n links,\n linkInProgress,\n isolatedLinkerPanelId\n )}\n messageText={linkerOverlayMessage}\n onLinkDeleted={this.handleLinkDeleted}\n onAllLinksDeleted={this.handleAllLinksDeleted}\n onDone={this.handleDone}\n onCancel={this.handleCancel}\n />\n </CSSTransition>\n </>\n );\n }\n}\n\nexport default connector(Linker);\n"],"file":"Linker.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/linker/LinkerLink.tsx"],"names":["React","PureComponent","DROOP","DROOP_EXPONENT","TRIANGLE_HEIGHT","TRIANGLE_BASE","TRIANGLE_TIP","TRIANGLE_HYPOTENUSE","Math","sqrt","TRIANGLE_THETA","asin","CLIP_RADIUS","LinkerLink","makeCirclePath","x","y","r","constructor","props","handleClick","bind","event","stopPropagation","preventDefault","id","onClick","render","className","x1","y1","x2","y2","len","theta","atan2","xMult","sin","yMult","cos","maxX","window","innerWidth","maxY","innerHeight","minX","minY","qx","max","min","qy","path","selectClipPath","clipPathId","endTheta","t2theta","PI","t3theta","tx1","ty1","tx2","ty2","tx3","ty3","points"],"mappings":"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","sourcesContent":["import React, { MouseEvent, PureComponent } from 'react';\n\nimport './LinkerLink.scss';\n\n/** The constant for how droopy the links are. Increase for more droopiness. */\nconst DROOP = 0.015;\nconst DROOP_EXPONENT = 1.5;\nconst TRIANGLE_HEIGHT = 12;\nconst TRIANGLE_BASE = 12;\nconst TRIANGLE_TIP = 2;\nconst TRIANGLE_HYPOTENUSE = Math.sqrt(\n (TRIANGLE_BASE * 0.5) ** 2 + TRIANGLE_HEIGHT ** 2\n);\nconst TRIANGLE_THETA = Math.asin((TRIANGLE_BASE * 0.5) / TRIANGLE_HEIGHT);\nconst CLIP_RADIUS = 15;\n\nexport type LinkerLinkProps = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n onClick: (id: string) => void;\n};\n\nexport class LinkerLink extends PureComponent<LinkerLinkProps> {\n static defaultProps = {\n className: '',\n onClick(): void {\n // no-op\n },\n };\n\n /**\n * Make an SVG path for a circle at the specified coordinates.\n * @param x The x coordinate for the centre of the circle\n * @param y The y coordinate for the centre of the circle\n * @param r Radius of the circle\n * @returns The SVG string path\n */\n static makeCirclePath(x: number, y: number, r: number): string {\n return `M ${x} ${y} m -${r},0 a ${r},${r} 0 1,0 ${\n r * 2\n },0 a ${r},${r} 0 1,0 -${r * 2},0 z`;\n }\n\n constructor(props: LinkerLinkProps) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n }\n\n handleClick(event: MouseEvent<SVGPathElement>): void {\n event.stopPropagation();\n event.preventDefault();\n\n const { id, onClick } = this.props;\n onClick(id);\n }\n\n render(): JSX.Element {\n const { className, x1, y1, x2, y2, id } = this.props;\n\n // Path between the two points\n const len = Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);\n const theta = Math.atan2(y2 - y1, x2 - x1);\n const xMult = Math.sin(theta);\n const yMult = Math.cos(theta) + 2;\n const maxX = window.innerWidth;\n const maxY = window.innerHeight;\n const minX = 0;\n const minY = 0;\n const qx = Math.max(\n minX,\n Math.min(\n x1 + (x2 - x1) / 2 + xMult * (len * DROOP) ** DROOP_EXPONENT,\n maxX\n )\n );\n const qy = Math.max(\n minY,\n Math.min(\n y1 + (y2 - y1) / 2 + yMult * (len * DROOP) ** DROOP_EXPONENT,\n maxY\n )\n );\n const path = `M ${x1} ${y1} Q ${qx} ${qy} ${x2} ${y2}`;\n\n // path for a 100%, 100% rect, then two paths for circles at point\n const selectClipPath = `M ${minX} ${minY} L ${minX} ${maxY} L ${maxX} ${maxY} L ${maxX} ${minY} z\n ${LinkerLink.makeCirclePath(x1, y1, CLIP_RADIUS)}\n ${LinkerLink.makeCirclePath(x2, y2, CLIP_RADIUS)}`;\n const clipPathId = `link-select-clip-${id}`;\n\n // Calculate location of the end triangle\n // We draw it instead of using markers to allow for transitions in the style\n const endTheta = Math.atan2(y2 - qy, x2 - qx);\n const t2theta = endTheta - TRIANGLE_THETA + Math.PI;\n const t3theta = endTheta + TRIANGLE_THETA + Math.PI;\n const tx1 = x2 + Math.cos(endTheta) * TRIANGLE_TIP;\n const ty1 = y2 + Math.sin(endTheta) * TRIANGLE_TIP;\n const tx2 = tx1 + Math.cos(t2theta) * TRIANGLE_HYPOTENUSE;\n const ty2 = ty1 + Math.sin(t2theta) * TRIANGLE_HYPOTENUSE;\n const tx3 = tx1 + Math.cos(t3theta) * TRIANGLE_HYPOTENUSE;\n const ty3 = ty1 + Math.sin(t3theta) * TRIANGLE_HYPOTENUSE;\n const points = `${tx1},${ty1} ${tx2},${ty2} ${tx3},${ty3}`;\n\n return (\n <svg className={className}>\n <clipPath id={clipPathId}>\n <path d={selectClipPath} clipRule=\"evenodd\" />\n </clipPath>\n <path\n className=\"link-select\"\n d={path}\n onClick={this.handleClick}\n clipPath={`url(#${clipPathId})`}\n />\n <path className=\"link-background\" d={path} />\n <path className=\"link-foreground\" d={path} />\n <circle className=\"link-dot\" cx={x1} cy={y1} r=\"5\" />\n <polygon className=\"link-triangle\" points={points} />\n </svg>\n );\n }\n}\n\nexport default LinkerLink;\n"],"file":"LinkerLink.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerOverlayContent.js","names":["React","Component","classNames","ContextActions","GLOBAL_SHORTCUTS","LayoutUtils","Log","isLinkableFromPanel","LinkerLink","log","module","LinkerOverlayContent","constructor","props","handleMouseMove","bind","handleEscapePressed","state","mouseX","undefined","mouseY","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","panelManager","panelId","columnName","panel","getOpenedPanelById","Error","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","event","setState","clientX","clientY","onCancel","render","disabled","links","messageText","onLinkDeleted","onAllLinksDeleted","onDone","visibleLinks","map","link","id","type","isReversed","start","end","x1","y1","x2","y2","tmpX","tmpY","className","interactive","filter","item","action","shortcut","LINKER_CLOSE","isGlobal"],"sources":["../../src/linker/LinkerOverlayContent.tsx"],"sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport { ContextActions, GLOBAL_SHORTCUTS } from '@deephaven/components';\nimport { LayoutUtils, PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport GoldenLayout from '@deephaven/golden-layout';\nimport {\n isLinkableFromPanel,\n Link,\n LinkerCoordinate,\n LinkPoint,\n} from './LinkerUtils';\nimport LinkerLink from './LinkerLink';\nimport './LinkerOverlayContent.scss';\n\nconst log = Log.module('LinkerOverlayContent');\n\nexport type VisibleLink = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n};\n\nexport type LinkerOverlayContentProps = {\n disabled?: boolean;\n links: Link[];\n messageText: string;\n onLinkDeleted: (linkId: string) => void;\n onAllLinksDeleted: () => void;\n onCancel: () => void;\n onDone: () => void;\n panelManager: PanelManager;\n};\n\nexport type LinkerOverlayContentState = {\n mouseX?: number;\n mouseY?: number;\n};\n\nexport class LinkerOverlayContent extends Component<\n LinkerOverlayContentProps,\n LinkerOverlayContentState\n> {\n static defaultProps = {\n disabled: 'false',\n };\n\n constructor(props: LinkerOverlayContentProps) {\n super(props);\n\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n\n this.state = {\n mouseX: undefined,\n mouseY: undefined,\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('mousemove', this.handleMouseMove, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n }\n\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint: LinkPoint): LinkerCoordinate {\n const { panelManager } = this.props;\n const { panelId, columnName } = linkPoint;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\n `Panel does not have getCoordinateForColumn method: ${panelId}`\n );\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n const coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n const glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(`Unable to find panel container for id: ${panelId}`);\n }\n return LayoutUtils.getTabPoint(\n (glContainer as unknown) as GoldenLayout.Container\n ) as LinkerCoordinate;\n }\n\n handleMouseMove(event: MouseEvent): void {\n this.setState({\n mouseX: event.clientX,\n mouseY: event.clientY,\n });\n }\n\n handleEscapePressed(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n render(): JSX.Element {\n const {\n disabled,\n links,\n messageText,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouseX, mouseY } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end } = link;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouseX ?? x1;\n let y2 = mouseY ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null }\n );\n return { x1, y1, x2, y2, id, className };\n } catch (error) {\n log.error('Unable to get point for link', link, error);\n return null;\n }\n })\n .filter(item => item != null) as VisibleLink[];\n\n return (\n <div className=\"linker-overlay\">\n <svg>\n {visibleLinks.map(({ x1, y1, x2, y2, id, className }) => (\n <LinkerLink\n className={className}\n id={id}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n key={id}\n onClick={onLinkDeleted}\n />\n ))}\n </svg>\n <div className=\"linker-toast-dialog\">\n <div className=\"toast-body\">{messageText}</div>\n <div className=\"toast-footer\">\n <button\n className=\"btn btn-outline-primary\"\n onClick={onAllLinksDeleted}\n type=\"button\"\n >\n Clear All\n </button>\n <button className=\"btn btn-primary\" onClick={onDone} type=\"button\">\n Done\n </button>\n </div>\n </div>\n <ContextActions\n actions={[\n {\n action: this.handleEscapePressed,\n shortcut: GLOBAL_SHORTCUTS.LINKER_CLOSE,\n isGlobal: true,\n },\n ]}\n />\n </div>\n );\n }\n}\n\nexport default LinkerOverlayContent;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/linker/LinkerOverlayContent.tsx"],"names":["React","Component","classNames","ContextActions","GLOBAL_SHORTCUTS","LayoutUtils","Log","isLinkableFromPanel","LinkerLink","log","module","LinkerOverlayContent","constructor","props","handleMouseMove","bind","handleEscapePressed","state","mouseX","undefined","mouseY","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","panelManager","panelId","columnName","panel","getOpenedPanelById","Error","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","event","setState","clientX","clientY","onCancel","render","disabled","links","messageText","onLinkDeleted","onAllLinksDeleted","onDone","visibleLinks","map","link","id","type","isReversed","start","end","x1","y1","x2","y2","tmpX","tmpY","className","interactive","filter","item","action","shortcut","LINKER_CLOSE","isGlobal"],"mappings":"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","sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport { ContextActions, GLOBAL_SHORTCUTS } from '@deephaven/components';\nimport { LayoutUtils, PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport GoldenLayout from '@deephaven/golden-layout';\nimport {\n isLinkableFromPanel,\n Link,\n LinkerCoordinate,\n LinkPoint,\n} from './LinkerUtils';\nimport LinkerLink from './LinkerLink';\nimport './LinkerOverlayContent.scss';\n\nconst log = Log.module('LinkerOverlayContent');\n\nexport type VisibleLink = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n};\n\nexport type LinkerOverlayContentProps = {\n disabled?: boolean;\n links: Link[];\n messageText: string;\n onLinkDeleted: (linkId: string) => void;\n onAllLinksDeleted: () => void;\n onCancel: () => void;\n onDone: () => void;\n panelManager: PanelManager;\n};\n\nexport type LinkerOverlayContentState = {\n mouseX?: number;\n mouseY?: number;\n};\n\nexport class LinkerOverlayContent extends Component<\n LinkerOverlayContentProps,\n LinkerOverlayContentState\n> {\n static defaultProps = {\n disabled: 'false',\n };\n\n constructor(props: LinkerOverlayContentProps) {\n super(props);\n\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n\n this.state = {\n mouseX: undefined,\n mouseY: undefined,\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('mousemove', this.handleMouseMove, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n }\n\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint: LinkPoint): LinkerCoordinate {\n const { panelManager } = this.props;\n const { panelId, columnName } = linkPoint;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\n `Panel does not have getCoordinateForColumn method: ${panelId}`\n );\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n const coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n const glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(`Unable to find panel container for id: ${panelId}`);\n }\n return LayoutUtils.getTabPoint(\n (glContainer as unknown) as GoldenLayout.Container\n ) as LinkerCoordinate;\n }\n\n handleMouseMove(event: MouseEvent): void {\n this.setState({\n mouseX: event.clientX,\n mouseY: event.clientY,\n });\n }\n\n handleEscapePressed(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n render(): JSX.Element {\n const {\n disabled,\n links,\n messageText,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouseX, mouseY } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end } = link;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouseX ?? x1;\n let y2 = mouseY ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null }\n );\n return { x1, y1, x2, y2, id, className };\n } catch (error) {\n log.error('Unable to get point for link', link, error);\n return null;\n }\n })\n .filter(item => item != null) as VisibleLink[];\n\n return (\n <div className=\"linker-overlay\">\n <svg>\n {visibleLinks.map(({ x1, y1, x2, y2, id, className }) => (\n <LinkerLink\n className={className}\n id={id}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n key={id}\n onClick={onLinkDeleted}\n />\n ))}\n </svg>\n <div className=\"linker-toast-dialog\">\n <div className=\"toast-body\">{messageText}</div>\n <div className=\"toast-footer\">\n <button\n className=\"btn btn-outline-primary\"\n onClick={onAllLinksDeleted}\n type=\"button\"\n >\n Clear All\n </button>\n <button className=\"btn btn-primary\" onClick={onDone} type=\"button\">\n Done\n </button>\n </div>\n </div>\n <ContextActions\n actions={[\n {\n action: this.handleEscapePressed,\n shortcut: GLOBAL_SHORTCUTS.LINKER_CLOSE,\n isGlobal: true,\n },\n ]}\n />\n </div>\n );\n }\n}\n\nexport default LinkerOverlayContent;\n"],"file":"LinkerOverlayContent.js"}
|
|
@@ -4,7 +4,7 @@ export declare type LinkPoint = {
|
|
|
4
4
|
panelId: string | string[];
|
|
5
5
|
panelComponent?: string | null;
|
|
6
6
|
columnName: string;
|
|
7
|
-
columnType: string;
|
|
7
|
+
columnType: string | null;
|
|
8
8
|
};
|
|
9
9
|
export declare type Link = {
|
|
10
10
|
start: LinkPoint;
|
|
@@ -15,7 +15,7 @@ export declare type Link = {
|
|
|
15
15
|
};
|
|
16
16
|
export declare type LinkColumn = {
|
|
17
17
|
name: string;
|
|
18
|
-
type: string;
|
|
18
|
+
type: string | null;
|
|
19
19
|
};
|
|
20
20
|
export declare type LinkFilterMapValue<T = unknown> = {
|
|
21
21
|
columnType: string;
|
|
@@ -35,7 +35,7 @@ export declare type LinkableFromPanel = PanelComponent & {
|
|
|
35
35
|
};
|
|
36
36
|
export declare type LinkablePanel = LinkableFromPanel & {
|
|
37
37
|
setFilterMap: (filterMap: LinkFilterMap) => void;
|
|
38
|
-
unsetFilterValue: (name: string, type: string) => void;
|
|
38
|
+
unsetFilterValue: (name: string, type: string | null) => void;
|
|
39
39
|
};
|
|
40
40
|
export declare function isLinkableFromPanel(panel: PanelComponent): panel is LinkableFromPanel;
|
|
41
41
|
export declare function isLinkablePanel(panel: PanelComponent): panel is LinkablePanel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerUtils.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerUtils.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKnE,oBAAY,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,CAAC;AAEhE,oBAAY,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"LinkerUtils.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerUtils.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKnE,oBAAY,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,CAAC;AAEhE,oBAAY,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,oBAAY,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;CAChB,CAAC;AAEF,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,CAAC;AAEF,oBAAY,kBAAkB,CAAC,CAAC,GAAG,OAAO,IAAI;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF,oBAAY,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,oBAAY,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,oBAAY,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAG3D,oBAAY,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,oBAAY,iBAAiB,GAAG,cAAc,GAAG;IAC/C,sBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,gBAAgB,CAAC;CAC5D,CAAC;AAEF,oBAAY,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;AAID;;GAEG;AACH,cAAM,WAAW;IACf,MAAM,CAAC,aAAa,wBASjB;IAEH;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAChB,KAAK,CAAC,EAAE,SAAS,EACjB,GAAG,CAAC,EAAE,SAAS,EACf,qBAAqB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GACxC,QAAQ;IA0DX;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CACf,OAAO,EAAE,UAAU,EAAE,EACrB,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"}
|