@deephaven/dashboard-core-plugins 0.15.6-beta.0 → 0.15.6-beta.3
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.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.d.ts +4 -2
- package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +17 -8
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/NotebookPanel.d.ts.map +1 -1
- package/dist/panels/NotebookPanel.js +2 -3
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/package.json +18 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ChartBuilderPlugin.tsx"],"names":["React","useCallback","ChartModelFactory","ChartUtils","assertIsDashboardPluginProps","LayoutUtils","useListener","shortid","IrisGridEvent","ChartPanel","ChartBuilderPlugin","props","id","layout","handleCreateChart","metadata","panelId","generate","table","settings","makeModel","makeModelFromSettings","title","titleFromSettings","config","type","component","COMPONENT","localDashboardId","root","openComponent","eventHub","CREATE_CHART"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,QAAmC,OAAnC;AACA,SAASC,iBAAT,EAA4BC,UAA5B,QAA8C,kBAA9C;AACA,SACEC,4BADF,EAGEC,WAHF,EAIEC,WAJF,QAKO,sBALP;AAOA,OAAOC,OAAP,MAAoB,SAApB;SACSC,a;SACAC,U;;AAIT;AACA;AACA;AACA;AACA,OAAO,IAAMC,kBAAkB,GAC7BC,KADgC,IAEhB;AAChBP,EAAAA,4BAA4B,CAACO,KAAD,CAA5B;AACA,MAAM;AAAEC,IAAAA,EAAF;AAAMC,IAAAA;AAAN,MAAiBF,KAAvB;AACA,MAAMG,iBAAiB,GAAGb,WAAW,CACnC,QAmBM;AAAA,QAnBL;AACCc,MAAAA,QADD;AAECC,MAAAA,OAAO,GAAGT,OAAO,CAACU,QAAR,EAFX;AAGCC,MAAAA;AAHD,KAmBK;AACJ,QAAM;AAAEC,MAAAA;AAAF,QAAeJ,QAArB;;AACA,QAAMK,SAAS,GAAG,MAChB;AACAlB,IAAAA,iBAAiB,CAACmB,qBAAlB,CAAwCF,QAAxC,EAAyDD,KAAzD,CAFF;;AAGA,QAAMI,KAAK,GAAGnB,UAAU,CAACoB,iBAAX,CAA6BJ,QAA7B,CAAd;AAEA,QAAMK,MAAM,GAAG;AACbC,MAAAA,IAAI,EAAE,iBADO;AAEbC,MAAAA,SAAS,EAAEjB,UAAU,CAACkB,SAFT;AAGbhB,MAAAA,KAAK,EAAE;AACLiB,QAAAA,gBAAgB,EAAEhB,EADb;AAELA,QAAAA,EAAE,EAAEI,OAFC;AAGLD,QAAAA,QAHK;AAILK,QAAAA;AAJK,OAHM;AASbE,MAAAA,KATa;AAUbV,MAAAA,EAAE,EAAEI;AAVS,KAAf;AAaA,QAAM;AAAEa,MAAAA;AAAF,QAAWhB,MAAjB;AACAR,IAAAA,WAAW,CAACyB,aAAZ,CAA0B;AAAED,MAAAA,IAAF;AAAQL,MAAAA;AAAR,KAA1B;AACD,GA1CkC,EA2CnC,CAACZ,EAAD,EAAKC,MAAL,CA3CmC,CAArC;AA8CAP,EAAAA,WAAW,CAACO,MAAM,CAACkB,QAAR,EAAkBvB,aAAa,CAACwB,YAAhC,EAA8ClB,iBAA9C,CAAX;AAEA,sBAAO,yCAAP;AACD,CAtDM;AAwDP,eAAeJ,kBAAf","sourcesContent":["import React, { useCallback } from 'react';\nimport { ChartModelFactory, ChartUtils } from '@deephaven/chart';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n useListener,\n} from '@deephaven/dashboard';\nimport { Table } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { IrisGridEvent } from './events';\nimport { ChartPanel } from './panels';\n\nexport type ChartBuilderPluginProps = Partial<DashboardPluginComponentProps>;\n\n/**\n * Listens for IrisGridEvent.CREATE_CHART and creates a chart from the settings provided\n * Requires the GridPlugin and ChartPlugin plugins to be loaded as well\n */\nexport const ChartBuilderPlugin = (\n props: ChartBuilderPluginProps\n): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id, layout } = props;\n const handleCreateChart = useCallback(\n ({\n metadata,\n panelId = shortid.generate(),\n table,\n }: {\n metadata: {\n settings: {\n type:
|
|
1
|
+
{"version":3,"sources":["../src/ChartBuilderPlugin.tsx"],"names":["React","useCallback","ChartModelFactory","ChartUtils","assertIsDashboardPluginProps","LayoutUtils","useListener","shortid","IrisGridEvent","ChartPanel","ChartBuilderPlugin","props","id","layout","handleCreateChart","metadata","panelId","generate","table","settings","makeModel","makeModelFromSettings","title","titleFromSettings","config","type","component","COMPONENT","localDashboardId","root","openComponent","eventHub","CREATE_CHART"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,QAAmC,OAAnC;AACA,SAASC,iBAAT,EAA4BC,UAA5B,QAA8C,kBAA9C;AACA,SACEC,4BADF,EAGEC,WAHF,EAIEC,WAJF,QAKO,sBALP;AAOA,OAAOC,OAAP,MAAoB,SAApB;SACSC,a;SACAC,U;;AAIT;AACA;AACA;AACA;AACA,OAAO,IAAMC,kBAAkB,GAC7BC,KADgC,IAEhB;AAChBP,EAAAA,4BAA4B,CAACO,KAAD,CAA5B;AACA,MAAM;AAAEC,IAAAA,EAAF;AAAMC,IAAAA;AAAN,MAAiBF,KAAvB;AACA,MAAMG,iBAAiB,GAAGb,WAAW,CACnC,QAmBM;AAAA,QAnBL;AACCc,MAAAA,QADD;AAECC,MAAAA,OAAO,GAAGT,OAAO,CAACU,QAAR,EAFX;AAGCC,MAAAA;AAHD,KAmBK;AACJ,QAAM;AAAEC,MAAAA;AAAF,QAAeJ,QAArB;;AACA,QAAMK,SAAS,GAAG,MAChB;AACAlB,IAAAA,iBAAiB,CAACmB,qBAAlB,CAAwCF,QAAxC,EAAyDD,KAAzD,CAFF;;AAGA,QAAMI,KAAK,GAAGnB,UAAU,CAACoB,iBAAX,CAA6BJ,QAA7B,CAAd;AAEA,QAAMK,MAAM,GAAG;AACbC,MAAAA,IAAI,EAAE,iBADO;AAEbC,MAAAA,SAAS,EAAEjB,UAAU,CAACkB,SAFT;AAGbhB,MAAAA,KAAK,EAAE;AACLiB,QAAAA,gBAAgB,EAAEhB,EADb;AAELA,QAAAA,EAAE,EAAEI,OAFC;AAGLD,QAAAA,QAHK;AAILK,QAAAA;AAJK,OAHM;AASbE,MAAAA,KATa;AAUbV,MAAAA,EAAE,EAAEI;AAVS,KAAf;AAaA,QAAM;AAAEa,MAAAA;AAAF,QAAWhB,MAAjB;AACAR,IAAAA,WAAW,CAACyB,aAAZ,CAA0B;AAAED,MAAAA,IAAF;AAAQL,MAAAA;AAAR,KAA1B;AACD,GA1CkC,EA2CnC,CAACZ,EAAD,EAAKC,MAAL,CA3CmC,CAArC;AA8CAP,EAAAA,WAAW,CAACO,MAAM,CAACkB,QAAR,EAAkBvB,aAAa,CAACwB,YAAhC,EAA8ClB,iBAA9C,CAAX;AAEA,sBAAO,yCAAP;AACD,CAtDM;AAwDP,eAAeJ,kBAAf","sourcesContent":["import React, { useCallback } from 'react';\nimport { ChartModelFactory, ChartUtils } from '@deephaven/chart';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n useListener,\n} from '@deephaven/dashboard';\nimport { SeriesPlotStyle, Table } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { IrisGridEvent } from './events';\nimport { ChartPanel } from './panels';\n\nexport type ChartBuilderPluginProps = Partial<DashboardPluginComponentProps>;\n\n/**\n * Listens for IrisGridEvent.CREATE_CHART and creates a chart from the settings provided\n * Requires the GridPlugin and ChartPlugin plugins to be loaded as well\n */\nexport const ChartBuilderPlugin = (\n props: ChartBuilderPluginProps\n): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id, layout } = props;\n const handleCreateChart = useCallback(\n ({\n metadata,\n panelId = shortid.generate(),\n table,\n }: {\n metadata: {\n settings: {\n type: keyof SeriesPlotStyle;\n series: string[];\n xAxis: string;\n isLinked: boolean;\n hiddenSeries?: string[];\n };\n sourcePanelId: string;\n table: string;\n tableSettings: Record<string, unknown>;\n };\n panelId?: string;\n table: Table;\n }) => {\n const { settings } = metadata;\n const makeModel = () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ChartModelFactory.makeModelFromSettings(settings as any, table);\n const title = ChartUtils.titleFromSettings(settings);\n\n const config = {\n type: 'react-component',\n component: ChartPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n },\n title,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config });\n },\n [id, layout]\n );\n\n useListener(layout.eventHub, IrisGridEvent.CREATE_CHART, handleCreateChart);\n\n return <></>;\n};\n\nexport default ChartBuilderPlugin;\n"],"file":"ChartBuilderPlugin.js"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { ReactElement } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { ColumnName, InputFilter } from '@deephaven/iris-grid';
|
|
4
|
-
import { Column } from '@deephaven/jsapi-shim';
|
|
5
4
|
import './ChartFilterOverlay.scss';
|
|
6
|
-
export declare type ColumnMap = Map<ColumnName,
|
|
5
|
+
export declare type ColumnMap = Map<ColumnName, {
|
|
6
|
+
name: string;
|
|
7
|
+
type: string;
|
|
8
|
+
}>;
|
|
7
9
|
interface ChartFilterOverlayProps {
|
|
8
10
|
columnMap: ColumnMap;
|
|
9
11
|
inputFilterMap: Map<ColumnName, InputFilter>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartFilterOverlay.d.ts","sourceRoot":"","sources":["../../src/panels/ChartFilterOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAc,YAAY,EAAwB,MAAM,OAAO,CAAC;AAC9E,OAAO,SAAS,MAAM,YAAY,CAAC;AAMnC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,
|
|
1
|
+
{"version":3,"file":"ChartFilterOverlay.d.ts","sourceRoot":"","sources":["../../src/panels/ChartFilterOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAc,YAAY,EAAwB,MAAM,OAAO,CAAC;AAC9E,OAAO,SAAS,MAAM,YAAY,CAAC;AAMnC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,2BAA2B,CAAC;AAEnC,oBAAY,SAAS,GAAG,GAAG,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAExE,UAAU,uBAAuB;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC7C,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,eAAe,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,QAAA,MAAM,kBAAkB;8GAQrB,uBAAuB,GAAG,YAAY;;;;;;;;;;CA+FxC,CAAC;AAYF,eAAe,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/panels/ChartFilterOverlay.tsx"],"names":["React","useCallback","useMemo","PropTypes","classNames","FontAwesomeIcon","ButtonOld","vsPass","vsWarning","TextUtils","ChartFilterOverlay","columnMap","inputFilterMap","linkedColumnMap","onAdd","onOpenLinker","waitingFilterMap","waitingInputMap","inputMessage","waitingColumns","Array","from","keys","needsInputFilterValue","find","columnName","get","needsLinkValue","columnsText","join","map","item","columns","values","handleAddClick","event","stopPropagation","preventDefault","handleOpenLinker","isWaitingFilters","size","isWaitingInput","column","isColumnWaiting","has","name","icon","propTypes","instanceOf","Map","isRequired","func"],"mappings":"AAAA,OAAOA,KAAP,IAA0CC,WAA1C,EAAuDC,OAAvD,QAAsE,OAAtE;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,SAAT,QAA0B,uBAA1B;AACA,SAASC,MAAT,EAAiBC,SAAjB,QAAkC,kBAAlC;AACA,SAASC,SAAT,QAA0B,kBAA1B;;;
|
|
1
|
+
{"version":3,"sources":["../../src/panels/ChartFilterOverlay.tsx"],"names":["React","useCallback","useMemo","PropTypes","classNames","FontAwesomeIcon","ButtonOld","vsPass","vsWarning","TextUtils","ChartFilterOverlay","columnMap","inputFilterMap","linkedColumnMap","onAdd","onOpenLinker","waitingFilterMap","waitingInputMap","inputMessage","waitingColumns","Array","from","keys","needsInputFilterValue","find","columnName","get","needsLinkValue","columnsText","join","map","item","columns","values","handleAddClick","event","stopPropagation","preventDefault","handleOpenLinker","isWaitingFilters","size","isWaitingInput","column","isColumnWaiting","has","name","icon","propTypes","instanceOf","Map","isRequired","func"],"mappings":"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","sourcesContent":["import React, { MouseEvent, ReactElement, useCallback, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ButtonOld } from '@deephaven/components';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { TextUtils } from '@deephaven/utils';\nimport { ColumnName, InputFilter } from '@deephaven/iris-grid';\nimport './ChartFilterOverlay.scss';\n\nexport type ColumnMap = Map<ColumnName, { name: string; type: string }>;\n\ninterface ChartFilterOverlayProps {\n columnMap: ColumnMap;\n inputFilterMap: Map<ColumnName, InputFilter>;\n linkedColumnMap: Map<string, unknown>;\n onAdd: (columns: InputFilter[]) => void;\n onOpenLinker: () => void;\n waitingFilterMap: Map<string, InputFilter>;\n waitingInputMap: Map<ColumnName, unknown>;\n}\n\nconst ChartFilterOverlay = ({\n columnMap,\n inputFilterMap,\n linkedColumnMap,\n onAdd,\n onOpenLinker,\n waitingFilterMap,\n waitingInputMap,\n}: ChartFilterOverlayProps): ReactElement => {\n const inputMessage = useMemo(() => {\n const waitingColumns = Array.from(waitingInputMap.keys());\n const needsInputFilterValue = waitingColumns.find(\n (columnName: ColumnName) => inputFilterMap.get(columnName) != null\n );\n const needsLinkValue = waitingColumns.find(\n columnName => linkedColumnMap.get(columnName) != null\n );\n const columnsText = TextUtils.join(waitingColumns.map(item => `\"${item}\"`));\n if (needsInputFilterValue && needsLinkValue) {\n return `Use a filter control or linked table to set a value for ${columnsText}`;\n }\n if (needsInputFilterValue) {\n return `Set a filter control value for ${columnsText}`;\n }\n return `Double click a row in a linked table to set a value for ${columnsText}`;\n }, [inputFilterMap, linkedColumnMap, waitingInputMap]);\n\n const columns = useMemo(() => Array.from(columnMap.values()), [columnMap]);\n\n const handleAddClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n event.preventDefault();\n\n onAdd(Array.from(waitingFilterMap.values()));\n },\n [onAdd, waitingFilterMap]\n );\n\n const handleOpenLinker = useCallback(\n event => {\n event.stopPropagation();\n event.preventDefault();\n\n onOpenLinker();\n },\n [onOpenLinker]\n );\n\n const isWaitingFilters = waitingFilterMap.size > 0;\n const isWaitingInput = !isWaitingFilters && waitingInputMap.size > 0;\n\n return (\n <div className=\"chart-panel-overlay chart-filter-overlay\">\n <div\n className={classNames(\n 'chart-panel-overlay-content chart-filter-overlay-content',\n { 'chart-filter-waiting-filter': isWaitingFilters },\n { 'chart-filter-waiting-input': isWaitingInput }\n )}\n >\n {isWaitingFilters && (\n <>\n <div className=\"info-message\">\n This plot requires a filter control to be added to the layout or a\n table link to be created on the following columns:\n </div>\n <div className=\"waiting-filter-list\">\n {columns.map(column => {\n const isColumnWaiting = waitingFilterMap.has(column.name);\n const icon = isColumnWaiting ? vsWarning : vsPass;\n return (\n <div\n key={column.name}\n className={classNames('waiting-filter-item', {\n 'is-invalid': isColumnWaiting,\n })}\n >\n <FontAwesomeIcon icon={icon} />\n {column.name}\n </div>\n );\n })}\n </div>\n <div>\n <ButtonOld onClick={handleAddClick} className=\"btn-primary\">\n Add Input Filters\n </ButtonOld>\n <ButtonOld onClick={handleOpenLinker} className=\"btn-primary\">\n Open Linker Tool\n </ButtonOld>\n </div>\n </>\n )}\n {isWaitingInput && (\n <>\n <div className=\"info-message\">Waiting for User Input</div>\n <div className=\"\">{inputMessage}</div>\n </>\n )}\n </div>\n </div>\n );\n};\n\nChartFilterOverlay.propTypes = {\n columnMap: PropTypes.instanceOf(Map).isRequired,\n inputFilterMap: PropTypes.instanceOf(Map).isRequired,\n linkedColumnMap: PropTypes.instanceOf(Map).isRequired,\n onAdd: PropTypes.func.isRequired,\n onOpenLinker: PropTypes.func.isRequired,\n waitingFilterMap: PropTypes.instanceOf(Map).isRequired,\n waitingInputMap: PropTypes.instanceOf(Map).isRequired,\n};\n\nexport default ChartFilterOverlay;\n"],"file":"ChartFilterOverlay.js"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Component, ReactElement, RefObject } from 'react';
|
|
2
|
-
import { Chart, ChartModel } from '@deephaven/chart';
|
|
2
|
+
import { Chart, ChartModel, ChartModelSettings } from '@deephaven/chart';
|
|
3
3
|
import { PanelComponent } from '@deephaven/dashboard';
|
|
4
4
|
import { InputFilter, ColumnName } from '@deephaven/iris-grid';
|
|
5
|
-
import {
|
|
5
|
+
import { SeriesPlotStyle, TableTemplate } from '@deephaven/jsapi-shim';
|
|
6
6
|
import { WorkspaceSettings } from '@deephaven/redux';
|
|
7
7
|
import { Pending } from '@deephaven/utils';
|
|
8
8
|
import GoldenLayout from '@deephaven/golden-layout';
|
|
@@ -15,7 +15,10 @@ import { Link } from '../linker/LinkerUtils';
|
|
|
15
15
|
import { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';
|
|
16
16
|
export declare type InputFilterMap = Map<string, InputFilter>;
|
|
17
17
|
export declare type FilterMap = Map<string, string>;
|
|
18
|
-
export declare type LinkedColumnMap = Map<string,
|
|
18
|
+
export declare type LinkedColumnMap = Map<string, {
|
|
19
|
+
name: string;
|
|
20
|
+
type: string;
|
|
21
|
+
}>;
|
|
19
22
|
export declare function isChartPanelTableMetadata(metadata: ChartPanelMetadata): metadata is ChartPanelTableMetadata;
|
|
20
23
|
export declare type ChartPanelFigureMetadata = {
|
|
21
24
|
figure: string;
|
|
@@ -28,7 +31,7 @@ export declare type ChartPanelTableMetadata = {
|
|
|
28
31
|
title: string;
|
|
29
32
|
xAxis: string;
|
|
30
33
|
series: string[];
|
|
31
|
-
type: SeriesPlotStyle;
|
|
34
|
+
type: keyof SeriesPlotStyle;
|
|
32
35
|
};
|
|
33
36
|
tableSettings: ChartPanelTableSettings;
|
|
34
37
|
};
|
|
@@ -58,7 +61,7 @@ export interface ChartPanelTableSettings {
|
|
|
58
61
|
}
|
|
59
62
|
export interface GLChartPanelState {
|
|
60
63
|
filterValueMap: [string, string][];
|
|
61
|
-
settings: Partial<
|
|
64
|
+
settings: Partial<ChartModelSettings>;
|
|
62
65
|
tableSettings: ChartPanelTableSettings;
|
|
63
66
|
irisGridState?: {
|
|
64
67
|
advancedFilters: unknown;
|
|
@@ -91,7 +94,7 @@ export interface ChartPanelProps {
|
|
|
91
94
|
settings: Partial<WorkspaceSettings>;
|
|
92
95
|
}
|
|
93
96
|
interface ChartPanelState {
|
|
94
|
-
settings: Partial<
|
|
97
|
+
settings: Partial<ChartModelSettings>;
|
|
95
98
|
error?: unknown;
|
|
96
99
|
isActive: boolean;
|
|
97
100
|
isDisconnected: boolean;
|
|
@@ -123,10 +126,16 @@ export declare class ChartPanel extends Component<ChartPanelProps, ChartPanelSta
|
|
|
123
126
|
chart: RefObject<Chart>;
|
|
124
127
|
pending: Pending;
|
|
125
128
|
initModel(): void;
|
|
126
|
-
getWaitingInputMap: (isFilterRequired: boolean, columnMap: ColumnMap, filterMap: FilterMap) => Map<string,
|
|
129
|
+
getWaitingInputMap: (isFilterRequired: boolean, columnMap: ColumnMap, filterMap: FilterMap) => Map<string, {
|
|
130
|
+
name: string;
|
|
131
|
+
type: string;
|
|
132
|
+
}>;
|
|
127
133
|
getWaitingFilterMap: (isFilterRequired: boolean, columnMap: ColumnMap, filterMap: FilterMap, linkedColumnMap: LinkedColumnMap, inputFilterMap: InputFilterMap) => Map<any, any>;
|
|
128
134
|
getInputFilterColumnMap: (columnMap: ColumnMap, inputFilters: InputFilter[]) => Map<string, InputFilter>;
|
|
129
|
-
getLinkedColumnMap: (columnMap: ColumnMap, links: Link[]) => Map<string,
|
|
135
|
+
getLinkedColumnMap: (columnMap: ColumnMap, links: Link[]) => Map<string, {
|
|
136
|
+
name: string;
|
|
137
|
+
type: string;
|
|
138
|
+
}>;
|
|
130
139
|
getSelectorColumns: (columnMap: ColumnMap, linkedColumnMap: LinkedColumnMap, columnSelectionValidator?: ColumnSelectionValidator | undefined) => {
|
|
131
140
|
name: string;
|
|
132
141
|
type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMlE,OAAO,EACL,KAAK,EACL,UAAU,
|
|
1
|
+
{"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/panels/ChartPanel.tsx"],"names":["React","Component","classNames","memoize","connect","CSSTransition","debounce","Chart","ChartUtils","isFigureChartModel","getOpenedPanelMapForDashboard","LayoutUtils","IrisGridUtils","dh","ThemeExport","Log","getActiveTool","getSettings","setActiveTool","setActiveToolAction","assertNotNull","Pending","PromiseUtils","TextUtils","WidgetPanel","ToolType","InputFilterEvent","ChartEvent","getColumnSelectionValidatorForDashboard","getInputFiltersForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","ChartFilterOverlay","ChartColumnSelectorOverlay","log","module","UPDATE_MODEL_DEBOUNCE","isChartPanelTableMetadata","metadata","settings","undefined","hasInputFilter","panel","inputFilters","hasPanelState","panelState","ChartPanel","constructor","props","isFilterRequired","columnMap","filterMap","Map","waitingInputMap","forEach","filter","name","delete","linkedColumnMap","inputFilterMap","waitingFilterMap","value","column","i","length","inputFilter","type","get","set","links","panelId","getIdFromPanel","link","columnName","start","has","end","columnSelectionValidator","Array","from","values","map","isValid","isActive","handleColumnSelected","bind","handleColumnMouseEnter","handleColumnMouseLeave","handleDisconnect","handleReconnect","handleFilterAdd","handleHide","handleError","handleLoadError","handleLoadSuccess","handleResize","handleSettingsChanged","handleOpenLinker","handleShow","handleSourceColumnChange","handleSourceFilterChange","handleSourceSortChange","handleTabBlur","handleTabFocus","handleUpdate","updateModelFromSource","handleClearAllFilters","panelContainer","createRef","chart","pending","filterValueMap","state","error","isDisconnected","isLoading","isLoaded","isLinked","model","componentDidMount","isHidden","setState","initModel","componentDidUpdate","prevProps","prevState","source","pruneFilterMaps","updateChangedInputFilters","updateFilters","updatePanelState","updateSettings","startListeningToSource","stopListeningToSource","componentWillUnmount","cancel","makeModel","add","resolved","close","then","table","debug","addEventListener","Table","EVENT_CUSTOMCOLUMNSCHANGED","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","removeEventListener","loadModelIfNecessary","glContainer","glEventHub","emit","COLUMN_SELECTED","Error","columns","openInputFilter","localDashboardId","LINKER","sendColumnChange","updateColumnFilters","prevModel","updateInputFilters","size","isCanceled","debug2","plot","Figure","create","makeFigureSettings","figure","setFigure","catch","sourcePanel","tableSettings","sourcePanelState","extractTableSettings","updateChart","update","prevSettings","setActive","OPEN_INPUT","title","isValueShown","createNewStack","focusElement","COLUMNS_CHANGED","getFilterColumnMap","getCoordinateForColumn","className","makeButtonClassName","current","element","querySelector","rect","getBoundingClientRect","width","height","x","left","y","bottom","setFilterMap","filterMapParam","updatedFilterMap","columnType","unsetFilterValue","getInputFilterColumnMap","filterValue","inputFilterValue","prevInputFilters","deletedInputFilters","prevInputFilter","find","deleteInputFilters","changedInputFilters","includes","forceUpdate","needsUpdate","linkValue","getWaitingInputMap","setFilter","defaultTitle","getDefaultTitle","filterTitle","join","entries","setTitle","newState","updateDimensions","render","isLinkerActive","getLinkedColumnMap","getWaitingFilterMap","errorMessage","isWaitingForFilter","isSelectingColumn","transitionMs","getSelectorColumns","mapStateToProps","ownProps","sourcePanelId","panelTableMap","openedPanelMap","activeTool","isolatedLinkerPanelId","forwardRef"],"mappings":"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","sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport { CSSTransition } from 'react-transition-group';\nimport debounce from 'lodash.debounce';\nimport {\n Chart,\n ChartModel,\n ChartUtils,\n isFigureChartModel,\n} from '@deephaven/chart';\nimport {\n getOpenedPanelMapForDashboard,\n LayoutUtils,\n PanelComponent,\n PanelProps,\n} from '@deephaven/dashboard';\nimport { IrisGridUtils, InputFilter, ColumnName } from '@deephaven/iris-grid';\nimport dh, {\n Column,\n FigureDescriptor,\n SeriesPlotStyle,\n TableTemplate,\n} from '@deephaven/jsapi-shim';\nimport { ThemeExport } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getSettings,\n RootState,\n setActiveTool as setActiveToolAction,\n WorkspaceSettings,\n} from '@deephaven/redux';\nimport {\n assertNotNull,\n Pending,\n PromiseUtils,\n TextUtils,\n} from '@deephaven/utils';\nimport GoldenLayout from '@deephaven/golden-layout';\nimport { ModelIndex } from '@deephaven/grid';\nimport { AdvancedFilterOptions, SortDirection } from '@deephaven/jsapi-utils';\nimport WidgetPanel from './WidgetPanel';\nimport ToolType from '../linker/ToolType';\nimport { InputFilterEvent, ChartEvent } from '../events';\nimport {\n getColumnSelectionValidatorForDashboard,\n getInputFiltersForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n} from '../redux';\nimport ChartFilterOverlay, { ColumnMap } from './ChartFilterOverlay';\nimport ChartColumnSelectorOverlay, {\n SelectorColumn,\n} from './ChartColumnSelectorOverlay';\nimport './ChartPanel.scss';\nimport { Link } from '../linker/LinkerUtils';\nimport { PanelState as IrisGridPanelState } from './IrisGridPanel';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst log = Log.module('ChartPanel');\nconst UPDATE_MODEL_DEBOUNCE = 150;\n\nexport type InputFilterMap = Map<string, InputFilter>;\n\nexport type FilterMap = Map<string, string>;\n\nexport type LinkedColumnMap = Map<string, Column>;\n\nexport function isChartPanelTableMetadata(\n metadata: ChartPanelMetadata\n): metadata is ChartPanelTableMetadata {\n return (metadata as ChartPanelTableMetadata).settings !== undefined;\n}\nexport type ChartPanelFigureMetadata = {\n figure: string;\n};\n\nexport type ChartPanelTableMetadata = {\n table: string;\n sourcePanelId: string;\n settings: {\n isLinked: boolean;\n title: string;\n xAxis: string;\n series: string[];\n type: SeriesPlotStyle;\n };\n tableSettings: ChartPanelTableSettings;\n};\n\nexport type ChartPanelMetadata =\n | ChartPanelFigureMetadata\n | ChartPanelTableMetadata;\n\ntype Settings = Record<string, unknown>;\n\nexport interface ChartPanelTableSettings {\n quickFilters?: [\n ModelIndex,\n {\n text: string;\n }\n ][];\n advancedFilters?: [\n ModelIndex,\n {\n options: AdvancedFilterOptions;\n }\n ][];\n inputFilters?: InputFilter[];\n sorts?: {\n column: ModelIndex;\n isAbs: boolean;\n direction: SortDirection;\n }[];\n partition?: unknown;\n partitionColumn?: string;\n}\nexport interface GLChartPanelState {\n filterValueMap: [string, string][];\n settings: Partial<WorkspaceSettings>;\n tableSettings: ChartPanelTableSettings;\n irisGridState?: {\n advancedFilters: unknown;\n quickFilters: unknown;\n sorts: unknown;\n };\n irisGridPanelState?: {\n partitionColumn: string;\n partition: unknown;\n };\n table?: string;\n figure?: string;\n}\nexport interface ChartPanelProps {\n glContainer: GoldenLayout.Container;\n glEventHub: GoldenLayout.EventEmitter;\n\n metadata: ChartPanelMetadata;\n /** Function to build the ChartModel used by this ChartPanel. Can return a promise. */\n makeModel: () => Promise<ChartModel>;\n inputFilters: InputFilter[];\n links: Link[];\n localDashboardId: string;\n isLinkerActive: boolean;\n source?: TableTemplate;\n sourcePanel?: PanelComponent;\n columnSelectionValidator?: ColumnSelectionValidator;\n setActiveTool: (tool: string) => void;\n setDashboardIsolatedLinkerPanelId: (\n id: string,\n secondParam: undefined\n ) => void;\n\n panelState: GLChartPanelState;\n settings: Partial<WorkspaceSettings>;\n}\n\ninterface ChartPanelState {\n settings: Partial<WorkspaceSettings>;\n error?: unknown;\n isActive: boolean;\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isLinked: boolean;\n\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: Map<string, string>;\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: Map<string, string>;\n model?: ChartModel;\n columnMap: ColumnMap;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: GLChartPanelState;\n}\n\nfunction hasInputFilter(\n panel: PanelProps\n): panel is PanelProps & { inputFilters: InputFilter[] } {\n return (\n (panel as PanelProps & { inputFilters: InputFilter[] }).inputFilters != null\n );\n}\n\nfunction hasPanelState(\n panel: unknown\n): panel is { panelState: IrisGridPanelState } {\n return (panel as { panelState: IrisGridPanelState }).panelState != null;\n}\n\nexport class ChartPanel extends Component<ChartPanelProps, ChartPanelState> {\n static defaultProps = {\n columnSelectionValidator: null,\n isLinkerActive: false,\n source: null,\n sourcePanel: null,\n panelState: null,\n settings: {},\n };\n\n static displayName = 'ChartPanel';\n\n static COMPONENT = 'ChartPanel';\n\n constructor(props: ChartPanelProps) {\n super(props);\n\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleColumnMouseEnter = this.handleColumnMouseEnter.bind(this);\n this.handleColumnMouseLeave = this.handleColumnMouseLeave.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleFilterAdd = this.handleFilterAdd.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSettingsChanged = this.handleSettingsChanged.bind(this);\n this.handleOpenLinker = this.handleOpenLinker.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleSourceColumnChange = this.handleSourceColumnChange.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.updateModelFromSource = debounce(\n this.updateModelFromSource.bind(this),\n UPDATE_MODEL_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n\n this.panelContainer = React.createRef();\n this.chart = React.createRef();\n this.pending = new Pending();\n\n const { metadata, panelState } = props;\n const { filterValueMap = [], settings = {} } = panelState ?? {};\n\n this.state = {\n settings,\n error: undefined,\n isActive: false,\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n isLinked:\n metadata &&\n isChartPanelTableMetadata(metadata) &&\n metadata.settings &&\n metadata.settings.isLinked,\n\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: new Map(filterValueMap),\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: new Map(filterValueMap),\n model: undefined,\n columnMap: new Map(),\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n }\n\n componentDidMount(): void {\n if (!this.isHidden()) {\n this.setState({ isActive: true });\n this.initModel();\n }\n }\n\n componentDidUpdate(\n prevProps: ChartPanelProps,\n prevState: ChartPanelState\n ): void {\n const { inputFilters, source } = this.props;\n const {\n columnMap,\n model,\n filterMap,\n filterValueMap,\n isLinked,\n settings,\n } = this.state;\n if (!model) {\n return;\n }\n\n if (columnMap !== prevState.columnMap) {\n this.pruneFilterMaps();\n }\n\n if (inputFilters !== prevProps.inputFilters) {\n this.updateChangedInputFilters(inputFilters, prevProps.inputFilters);\n }\n\n if (filterMap !== prevState.filterMap) {\n this.updateFilters();\n } else if (filterValueMap !== prevState.filterValueMap) {\n this.updatePanelState();\n }\n\n if (settings !== prevState.settings && isFigureChartModel(model)) {\n model.updateSettings(settings);\n this.updatePanelState();\n }\n\n if (isLinked !== prevState.isLinked) {\n if (source) {\n if (isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n } else {\n this.stopListeningToSource(source);\n }\n }\n } else if (isLinked && source !== prevProps.source) {\n if (prevProps.source) {\n this.stopListeningToSource(prevProps.source);\n }\n if (source) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n\n const { source } = this.props;\n if (source) {\n this.stopListeningToSource(source);\n }\n }\n\n panelContainer: RefObject<HTMLDivElement>;\n\n chart: RefObject<Chart>;\n\n pending: Pending;\n\n initModel(): void {\n this.setState({ isLoading: true, isLoaded: false, error: undefined });\n\n const { makeModel } = this.props;\n this.pending\n .add(makeModel(), resolved => {\n resolved.close();\n })\n .then(this.handleLoadSuccess, this.handleLoadError);\n }\n\n getWaitingInputMap = memoize(\n (\n isFilterRequired: boolean,\n columnMap: ColumnMap,\n filterMap: FilterMap\n ): Map<string, Column> => {\n if (!isFilterRequired) {\n return new Map();\n }\n const waitingInputMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingInputMap.delete(name);\n });\n return waitingInputMap;\n }\n );\n\n getWaitingFilterMap = memoize(\n (\n isFilterRequired: boolean,\n columnMap: ColumnMap,\n filterMap: FilterMap,\n linkedColumnMap: LinkedColumnMap,\n inputFilterMap: InputFilterMap\n ) => {\n if (!isFilterRequired) {\n return new Map();\n }\n\n const waitingFilterMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingFilterMap.delete(name);\n });\n inputFilterMap.forEach((value, name) => {\n waitingFilterMap.delete(name);\n });\n linkedColumnMap.forEach((column, name) => {\n waitingFilterMap.delete(name);\n });\n return waitingFilterMap;\n }\n );\n\n getInputFilterColumnMap = memoize(\n (columnMap: ColumnMap, inputFilters: InputFilter[]) => {\n const inputFilterMap = new Map<string, InputFilter>();\n for (let i = 0; i < inputFilters.length; i += 1) {\n const inputFilter = inputFilters[i];\n const { name, type } = inputFilter;\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n inputFilterMap.set(name, inputFilter);\n }\n }\n return inputFilterMap;\n }\n );\n\n getLinkedColumnMap = memoize((columnMap: ColumnMap, links: Link[]) => {\n const linkedColumnMap = new Map<string, Column>();\n const panelId = LayoutUtils.getIdFromPanel(this);\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n let columnName = null;\n if (\n link.start &&\n link.start.panelId === panelId &&\n columnMap.has(link.start.columnName)\n ) {\n columnName = link.start.columnName;\n } else if (\n link.end &&\n link.end.panelId === panelId &&\n columnMap.has(link.end.columnName)\n ) {\n columnName = link.end.columnName;\n }\n\n if (columnName != null && columnMap.has(columnName)) {\n const column = columnMap.get(columnName);\n assertNotNull(column);\n linkedColumnMap.set(columnName, column);\n }\n }\n return linkedColumnMap;\n });\n\n getSelectorColumns = memoize(\n (\n columnMap: ColumnMap,\n linkedColumnMap: LinkedColumnMap,\n columnSelectionValidator?: ColumnSelectionValidator\n ) =>\n Array.from(columnMap.values()).map(column => ({\n name: column.name,\n type: column.type,\n isValid: columnSelectionValidator\n ? columnSelectionValidator(this, column)\n : false,\n isActive: linkedColumnMap.has(column.name),\n }))\n );\n\n startListeningToSource(table: TableTemplate): void {\n log.debug('startListeningToSource', table);\n\n table.addEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleSourceColumnChange\n );\n table.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n table.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n }\n\n stopListeningToSource(table: TableTemplate): void {\n log.debug('stopListeningToSource', table);\n\n table.removeEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleSourceColumnChange\n );\n table.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n table.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n }\n\n loadModelIfNecessary(): void {\n const { isActive, isLoaded, isLoading } = this.state;\n if (isActive && !isLoaded && !isLoading) {\n this.initModel();\n }\n }\n\n isHidden(): boolean {\n const { glContainer } = this.props;\n const { isHidden } = glContainer;\n return isHidden;\n }\n\n handleColumnSelected(columnName: string): void {\n const { glEventHub } = this.props;\n const { columnMap } = this.state;\n glEventHub.emit(\n ChartEvent.COLUMN_SELECTED,\n this,\n columnMap.get(columnName)\n );\n }\n\n handleColumnMouseEnter({ type, name }: SelectorColumn): void {\n const { columnSelectionValidator } = this.props;\n log.debug('handleColumnMouseEnter', columnSelectionValidator, type, name);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, { type, name });\n }\n\n handleColumnMouseLeave(): void {\n const { columnSelectionValidator } = this.props;\n log.debug('handleColumnMouseLeave', columnSelectionValidator);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n handleDisconnect(): void {\n this.setState({\n error: new Error('Figure disconnected'),\n isDisconnected: true,\n });\n }\n\n handleFilterAdd(columns: InputFilter[]): void {\n for (let i = 0; i < columns.length; i += 1) {\n this.openInputFilter(columns[i]);\n }\n }\n\n handleOpenLinker(): void {\n const {\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n setActiveTool(ToolType.LINKER);\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: undefined });\n this.sendColumnChange();\n this.updateColumnFilters();\n }\n\n handleLoadSuccess(model: ChartModel): void {\n log.debug('handleLoadSuccess');\n\n const { model: prevModel } = this.state;\n this.setState(\n {\n model,\n isLoaded: true,\n },\n () => {\n const { inputFilters, source } = this.props;\n const { filterMap, isLinked } = this.state;\n if (model !== prevModel) {\n this.sendColumnChange();\n this.updateColumnFilters();\n this.updateInputFilters(\n inputFilters,\n filterMap.size > 0 || model.isFilterRequired()\n );\n if (source && isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n );\n }\n\n handleLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error('handleLoadError', error);\n this.setState({ error, isLoading: false });\n }\n\n handleSourceColumnChange(): void {\n this.updateModelFromSource();\n }\n\n handleSourceFilterChange(): void {\n this.updateModelFromSource();\n }\n\n handleSourceSortChange(): void {\n this.updateModelFromSource();\n }\n\n updateModelFromSource(): void {\n const { metadata, source } = this.props;\n const { isLinked, model } = this.state;\n if (!isLinked || !model || !source) {\n log.debug2('updateModelFromSource ignoring', isLinked, model, source);\n return;\n }\n\n // By now the model has already been loaded, which is the only other cancelable thing in pending\n this.pending.cancel();\n if (isChartPanelTableMetadata(metadata)) {\n const { settings } = metadata;\n this.pending\n .add(\n dh.plot.Figure.create(\n (ChartUtils.makeFigureSettings(\n settings,\n source\n ) as unknown) as FigureDescriptor\n )\n )\n .then(figure => {\n if (isFigureChartModel(model)) {\n model.setFigure(figure);\n }\n })\n .catch(this.handleLoadError);\n }\n\n this.updatePanelState();\n }\n\n updatePanelState(): void {\n const { sourcePanel } = this.props;\n const { panelState, filterValueMap, settings } = this.state;\n let { tableSettings } = panelState ?? {};\n if (sourcePanel) {\n // Right now just update the panel state from the source\n // If the source isn't available, just keep the state that's already saved\n if (\n hasInputFilter(sourcePanel.props) &&\n hasPanelState(sourcePanel.state)\n ) {\n const { inputFilters } = sourcePanel.props;\n const { panelState: sourcePanelState } = sourcePanel.state;\n if (sourcePanelState) {\n tableSettings = IrisGridUtils.extractTableSettings(\n sourcePanelState,\n inputFilters\n );\n }\n }\n }\n\n // eslint-disable-next-line react/no-unused-state\n this.setState({\n panelState: {\n settings,\n tableSettings,\n filterValueMap: Array.from(filterValueMap),\n },\n });\n }\n\n handleError(): void {\n // Don't want to set an error state, because the user can fix a chart error within the chart itself.\n // We're not loading anymore either so stop showing the spinner so the user can actually click those buttons.\n this.setState({ isLoading: false });\n }\n\n handleResize(): void {\n this.updateChart();\n }\n\n handleSettingsChanged(update: Partial<Settings>): void {\n this.setState(({ settings: prevSettings }) => {\n const settings = {\n ...prevSettings,\n ...update,\n };\n log.debug('Updated settings', settings);\n return { settings };\n });\n }\n\n handleHide(): void {\n this.setActive(false);\n }\n\n handleShow(): void {\n this.setActive(true);\n }\n\n handleTabBlur(): void {\n this.setActive(false);\n }\n\n handleTabFocus(): void {\n const isHidden = this.isHidden();\n this.setActive(!isHidden);\n }\n\n handleUpdate(): void {\n this.setState({ isLoading: false });\n }\n\n handleClearAllFilters(): void {\n // nuke link filter and input filter map\n // input filters only clear themselves if they are not yet empty\n this.setState({\n filterValueMap: new Map(),\n filterMap: new Map(),\n });\n this.updatePanelState();\n }\n\n /**\n * Create an input filter panel for the provided column\n * @param column The column to create the input filter for\n */\n openInputFilter(column: InputFilter): void {\n const { glEventHub } = this.props;\n const { name, type } = column;\n glEventHub.emit(InputFilterEvent.OPEN_INPUT, {\n title: `${name} Filter`,\n panelState: {\n name,\n type,\n isValueShown: true,\n },\n createNewStack: true,\n focusElement: 'input',\n });\n }\n\n setActive(isActive: boolean): void {\n this.setState({ isActive }, () => {\n if (isActive) {\n this.loadModelIfNecessary();\n this.updateChart();\n }\n });\n }\n\n sendColumnChange(): void {\n const { model } = this.state;\n if (!model) {\n return;\n }\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMNS_CHANGED,\n this,\n Array.from(model.getFilterColumnMap().values())\n );\n }\n\n getCoordinateForColumn(columnName: ColumnName): [number, number] | null {\n const className = ChartColumnSelectorOverlay.makeButtonClassName(\n columnName\n );\n\n if (!this.panelContainer.current) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(`.${className}`);\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n /**\n * Set chart filters based on the filter map\n * @param filterMapParam Filter map\n */\n setFilterMap(\n filterMapParam: Map<string, { columnType: string; value: string }>\n ): void {\n log.debug('setFilterMap', filterMapParam);\n this.setState(state => {\n const { columnMap, filterMap } = state;\n let updatedFilterMap: null | Map<string, string> = null;\n const filterValueMap = new Map(state.filterValueMap);\n\n filterMapParam.forEach(({ columnType, value }, columnName) => {\n const column = columnMap.get(columnName);\n if (column == null || column.type !== columnType) {\n return;\n }\n filterValueMap.set(columnName, value);\n if (filterMap.get(columnName) !== value) {\n if (updatedFilterMap === null) {\n updatedFilterMap = new Map(filterMap);\n }\n updatedFilterMap.set(columnName, value);\n }\n });\n\n // Don't update filterMap unless the filters actually changed.\n // Otherwise the chart gets stuck on a spinner\n // because it never gets an update event for unchanged filters.\n return { filterValueMap, filterMap: updatedFilterMap ?? filterMap };\n });\n }\n\n unsetFilterValue(columnName: ColumnName): void {\n this.setState(state => {\n // We want to unset a value unless there's an input filter for it\n // If there's an input filter, then we want to just set it to that value\n // This way if the user has an input filter and a link, when they delete the link the input filter value takes effect\n const { inputFilters } = this.props;\n const { columnMap } = state;\n let { filterMap, filterValueMap } = state;\n if (!filterValueMap.has(columnName)) {\n return null;\n }\n\n filterValueMap = new Map(state.filterValueMap);\n filterValueMap.delete(columnName);\n\n const inputFilterMap = this.getInputFilterColumnMap(\n columnMap,\n inputFilters\n );\n\n if (inputFilterMap.has(columnName)) {\n const filterValue = filterMap.get(columnName);\n const inputFilterValue = inputFilterMap.get(columnName)?.value;\n if (inputFilterValue != null && filterValue !== inputFilterValue) {\n filterMap = new Map(state.filterMap);\n if (inputFilterValue.length > 0) {\n filterMap.set(columnName, inputFilterValue);\n } else {\n filterMap.delete(columnName);\n }\n }\n } else {\n filterMap = new Map(state.filterMap);\n filterMap.delete(columnName);\n }\n return { filterMap, filterValueMap };\n });\n }\n\n updateChangedInputFilters(\n inputFilters: InputFilter[],\n prevInputFilters: InputFilter[]\n ): void {\n const deletedInputFilters = prevInputFilters.filter(\n prevInputFilter =>\n !inputFilters.find(\n inputFilter =>\n inputFilter.name === prevInputFilter.name &&\n inputFilter.type === prevInputFilter.type\n )\n );\n if (deletedInputFilters.length > 0) {\n this.deleteInputFilters(deletedInputFilters);\n }\n\n const changedInputFilters = inputFilters.filter(\n inputFilter => !prevInputFilters.includes(inputFilter)\n );\n if (changedInputFilters.length > 0) {\n this.updateInputFilters(changedInputFilters);\n }\n }\n\n updateInputFilters(inputFilters: InputFilter[], forceUpdate = false): void {\n this.setState(state => {\n const { columnMap } = state;\n const filterValueMap = new Map(state.filterValueMap);\n const filterMap = new Map(state.filterMap);\n const update = forceUpdate ? { filterMap, filterValueMap } : {};\n\n for (let i = 0; i < inputFilters.length; i += 1) {\n const { name, type, value } = inputFilters[i];\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (value != null && filterMap.get(name) !== value) {\n if (value === '') {\n filterMap.delete(name);\n } else {\n filterMap.set(name, value);\n }\n update.filterMap = filterMap;\n }\n\n if (filterValueMap.has(name)) {\n // Need to unset whatever the linked value was - if they want that value again, they need to double click the link again\n filterValueMap.delete(name);\n update.filterValueMap = filterValueMap;\n }\n }\n }\n\n log.debug('updateInputFilters', update);\n return update as unknown;\n });\n }\n\n deleteInputFilters(inputFilters: InputFilter[], forceUpdate = false): void {\n this.setState(state => {\n const { columnMap, filterValueMap } = state;\n const filterMap = new Map(state.filterMap);\n let needsUpdate = forceUpdate;\n\n for (let i = 0; i < inputFilters.length; i += 1) {\n const { name, type } = inputFilters[i];\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (filterMap.has(name)) {\n const filterValue = filterMap.get(name);\n if (filterValueMap.has(name)) {\n const linkValue = filterValueMap.get(name);\n if (linkValue !== filterValue && linkValue != null) {\n needsUpdate = true;\n filterMap.set(name, linkValue);\n }\n } else {\n needsUpdate = true;\n filterMap.delete(name);\n }\n }\n }\n }\n\n log.debug('deleteInputFilters', needsUpdate);\n return needsUpdate ? { filterMap } : null;\n });\n }\n\n updateColumnFilters(): void {\n this.setState(({ model }) => {\n if (!model) {\n return null;\n }\n\n return { columnMap: model.getFilterColumnMap() };\n });\n }\n\n updateFilters(): void {\n const { columnMap, filterMap, model } = this.state;\n assertNotNull(model);\n const waitingInputMap = this.getWaitingInputMap(\n model.isFilterRequired(),\n columnMap,\n filterMap\n );\n model.setFilter(filterMap);\n\n if (filterMap.size > 0 && waitingInputMap.size === 0) {\n const defaultTitle = model.getDefaultTitle();\n const filterTitle = TextUtils.join(\n Array.from(filterMap.entries()).map(\n ([name, value]) => `${name}: ${value}`\n )\n );\n if (defaultTitle) {\n model.setTitle(\n `${defaultTitle}<br><span style=\"font-size: smaller\">${filterTitle}</span>`\n );\n } else {\n model.setTitle(filterTitle);\n }\n\n log.debug2('updateFilters filters set', filterMap);\n this.setState({ isLoading: true });\n } else {\n log.debug2('updateFilters waiting on inputs', waitingInputMap);\n model.setTitle(model.getDefaultTitle());\n this.setState({ isLoading: false });\n }\n\n this.updatePanelState();\n }\n\n /**\n * Removes any set filter values that are no longer part of the model\n */\n pruneFilterMaps(): void {\n this.setState(state => {\n const { columnMap } = state;\n const filterMap = new Map(state.filterMap);\n const filterValueMap = new Map(state.filterValueMap);\n const newState: Pick<\n Partial<ChartPanelState>,\n 'filterMap' | 'filterValueMap'\n > = {};\n\n state.filterValueMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterValueMap.delete(name);\n newState.filterValueMap = filterValueMap;\n }\n });\n state.filterMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterMap.delete(name);\n newState.filterMap = filterMap;\n }\n });\n return newState as unknown;\n });\n }\n\n updateChart(): void {\n if (this.chart.current) {\n this.chart.current.updateDimensions();\n }\n }\n\n render(): ReactElement {\n const {\n columnSelectionValidator,\n glContainer,\n glEventHub,\n inputFilters,\n isLinkerActive,\n links,\n metadata,\n settings,\n } = this.props;\n const {\n columnMap,\n filterMap,\n error,\n model,\n isActive,\n isDisconnected,\n isLoaded,\n isLoading,\n } = this.state;\n let name;\n if (isChartPanelTableMetadata(metadata)) {\n name = metadata.table;\n } else {\n name = metadata.figure;\n }\n const inputFilterMap = this.getInputFilterColumnMap(\n columnMap,\n inputFilters\n );\n const linkedColumnMap = this.getLinkedColumnMap(columnMap, links);\n const waitingInputMap =\n model != null\n ? this.getWaitingInputMap(\n model.isFilterRequired(),\n columnMap,\n filterMap\n )\n : new Map();\n const waitingFilterMap =\n model != null\n ? this.getWaitingFilterMap(\n model.isFilterRequired(),\n columnMap,\n filterMap,\n linkedColumnMap,\n inputFilterMap\n )\n : new Map();\n const errorMessage = error ? `Unable to open chart. ${error}` : undefined;\n const isWaitingForFilter = waitingInputMap.size > 0;\n const isSelectingColumn = columnMap.size > 0 && isLinkerActive;\n return (\n <WidgetPanel\n className={classNames('iris-chart-panel', {\n 'input-required': isWaitingForFilter,\n })}\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onHide={this.handleHide}\n onClearAllFilters={this.handleClearAllFilters}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabBlur={this.handleTabBlur}\n onTabFocus={this.handleTabFocus}\n errorMessage={errorMessage}\n isDisconnected={isDisconnected}\n isLoading={isLoading}\n isLoaded={isLoaded}\n widgetName={name}\n widgetType=\"Chart\"\n >\n <div\n ref={this.panelContainer}\n className=\"chart-panel-container h-100 w-100\"\n >\n <div className=\"chart-container h-100 w-100\">\n {isLoaded && model && (\n <Chart\n isActive={isActive}\n model={model}\n settings={settings}\n ref={this.chart}\n onDisconnect={this.handleDisconnect}\n onReconnect={this.handleReconnect}\n onUpdate={this.handleUpdate}\n onError={this.handleError}\n onSettingsChanged={this.handleSettingsChanged}\n />\n )}\n </div>\n <CSSTransition\n in={isWaitingForFilter && !isSelectingColumn && !isLoading}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <ChartFilterOverlay\n inputFilterMap={inputFilterMap}\n linkedColumnMap={linkedColumnMap}\n onAdd={this.handleFilterAdd}\n onOpenLinker={this.handleOpenLinker}\n columnMap={columnMap}\n waitingFilterMap={waitingFilterMap}\n waitingInputMap={waitingInputMap}\n />\n </CSSTransition>\n <CSSTransition\n in={isSelectingColumn}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <ChartColumnSelectorOverlay\n columns={this.getSelectorColumns(\n columnMap,\n linkedColumnMap,\n columnSelectionValidator\n )}\n onColumnSelected={this.handleColumnSelected}\n onMouseEnter={this.handleColumnMouseEnter}\n onMouseLeave={this.handleColumnMouseLeave}\n />\n </CSSTransition>\n </div>\n </WidgetPanel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string; metadata: { sourcePanelId: string } }\n) => {\n const { localDashboardId, metadata } = ownProps;\n\n let sourcePanelId;\n if (metadata) {\n sourcePanelId = metadata.sourcePanelId;\n }\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const openedPanelMap = getOpenedPanelMapForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER && isolatedLinkerPanelId === undefined;\n return {\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n isLinkerActive,\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n source:\n sourcePanelId != null ? panelTableMap.get(sourcePanelId) : undefined,\n sourcePanel:\n sourcePanelId != null ? openedPanelMap.get(sourcePanelId) : undefined,\n settings: getSettings(state),\n };\n};\n\nexport default connect(\n mapStateToProps,\n {\n setActiveTool: setActiveToolAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n },\n null,\n { forwardRef: true }\n)(ChartPanel);\n"],"file":"ChartPanel.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/panels/ChartPanel.tsx"],"names":["React","Component","classNames","memoize","connect","CSSTransition","debounce","Chart","ChartUtils","isFigureChartModel","getOpenedPanelMapForDashboard","LayoutUtils","IrisGridUtils","dh","ThemeExport","Log","getActiveTool","getSettings","setActiveTool","setActiveToolAction","assertNotNull","Pending","PromiseUtils","TextUtils","WidgetPanel","ToolType","InputFilterEvent","ChartEvent","getColumnSelectionValidatorForDashboard","getInputFiltersForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","ChartFilterOverlay","ChartColumnSelectorOverlay","log","module","UPDATE_MODEL_DEBOUNCE","isChartPanelTableMetadata","metadata","settings","undefined","hasInputFilter","panel","inputFilters","hasPanelState","panelState","ChartPanel","constructor","props","isFilterRequired","columnMap","filterMap","Map","waitingInputMap","forEach","filter","name","delete","linkedColumnMap","inputFilterMap","waitingFilterMap","value","column","i","length","inputFilter","type","get","set","links","panelId","getIdFromPanel","link","columnName","start","has","end","columnSelectionValidator","Array","from","values","map","isValid","isActive","handleColumnSelected","bind","handleColumnMouseEnter","handleColumnMouseLeave","handleDisconnect","handleReconnect","handleFilterAdd","handleHide","handleError","handleLoadError","handleLoadSuccess","handleResize","handleSettingsChanged","handleOpenLinker","handleShow","handleSourceColumnChange","handleSourceFilterChange","handleSourceSortChange","handleTabBlur","handleTabFocus","handleUpdate","updateModelFromSource","handleClearAllFilters","panelContainer","createRef","chart","pending","filterValueMap","state","error","isDisconnected","isLoading","isLoaded","isLinked","model","componentDidMount","isHidden","setState","initModel","componentDidUpdate","prevProps","prevState","source","pruneFilterMaps","updateChangedInputFilters","updateFilters","updatePanelState","updateSettings","startListeningToSource","stopListeningToSource","componentWillUnmount","cancel","makeModel","add","resolved","close","then","table","debug","addEventListener","Table","EVENT_CUSTOMCOLUMNSCHANGED","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","removeEventListener","loadModelIfNecessary","glContainer","glEventHub","emit","COLUMN_SELECTED","Error","columns","openInputFilter","localDashboardId","LINKER","sendColumnChange","updateColumnFilters","prevModel","updateInputFilters","size","isCanceled","debug2","plot","Figure","create","makeFigureSettings","figure","setFigure","catch","sourcePanel","tableSettings","sourcePanelState","extractTableSettings","updateChart","update","prevSettings","setActive","OPEN_INPUT","title","isValueShown","createNewStack","focusElement","COLUMNS_CHANGED","getFilterColumnMap","getCoordinateForColumn","className","makeButtonClassName","current","element","querySelector","rect","getBoundingClientRect","width","height","x","left","y","bottom","setFilterMap","filterMapParam","updatedFilterMap","columnType","unsetFilterValue","getInputFilterColumnMap","filterValue","inputFilterValue","prevInputFilters","deletedInputFilters","prevInputFilter","find","deleteInputFilters","changedInputFilters","includes","forceUpdate","needsUpdate","linkValue","getWaitingInputMap","setFilter","defaultTitle","getDefaultTitle","filterTitle","join","entries","setTitle","newState","updateDimensions","render","isLinkerActive","getLinkedColumnMap","getWaitingFilterMap","errorMessage","isWaitingForFilter","isSelectingColumn","transitionMs","getSelectorColumns","mapStateToProps","ownProps","sourcePanelId","panelTableMap","openedPanelMap","activeTool","isolatedLinkerPanelId","forwardRef"],"mappings":"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","sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport { CSSTransition } from 'react-transition-group';\nimport debounce from 'lodash.debounce';\nimport {\n Chart,\n ChartModel,\n ChartModelSettings,\n ChartUtils,\n isFigureChartModel,\n} from '@deephaven/chart';\nimport {\n getOpenedPanelMapForDashboard,\n LayoutUtils,\n PanelComponent,\n PanelProps,\n} from '@deephaven/dashboard';\nimport { IrisGridUtils, InputFilter, ColumnName } from '@deephaven/iris-grid';\nimport dh, {\n FigureDescriptor,\n SeriesPlotStyle,\n TableTemplate,\n} from '@deephaven/jsapi-shim';\nimport { ThemeExport } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getSettings,\n RootState,\n setActiveTool as setActiveToolAction,\n WorkspaceSettings,\n} from '@deephaven/redux';\nimport {\n assertNotNull,\n Pending,\n PromiseUtils,\n TextUtils,\n} from '@deephaven/utils';\nimport GoldenLayout from '@deephaven/golden-layout';\nimport { ModelIndex } from '@deephaven/grid';\nimport { AdvancedFilterOptions, SortDirection } from '@deephaven/jsapi-utils';\nimport WidgetPanel from './WidgetPanel';\nimport ToolType from '../linker/ToolType';\nimport { InputFilterEvent, ChartEvent } from '../events';\nimport {\n getColumnSelectionValidatorForDashboard,\n getInputFiltersForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n} from '../redux';\nimport ChartFilterOverlay, { ColumnMap } from './ChartFilterOverlay';\nimport ChartColumnSelectorOverlay, {\n SelectorColumn,\n} from './ChartColumnSelectorOverlay';\nimport './ChartPanel.scss';\nimport { Link } from '../linker/LinkerUtils';\nimport { PanelState as IrisGridPanelState } from './IrisGridPanel';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst log = Log.module('ChartPanel');\nconst UPDATE_MODEL_DEBOUNCE = 150;\n\nexport type InputFilterMap = Map<string, InputFilter>;\n\nexport type FilterMap = Map<string, string>;\n\nexport type LinkedColumnMap = Map<string, { name: string; type: string }>;\n\nexport function isChartPanelTableMetadata(\n metadata: ChartPanelMetadata\n): metadata is ChartPanelTableMetadata {\n return (metadata as ChartPanelTableMetadata).settings !== undefined;\n}\nexport type ChartPanelFigureMetadata = {\n figure: string;\n};\n\nexport type ChartPanelTableMetadata = {\n table: string;\n sourcePanelId: string;\n settings: {\n isLinked: boolean;\n title: string;\n xAxis: string;\n series: string[];\n type: keyof SeriesPlotStyle;\n };\n tableSettings: ChartPanelTableSettings;\n};\n\nexport type ChartPanelMetadata =\n | ChartPanelFigureMetadata\n | ChartPanelTableMetadata;\n\ntype Settings = Record<string, unknown>;\n\nexport interface ChartPanelTableSettings {\n quickFilters?: [\n ModelIndex,\n {\n text: string;\n }\n ][];\n advancedFilters?: [\n ModelIndex,\n {\n options: AdvancedFilterOptions;\n }\n ][];\n inputFilters?: InputFilter[];\n sorts?: {\n column: ModelIndex;\n isAbs: boolean;\n direction: SortDirection;\n }[];\n partition?: unknown;\n partitionColumn?: string;\n}\nexport interface GLChartPanelState {\n filterValueMap: [string, string][];\n settings: Partial<ChartModelSettings>;\n tableSettings: ChartPanelTableSettings;\n irisGridState?: {\n advancedFilters: unknown;\n quickFilters: unknown;\n sorts: unknown;\n };\n irisGridPanelState?: {\n partitionColumn: string;\n partition: unknown;\n };\n table?: string;\n figure?: string;\n}\nexport interface ChartPanelProps {\n glContainer: GoldenLayout.Container;\n glEventHub: GoldenLayout.EventEmitter;\n\n metadata: ChartPanelMetadata;\n /** Function to build the ChartModel used by this ChartPanel. Can return a promise. */\n makeModel: () => Promise<ChartModel>;\n inputFilters: InputFilter[];\n links: Link[];\n localDashboardId: string;\n isLinkerActive: boolean;\n source?: TableTemplate;\n sourcePanel?: PanelComponent;\n columnSelectionValidator?: ColumnSelectionValidator;\n setActiveTool: (tool: string) => void;\n setDashboardIsolatedLinkerPanelId: (\n id: string,\n secondParam: undefined\n ) => void;\n\n panelState: GLChartPanelState;\n settings: Partial<WorkspaceSettings>;\n}\n\ninterface ChartPanelState {\n settings: Partial<ChartModelSettings>;\n error?: unknown;\n isActive: boolean;\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isLinked: boolean;\n\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: Map<string, string>;\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: Map<string, string>;\n model?: ChartModel;\n columnMap: ColumnMap;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: GLChartPanelState;\n}\n\nfunction hasInputFilter(\n panel: PanelProps\n): panel is PanelProps & { inputFilters: InputFilter[] } {\n return (\n (panel as PanelProps & { inputFilters: InputFilter[] }).inputFilters != null\n );\n}\n\nfunction hasPanelState(\n panel: unknown\n): panel is { panelState: IrisGridPanelState } {\n return (panel as { panelState: IrisGridPanelState }).panelState != null;\n}\n\nexport class ChartPanel extends Component<ChartPanelProps, ChartPanelState> {\n static defaultProps = {\n columnSelectionValidator: null,\n isLinkerActive: false,\n source: null,\n sourcePanel: null,\n panelState: null,\n settings: {},\n };\n\n static displayName = 'ChartPanel';\n\n static COMPONENT = 'ChartPanel';\n\n constructor(props: ChartPanelProps) {\n super(props);\n\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleColumnMouseEnter = this.handleColumnMouseEnter.bind(this);\n this.handleColumnMouseLeave = this.handleColumnMouseLeave.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleFilterAdd = this.handleFilterAdd.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSettingsChanged = this.handleSettingsChanged.bind(this);\n this.handleOpenLinker = this.handleOpenLinker.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleSourceColumnChange = this.handleSourceColumnChange.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.updateModelFromSource = debounce(\n this.updateModelFromSource.bind(this),\n UPDATE_MODEL_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n\n this.panelContainer = React.createRef();\n this.chart = React.createRef();\n this.pending = new Pending();\n\n const { metadata, panelState } = props;\n const { filterValueMap = [], settings = {} } = panelState ?? {};\n\n this.state = {\n settings,\n error: undefined,\n isActive: false,\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n isLinked:\n metadata &&\n isChartPanelTableMetadata(metadata) &&\n metadata.settings &&\n metadata.settings.isLinked,\n\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: new Map(filterValueMap),\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: new Map(filterValueMap),\n model: undefined,\n columnMap: new Map(),\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n }\n\n componentDidMount(): void {\n if (!this.isHidden()) {\n this.setState({ isActive: true });\n this.initModel();\n }\n }\n\n componentDidUpdate(\n prevProps: ChartPanelProps,\n prevState: ChartPanelState\n ): void {\n const { inputFilters, source } = this.props;\n const {\n columnMap,\n model,\n filterMap,\n filterValueMap,\n isLinked,\n settings,\n } = this.state;\n\n if (!model) {\n return;\n }\n\n if (columnMap !== prevState.columnMap) {\n this.pruneFilterMaps();\n }\n\n if (inputFilters !== prevProps.inputFilters) {\n this.updateChangedInputFilters(inputFilters, prevProps.inputFilters);\n }\n\n if (filterMap !== prevState.filterMap) {\n this.updateFilters();\n } else if (filterValueMap !== prevState.filterValueMap) {\n this.updatePanelState();\n }\n\n if (settings !== prevState.settings && isFigureChartModel(model)) {\n model.updateSettings(settings);\n this.updatePanelState();\n }\n\n if (isLinked !== prevState.isLinked) {\n if (source) {\n if (isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n } else {\n this.stopListeningToSource(source);\n }\n }\n } else if (isLinked && source !== prevProps.source) {\n if (prevProps.source) {\n this.stopListeningToSource(prevProps.source);\n }\n if (source) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n\n const { source } = this.props;\n if (source) {\n this.stopListeningToSource(source);\n }\n }\n\n panelContainer: RefObject<HTMLDivElement>;\n\n chart: RefObject<Chart>;\n\n pending: Pending;\n\n initModel(): void {\n this.setState({ isLoading: true, isLoaded: false, error: undefined });\n\n const { makeModel } = this.props;\n this.pending\n .add(makeModel(), resolved => {\n resolved.close();\n })\n .then(this.handleLoadSuccess, this.handleLoadError);\n }\n\n getWaitingInputMap = memoize(\n (\n isFilterRequired: boolean,\n columnMap: ColumnMap,\n filterMap: FilterMap\n ): Map<string, { name: string; type: string }> => {\n if (!isFilterRequired) {\n return new Map();\n }\n const waitingInputMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingInputMap.delete(name);\n });\n return waitingInputMap;\n }\n );\n\n getWaitingFilterMap = memoize(\n (\n isFilterRequired: boolean,\n columnMap: ColumnMap,\n filterMap: FilterMap,\n linkedColumnMap: LinkedColumnMap,\n inputFilterMap: InputFilterMap\n ) => {\n if (!isFilterRequired) {\n return new Map();\n }\n\n const waitingFilterMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingFilterMap.delete(name);\n });\n inputFilterMap.forEach((value, name) => {\n waitingFilterMap.delete(name);\n });\n linkedColumnMap.forEach((column, name) => {\n waitingFilterMap.delete(name);\n });\n return waitingFilterMap;\n }\n );\n\n getInputFilterColumnMap = memoize(\n (columnMap: ColumnMap, inputFilters: InputFilter[]) => {\n const inputFilterMap = new Map<string, InputFilter>();\n for (let i = 0; i < inputFilters.length; i += 1) {\n const inputFilter = inputFilters[i];\n const { name, type } = inputFilter;\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n inputFilterMap.set(name, inputFilter);\n }\n }\n return inputFilterMap;\n }\n );\n\n getLinkedColumnMap = memoize((columnMap: ColumnMap, links: Link[]) => {\n const linkedColumnMap = new Map<string, { name: string; type: string }>();\n const panelId = LayoutUtils.getIdFromPanel(this);\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n let columnName = null;\n if (\n link.start &&\n link.start.panelId === panelId &&\n columnMap.has(link.start.columnName)\n ) {\n columnName = link.start.columnName;\n } else if (\n link.end &&\n link.end.panelId === panelId &&\n columnMap.has(link.end.columnName)\n ) {\n columnName = link.end.columnName;\n }\n\n if (columnName != null && columnMap.has(columnName)) {\n const column = columnMap.get(columnName);\n assertNotNull(column);\n linkedColumnMap.set(columnName, column);\n }\n }\n return linkedColumnMap;\n });\n\n getSelectorColumns = memoize(\n (\n columnMap: ColumnMap,\n linkedColumnMap: LinkedColumnMap,\n columnSelectionValidator?: ColumnSelectionValidator\n ) =>\n Array.from(columnMap.values()).map(column => ({\n name: column.name,\n type: column.type,\n isValid: columnSelectionValidator\n ? columnSelectionValidator(this, column)\n : false,\n isActive: linkedColumnMap.has(column.name),\n }))\n );\n\n startListeningToSource(table: TableTemplate): void {\n log.debug('startListeningToSource', table);\n\n table.addEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleSourceColumnChange\n );\n table.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n table.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n }\n\n stopListeningToSource(table: TableTemplate): void {\n log.debug('stopListeningToSource', table);\n\n table.removeEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleSourceColumnChange\n );\n table.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n table.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n }\n\n loadModelIfNecessary(): void {\n const { isActive, isLoaded, isLoading } = this.state;\n if (isActive && !isLoaded && !isLoading) {\n this.initModel();\n }\n }\n\n isHidden(): boolean {\n const { glContainer } = this.props;\n const { isHidden } = glContainer;\n return isHidden;\n }\n\n handleColumnSelected(columnName: string): void {\n const { glEventHub } = this.props;\n const { columnMap } = this.state;\n glEventHub.emit(\n ChartEvent.COLUMN_SELECTED,\n this,\n columnMap.get(columnName)\n );\n }\n\n handleColumnMouseEnter({ type, name }: SelectorColumn): void {\n const { columnSelectionValidator } = this.props;\n log.debug('handleColumnMouseEnter', columnSelectionValidator, type, name);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, { type, name });\n }\n\n handleColumnMouseLeave(): void {\n const { columnSelectionValidator } = this.props;\n log.debug('handleColumnMouseLeave', columnSelectionValidator);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n handleDisconnect(): void {\n this.setState({\n error: new Error('Figure disconnected'),\n isDisconnected: true,\n });\n }\n\n handleFilterAdd(columns: InputFilter[]): void {\n for (let i = 0; i < columns.length; i += 1) {\n this.openInputFilter(columns[i]);\n }\n }\n\n handleOpenLinker(): void {\n const {\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n setActiveTool(ToolType.LINKER);\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: undefined });\n this.sendColumnChange();\n this.updateColumnFilters();\n }\n\n handleLoadSuccess(model: ChartModel): void {\n log.debug('handleLoadSuccess');\n\n const { model: prevModel } = this.state;\n this.setState(\n {\n model,\n isLoaded: true,\n },\n () => {\n const { inputFilters, source } = this.props;\n const { filterMap, isLinked } = this.state;\n if (model !== prevModel) {\n this.sendColumnChange();\n this.updateColumnFilters();\n this.updateInputFilters(\n inputFilters,\n filterMap.size > 0 || model.isFilterRequired()\n );\n if (source && isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n );\n }\n\n handleLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error('handleLoadError', error);\n this.setState({ error, isLoading: false });\n }\n\n handleSourceColumnChange(): void {\n this.updateModelFromSource();\n }\n\n handleSourceFilterChange(): void {\n this.updateModelFromSource();\n }\n\n handleSourceSortChange(): void {\n this.updateModelFromSource();\n }\n\n updateModelFromSource(): void {\n const { metadata, source } = this.props;\n const { isLinked, model } = this.state;\n if (!isLinked || !model || !source) {\n log.debug2('updateModelFromSource ignoring', isLinked, model, source);\n return;\n }\n\n // By now the model has already been loaded, which is the only other cancelable thing in pending\n this.pending.cancel();\n if (isChartPanelTableMetadata(metadata)) {\n const { settings } = metadata;\n this.pending\n .add(\n dh.plot.Figure.create(\n (ChartUtils.makeFigureSettings(\n settings,\n source\n ) as unknown) as FigureDescriptor\n )\n )\n .then(figure => {\n if (isFigureChartModel(model)) {\n model.setFigure(figure);\n }\n })\n .catch(this.handleLoadError);\n }\n\n this.updatePanelState();\n }\n\n updatePanelState(): void {\n const { sourcePanel } = this.props;\n const { panelState, filterValueMap, settings } = this.state;\n let { tableSettings } = panelState ?? {};\n if (sourcePanel) {\n // Right now just update the panel state from the source\n // If the source isn't available, just keep the state that's already saved\n if (\n hasInputFilter(sourcePanel.props) &&\n hasPanelState(sourcePanel.state)\n ) {\n const { inputFilters } = sourcePanel.props;\n const { panelState: sourcePanelState } = sourcePanel.state;\n if (sourcePanelState) {\n tableSettings = IrisGridUtils.extractTableSettings(\n sourcePanelState,\n inputFilters\n );\n }\n }\n }\n\n // eslint-disable-next-line react/no-unused-state\n this.setState({\n panelState: {\n settings,\n tableSettings,\n filterValueMap: Array.from(filterValueMap),\n },\n });\n }\n\n handleError(): void {\n // Don't want to set an error state, because the user can fix a chart error within the chart itself.\n // We're not loading anymore either so stop showing the spinner so the user can actually click those buttons.\n this.setState({ isLoading: false });\n }\n\n handleResize(): void {\n this.updateChart();\n }\n\n handleSettingsChanged(update: Partial<Settings>): void {\n this.setState(({ settings: prevSettings }) => {\n const settings = {\n ...prevSettings,\n ...update,\n };\n log.debug('Updated settings', settings);\n return { settings };\n });\n }\n\n handleHide(): void {\n this.setActive(false);\n }\n\n handleShow(): void {\n this.setActive(true);\n }\n\n handleTabBlur(): void {\n this.setActive(false);\n }\n\n handleTabFocus(): void {\n const isHidden = this.isHidden();\n this.setActive(!isHidden);\n }\n\n handleUpdate(): void {\n this.setState({ isLoading: false });\n }\n\n handleClearAllFilters(): void {\n // nuke link filter and input filter map\n // input filters only clear themselves if they are not yet empty\n this.setState({\n filterValueMap: new Map(),\n filterMap: new Map(),\n });\n this.updatePanelState();\n }\n\n /**\n * Create an input filter panel for the provided column\n * @param column The column to create the input filter for\n */\n openInputFilter(column: InputFilter): void {\n const { glEventHub } = this.props;\n const { name, type } = column;\n glEventHub.emit(InputFilterEvent.OPEN_INPUT, {\n title: `${name} Filter`,\n panelState: {\n name,\n type,\n isValueShown: true,\n },\n createNewStack: true,\n focusElement: 'input',\n });\n }\n\n setActive(isActive: boolean): void {\n this.setState({ isActive }, () => {\n if (isActive) {\n this.loadModelIfNecessary();\n this.updateChart();\n }\n });\n }\n\n sendColumnChange(): void {\n const { model } = this.state;\n if (!model) {\n return;\n }\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMNS_CHANGED,\n this,\n Array.from(model.getFilterColumnMap().values())\n );\n }\n\n getCoordinateForColumn(columnName: ColumnName): [number, number] | null {\n const className = ChartColumnSelectorOverlay.makeButtonClassName(\n columnName\n );\n\n if (!this.panelContainer.current) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(`.${className}`);\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n /**\n * Set chart filters based on the filter map\n * @param filterMapParam Filter map\n */\n setFilterMap(\n filterMapParam: Map<string, { columnType: string; value: string }>\n ): void {\n log.debug('setFilterMap', filterMapParam);\n this.setState(state => {\n const { columnMap, filterMap } = state;\n let updatedFilterMap: null | Map<string, string> = null;\n const filterValueMap = new Map(state.filterValueMap);\n\n filterMapParam.forEach(({ columnType, value }, columnName) => {\n const column = columnMap.get(columnName);\n if (column == null || column.type !== columnType) {\n return;\n }\n filterValueMap.set(columnName, value);\n if (filterMap.get(columnName) !== value) {\n if (updatedFilterMap === null) {\n updatedFilterMap = new Map(filterMap);\n }\n updatedFilterMap.set(columnName, value);\n }\n });\n\n // Don't update filterMap unless the filters actually changed.\n // Otherwise the chart gets stuck on a spinner\n // because it never gets an update event for unchanged filters.\n return { filterValueMap, filterMap: updatedFilterMap ?? filterMap };\n });\n }\n\n unsetFilterValue(columnName: ColumnName): void {\n this.setState(state => {\n // We want to unset a value unless there's an input filter for it\n // If there's an input filter, then we want to just set it to that value\n // This way if the user has an input filter and a link, when they delete the link the input filter value takes effect\n const { inputFilters } = this.props;\n const { columnMap } = state;\n let { filterMap, filterValueMap } = state;\n if (!filterValueMap.has(columnName)) {\n return null;\n }\n\n filterValueMap = new Map(state.filterValueMap);\n filterValueMap.delete(columnName);\n\n const inputFilterMap = this.getInputFilterColumnMap(\n columnMap,\n inputFilters\n );\n\n if (inputFilterMap.has(columnName)) {\n const filterValue = filterMap.get(columnName);\n const inputFilterValue = inputFilterMap.get(columnName)?.value;\n if (inputFilterValue != null && filterValue !== inputFilterValue) {\n filterMap = new Map(state.filterMap);\n if (inputFilterValue.length > 0) {\n filterMap.set(columnName, inputFilterValue);\n } else {\n filterMap.delete(columnName);\n }\n }\n } else {\n filterMap = new Map(state.filterMap);\n filterMap.delete(columnName);\n }\n return { filterMap, filterValueMap };\n });\n }\n\n updateChangedInputFilters(\n inputFilters: InputFilter[],\n prevInputFilters: InputFilter[]\n ): void {\n const deletedInputFilters = prevInputFilters.filter(\n prevInputFilter =>\n !inputFilters.find(\n inputFilter =>\n inputFilter.name === prevInputFilter.name &&\n inputFilter.type === prevInputFilter.type\n )\n );\n if (deletedInputFilters.length > 0) {\n this.deleteInputFilters(deletedInputFilters);\n }\n\n const changedInputFilters = inputFilters.filter(\n inputFilter => !prevInputFilters.includes(inputFilter)\n );\n if (changedInputFilters.length > 0) {\n this.updateInputFilters(changedInputFilters);\n }\n }\n\n updateInputFilters(inputFilters: InputFilter[], forceUpdate = false): void {\n this.setState(state => {\n const { columnMap } = state;\n const filterValueMap = new Map(state.filterValueMap);\n const filterMap = new Map(state.filterMap);\n const update = forceUpdate ? { filterMap, filterValueMap } : {};\n\n for (let i = 0; i < inputFilters.length; i += 1) {\n const { name, type, value } = inputFilters[i];\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (value != null && filterMap.get(name) !== value) {\n if (value === '') {\n filterMap.delete(name);\n } else {\n filterMap.set(name, value);\n }\n update.filterMap = filterMap;\n }\n\n if (filterValueMap.has(name)) {\n // Need to unset whatever the linked value was - if they want that value again, they need to double click the link again\n filterValueMap.delete(name);\n update.filterValueMap = filterValueMap;\n }\n }\n }\n\n log.debug('updateInputFilters', update);\n return update as unknown;\n });\n }\n\n deleteInputFilters(inputFilters: InputFilter[], forceUpdate = false): void {\n this.setState(state => {\n const { columnMap, filterValueMap } = state;\n const filterMap = new Map(state.filterMap);\n let needsUpdate = forceUpdate;\n\n for (let i = 0; i < inputFilters.length; i += 1) {\n const { name, type } = inputFilters[i];\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (filterMap.has(name)) {\n const filterValue = filterMap.get(name);\n if (filterValueMap.has(name)) {\n const linkValue = filterValueMap.get(name);\n if (linkValue !== filterValue && linkValue != null) {\n needsUpdate = true;\n filterMap.set(name, linkValue);\n }\n } else {\n needsUpdate = true;\n filterMap.delete(name);\n }\n }\n }\n }\n\n log.debug('deleteInputFilters', needsUpdate);\n return needsUpdate ? { filterMap } : null;\n });\n }\n\n updateColumnFilters(): void {\n this.setState(({ model }) => {\n if (!model) {\n return null;\n }\n\n return { columnMap: model.getFilterColumnMap() };\n });\n }\n\n updateFilters(): void {\n const { columnMap, filterMap, model } = this.state;\n assertNotNull(model);\n const waitingInputMap = this.getWaitingInputMap(\n model.isFilterRequired(),\n columnMap,\n filterMap\n );\n model.setFilter(filterMap);\n\n if (filterMap.size > 0 && waitingInputMap.size === 0) {\n const defaultTitle = model.getDefaultTitle();\n const filterTitle = TextUtils.join(\n Array.from(filterMap.entries()).map(\n ([name, value]) => `${name}: ${value}`\n )\n );\n if (defaultTitle) {\n model.setTitle(\n `${defaultTitle}<br><span style=\"font-size: smaller\">${filterTitle}</span>`\n );\n } else {\n model.setTitle(filterTitle);\n }\n\n log.debug2('updateFilters filters set', filterMap);\n this.setState({ isLoading: true });\n } else {\n log.debug2('updateFilters waiting on inputs', waitingInputMap);\n model.setTitle(model.getDefaultTitle());\n this.setState({ isLoading: false });\n }\n\n this.updatePanelState();\n }\n\n /**\n * Removes any set filter values that are no longer part of the model\n */\n pruneFilterMaps(): void {\n this.setState(state => {\n const { columnMap } = state;\n const filterMap = new Map(state.filterMap);\n const filterValueMap = new Map(state.filterValueMap);\n const newState: Pick<\n Partial<ChartPanelState>,\n 'filterMap' | 'filterValueMap'\n > = {};\n\n state.filterValueMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterValueMap.delete(name);\n newState.filterValueMap = filterValueMap;\n }\n });\n state.filterMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterMap.delete(name);\n newState.filterMap = filterMap;\n }\n });\n return newState as unknown;\n });\n }\n\n updateChart(): void {\n if (this.chart.current) {\n this.chart.current.updateDimensions();\n }\n }\n\n render(): ReactElement {\n const {\n columnSelectionValidator,\n glContainer,\n glEventHub,\n inputFilters,\n isLinkerActive,\n links,\n metadata,\n settings,\n } = this.props;\n const {\n columnMap,\n filterMap,\n error,\n model,\n isActive,\n isDisconnected,\n isLoaded,\n isLoading,\n } = this.state;\n let name;\n if (isChartPanelTableMetadata(metadata)) {\n name = metadata.table;\n } else {\n name = metadata.figure;\n }\n const inputFilterMap = this.getInputFilterColumnMap(\n columnMap,\n inputFilters\n );\n const linkedColumnMap = this.getLinkedColumnMap(columnMap, links);\n const waitingInputMap =\n model != null\n ? this.getWaitingInputMap(\n model.isFilterRequired(),\n columnMap,\n filterMap\n )\n : new Map();\n const waitingFilterMap =\n model != null\n ? this.getWaitingFilterMap(\n model.isFilterRequired(),\n columnMap,\n filterMap,\n linkedColumnMap,\n inputFilterMap\n )\n : new Map();\n const errorMessage = error ? `Unable to open chart. ${error}` : undefined;\n const isWaitingForFilter = waitingInputMap.size > 0;\n const isSelectingColumn = columnMap.size > 0 && isLinkerActive;\n return (\n <WidgetPanel\n className={classNames('iris-chart-panel', {\n 'input-required': isWaitingForFilter,\n })}\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onHide={this.handleHide}\n onClearAllFilters={this.handleClearAllFilters}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabBlur={this.handleTabBlur}\n onTabFocus={this.handleTabFocus}\n errorMessage={errorMessage}\n isDisconnected={isDisconnected}\n isLoading={isLoading}\n isLoaded={isLoaded}\n widgetName={name}\n widgetType=\"Chart\"\n >\n <div\n ref={this.panelContainer}\n className=\"chart-panel-container h-100 w-100\"\n >\n <div className=\"chart-container h-100 w-100\">\n {isLoaded && model && (\n <Chart\n isActive={isActive}\n model={model}\n settings={settings}\n ref={this.chart}\n onDisconnect={this.handleDisconnect}\n onReconnect={this.handleReconnect}\n onUpdate={this.handleUpdate}\n onError={this.handleError}\n onSettingsChanged={this.handleSettingsChanged}\n />\n )}\n </div>\n <CSSTransition\n in={isWaitingForFilter && !isSelectingColumn && !isLoading}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <ChartFilterOverlay\n inputFilterMap={inputFilterMap}\n linkedColumnMap={linkedColumnMap}\n onAdd={this.handleFilterAdd}\n onOpenLinker={this.handleOpenLinker}\n columnMap={columnMap}\n waitingFilterMap={waitingFilterMap}\n waitingInputMap={waitingInputMap}\n />\n </CSSTransition>\n <CSSTransition\n in={isSelectingColumn}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <ChartColumnSelectorOverlay\n columns={this.getSelectorColumns(\n columnMap,\n linkedColumnMap,\n columnSelectionValidator\n )}\n onColumnSelected={this.handleColumnSelected}\n onMouseEnter={this.handleColumnMouseEnter}\n onMouseLeave={this.handleColumnMouseLeave}\n />\n </CSSTransition>\n </div>\n </WidgetPanel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string; metadata: { sourcePanelId: string } }\n) => {\n const { localDashboardId, metadata } = ownProps;\n\n let sourcePanelId;\n if (metadata) {\n sourcePanelId = metadata.sourcePanelId;\n }\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const openedPanelMap = getOpenedPanelMapForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER && isolatedLinkerPanelId === undefined;\n return {\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n isLinkerActive,\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n source:\n sourcePanelId != null ? panelTableMap.get(sourcePanelId) : undefined,\n sourcePanel:\n sourcePanelId != null ? openedPanelMap.get(sourcePanelId) : undefined,\n settings: getSettings(state),\n };\n};\n\nexport default connect(\n mapStateToProps,\n {\n setActiveTool: setActiveToolAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n },\n null,\n { forwardRef: true }\n)(ChartPanel);\n"],"file":"ChartPanel.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotebookPanel.d.ts","sourceRoot":"","sources":["../../src/panels/NotebookPanel.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"NotebookPanel.d.ts","sourceRoot":"","sources":["../../src/panels/NotebookPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1039,9 +1039,8 @@ class NotebookPanel extends Component {
|
|
|
1039
1039
|
group: ContextActions.groups.high,
|
|
1040
1040
|
order: 20
|
|
1041
1041
|
}];
|
|
1042
|
-
var portal = tab.element.find('.lm_title_before').get(0);
|
|
1043
|
-
|
|
1044
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, tab && /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/React.createElement("span", {
|
|
1042
|
+
var portal = tab === null || tab === void 0 ? void 0 : tab.element.find('.lm_title_before').get(0);
|
|
1043
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, portal && /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/React.createElement("span", {
|
|
1045
1044
|
className: classNames('editor-unsaved-indicator', {
|
|
1046
1045
|
'is-unsaved': changeCount !== savedChangeCount
|
|
1047
1046
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/panels/NotebookPanel.tsx"],"names":["React","Component","ReactDOM","memoize","connect","FontAwesomeIcon","BasicModal","ContextActions","DropdownMenu","Tooltip","GLOBAL_SHORTCUTS","ScriptEditor","ScriptEditorUtils","SHORTCUTS","FileUtils","NewItemModal","vsSave","vsKebabVertical","dhFileSearch","vsPlay","dhRunSelection","getFileStorage","classNames","debounce","Log","assertNotNull","Pending","PromiseUtils","ConsoleEvent","NotebookEvent","getDashboardSessionWrapper","Panel","MarkdownNotebook","log","module","DEBOUNCE_PANEL_STATE_UPDATE","NotebookPanel","handleError","error","isCanceled","languageFromFileName","fileName","extension","getExtension","toLowerCase","constructor","props","title","icon","action","handleFind","group","groups","high","shortcut","NOTEBOOK","FIND","order","handleBlur","bind","handleCloseCancel","handleCloseDiscard","handleCloseSave","handleCopy","handleEditorChange","handleFocus","handleLinkClick","handleLoadSuccess","handleLoadError","handlePanelTabClick","handleRenameFile","handleResize","handleRunCommand","handleRunAll","handleRunSelected","handleSave","handleSaveAsCancel","handleSaveAsSubmit","handleSaveError","handleSaveSuccess","handleSessionOpened","handleSessionClosed","handleShow","handleShowRename","handleTab","handleTabFocus","handleTabBlur","handleTransformLinkUri","pending","debouncedSavePanelState","savePanelState","debouncedLoad","load","notebook","tabTitleElement","tabInitOnce","shouldPromptClose","isDashboardActive","session","sessionLanguage","panelState","settings","value","language","fileMetadata","isPreview","hasFileId","itemName","hasPath","isUnsaved","changeCount","state","undefined","isFocused","isLoading","isLoaded","savedChangeCount","showCloseModal","showSaveAsModal","scriptCode","debug","componentDidMount","glContainer","glEventHub","tab","initTab","initNotebookContent","on","RENAME_FILE","componentDidUpdate","prevProps","prevState","setPreviewStatus","componentWillUnmount","flush","cancel","off","emit","UNREGISTER_FILE","initTabCloseOverride","initTabClasses","close","setState","tabElement","element","get","titleElement","querySelector","classList","add","getNotebookValue","notebookValue","getValue","id","registerFileMetadata","Error","closeFileTabById","CLOSE_FILE","metadata","tabId","REGISTER_FILE","renameTab","RENAME","fileStorage","loadFile","then","loadedFile","filename","prevItemName","getBaseName","updatedSettings","content","catch","save","saveContent","updateSavedChangeCount","saveFile","basename","remove","initialSettings","dehydratedValue","dehydratedSettings","copyName","getCopyFileName","createNotebook","e","debug2","removePreviewStatus","isUndoing","isRedoing","toggleFind","event","notebooksUrl","href","currentTarget","startsWith","stopPropagation","preventDefault","notebookPath","substring","length","replace","notebookSettings","SELECT_NOTEBOOK","errorParam","isTimedOut","file","oldMetadata","deleteFile","name","oldName","newName","updateDimensions","command","runCommand","getSelectedCommand","args","isHidden","focus","src","endsWith","charAt","itemUri","URL","requestAnimationFrame","CREATE_NOTEBOOK","SEND_COMMAND","render","focusOnMount","DEFAULT_NAME","isMarkdown","isExistingItem","overflowActions","getOverflowActions","isSessionConnected","isLanguageMatching","runButtonsDisabled","toolbarDisabled","contextActions","SAVE","disabledRunButtonTooltip","getDisabledRunTooltip","disabledRunSelectedButtonTooltip","additionalActions","portal","find","createPortal","RUN","getDisplayText","RUN_SELECTED","POPPER_OPTIONS","placement","process","env","REACT_APP_NOTEBOOKS_URL","window","location","mapStateToProps","ownProps","sessionWrapper","localDashboardId","config","sessionConfig","type","forwardRef"],"mappings":"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","sourcesContent":["// Wrapper for the Notebook for use in a golden layout container\nimport React, { Component, MouseEvent, ReactElement } from 'react';\nimport ReactDOM from 'react-dom';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport type { editor } from 'monaco-editor';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n BasicModal,\n ContextActions,\n DropdownMenu,\n Tooltip,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport { ScriptEditor, ScriptEditorUtils, SHORTCUTS } from '@deephaven/console';\nimport {\n FileStorage,\n FileUtils,\n NewItemModal,\n File,\n} from '@deephaven/file-explorer';\nimport {\n vsSave,\n vsKebabVertical,\n dhFileSearch,\n vsPlay,\n dhRunSelection,\n} from '@deephaven/icons';\nimport { getFileStorage, RootState } from '@deephaven/redux';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport { Container, EventEmitter, Tab } from '@deephaven/golden-layout';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { ConsoleEvent, NotebookEvent } from '../events';\nimport { getDashboardSessionWrapper } from '../redux';\nimport Panel from './Panel';\nimport MarkdownNotebook from './MarkdownNotebook';\nimport './NotebookPanel.scss';\n\nconst log = Log.module('NotebookPanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 400;\n\ninterface Metadata {\n id: string;\n}\n\ninterface Settings {\n language: string;\n value: string | null;\n}\n\ninterface FileMetadata {\n itemName: string;\n id: string;\n}\n\ninterface PanelState {\n isPreview?: boolean;\n settings: Settings;\n fileMetadata: FileMetadata | null;\n}\n\ninterface NotebookPanelProps {\n fileStorage: FileStorage;\n glContainer: Container;\n glEventHub: EventEmitter;\n isDashboardActive: boolean;\n isPreview: boolean;\n metadata: Metadata;\n session: IdeSession;\n sessionLanguage: string;\n panelState: PanelState;\n notebooksUrl: string;\n}\n\ninterface NotebookPanelState {\n error?: {\n message?: string | undefined;\n };\n isDashboardActive: boolean;\n isFocused: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isPreview: boolean;\n\n savedChangeCount: number;\n changeCount: number;\n fileMetadata: FileMetadata | null;\n settings: Settings;\n\n session?: IdeSession;\n sessionLanguage?: string;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n\n showCloseModal: boolean;\n showSaveAsModal: boolean;\n\n scriptCode: string;\n\n itemName?: string;\n}\n\nclass NotebookPanel extends Component<NotebookPanelProps, NotebookPanelState> {\n static COMPONENT = 'NotebookPanel';\n\n static POPPER_OPTIONS = { placement: 'bottom-end' } as const;\n\n static DEFAULT_NAME = 'Untitled';\n\n static handleError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n }\n\n static defaultProps = {\n isDashboardActive: true,\n isPreview: false,\n session: null,\n sessionLanguage: null,\n notebooksUrl: new URL(\n `${process.env.REACT_APP_NOTEBOOKS_URL}/`,\n `${window.location}`\n ).href,\n };\n\n static languageFromFileName(fileName: string): string | null {\n const extension = FileUtils.getExtension(fileName).toLowerCase();\n switch (extension) {\n case 'py':\n case 'python':\n return 'python';\n case 'groovy':\n return 'groovy';\n case 'scala':\n return 'scala';\n default:\n return null;\n }\n }\n\n constructor(props: NotebookPanelProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleCloseCancel = this.handleCloseCancel.bind(this);\n this.handleCloseDiscard = this.handleCloseDiscard.bind(this);\n this.handleCloseSave = this.handleCloseSave.bind(this);\n this.handleCopy = this.handleCopy.bind(this);\n this.handleEditorChange = this.handleEditorChange.bind(this);\n this.handleFind = this.handleFind.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleLinkClick = this.handleLinkClick.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handlePanelTabClick = this.handlePanelTabClick.bind(this);\n this.handleRenameFile = this.handleRenameFile.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleRunCommand = this.handleRunCommand.bind(this);\n this.handleRunAll = this.handleRunAll.bind(this);\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleSaveAsCancel = this.handleSaveAsCancel.bind(this);\n this.handleSaveAsSubmit = this.handleSaveAsSubmit.bind(this);\n this.handleSaveError = this.handleSaveError.bind(this);\n this.handleSaveSuccess = this.handleSaveSuccess.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleShowRename = this.handleShowRename.bind(this);\n this.handleTab = this.handleTab.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTransformLinkUri = this.handleTransformLinkUri.bind(this);\n\n this.pending = new Pending();\n\n this.debouncedSavePanelState = debounce(\n this.savePanelState.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.debouncedLoad = debounce(\n this.load.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.notebook = null;\n\n this.tabTitleElement = null;\n\n this.tabInitOnce = false;\n this.shouldPromptClose = true;\n\n const { isDashboardActive, session, sessionLanguage, panelState } = props;\n\n let settings: { value: string | null; language: string } = {\n value: '',\n language: '',\n };\n let fileMetadata = null;\n let { isPreview } = props;\n if (panelState) {\n ({\n fileMetadata = fileMetadata,\n isPreview = isPreview,\n settings = settings,\n } = panelState);\n }\n\n // Not showing the unsaved indicator for null file id and editor content === '',\n // may need to implement some other indication that this notebook has never been saved\n const hasFileId =\n fileMetadata?.itemName && FileUtils.hasPath(fileMetadata.itemName);\n\n // Unsaved if file id != null and content != null\n // OR file id is null AND content is not null or ''\n const isUnsaved =\n (hasFileId && settings.value != null) || (!hasFileId && settings.value);\n const changeCount = isUnsaved ? 1 : 0;\n\n this.state = {\n error: undefined,\n isDashboardActive,\n isFocused: false,\n isLoading: true,\n isLoaded: false,\n isPreview,\n\n savedChangeCount: 0,\n changeCount,\n fileMetadata,\n settings,\n\n session,\n sessionLanguage,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n fileMetadata,\n settings,\n },\n\n showCloseModal: false,\n showSaveAsModal: false,\n\n scriptCode: '',\n };\n\n log.debug('constructor', props, this.state);\n }\n\n componentDidMount() {\n const { glContainer, glEventHub } = this.props;\n const { tab } = glContainer;\n if (tab) this.initTab(tab);\n this.initNotebookContent();\n glEventHub.on(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.on('tabClicked', this.handlePanelTabClick);\n }\n\n componentDidUpdate(\n prevProps: NotebookPanelProps,\n prevState: NotebookPanelState\n ): void {\n const { isPreview } = this.state;\n if (isPreview !== prevState.isPreview) {\n this.setPreviewStatus();\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSavePanelState.flush();\n this.pending.cancel();\n\n const { glContainer, glEventHub } = this.props;\n\n const { fileMetadata, isPreview } = this.state;\n glEventHub.off(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.off('tabClicked', this.handlePanelTabClick);\n glEventHub.emit(NotebookEvent.UNREGISTER_FILE, fileMetadata, isPreview);\n }\n\n pending: Pending;\n\n debouncedSavePanelState;\n\n debouncedLoad;\n\n notebook: ScriptEditor | null;\n\n tabTitleElement: Element | null;\n\n tabInitOnce: boolean;\n\n shouldPromptClose: boolean;\n\n // Called by TabEvent. Happens once when created, but also each time its moved.\n // when moved, need to re-init the unsaved indicators on title elements\n initTab(tab: Tab): void {\n if (!this.tabInitOnce) {\n this.tabInitOnce = true;\n this.initTabCloseOverride();\n }\n this.initTabClasses(tab);\n }\n\n // override glContainer.close() with a custom closure that checks if needs saving\n initTabCloseOverride() {\n const { glContainer } = this.props;\n const close = glContainer.close.bind(glContainer);\n glContainer.close = () => {\n const { changeCount, savedChangeCount } = this.state;\n if (changeCount !== savedChangeCount && this.shouldPromptClose) {\n this.setState({ showCloseModal: true });\n } else {\n close();\n }\n return true;\n };\n }\n\n initTabClasses(tab: Tab) {\n const tabElement = tab.element.get(0);\n assertNotNull(tabElement);\n const titleElement = tabElement.querySelector('.lm_title');\n this.tabTitleElement = titleElement;\n titleElement?.classList.add('notebook-title');\n this.setPreviewStatus();\n }\n\n getNotebookValue(): string | null {\n const { changeCount, savedChangeCount, settings } = this.state;\n const { value } = settings;\n if (changeCount !== savedChangeCount && this.notebook) {\n const notebookValue = this.notebook.getValue();\n return notebookValue != null ? notebookValue : value;\n }\n return value;\n }\n\n initNotebookContent(): void {\n // Init from file,\n // fallback to content from settings for unsaved notebook\n const { fileMetadata, settings, isPreview } = this.state;\n if (fileMetadata && fileMetadata.id) {\n log.debug('Init content from file');\n this.registerFileMetadata(fileMetadata, isPreview);\n this.load();\n return;\n }\n if (settings.value != null) {\n log.debug('Use content passed in the settings prop');\n this.handleLoadSuccess();\n return;\n }\n // No settings, no metadata\n this.handleLoadError(new Error('Missing file metadata'));\n }\n\n closeFileTabById(id: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.CLOSE_FILE, { id });\n }\n\n // Associate file id with the current tab\n // so the next time the file is opened this tab can be focused instead of opening a new tab\n registerFileMetadata(fileMetadata: FileMetadata, isPreview: boolean): void {\n const { glEventHub, metadata } = this.props;\n const { id: tabId } = metadata;\n glEventHub.emit(\n NotebookEvent.REGISTER_FILE,\n tabId,\n fileMetadata,\n isPreview\n );\n }\n\n renameTab(id: string, title: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.RENAME, id, title);\n }\n\n load() {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const { id } = fileMetadata;\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.loadFile(id))\n .then(loadedFile => {\n log.debug('Loaded file', loadedFile);\n const { filename: itemName } = loadedFile;\n const { itemName: prevItemName } = this.state;\n if (itemName !== prevItemName) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(itemName));\n }\n const updatedSettings = {\n ...settings,\n language: NotebookPanel.languageFromFileName(itemName) ?? '',\n };\n if (settings.value == null) {\n updatedSettings.value = loadedFile.content;\n }\n this.setState({\n fileMetadata: { id: itemName, itemName },\n settings: updatedSettings,\n });\n this.debouncedSavePanelState();\n })\n .then(this.handleLoadSuccess)\n .catch(this.handleLoadError);\n }\n\n /**\n * Attempts to save the notebook.\n * @returns Returns true if save has begun, false if user needed to be prompted\n */\n save(): boolean {\n const { fileMetadata } = this.state;\n if (fileMetadata && FileUtils.hasPath(fileMetadata.itemName)) {\n const content = this.getNotebookValue();\n if (content != null) {\n this.saveContent(fileMetadata.itemName, content);\n return true;\n }\n return false;\n }\n\n this.setState({ showSaveAsModal: true });\n return false;\n }\n\n /**\n * Update existing file content\n * @param filename The name of the file\n * @param content New file content\n */\n saveContent(filename: string, content: string): void {\n log.debug('saveContent', filename, content);\n this.updateSavedChangeCount();\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.saveFile({ filename, content, basename: filename }))\n .then(this.handleSaveSuccess)\n .catch(this.handleSaveError);\n }\n\n updateSavedChangeCount() {\n this.setState(({ changeCount }) => ({ savedChangeCount: changeCount }));\n }\n\n setPreviewStatus() {\n if (!this.tabTitleElement) {\n return;\n }\n const { isPreview } = this.state;\n log.debug('setPreviewStatus', this.tabTitleElement, isPreview);\n if (isPreview) {\n this.tabTitleElement.classList.add('is-preview');\n } else {\n this.tabTitleElement.classList.remove('is-preview');\n }\n }\n\n getOverflowActions = memoize(() => [\n {\n title: 'Find',\n icon: dhFileSearch,\n action: this.handleFind,\n group: ContextActions.groups.high,\n shortcut: SHORTCUTS.NOTEBOOK.FIND,\n order: 10,\n },\n ]);\n\n savePanelState() {\n this.setState(state => {\n const {\n changeCount,\n savedChangeCount,\n fileMetadata,\n isPreview,\n settings: initialSettings,\n } = state;\n const value = this.getNotebookValue();\n // notebooks with no unsaved changes have value === null in dehydrated state\n // content will be loaded from file when hydrating\n const dehydratedValue = changeCount !== savedChangeCount ? value : null;\n const settings = {\n ...initialSettings,\n value,\n };\n const dehydratedSettings = {\n ...initialSettings,\n value: dehydratedValue,\n };\n const panelState = {\n settings: dehydratedSettings,\n fileMetadata,\n isPreview,\n };\n log.debug('Saving panel state', panelState);\n return {\n settings,\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n });\n }\n\n handleCloseDiscard(): void {\n this.shouldPromptClose = false;\n this.setState({ showCloseModal: false });\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseSave(): void {\n this.shouldPromptClose = false;\n this.setState({ showCloseModal: false });\n if (this.save()) {\n const { glContainer } = this.props;\n glContainer.close();\n }\n }\n\n handleCloseCancel(): void {\n this.shouldPromptClose = true;\n this.setState({ showCloseModal: false });\n }\n\n handleCopy(): void {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const content = this.getNotebookValue();\n const { language } = settings;\n const { itemName } = fileMetadata;\n const copyName = FileUtils.getCopyFileName(itemName);\n log.debug('handleCopy', fileMetadata, itemName, copyName);\n this.createNotebook(copyName, language, content ?? undefined);\n }\n\n handleEditorChange(e: editor.IModelContentChangedEvent): void {\n log.debug2('handleEditorChanged', e);\n\n this.removePreviewStatus();\n\n this.setState(state => {\n const { changeCount, savedChangeCount } = state;\n const { isUndoing, isRedoing } = e;\n if (isUndoing) {\n // Note that it's possible to undo past where the user last saved, if they save and then undo for example\n return { changeCount: changeCount - 1, savedChangeCount };\n }\n\n if (!isRedoing && changeCount < savedChangeCount) {\n // We made another change after undoing some changes from the previous save\n // Just reset the saved counter to zero and increase the unchanged saves\n // It'll be set correctly on the next save\n return { changeCount: changeCount + 1, savedChangeCount: 0 };\n }\n\n return { changeCount: changeCount + 1, savedChangeCount };\n });\n this.debouncedSavePanelState();\n }\n\n handleFind() {\n if (this.notebook) {\n this.notebook.toggleFind();\n }\n }\n\n handleBlur(): void {\n log.debug('handleBlur');\n this.setState({ isFocused: false });\n }\n\n handleFocus(): void {\n log.debug('handleFocus');\n this.setState({ isFocused: true });\n }\n\n /**\n * @param event The click event from clicking on the link\n */\n handleLinkClick(event: MouseEvent<HTMLAnchorElement>) {\n const { notebooksUrl, session, sessionLanguage } = this.props;\n const { href } = event.currentTarget;\n if (!href || !href.startsWith(notebooksUrl)) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n const notebookPath = `/${href.substring(notebooksUrl.length)}`.replace(\n /%20/g,\n ' '\n );\n if (notebookPath === '/') {\n log.debug('Ignoring invalid notebook link', notebookPath);\n return;\n }\n\n log.debug('Notebook link clicked, opening', notebookPath);\n\n const { glEventHub } = this.props;\n const notebookSettings = {\n value: null,\n language: sessionLanguage,\n };\n const fileMetadata = { id: notebookPath, itemName: notebookPath };\n glEventHub.emit(\n NotebookEvent.SELECT_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n handleLoadSuccess() {\n this.setState({\n error: undefined,\n isLoaded: true,\n isLoading: false,\n });\n }\n\n handleLoadError(errorParam: { message?: string | undefined }) {\n let error = errorParam;\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n if (PromiseUtils.isTimedOut(error)) {\n error = new Error('File not found.');\n }\n log.error(error);\n this.setState({ error, isLoading: false });\n }\n\n handleSave() {\n log.debug('handleSave');\n this.save();\n }\n\n handleSaveSuccess(file: File) {\n const { fileStorage } = this.props;\n const fileMetadata = { id: file.filename, itemName: file.filename };\n const language = NotebookPanel.languageFromFileName(file.filename) ?? '';\n this.setState(state => {\n const { fileMetadata: oldMetadata } = state;\n const settings = {\n ...state.settings,\n language,\n };\n log.debug('handleSaveSuccess', fileMetadata, oldMetadata, settings);\n if (\n oldMetadata &&\n FileUtils.hasPath(oldMetadata.itemName) &&\n oldMetadata.itemName !== fileMetadata.itemName\n ) {\n log.debug('handleSaveSuccess deleting old file', oldMetadata.itemName);\n fileStorage\n .deleteFile(oldMetadata.itemName)\n .catch(NotebookPanel.handleError);\n }\n return {\n fileMetadata,\n settings,\n isPreview: false,\n };\n });\n this.debouncedSavePanelState();\n this.registerFileMetadata(fileMetadata, false);\n }\n\n handleSaveError(error: unknown) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n // There was an error saving, just reset the savedChangeCount\n // It's possible if they undo changes they'll be back at the spot where it was last saved successfully,\n // But we may as well continue showing the error until they actually save again\n this.setState({ savedChangeCount: 0 });\n log.error(error);\n }\n\n handleSaveAsCancel() {\n this.setState({ showSaveAsModal: false });\n }\n\n handleSaveAsSubmit(name: string): void {\n log.debug('handleSaveAsSubmit', name);\n const { fileMetadata } = this.state;\n if (!fileMetadata) {\n return;\n }\n const { itemName: prevItemName } = fileMetadata;\n const content = this.getNotebookValue() ?? '';\n this.setState({\n showSaveAsModal: false,\n });\n\n if (FileUtils.getBaseName(prevItemName) !== FileUtils.getBaseName(name)) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(name));\n }\n\n this.saveContent(name, content);\n }\n\n handleRenameFile(oldName: string, newName: string) {\n const { fileMetadata } = this.state;\n if (fileMetadata && fileMetadata.id === oldName) {\n this.setState({ fileMetadata: { id: newName, itemName: newName } });\n this.debouncedSavePanelState();\n }\n }\n\n handleResize(): void {\n this.notebook?.updateDimensions();\n }\n\n handleRunCommand(command?: string): void {\n this.runCommand(command);\n }\n\n handleRunAll(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getValue() ?? undefined);\n }\n\n handleRunSelected(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getSelectedCommand());\n }\n\n handleSessionOpened(\n session: IdeSession,\n { language }: { language: string }\n ): void {\n this.setState({\n session,\n sessionLanguage: language,\n });\n }\n\n handleSessionClosed(): void {\n this.setState({\n session: undefined,\n sessionLanguage: undefined,\n });\n }\n\n handleShow(): void {\n log.debug('handleShow');\n this.notebook?.updateDimensions();\n }\n\n handleShowRename(): void {\n this.setState({ showSaveAsModal: true });\n }\n\n handleTab(tab: Tab): void {\n log.debug('NotebookPanel tab event', tab);\n this.initTab(tab);\n }\n\n handleTabFocus(...args: unknown[]): void {\n log.debug('handleTabFocus', ...args);\n const { glContainer } = this.props;\n this.setState({\n isDashboardActive: true,\n });\n if (this.notebook && !glContainer.isHidden) {\n this.notebook.updateDimensions();\n }\n }\n\n handleTabBlur(): void {\n log.debug('handleTabBlur');\n this.setState({\n isDashboardActive: false,\n });\n }\n\n handlePanelTabClick(): void {\n log.debug('handlePanelTabClick');\n this.focus();\n }\n\n /**\n * Transform the link URI to load from where the notebook is if it's relative\n * @param src The link to transform\n * @returns String the transformed link\n */\n handleTransformLinkUri(src: string): string {\n const { notebooksUrl } = this.props;\n const { fileMetadata } = this.state;\n\n if (src.endsWith('/')) {\n return src;\n }\n\n if (src.startsWith('/')) {\n return `${notebooksUrl}${src.substring(1)}`;\n }\n\n let itemName = fileMetadata?.itemName;\n if (!itemName) {\n return src;\n }\n if (itemName.charAt(0) === '/') {\n itemName = itemName.substring(1);\n }\n\n const itemUri = new URL(itemName, notebooksUrl);\n return new URL(src, itemUri).href;\n }\n\n focus(): void {\n requestAnimationFrame(() => {\n if (this.notebook) {\n this.notebook.focus();\n }\n });\n }\n\n createNotebook(\n itemName: string,\n language: string | undefined,\n content = ''\n ): void {\n const { glEventHub } = this.props;\n const { session, sessionLanguage, settings } = this.state;\n const notebookSettings = {\n ...settings,\n language,\n value: content,\n };\n const fileMetadata = {\n id: null,\n itemName,\n };\n log.debug(\n 'handleCreateNotebook',\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n glEventHub.emit(\n NotebookEvent.CREATE_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n runCommand(command?: string): void {\n if (!command) {\n log.debug('Ignoring empty command.');\n return;\n }\n\n this.removePreviewStatus();\n\n const { glEventHub } = this.props;\n glEventHub.emit(ConsoleEvent.SEND_COMMAND, command, false, true);\n }\n\n removePreviewStatus(): void {\n this.setState(({ isPreview }) => {\n if (isPreview) {\n const { fileMetadata } = this.state;\n if (fileMetadata) {\n this.registerFileMetadata(fileMetadata, false);\n }\n return { isPreview: false };\n }\n return null;\n });\n }\n\n render(): ReactElement {\n const {\n fileStorage,\n glContainer,\n glContainer: { tab },\n glEventHub,\n } = this.props;\n const {\n changeCount,\n savedChangeCount,\n error,\n isDashboardActive,\n isLoaded,\n isLoading,\n isPreview,\n fileMetadata,\n session,\n sessionLanguage,\n settings: initialSettings,\n showCloseModal,\n showSaveAsModal,\n } = this.state;\n // We don't want to steal focus if this isn't shown or it's just a preview\n const focusOnMount =\n isDashboardActive && !glContainer.isHidden && !isPreview;\n const itemName = fileMetadata?.itemName ?? NotebookPanel.DEFAULT_NAME;\n const isMarkdown = itemName.endsWith('.md');\n const isExistingItem = fileMetadata?.id != null;\n const overflowActions = this.getOverflowActions();\n const settings = {\n ...initialSettings,\n };\n const isSessionConnected = session != null;\n const isLanguageMatching = sessionLanguage === settings.language;\n const runButtonsDisabled =\n !isLoaded || !isSessionConnected || !isLanguageMatching;\n const toolbarDisabled = !isLoaded;\n const contextActions = [\n {\n action: this.handleSave,\n shortcut: GLOBAL_SHORTCUTS.SAVE,\n },\n ];\n const disabledRunButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run'\n );\n const disabledRunSelectedButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run Selected'\n );\n\n const additionalActions = [\n {\n title: isExistingItem ? 'Rename' : 'Save As…',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleShowRename,\n },\n {\n title: 'Copy File',\n action: this.handleCopy,\n group: ContextActions.groups.high,\n order: 20,\n },\n ];\n\n const portal = tab.element.find('.lm_title_before').get(0);\n assertNotNull(portal);\n\n return (\n <>\n {tab &&\n ReactDOM.createPortal(\n <span\n className={classNames('editor-unsaved-indicator', {\n 'is-unsaved': changeCount !== savedChangeCount,\n })}\n />,\n portal // tab.element is jquery element, we want a dom element\n )}\n\n <Panel\n className=\"notebook-container\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onTab={this.handleTab}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabFocus={this.handleTabFocus}\n onTabBlur={this.handleTabBlur}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n additionalActions={additionalActions}\n renderTabTooltip={() => itemName}\n >\n {!isMarkdown && (\n <>\n <div className=\"notebook-toolbar\">\n <span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-play\"\n onClick={this.handleRunAll}\n disabled={runButtonsDisabled}\n >\n <FontAwesomeIcon icon={vsPlay} transform=\"grow-4\" />\n <Tooltip>\n Run {SHORTCUTS.NOTEBOOK.RUN.getDisplayText()}\n </Tooltip>\n </button>\n {disabledRunButtonTooltip && (\n <Tooltip>{disabledRunButtonTooltip}</Tooltip>\n )}\n </span>\n <span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-play\"\n onClick={this.handleRunSelected}\n disabled={runButtonsDisabled}\n >\n <FontAwesomeIcon icon={dhRunSelection} transform=\"grow-4\" />\n <Tooltip>\n Run Selected{' '}\n {SHORTCUTS.NOTEBOOK.RUN_SELECTED.getDisplayText()}\n </Tooltip>\n </button>\n {disabledRunSelectedButtonTooltip && (\n <Tooltip>{disabledRunSelectedButtonTooltip}</Tooltip>\n )}\n </span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon mr-auto\"\n disabled={toolbarDisabled}\n onClick={this.handleSave}\n >\n <FontAwesomeIcon icon={vsSave} />\n <Tooltip>Save</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-overflow btn-link-icon\"\n disabled={toolbarDisabled}\n >\n <FontAwesomeIcon icon={vsKebabVertical} />\n <Tooltip>More Actions...</Tooltip>\n <DropdownMenu\n actions={overflowActions}\n popperOptions={NotebookPanel.POPPER_OPTIONS}\n />\n </button>\n </div>\n <ScriptEditor\n isLoaded={isLoaded}\n isLoading={isLoading}\n error={error}\n onChange={this.handleEditorChange}\n onRunCommand={this.handleRunCommand}\n session={session}\n sessionLanguage={sessionLanguage}\n settings={settings}\n focusOnMount={focusOnMount}\n ref={notebook => {\n this.notebook = notebook;\n }}\n />\n </>\n )}\n {isMarkdown && (\n <MarkdownNotebook\n content={settings.value ?? ''}\n onLinkClick={this.handleLinkClick}\n onRunCode={this.handleRunCommand}\n transformImageUri={this.handleTransformLinkUri}\n transformLinkUri={this.handleTransformLinkUri}\n />\n )}\n <NewItemModal\n isOpen={showSaveAsModal}\n type=\"file\"\n defaultValue={itemName}\n title={isExistingItem ? 'Rename' : 'Save file as'}\n onSubmit={this.handleSaveAsSubmit}\n onCancel={this.handleSaveAsCancel}\n notifyOnExtensionChange\n storage={fileStorage}\n />\n <BasicModal\n isOpen={showCloseModal}\n headerText={`Do you want to save the changes you made to ${itemName}?`}\n bodyText=\"Your changes will be lost if you don't save them.\"\n onCancel={this.handleCloseCancel}\n onDiscard={this.handleCloseDiscard}\n onConfirm={this.handleCloseSave}\n discardButtonText=\"Discard Changes\"\n confirmButtonText=\"Save\"\n />\n <ContextActions actions={contextActions} />\n </Panel>\n </>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => {\n const fileStorage = getFileStorage(state);\n const sessionWrapper = getDashboardSessionWrapper(\n state,\n ownProps.localDashboardId\n );\n const { session, config: sessionConfig } = sessionWrapper ?? {};\n const { type: sessionLanguage } = sessionConfig ?? {};\n return {\n fileStorage,\n session,\n sessionLanguage,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n NotebookPanel\n);\n"],"file":"NotebookPanel.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/panels/NotebookPanel.tsx"],"names":["React","Component","ReactDOM","memoize","connect","FontAwesomeIcon","BasicModal","ContextActions","DropdownMenu","Tooltip","GLOBAL_SHORTCUTS","ScriptEditor","ScriptEditorUtils","SHORTCUTS","FileUtils","NewItemModal","vsSave","vsKebabVertical","dhFileSearch","vsPlay","dhRunSelection","getFileStorage","classNames","debounce","Log","assertNotNull","Pending","PromiseUtils","ConsoleEvent","NotebookEvent","getDashboardSessionWrapper","Panel","MarkdownNotebook","log","module","DEBOUNCE_PANEL_STATE_UPDATE","NotebookPanel","handleError","error","isCanceled","languageFromFileName","fileName","extension","getExtension","toLowerCase","constructor","props","title","icon","action","handleFind","group","groups","high","shortcut","NOTEBOOK","FIND","order","handleBlur","bind","handleCloseCancel","handleCloseDiscard","handleCloseSave","handleCopy","handleEditorChange","handleFocus","handleLinkClick","handleLoadSuccess","handleLoadError","handlePanelTabClick","handleRenameFile","handleResize","handleRunCommand","handleRunAll","handleRunSelected","handleSave","handleSaveAsCancel","handleSaveAsSubmit","handleSaveError","handleSaveSuccess","handleSessionOpened","handleSessionClosed","handleShow","handleShowRename","handleTab","handleTabFocus","handleTabBlur","handleTransformLinkUri","pending","debouncedSavePanelState","savePanelState","debouncedLoad","load","notebook","tabTitleElement","tabInitOnce","shouldPromptClose","isDashboardActive","session","sessionLanguage","panelState","settings","value","language","fileMetadata","isPreview","hasFileId","itemName","hasPath","isUnsaved","changeCount","state","undefined","isFocused","isLoading","isLoaded","savedChangeCount","showCloseModal","showSaveAsModal","scriptCode","debug","componentDidMount","glContainer","glEventHub","tab","initTab","initNotebookContent","on","RENAME_FILE","componentDidUpdate","prevProps","prevState","setPreviewStatus","componentWillUnmount","flush","cancel","off","emit","UNREGISTER_FILE","initTabCloseOverride","initTabClasses","close","setState","tabElement","element","get","titleElement","querySelector","classList","add","getNotebookValue","notebookValue","getValue","id","registerFileMetadata","Error","closeFileTabById","CLOSE_FILE","metadata","tabId","REGISTER_FILE","renameTab","RENAME","fileStorage","loadFile","then","loadedFile","filename","prevItemName","getBaseName","updatedSettings","content","catch","save","saveContent","updateSavedChangeCount","saveFile","basename","remove","initialSettings","dehydratedValue","dehydratedSettings","copyName","getCopyFileName","createNotebook","e","debug2","removePreviewStatus","isUndoing","isRedoing","toggleFind","event","notebooksUrl","href","currentTarget","startsWith","stopPropagation","preventDefault","notebookPath","substring","length","replace","notebookSettings","SELECT_NOTEBOOK","errorParam","isTimedOut","file","oldMetadata","deleteFile","name","oldName","newName","updateDimensions","command","runCommand","getSelectedCommand","args","isHidden","focus","src","endsWith","charAt","itemUri","URL","requestAnimationFrame","CREATE_NOTEBOOK","SEND_COMMAND","render","focusOnMount","DEFAULT_NAME","isMarkdown","isExistingItem","overflowActions","getOverflowActions","isSessionConnected","isLanguageMatching","runButtonsDisabled","toolbarDisabled","contextActions","SAVE","disabledRunButtonTooltip","getDisabledRunTooltip","disabledRunSelectedButtonTooltip","additionalActions","portal","find","createPortal","RUN","getDisplayText","RUN_SELECTED","POPPER_OPTIONS","placement","process","env","REACT_APP_NOTEBOOKS_URL","window","location","mapStateToProps","ownProps","sessionWrapper","localDashboardId","config","sessionConfig","type","forwardRef"],"mappings":"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","sourcesContent":["// Wrapper for the Notebook for use in a golden layout container\nimport React, { Component, MouseEvent, ReactElement } from 'react';\nimport ReactDOM from 'react-dom';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport type { editor } from 'monaco-editor';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n BasicModal,\n ContextActions,\n DropdownMenu,\n Tooltip,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport { ScriptEditor, ScriptEditorUtils, SHORTCUTS } from '@deephaven/console';\nimport {\n FileStorage,\n FileUtils,\n NewItemModal,\n File,\n} from '@deephaven/file-explorer';\nimport {\n vsSave,\n vsKebabVertical,\n dhFileSearch,\n vsPlay,\n dhRunSelection,\n} from '@deephaven/icons';\nimport { getFileStorage, RootState } from '@deephaven/redux';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport { Container, EventEmitter, Tab } from '@deephaven/golden-layout';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { ConsoleEvent, NotebookEvent } from '../events';\nimport { getDashboardSessionWrapper } from '../redux';\nimport Panel from './Panel';\nimport MarkdownNotebook from './MarkdownNotebook';\nimport './NotebookPanel.scss';\n\nconst log = Log.module('NotebookPanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 400;\n\ninterface Metadata {\n id: string;\n}\n\ninterface Settings {\n language: string;\n value: string | null;\n}\n\ninterface FileMetadata {\n itemName: string;\n id: string;\n}\n\ninterface PanelState {\n isPreview?: boolean;\n settings: Settings;\n fileMetadata: FileMetadata | null;\n}\n\ninterface NotebookPanelProps {\n fileStorage: FileStorage;\n glContainer: Container;\n glEventHub: EventEmitter;\n isDashboardActive: boolean;\n isPreview: boolean;\n metadata: Metadata;\n session: IdeSession;\n sessionLanguage: string;\n panelState: PanelState;\n notebooksUrl: string;\n}\n\ninterface NotebookPanelState {\n error?: {\n message?: string | undefined;\n };\n isDashboardActive: boolean;\n isFocused: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isPreview: boolean;\n\n savedChangeCount: number;\n changeCount: number;\n fileMetadata: FileMetadata | null;\n settings: Settings;\n\n session?: IdeSession;\n sessionLanguage?: string;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n\n showCloseModal: boolean;\n showSaveAsModal: boolean;\n\n scriptCode: string;\n\n itemName?: string;\n}\n\nclass NotebookPanel extends Component<NotebookPanelProps, NotebookPanelState> {\n static COMPONENT = 'NotebookPanel';\n\n static POPPER_OPTIONS = { placement: 'bottom-end' } as const;\n\n static DEFAULT_NAME = 'Untitled';\n\n static handleError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n }\n\n static defaultProps = {\n isDashboardActive: true,\n isPreview: false,\n session: null,\n sessionLanguage: null,\n notebooksUrl: new URL(\n `${process.env.REACT_APP_NOTEBOOKS_URL}/`,\n `${window.location}`\n ).href,\n };\n\n static languageFromFileName(fileName: string): string | null {\n const extension = FileUtils.getExtension(fileName).toLowerCase();\n switch (extension) {\n case 'py':\n case 'python':\n return 'python';\n case 'groovy':\n return 'groovy';\n case 'scala':\n return 'scala';\n default:\n return null;\n }\n }\n\n constructor(props: NotebookPanelProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleCloseCancel = this.handleCloseCancel.bind(this);\n this.handleCloseDiscard = this.handleCloseDiscard.bind(this);\n this.handleCloseSave = this.handleCloseSave.bind(this);\n this.handleCopy = this.handleCopy.bind(this);\n this.handleEditorChange = this.handleEditorChange.bind(this);\n this.handleFind = this.handleFind.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleLinkClick = this.handleLinkClick.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handlePanelTabClick = this.handlePanelTabClick.bind(this);\n this.handleRenameFile = this.handleRenameFile.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleRunCommand = this.handleRunCommand.bind(this);\n this.handleRunAll = this.handleRunAll.bind(this);\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleSaveAsCancel = this.handleSaveAsCancel.bind(this);\n this.handleSaveAsSubmit = this.handleSaveAsSubmit.bind(this);\n this.handleSaveError = this.handleSaveError.bind(this);\n this.handleSaveSuccess = this.handleSaveSuccess.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleShowRename = this.handleShowRename.bind(this);\n this.handleTab = this.handleTab.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTransformLinkUri = this.handleTransformLinkUri.bind(this);\n\n this.pending = new Pending();\n\n this.debouncedSavePanelState = debounce(\n this.savePanelState.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.debouncedLoad = debounce(\n this.load.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.notebook = null;\n\n this.tabTitleElement = null;\n\n this.tabInitOnce = false;\n this.shouldPromptClose = true;\n\n const { isDashboardActive, session, sessionLanguage, panelState } = props;\n\n let settings: { value: string | null; language: string } = {\n value: '',\n language: '',\n };\n let fileMetadata = null;\n let { isPreview } = props;\n if (panelState) {\n ({\n fileMetadata = fileMetadata,\n isPreview = isPreview,\n settings = settings,\n } = panelState);\n }\n\n // Not showing the unsaved indicator for null file id and editor content === '',\n // may need to implement some other indication that this notebook has never been saved\n const hasFileId =\n fileMetadata?.itemName && FileUtils.hasPath(fileMetadata.itemName);\n\n // Unsaved if file id != null and content != null\n // OR file id is null AND content is not null or ''\n const isUnsaved =\n (hasFileId && settings.value != null) || (!hasFileId && settings.value);\n const changeCount = isUnsaved ? 1 : 0;\n\n this.state = {\n error: undefined,\n isDashboardActive,\n isFocused: false,\n isLoading: true,\n isLoaded: false,\n isPreview,\n\n savedChangeCount: 0,\n changeCount,\n fileMetadata,\n settings,\n\n session,\n sessionLanguage,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n fileMetadata,\n settings,\n },\n\n showCloseModal: false,\n showSaveAsModal: false,\n\n scriptCode: '',\n };\n\n log.debug('constructor', props, this.state);\n }\n\n componentDidMount() {\n const { glContainer, glEventHub } = this.props;\n const { tab } = glContainer;\n if (tab) this.initTab(tab);\n this.initNotebookContent();\n glEventHub.on(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.on('tabClicked', this.handlePanelTabClick);\n }\n\n componentDidUpdate(\n prevProps: NotebookPanelProps,\n prevState: NotebookPanelState\n ): void {\n const { isPreview } = this.state;\n if (isPreview !== prevState.isPreview) {\n this.setPreviewStatus();\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSavePanelState.flush();\n this.pending.cancel();\n\n const { glContainer, glEventHub } = this.props;\n\n const { fileMetadata, isPreview } = this.state;\n glEventHub.off(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.off('tabClicked', this.handlePanelTabClick);\n glEventHub.emit(NotebookEvent.UNREGISTER_FILE, fileMetadata, isPreview);\n }\n\n pending: Pending;\n\n debouncedSavePanelState;\n\n debouncedLoad;\n\n notebook: ScriptEditor | null;\n\n tabTitleElement: Element | null;\n\n tabInitOnce: boolean;\n\n shouldPromptClose: boolean;\n\n // Called by TabEvent. Happens once when created, but also each time its moved.\n // when moved, need to re-init the unsaved indicators on title elements\n initTab(tab: Tab): void {\n if (!this.tabInitOnce) {\n this.tabInitOnce = true;\n this.initTabCloseOverride();\n }\n this.initTabClasses(tab);\n }\n\n // override glContainer.close() with a custom closure that checks if needs saving\n initTabCloseOverride() {\n const { glContainer } = this.props;\n const close = glContainer.close.bind(glContainer);\n glContainer.close = () => {\n const { changeCount, savedChangeCount } = this.state;\n if (changeCount !== savedChangeCount && this.shouldPromptClose) {\n this.setState({ showCloseModal: true });\n } else {\n close();\n }\n return true;\n };\n }\n\n initTabClasses(tab: Tab) {\n const tabElement = tab.element.get(0);\n assertNotNull(tabElement);\n const titleElement = tabElement.querySelector('.lm_title');\n this.tabTitleElement = titleElement;\n titleElement?.classList.add('notebook-title');\n this.setPreviewStatus();\n }\n\n getNotebookValue(): string | null {\n const { changeCount, savedChangeCount, settings } = this.state;\n const { value } = settings;\n if (changeCount !== savedChangeCount && this.notebook) {\n const notebookValue = this.notebook.getValue();\n return notebookValue != null ? notebookValue : value;\n }\n return value;\n }\n\n initNotebookContent(): void {\n // Init from file,\n // fallback to content from settings for unsaved notebook\n const { fileMetadata, settings, isPreview } = this.state;\n if (fileMetadata && fileMetadata.id) {\n log.debug('Init content from file');\n this.registerFileMetadata(fileMetadata, isPreview);\n this.load();\n return;\n }\n if (settings.value != null) {\n log.debug('Use content passed in the settings prop');\n this.handleLoadSuccess();\n return;\n }\n // No settings, no metadata\n this.handleLoadError(new Error('Missing file metadata'));\n }\n\n closeFileTabById(id: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.CLOSE_FILE, { id });\n }\n\n // Associate file id with the current tab\n // so the next time the file is opened this tab can be focused instead of opening a new tab\n registerFileMetadata(fileMetadata: FileMetadata, isPreview: boolean): void {\n const { glEventHub, metadata } = this.props;\n const { id: tabId } = metadata;\n glEventHub.emit(\n NotebookEvent.REGISTER_FILE,\n tabId,\n fileMetadata,\n isPreview\n );\n }\n\n renameTab(id: string, title: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.RENAME, id, title);\n }\n\n load() {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const { id } = fileMetadata;\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.loadFile(id))\n .then(loadedFile => {\n log.debug('Loaded file', loadedFile);\n const { filename: itemName } = loadedFile;\n const { itemName: prevItemName } = this.state;\n if (itemName !== prevItemName) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(itemName));\n }\n const updatedSettings = {\n ...settings,\n language: NotebookPanel.languageFromFileName(itemName) ?? '',\n };\n if (settings.value == null) {\n updatedSettings.value = loadedFile.content;\n }\n this.setState({\n fileMetadata: { id: itemName, itemName },\n settings: updatedSettings,\n });\n this.debouncedSavePanelState();\n })\n .then(this.handleLoadSuccess)\n .catch(this.handleLoadError);\n }\n\n /**\n * Attempts to save the notebook.\n * @returns Returns true if save has begun, false if user needed to be prompted\n */\n save(): boolean {\n const { fileMetadata } = this.state;\n if (fileMetadata && FileUtils.hasPath(fileMetadata.itemName)) {\n const content = this.getNotebookValue();\n if (content != null) {\n this.saveContent(fileMetadata.itemName, content);\n return true;\n }\n return false;\n }\n\n this.setState({ showSaveAsModal: true });\n return false;\n }\n\n /**\n * Update existing file content\n * @param filename The name of the file\n * @param content New file content\n */\n saveContent(filename: string, content: string): void {\n log.debug('saveContent', filename, content);\n this.updateSavedChangeCount();\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.saveFile({ filename, content, basename: filename }))\n .then(this.handleSaveSuccess)\n .catch(this.handleSaveError);\n }\n\n updateSavedChangeCount() {\n this.setState(({ changeCount }) => ({ savedChangeCount: changeCount }));\n }\n\n setPreviewStatus() {\n if (!this.tabTitleElement) {\n return;\n }\n const { isPreview } = this.state;\n log.debug('setPreviewStatus', this.tabTitleElement, isPreview);\n if (isPreview) {\n this.tabTitleElement.classList.add('is-preview');\n } else {\n this.tabTitleElement.classList.remove('is-preview');\n }\n }\n\n getOverflowActions = memoize(() => [\n {\n title: 'Find',\n icon: dhFileSearch,\n action: this.handleFind,\n group: ContextActions.groups.high,\n shortcut: SHORTCUTS.NOTEBOOK.FIND,\n order: 10,\n },\n ]);\n\n savePanelState() {\n this.setState(state => {\n const {\n changeCount,\n savedChangeCount,\n fileMetadata,\n isPreview,\n settings: initialSettings,\n } = state;\n const value = this.getNotebookValue();\n // notebooks with no unsaved changes have value === null in dehydrated state\n // content will be loaded from file when hydrating\n const dehydratedValue = changeCount !== savedChangeCount ? value : null;\n const settings = {\n ...initialSettings,\n value,\n };\n const dehydratedSettings = {\n ...initialSettings,\n value: dehydratedValue,\n };\n const panelState = {\n settings: dehydratedSettings,\n fileMetadata,\n isPreview,\n };\n log.debug('Saving panel state', panelState);\n return {\n settings,\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n });\n }\n\n handleCloseDiscard(): void {\n this.shouldPromptClose = false;\n this.setState({ showCloseModal: false });\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseSave(): void {\n this.shouldPromptClose = false;\n this.setState({ showCloseModal: false });\n if (this.save()) {\n const { glContainer } = this.props;\n glContainer.close();\n }\n }\n\n handleCloseCancel(): void {\n this.shouldPromptClose = true;\n this.setState({ showCloseModal: false });\n }\n\n handleCopy(): void {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const content = this.getNotebookValue();\n const { language } = settings;\n const { itemName } = fileMetadata;\n const copyName = FileUtils.getCopyFileName(itemName);\n log.debug('handleCopy', fileMetadata, itemName, copyName);\n this.createNotebook(copyName, language, content ?? undefined);\n }\n\n handleEditorChange(e: editor.IModelContentChangedEvent): void {\n log.debug2('handleEditorChanged', e);\n\n this.removePreviewStatus();\n\n this.setState(state => {\n const { changeCount, savedChangeCount } = state;\n const { isUndoing, isRedoing } = e;\n if (isUndoing) {\n // Note that it's possible to undo past where the user last saved, if they save and then undo for example\n return { changeCount: changeCount - 1, savedChangeCount };\n }\n\n if (!isRedoing && changeCount < savedChangeCount) {\n // We made another change after undoing some changes from the previous save\n // Just reset the saved counter to zero and increase the unchanged saves\n // It'll be set correctly on the next save\n return { changeCount: changeCount + 1, savedChangeCount: 0 };\n }\n\n return { changeCount: changeCount + 1, savedChangeCount };\n });\n this.debouncedSavePanelState();\n }\n\n handleFind() {\n if (this.notebook) {\n this.notebook.toggleFind();\n }\n }\n\n handleBlur(): void {\n log.debug('handleBlur');\n this.setState({ isFocused: false });\n }\n\n handleFocus(): void {\n log.debug('handleFocus');\n this.setState({ isFocused: true });\n }\n\n /**\n * @param event The click event from clicking on the link\n */\n handleLinkClick(event: MouseEvent<HTMLAnchorElement>) {\n const { notebooksUrl, session, sessionLanguage } = this.props;\n const { href } = event.currentTarget;\n if (!href || !href.startsWith(notebooksUrl)) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n const notebookPath = `/${href.substring(notebooksUrl.length)}`.replace(\n /%20/g,\n ' '\n );\n if (notebookPath === '/') {\n log.debug('Ignoring invalid notebook link', notebookPath);\n return;\n }\n\n log.debug('Notebook link clicked, opening', notebookPath);\n\n const { glEventHub } = this.props;\n const notebookSettings = {\n value: null,\n language: sessionLanguage,\n };\n const fileMetadata = { id: notebookPath, itemName: notebookPath };\n glEventHub.emit(\n NotebookEvent.SELECT_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n handleLoadSuccess() {\n this.setState({\n error: undefined,\n isLoaded: true,\n isLoading: false,\n });\n }\n\n handleLoadError(errorParam: { message?: string | undefined }) {\n let error = errorParam;\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n if (PromiseUtils.isTimedOut(error)) {\n error = new Error('File not found.');\n }\n log.error(error);\n this.setState({ error, isLoading: false });\n }\n\n handleSave() {\n log.debug('handleSave');\n this.save();\n }\n\n handleSaveSuccess(file: File) {\n const { fileStorage } = this.props;\n const fileMetadata = { id: file.filename, itemName: file.filename };\n const language = NotebookPanel.languageFromFileName(file.filename) ?? '';\n this.setState(state => {\n const { fileMetadata: oldMetadata } = state;\n const settings = {\n ...state.settings,\n language,\n };\n log.debug('handleSaveSuccess', fileMetadata, oldMetadata, settings);\n if (\n oldMetadata &&\n FileUtils.hasPath(oldMetadata.itemName) &&\n oldMetadata.itemName !== fileMetadata.itemName\n ) {\n log.debug('handleSaveSuccess deleting old file', oldMetadata.itemName);\n fileStorage\n .deleteFile(oldMetadata.itemName)\n .catch(NotebookPanel.handleError);\n }\n return {\n fileMetadata,\n settings,\n isPreview: false,\n };\n });\n this.debouncedSavePanelState();\n this.registerFileMetadata(fileMetadata, false);\n }\n\n handleSaveError(error: unknown) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n // There was an error saving, just reset the savedChangeCount\n // It's possible if they undo changes they'll be back at the spot where it was last saved successfully,\n // But we may as well continue showing the error until they actually save again\n this.setState({ savedChangeCount: 0 });\n log.error(error);\n }\n\n handleSaveAsCancel() {\n this.setState({ showSaveAsModal: false });\n }\n\n handleSaveAsSubmit(name: string): void {\n log.debug('handleSaveAsSubmit', name);\n const { fileMetadata } = this.state;\n if (!fileMetadata) {\n return;\n }\n const { itemName: prevItemName } = fileMetadata;\n const content = this.getNotebookValue() ?? '';\n this.setState({\n showSaveAsModal: false,\n });\n\n if (FileUtils.getBaseName(prevItemName) !== FileUtils.getBaseName(name)) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(name));\n }\n\n this.saveContent(name, content);\n }\n\n handleRenameFile(oldName: string, newName: string) {\n const { fileMetadata } = this.state;\n if (fileMetadata && fileMetadata.id === oldName) {\n this.setState({ fileMetadata: { id: newName, itemName: newName } });\n this.debouncedSavePanelState();\n }\n }\n\n handleResize(): void {\n this.notebook?.updateDimensions();\n }\n\n handleRunCommand(command?: string): void {\n this.runCommand(command);\n }\n\n handleRunAll(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getValue() ?? undefined);\n }\n\n handleRunSelected(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getSelectedCommand());\n }\n\n handleSessionOpened(\n session: IdeSession,\n { language }: { language: string }\n ): void {\n this.setState({\n session,\n sessionLanguage: language,\n });\n }\n\n handleSessionClosed(): void {\n this.setState({\n session: undefined,\n sessionLanguage: undefined,\n });\n }\n\n handleShow(): void {\n log.debug('handleShow');\n this.notebook?.updateDimensions();\n }\n\n handleShowRename(): void {\n this.setState({ showSaveAsModal: true });\n }\n\n handleTab(tab: Tab): void {\n log.debug('NotebookPanel tab event', tab);\n this.initTab(tab);\n }\n\n handleTabFocus(...args: unknown[]): void {\n log.debug('handleTabFocus', ...args);\n const { glContainer } = this.props;\n this.setState({\n isDashboardActive: true,\n });\n if (this.notebook && !glContainer.isHidden) {\n this.notebook.updateDimensions();\n }\n }\n\n handleTabBlur(): void {\n log.debug('handleTabBlur');\n this.setState({\n isDashboardActive: false,\n });\n }\n\n handlePanelTabClick(): void {\n log.debug('handlePanelTabClick');\n this.focus();\n }\n\n /**\n * Transform the link URI to load from where the notebook is if it's relative\n * @param src The link to transform\n * @returns String the transformed link\n */\n handleTransformLinkUri(src: string): string {\n const { notebooksUrl } = this.props;\n const { fileMetadata } = this.state;\n\n if (src.endsWith('/')) {\n return src;\n }\n\n if (src.startsWith('/')) {\n return `${notebooksUrl}${src.substring(1)}`;\n }\n\n let itemName = fileMetadata?.itemName;\n if (!itemName) {\n return src;\n }\n if (itemName.charAt(0) === '/') {\n itemName = itemName.substring(1);\n }\n\n const itemUri = new URL(itemName, notebooksUrl);\n return new URL(src, itemUri).href;\n }\n\n focus(): void {\n requestAnimationFrame(() => {\n if (this.notebook) {\n this.notebook.focus();\n }\n });\n }\n\n createNotebook(\n itemName: string,\n language: string | undefined,\n content = ''\n ): void {\n const { glEventHub } = this.props;\n const { session, sessionLanguage, settings } = this.state;\n const notebookSettings = {\n ...settings,\n language,\n value: content,\n };\n const fileMetadata = {\n id: null,\n itemName,\n };\n log.debug(\n 'handleCreateNotebook',\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n glEventHub.emit(\n NotebookEvent.CREATE_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n runCommand(command?: string): void {\n if (!command) {\n log.debug('Ignoring empty command.');\n return;\n }\n\n this.removePreviewStatus();\n\n const { glEventHub } = this.props;\n glEventHub.emit(ConsoleEvent.SEND_COMMAND, command, false, true);\n }\n\n removePreviewStatus(): void {\n this.setState(({ isPreview }) => {\n if (isPreview) {\n const { fileMetadata } = this.state;\n if (fileMetadata) {\n this.registerFileMetadata(fileMetadata, false);\n }\n return { isPreview: false };\n }\n return null;\n });\n }\n\n render(): ReactElement {\n const {\n fileStorage,\n glContainer,\n glContainer: { tab },\n glEventHub,\n } = this.props;\n const {\n changeCount,\n savedChangeCount,\n error,\n isDashboardActive,\n isLoaded,\n isLoading,\n isPreview,\n fileMetadata,\n session,\n sessionLanguage,\n settings: initialSettings,\n showCloseModal,\n showSaveAsModal,\n } = this.state;\n // We don't want to steal focus if this isn't shown or it's just a preview\n const focusOnMount =\n isDashboardActive && !glContainer.isHidden && !isPreview;\n const itemName = fileMetadata?.itemName ?? NotebookPanel.DEFAULT_NAME;\n const isMarkdown = itemName.endsWith('.md');\n const isExistingItem = fileMetadata?.id != null;\n const overflowActions = this.getOverflowActions();\n const settings = {\n ...initialSettings,\n };\n const isSessionConnected = session != null;\n const isLanguageMatching = sessionLanguage === settings.language;\n const runButtonsDisabled =\n !isLoaded || !isSessionConnected || !isLanguageMatching;\n const toolbarDisabled = !isLoaded;\n const contextActions = [\n {\n action: this.handleSave,\n shortcut: GLOBAL_SHORTCUTS.SAVE,\n },\n ];\n const disabledRunButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run'\n );\n const disabledRunSelectedButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run Selected'\n );\n\n const additionalActions = [\n {\n title: isExistingItem ? 'Rename' : 'Save As…',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleShowRename,\n },\n {\n title: 'Copy File',\n action: this.handleCopy,\n group: ContextActions.groups.high,\n order: 20,\n },\n ];\n\n const portal = tab?.element.find('.lm_title_before').get(0);\n\n return (\n <>\n {portal &&\n ReactDOM.createPortal(\n <span\n className={classNames('editor-unsaved-indicator', {\n 'is-unsaved': changeCount !== savedChangeCount,\n })}\n />,\n portal // tab.element is jquery element, we want a dom element\n )}\n\n <Panel\n className=\"notebook-container\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onTab={this.handleTab}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabFocus={this.handleTabFocus}\n onTabBlur={this.handleTabBlur}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n additionalActions={additionalActions}\n renderTabTooltip={() => itemName}\n >\n {!isMarkdown && (\n <>\n <div className=\"notebook-toolbar\">\n <span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-play\"\n onClick={this.handleRunAll}\n disabled={runButtonsDisabled}\n >\n <FontAwesomeIcon icon={vsPlay} transform=\"grow-4\" />\n <Tooltip>\n Run {SHORTCUTS.NOTEBOOK.RUN.getDisplayText()}\n </Tooltip>\n </button>\n {disabledRunButtonTooltip && (\n <Tooltip>{disabledRunButtonTooltip}</Tooltip>\n )}\n </span>\n <span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-play\"\n onClick={this.handleRunSelected}\n disabled={runButtonsDisabled}\n >\n <FontAwesomeIcon icon={dhRunSelection} transform=\"grow-4\" />\n <Tooltip>\n Run Selected{' '}\n {SHORTCUTS.NOTEBOOK.RUN_SELECTED.getDisplayText()}\n </Tooltip>\n </button>\n {disabledRunSelectedButtonTooltip && (\n <Tooltip>{disabledRunSelectedButtonTooltip}</Tooltip>\n )}\n </span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon mr-auto\"\n disabled={toolbarDisabled}\n onClick={this.handleSave}\n >\n <FontAwesomeIcon icon={vsSave} />\n <Tooltip>Save</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-overflow btn-link-icon\"\n disabled={toolbarDisabled}\n >\n <FontAwesomeIcon icon={vsKebabVertical} />\n <Tooltip>More Actions...</Tooltip>\n <DropdownMenu\n actions={overflowActions}\n popperOptions={NotebookPanel.POPPER_OPTIONS}\n />\n </button>\n </div>\n <ScriptEditor\n isLoaded={isLoaded}\n isLoading={isLoading}\n error={error}\n onChange={this.handleEditorChange}\n onRunCommand={this.handleRunCommand}\n session={session}\n sessionLanguage={sessionLanguage}\n settings={settings}\n focusOnMount={focusOnMount}\n ref={notebook => {\n this.notebook = notebook;\n }}\n />\n </>\n )}\n {isMarkdown && (\n <MarkdownNotebook\n content={settings.value ?? ''}\n onLinkClick={this.handleLinkClick}\n onRunCode={this.handleRunCommand}\n transformImageUri={this.handleTransformLinkUri}\n transformLinkUri={this.handleTransformLinkUri}\n />\n )}\n <NewItemModal\n isOpen={showSaveAsModal}\n type=\"file\"\n defaultValue={itemName}\n title={isExistingItem ? 'Rename' : 'Save file as'}\n onSubmit={this.handleSaveAsSubmit}\n onCancel={this.handleSaveAsCancel}\n notifyOnExtensionChange\n storage={fileStorage}\n />\n <BasicModal\n isOpen={showCloseModal}\n headerText={`Do you want to save the changes you made to ${itemName}?`}\n bodyText=\"Your changes will be lost if you don't save them.\"\n onCancel={this.handleCloseCancel}\n onDiscard={this.handleCloseDiscard}\n onConfirm={this.handleCloseSave}\n discardButtonText=\"Discard Changes\"\n confirmButtonText=\"Save\"\n />\n <ContextActions actions={contextActions} />\n </Panel>\n </>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => {\n const fileStorage = getFileStorage(state);\n const sessionWrapper = getDashboardSessionWrapper(\n state,\n ownProps.localDashboardId\n );\n const { session, config: sessionConfig } = sessionWrapper ?? {};\n const { type: sessionLanguage } = sessionConfig ?? {};\n return {\n fileStorage,\n session,\n sessionLanguage,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n NotebookPanel\n);\n"],"file":"NotebookPanel.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/dashboard-core-plugins",
|
|
3
|
-
"version": "0.15.6-beta.
|
|
3
|
+
"version": "0.15.6-beta.3+c012c4f",
|
|
4
4
|
"description": "Deephaven Dashboard Core Plugins",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -30,20 +30,20 @@
|
|
|
30
30
|
"start": "cross-env NODE_ENV=development npm run watch"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@deephaven/chart": "^0.15.6-beta.
|
|
34
|
-
"@deephaven/components": "^0.15.6-beta.
|
|
35
|
-
"@deephaven/console": "^0.15.6-beta.
|
|
36
|
-
"@deephaven/dashboard": "^0.15.6-beta.
|
|
37
|
-
"@deephaven/file-explorer": "^0.15.6-beta.
|
|
38
|
-
"@deephaven/golden-layout": "^0.15.6-beta.
|
|
39
|
-
"@deephaven/grid": "^0.15.6-beta.
|
|
40
|
-
"@deephaven/icons": "^0.15.6-beta.
|
|
41
|
-
"@deephaven/iris-grid": "^0.15.6-beta.
|
|
42
|
-
"@deephaven/jsapi-shim": "^0.15.6-beta.
|
|
43
|
-
"@deephaven/jsapi-utils": "^0.15.6-beta.
|
|
44
|
-
"@deephaven/log": "^0.15.6-beta.
|
|
45
|
-
"@deephaven/redux": "^0.15.6-beta.
|
|
46
|
-
"@deephaven/utils": "^0.15.6-beta.
|
|
33
|
+
"@deephaven/chart": "^0.15.6-beta.3+c012c4f",
|
|
34
|
+
"@deephaven/components": "^0.15.6-beta.3+c012c4f",
|
|
35
|
+
"@deephaven/console": "^0.15.6-beta.3+c012c4f",
|
|
36
|
+
"@deephaven/dashboard": "^0.15.6-beta.3+c012c4f",
|
|
37
|
+
"@deephaven/file-explorer": "^0.15.6-beta.3+c012c4f",
|
|
38
|
+
"@deephaven/golden-layout": "^0.15.6-beta.3+c012c4f",
|
|
39
|
+
"@deephaven/grid": "^0.15.6-beta.3+c012c4f",
|
|
40
|
+
"@deephaven/icons": "^0.15.6-beta.3+c012c4f",
|
|
41
|
+
"@deephaven/iris-grid": "^0.15.6-beta.3+c012c4f",
|
|
42
|
+
"@deephaven/jsapi-shim": "^0.15.6-beta.3+c012c4f",
|
|
43
|
+
"@deephaven/jsapi-utils": "^0.15.6-beta.3+c012c4f",
|
|
44
|
+
"@deephaven/log": "^0.15.6-beta.3+c012c4f",
|
|
45
|
+
"@deephaven/redux": "^0.15.6-beta.3+c012c4f",
|
|
46
|
+
"@deephaven/utils": "^0.15.6-beta.3+c012c4f",
|
|
47
47
|
"@fortawesome/react-fontawesome": "^0.1.18",
|
|
48
48
|
"classnames": "^2.3.1",
|
|
49
49
|
"deep-equal": "^2.0.5",
|
|
@@ -66,8 +66,8 @@
|
|
|
66
66
|
"react-redux": "^7.2.4"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
|
-
"@deephaven/mocks": "^0.15.6-beta.
|
|
70
|
-
"@deephaven/tsconfig": "^0.15.6-beta.
|
|
69
|
+
"@deephaven/mocks": "^0.15.6-beta.3+c012c4f",
|
|
70
|
+
"@deephaven/tsconfig": "^0.15.6-beta.3+c012c4f"
|
|
71
71
|
},
|
|
72
72
|
"files": [
|
|
73
73
|
"dist"
|
|
@@ -75,5 +75,5 @@
|
|
|
75
75
|
"publishConfig": {
|
|
76
76
|
"access": "public"
|
|
77
77
|
},
|
|
78
|
-
"gitHead": "
|
|
78
|
+
"gitHead": "c012c4fcc8b23c5349b288e896c0102ab9e05199"
|
|
79
79
|
}
|