Skip to content

Commit

Permalink
feature: add seatunnel menubar
Browse files Browse the repository at this point in the history
  • Loading branch information
wangqi committed Jan 6, 2024
1 parent b6a4da0 commit 079969d
Show file tree
Hide file tree
Showing 5 changed files with 178 additions and 64 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,17 +1,29 @@
import React from 'react';
import React, {useState} from 'react';
import {Button, Space, Tooltip} from 'antd';
import {CalculatorOutlined, EyeOutlined, SaveOutlined} from '@ant-design/icons';
import {useIntl} from "@umijs/max";
import type {Edge} from '@antv/xflow';
import {useGraphEvent, useGraphInstance, useGraphStore,} from '@antv/xflow';
import {Menubar} from "@antv/x6-react-components";
import {JSONDebugModal} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/menubar/json";
import {SeaTunnelConfModal} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/menubar/seatunnel";
import {Props} from "@/typings";
import {WsDiJob} from "@/services/project/typings";

const CustomMenubar: React.FC = () => {
const CustomMenubar: React.FC<Props<WsDiJob>> = ({data}) => {
const intl = useIntl();
const graph = useGraphInstance();
const nodes = useGraphStore((state) => state.nodes);
const updateEdge = useGraphStore((state) => state.updateEdge);
const removeNodes = useGraphStore((state) => state.removeNodes);
const [jsonDebugDrawerSwitch, setJsonDebugDrawerSwitch] = useState<{ visible: boolean; data: null }>({
visible: false,
data: null,
});
const [seatunnelConfDrawerSwitch, setSeatunnelConfDrawerSwitch] = useState<{ visible: boolean; data: WsDiJob }>({
visible: false,
data: data,
});

useGraphEvent('node:change:data', ({node}) => {
if (graph) {
Expand All @@ -32,42 +44,67 @@ const CustomMenubar: React.FC = () => {
});

const onPreview = () => {
console.log('onPreview', graph)
setSeatunnelConfDrawerSwitch({visible: true, data: data})
};

const onDebug = () => {
console.log('onDebug', graph)
setJsonDebugDrawerSwitch({visible: true, data: null})
};

const onSave = () => {
console.log('onSave', graph)
};

return (
<Menubar extra={<Space>
<Tooltip title={intl.formatMessage({id: 'pages.project.di.flow.dag.debug'})}>
<Button
size="small"
icon={<CalculatorOutlined/>}
onClick={onDebug}
<>
<Menubar extra={<Space>
<Tooltip title={intl.formatMessage({id: 'pages.project.di.flow.dag.debug'})}>
<Button
size="small"
icon={<CalculatorOutlined/>}
onClick={onDebug}
/>
</Tooltip>
<Tooltip title={intl.formatMessage({id: 'pages.project.di.flow.dag.preview'})}>
<Button
size="small"
icon={<EyeOutlined/>}
onClick={onPreview}
/>
</Tooltip>
<Tooltip title={intl.formatMessage({id: 'pages.project.di.flow.dag.save'})}>
<Button
size="small"
icon={<SaveOutlined/>}
onClick={onSave}
/>
</Tooltip>
</Space>}/>
{jsonDebugDrawerSwitch && (
<JSONDebugModal
visible={jsonDebugDrawerSwitch.visible}
onCancel={() => {
setJsonDebugDrawerSwitch({visible: false, data: null});
}}
onVisibleChange={(visible: boolean) => {
setJsonDebugDrawerSwitch({visible: visible, data: null});
}}
data={jsonDebugDrawerSwitch.data}
/>
</Tooltip>
<Tooltip title={intl.formatMessage({id: 'pages.project.di.flow.dag.preview'})}>
<Button
size="small"
icon={<EyeOutlined/>}
onClick={onPreview}
)}
{seatunnelConfDrawerSwitch && (
<SeaTunnelConfModal
visible={seatunnelConfDrawerSwitch.visible}
onCancel={() => {
setSeatunnelConfDrawerSwitch({visible: false, data: data});
}}
onVisibleChange={(visible: boolean) => {
setSeatunnelConfDrawerSwitch({visible: visible, data: data});
}}
data={seatunnelConfDrawerSwitch.data}
/>
</Tooltip>
<Tooltip title={intl.formatMessage({id: 'pages.project.di.flow.dag.save'})}>
<Button
size="small"
icon={<SaveOutlined/>}
onClick={onSave}
/>
</Tooltip>

</Space>}/>
)}
</>
);
};

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import React, {useEffect, useRef, useState} from 'react';
import {Drawer} from "antd";
import {useGraphStore} from '@antv/xflow';
import Editor, {useMonaco} from "@monaco-editor/react";
import {ModalFormProps} from "@/typings";

const JSONDebugModal: React.FC<ModalFormProps<null>> = ({visible, onVisibleChange, onCancel}) => {
const nodes = useGraphStore((state) => state.nodes);
const edges = useGraphStore((state) => state.edges);
const editorRef = useRef(null);
const monaco = useMonaco();
const [conf, setConf] = useState<string>();

useEffect(() => {
// do conditional chaining
monaco?.languages.typescript.javascriptDefaults.setEagerModelSync(true);
// or make sure that it exists by other ways
if (monaco) {
// console.log("here is the monaco instance:", monaco);
}
}, [monaco]);

const handleEditorDidMount = (editor, monaco) => {
editorRef.current = editor;
}
useEffect(() => {
setConf(JSON.stringify({nodes, edges}, null, 2))
}, []);

return (
<Drawer
open={visible}
width={780}
bodyStyle={{overflowY: 'scroll'}}
destroyOnClose={true}
onClose={onCancel}
>
<Editor
width="780"
language="json"
theme="vs-dark"
value={conf}
options={{
selectOnLineNumbers: true,
readOnly: true,
minimap: {
enabled: false
}
}}
onMount={handleEditorDidMount}
/>
</Drawer>
);
};

export {JSONDebugModal};
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import React, {useEffect, useRef, useState} from 'react';
import {Drawer} from "antd";
import Editor, {useMonaco} from "@monaco-editor/react";
import {ModalFormProps} from "@/typings";
import {WsDiJob} from "@/services/project/typings";
import {WsDiJobService} from "@/services/project/WsDiJobService";

const SeaTunnelConfModal: React.FC<ModalFormProps<WsDiJob>> = ({visible, onVisibleChange, onCancel, data}) => {
const editorRef = useRef(null);
const monaco = useMonaco();
const [conf, setConf] = useState<string>();

useEffect(() => {
// do conditional chaining
monaco?.languages.typescript.javascriptDefaults.setEagerModelSync(true);
// or make sure that it exists by other ways
if (monaco) {
// console.log("here is the monaco instance:", monaco);
}
}, [monaco]);

const handleEditorDidMount = (editor, monaco) => {
editorRef.current = editor;
}

useEffect(() => {
WsDiJobService.previewJob(data.id).then((reponse) => {
setConf(reponse.data)
})
}, []);

return (
<Drawer
open={visible}
width={780}
bodyStyle={{overflowY: 'scroll'}}
destroyOnClose={true}
onClose={onCancel}
>
<Editor
width="780"
language="json"
theme="vs-dark"
value={conf}
options={{
selectOnLineNumbers: true,
readOnly: true,
minimap: {
enabled: false
}
}}
onMount={handleEditorDidMount}
/>
</Drawer>
);
};

export {SeaTunnelConfModal};
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ const DiJobFlow: React.FC = () => {
<div className={styles.center}>
<div className={styles.toolbar}>
<CustomToolbar/>
<CustomMenubar/>
<CustomMenubar data={props.data}/>
</div>

<div className={styles.graph}>
Expand Down

0 comments on commit 079969d

Please sign in to comment.