Skip to content

Commit 3f12dd3

Browse files
authored
feat: De-globalize JSAPI in Console package (#1292)
- Remove global `dh` references in the Console package, update consumers. - Add `SET_API` reducer. BREAKING CHANGE: - Components `IrisGrid`, `Chart`, `ChartBuilder`, `AdvancedFilterCreator`, `GotoRow`, `IrisGridModelUpdater`, `TableCSVExporter` get the JSAPI reference from the `model` prop. `dh` prop removed. - `makeApi` props in `IrisGridPanel` and `ChartPanel` removed. - Components `Console`, `ConsoleMenu`, `ConsoleStatusBar` now require the JSAPI instance in the `dh` prop. - `ConsoleUtils`: static methods `isTableType`, `isWidgetType`, `isOpenableType`, `isFigureType`, `isPandas` require JSAPI instance passed in the first argument. - `SessionUtils`: static methods `createSessionWrapper`, `loadSessionWrapper` require JSAPI instance passed in the first argument. - Class `IrisGridModel` requires JSAPI instance passed in the constructor args. - Components `DashboardLayout`, `ObjectIcon` has to be wrapped in `ApiContext.Provider` passing the JSAPI instance.
1 parent a80c6fc commit 3f12dd3

52 files changed

Lines changed: 253 additions & 297 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

package-lock.json

Lines changed: 5 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/app-utils/src/components/ConnectionBootstrap.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { createContext, useEffect, useState } from 'react';
22
import { LoadingOverlay } from '@deephaven/components';
33
import { useApi, useClient } from '@deephaven/jsapi-bootstrap';
4-
import { IdeConnection } from '@deephaven/jsapi-types';
4+
import type { IdeConnection } from '@deephaven/jsapi-types';
55
import Log from '@deephaven/log';
66

77
const log = Log.module('@deephaven/jsapi-components.ConnectionBootstrap');

packages/chart/src/Chart.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import {
77
dhWarningFilled,
88
IconDefinition,
99
} from '@deephaven/icons';
10-
import type { dh as DhType } from '@deephaven/jsapi-types';
1110
import {
1211
Formatter,
1312
FormatterUtils,
@@ -36,7 +35,6 @@ type FormatterSettings = ColumnFormatSettings &
3635
};
3736

3837
interface ChartProps {
39-
dh: DhType;
4038
model: ChartModel;
4139
settings: FormatterSettings;
4240
isActive: boolean;
@@ -507,16 +505,14 @@ export class Chart extends Component<ChartProps, ChartState> {
507505
}
508506

509507
updateFormatter(): void {
510-
const { dh } = this.props;
508+
const { model } = this.props;
511509
const formatter = new Formatter(
512-
dh,
510+
model.dh,
513511
this.columnFormats,
514512
this.dateTimeFormatterOptions,
515513
this.decimalFormatOptions,
516514
this.integerFormatOptions
517515
);
518-
519-
const { model } = this.props;
520516
model.setFormatter(formatter);
521517
}
522518

packages/chart/src/ChartModel.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* eslint class-methods-use-this: "off" */
22
/* eslint no-unused-vars: "off" */
33

4+
import type { dh as DhType } from '@deephaven/jsapi-types';
45
import { Formatter } from '@deephaven/jsapi-utils';
56
import { Layout, PlotData } from 'plotly.js';
67
import { FilterColumnMap, FilterMap } from './ChartUtils';
@@ -28,11 +29,14 @@ class ChartModel {
2829

2930
static EVENT_LOADFINISHED = 'ChartModel.EVENT_LOADFINISHED';
3031

31-
constructor() {
32+
constructor(dh: DhType) {
33+
this.dh = dh;
3234
this.listeners = [];
3335
this.isDownsamplingDisabled = false;
3436
}
3537

38+
dh: DhType;
39+
3640
listeners: ((event: ChartEvent) => void)[];
3741

3842
formatter?: Formatter;

packages/chart/src/FigureChartModel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class FigureChartModel extends ChartModel {
4646
settings: Partial<ChartModelSettings> = {},
4747
theme: typeof ChartTheme = ChartTheme
4848
) {
49-
super();
49+
super(dh);
5050

5151
this.handleFigureUpdated = this.handleFigureUpdated.bind(this);
5252
this.handleFigureDisconnected = this.handleFigureDisconnected.bind(this);

packages/chart/src/MockChartModel.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ class MockChartModel extends ChartModel {
167167
filterFields = [],
168168
} = {}
169169
) {
170-
super();
170+
super(dh);
171171

172172
this.data = data;
173173
this.layout = layout;

packages/code-studio/src/main/AppInit.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ function AppInit(props: AppInitProps) {
126126
try {
127127
const sessionDetails = await getSessionDetails();
128128
const sessionWrapper = await loadSessionWrapper(
129+
api,
129130
connection,
130131
sessionDetails
131132
);
@@ -279,6 +280,7 @@ AppInit.propTypes = {
279280
workspaceStorage: PropTypes.shape({ close: PropTypes.func }),
280281

281282
setActiveTool: PropTypes.func.isRequired,
283+
setApi: PropTypes.func.isRequired,
282284
setCommandHistoryStorage: PropTypes.func.isRequired,
283285
setDashboardData: PropTypes.func.isRequired,
284286
setFileStorage: PropTypes.func.isRequired,

packages/code-studio/src/main/AppMainContainer.test.tsx

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import React from 'react';
33
import { render, screen } from '@testing-library/react';
44
import { ToolType } from '@deephaven/dashboard-core-plugins';
5+
import { ApiContext } from '@deephaven/jsapi-bootstrap';
56
import dh from '@deephaven/jsapi-shim';
67
import type {
78
IdeConnection,
@@ -69,27 +70,29 @@ function renderAppMainContainer({
6970
plugins = new Map(),
7071
} = {}) {
7172
return render(
72-
<AppMainContainer
73-
dashboardData={dashboardData as AppDashboardData}
74-
layoutStorage={layoutStorage as LayoutStorage}
75-
saveWorkspace={saveWorkspace}
76-
updateDashboardData={updateDashboardData}
77-
updateWorkspaceData={updateWorkspaceData}
78-
user={user}
79-
workspace={workspace as Workspace}
80-
workspaceStorage={workspaceStorage}
81-
activeTool={activeTool}
82-
setActiveTool={setActiveTool}
83-
setDashboardIsolatedLinkerPanelId={setDashboardIsolatedLinkerPanelId}
84-
client={client}
85-
serverConfigValues={serverConfigValues}
86-
dashboardOpenedPanelMaps={dashboardOpenedPanelMaps}
87-
connection={connection}
88-
session={(session as unknown) as IdeSession}
89-
sessionConfig={sessionConfig}
90-
match={match}
91-
plugins={plugins}
92-
/>
73+
<ApiContext.Provider value={dh}>
74+
<AppMainContainer
75+
dashboardData={dashboardData as AppDashboardData}
76+
layoutStorage={layoutStorage as LayoutStorage}
77+
saveWorkspace={saveWorkspace}
78+
updateDashboardData={updateDashboardData}
79+
updateWorkspaceData={updateWorkspaceData}
80+
user={user}
81+
workspace={workspace as Workspace}
82+
workspaceStorage={workspaceStorage}
83+
activeTool={activeTool}
84+
setActiveTool={setActiveTool}
85+
setDashboardIsolatedLinkerPanelId={setDashboardIsolatedLinkerPanelId}
86+
client={client}
87+
serverConfigValues={serverConfigValues}
88+
dashboardOpenedPanelMaps={dashboardOpenedPanelMaps}
89+
connection={connection}
90+
session={(session as unknown) as IdeSession}
91+
sessionConfig={sessionConfig}
92+
match={match}
93+
plugins={plugins}
94+
/>
95+
</ApiContext.Provider>
9396
);
9497
}
9598
let mockProp = {};

packages/code-studio/src/main/AppMainContainer.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,6 @@ export class AppMainContainer extends Component<
756756
getDownloadWorker: DownloadServiceWorkerUtils.getServiceWorker,
757757
loadPlugin: this.handleLoadTablePlugin,
758758
localDashboardId: id,
759-
makeApi: () => Promise.resolve(dh),
760759
makeModel: () => createGridModel(dh, connection, props.metadata, type),
761760
};
762761
}
@@ -766,7 +765,6 @@ export class AppMainContainer extends Component<
766765
return {
767766
...props,
768767
localDashboardId: id,
769-
makeApi: () => Promise.resolve(dh),
770768
makeModel: () => {
771769
const { metadata, panelState } = props;
772770
return createChartModel(dh, connection, metadata, panelState);

packages/code-studio/src/styleguide/Charts.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ function Charts(): ReactElement {
1010
<div>
1111
<h2 className="ui-title">Chart</h2>
1212
<div style={{ height: 500 }}>
13-
<Chart dh={dh} model={model as ChartModel} />
13+
<Chart model={model as ChartModel} />
1414
</div>
1515
</div>
1616
);

0 commit comments

Comments
 (0)