Unverified Commit 67900115 authored by aiwenmo's avatar aiwenmo Committed by GitHub

[Optimization-633][web] Optimization lineage refresh

[Optimization-633][web] Optimization lineage refresh
parents 6bfada00 4bdfc523
...@@ -22,7 +22,7 @@ public class LineageTable { ...@@ -22,7 +22,7 @@ public class LineageTable {
public static LineageTable build(TableCA tableCA) { public static LineageTable build(TableCA tableCA) {
LineageTable lineageTable = new LineageTable(); LineageTable lineageTable = new LineageTable();
lineageTable.setId(tableCA.getId().toString()); lineageTable.setId(tableCA.getId().toString());
lineageTable.setName(tableCA.getName()); lineageTable.setName(tableCA.getTableName());
List<LineageColumn> columnList = new ArrayList<>(); List<LineageColumn> columnList = new ArrayList<>();
for (String columnName : tableCA.getFields()) { for (String columnName : tableCA.getFields()) {
columnList.add(LineageColumn.build(columnName, columnName)); columnList.add(LineageColumn.build(columnName, columnName));
......
import {LineageTable} from 'react-lineage-dag'; import {LineageTable} from 'react-lineage-dag';
import {useEffect, useState, useRef} from "react"; import {useState, useRef} from "react";
import LineageOps from "@/components/Lineage/LineageOps"; import LineageOps from "@/components/Lineage/LineageOps";
import * as _ from 'lodash';
export const getInit = () => { export const getInit = () => {
return { return {
...@@ -15,8 +15,8 @@ const Lineage = (props: any) => { ...@@ -15,8 +15,8 @@ const Lineage = (props: any) => {
const {datas} = props; const {datas} = props;
const cvsRef = useRef(null); const cvsRef = useRef(null);
const [data, setData] = useState(getInit()); const [data, setData] = useState(datas);
const [allData, setAllData] = useState(getInit()); const [allData, setAllData] = useState(datas);
const [relayout, setRelayout] = useState(false); const [relayout, setRelayout] = useState(false);
const [focus, setFocus] = useState(false); const [focus, setFocus] = useState(false);
...@@ -41,79 +41,67 @@ const Lineage = (props: any) => { ...@@ -41,79 +41,67 @@ const Lineage = (props: any) => {
}; };
const onAction = (action, tableId) => { const onAction = (action, tableId) => {
const newData = _.cloneDeep(data);
switch (action) { switch (action) {
case 'expand': { case 'expand': {
const table = data.tables.find(t => t.id === tableId); const table = newData.tables.find(t => t.id === tableId);
table.isExpand = true; table.isExpand = true;
const children = getChildren(tableId); const children = getChildren(tableId);
children.tables.forEach(table => { children.tables.forEach(table => {
if(data.tables.some(t => t.id === table.id)) { if (newData.tables.some(t => t.id === table.id)) {
return; return;
} }
data.tables.push(table); newData.tables.push(table);
}); });
children.relations.forEach(relation => { children.relations.forEach(relation => {
if(data.relations.some(r => r.id === relation.id)) { if (newData.relations.some(r => r.id === relation.id)) {
return; return;
} }
data.relations.push(relation); newData.relations.push(relation);
}); });
setData({...data}); setData({...newData});
break; break;
} }
case 'shrink': { case 'shrink': {
const table = data.tables.find(t => t.id === tableId); const table = newData.tables.find(t => t.id === tableId);
table.isExpand = false; table.isExpand = false;
const children = getChildren(tableId); const children = getChildren(tableId);
children.tables.forEach(table => { children.tables.forEach(table => {
const index = data.tables.findIndex(t => t.id === table.id); const index = newData.tables.findIndex(t => t.id === table.id);
data.tables.splice(index, 1); newData.tables.splice(index, 1);
}); });
children.relations.forEach(relation => { children.relations.forEach(relation => {
const index = data.relations.findIndex(r => r.id === relation.id); const index = newData.relations.findIndex(r => r.id === relation.id);
data.relations.splice(index, 1); newData.relations.splice(index, 1);
}); });
setData({...data}); setData({...newData});
break; break;
} }
case 'fold': { case 'fold': {
data.tables.forEach(table => { newData.tables.forEach(table => {
if (table.id !== tableId) { if (table.id !== tableId) {
return; return;
} }
table.isFold = false; table.isFold = false;
}); });
data.tables = [...data.tables]; newData.tables = [...newData.tables];
setData({...data}); setData({...newData});
break; break;
} }
case 'unfold': { case 'unfold': {
data.tables.forEach(table => { newData.tables.forEach(table => {
if (table.id !== tableId) { if (table.id !== tableId) {
return; return;
} }
table.isFold = true; table.isFold = true;
}); });
data.tables = [...data.tables]; newData.tables = [...newData.tables];
setData({...data}); setData({...newData});
break; break;
} }
} }
}; };
const getData = () => {
setData(datas);
let newDatas = {
tables: [...datas.tables],
relations: [...datas.relations]
};
setAllData(newDatas);
};
useEffect(() => {
getData();
}, [datas]);
data.tables.forEach(table => { data.tables.forEach(table => {
table.operators = LineageOps({ table.operators = LineageOps({
isExpand: !!table.isExpand, isExpand: !!table.isExpand,
...@@ -123,7 +111,9 @@ const Lineage = (props: any) => { ...@@ -123,7 +111,9 @@ const Lineage = (props: any) => {
}) })
}); });
return (<LineageTable {...data} return (
<LineageTable
{...data}
onLoaded={(canvas) => { onLoaded={(canvas) => {
cvsRef.current = canvas; cvsRef.current = canvas;
}} }}
......
import {Tabs, Tooltip, Button, Modal, message} from "antd"; import {Tabs, Tooltip, Button, Modal, message, Empty} from "antd";
import {SearchOutlined, SnippetsOutlined} from "@ant-design/icons"; import {SearchOutlined, SnippetsOutlined} from "@ant-design/icons";
import {StateType} from "@/pages/DataStudio/model"; import {StateType} from "@/pages/DataStudio/model";
import {connect} from "umi"; import {connect} from "umi";
...@@ -13,9 +13,10 @@ const { TabPane } = Tabs; ...@@ -13,9 +13,10 @@ const { TabPane } = Tabs;
const StudioCA = (props: any) => { const StudioCA = (props: any) => {
const {current} = props; const {current} = props;
const [data, setData] = useState(getInit()); const [data, setData] = useState(undefined);
const handleLineage=()=>{ const handleLineage=()=>{
setData(undefined);
const res = getLineage({ const res = getLineage({
statement:current.value, statement:current.value,
statementSet:current.task.statementSet, statementSet:current.task.statementSet,
...@@ -79,7 +80,7 @@ const StudioCA = (props: any) => { ...@@ -79,7 +80,7 @@ const StudioCA = (props: any) => {
</>} </>}
> >
<TabPane tab={<span>血缘分析</span>} key="Lineage"> <TabPane tab={<span>血缘分析</span>} key="Lineage">
<Lineage datas={data}/> {data?<Lineage datas={data}/>:<Empty image={Empty.PRESENTED_IMAGE_SIMPLE}/>}
</TabPane> </TabPane>
</Tabs> </Tabs>
</>) </>)
......
...@@ -7,9 +7,10 @@ const {TabPane} = Tabs; ...@@ -7,9 +7,10 @@ const {TabPane} = Tabs;
const DataMap = (props: any) => { const DataMap = (props: any) => {
const {job} = props; const {job} = props;
const [data, setData] = useState(getInit()); const [data, setData] = useState(undefined);
const getData = () => { const getData = () => {
setData(undefined);
const res = getLineage(job.instance?.id); const res = getLineage(job.instance?.id);
res.then((result)=>{ res.then((result)=>{
result.datas.tables.forEach(table => { result.datas.tables.forEach(table => {
...@@ -29,7 +30,7 @@ const DataMap = (props: any) => { ...@@ -29,7 +30,7 @@ const DataMap = (props: any) => {
border: "1px solid #f0f0f0" border: "1px solid #f0f0f0"
}}> }}>
<TabPane tab={<span>血缘分析</span>} key="Lineage"> <TabPane tab={<span>血缘分析</span>} key="Lineage">
<Lineage datas={data}/> {data?<Lineage datas={data}/>:<Empty image={Empty.PRESENTED_IMAGE_SIMPLE}/>}
</TabPane> </TabPane>
</Tabs> </Tabs>
</>) </>)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment