forked from deephaven/web-client-ui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
MatPlotLibPlugin.tsx
58 lines (51 loc) · 1.33 KB
/
MatPlotLibPlugin.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import React, { useCallback, useEffect } from 'react';
import shortid from 'shortid';
import {
DashboardPluginComponentProps,
LayoutUtils,
useListener,
} from '@deephaven/dashboard';
import { MatPlotLibPanel } from './panels';
import { MatPlotLibEvent } from './events';
export const MatPlotLibPlugin = ({
id,
layout,
registerComponent,
}: DashboardPluginComponentProps): JSX.Element => {
const handleOpen = useCallback(
(
title: string,
makeModel: () => Promise<string>,
metadata: Record<string, unknown> = {},
panelId = shortid.generate(),
dragEvent?: DragEvent
) => {
const config = {
type: 'react-component',
component: MatPlotLibPanel.COMPONENT,
props: {
localDashboardId: id,
id: panelId,
metadata,
makeModel,
},
title,
id: panelId,
};
const { root } = layout;
LayoutUtils.openComponent({ root, config, dragEvent });
},
[id, layout]
);
useEffect(() => {
const cleanups = [
registerComponent(MatPlotLibPanel.COMPONENT, MatPlotLibPanel),
];
return () => {
cleanups.forEach(cleanup => cleanup());
};
}, [registerComponent]);
useListener(layout.eventHub, MatPlotLibEvent.OPEN, handleOpen);
return <></>;
};
export default MatPlotLibPlugin;