first commit

This commit is contained in:
jerryjzhang
2023-06-12 18:44:01 +08:00
commit dc4fc69b57
879 changed files with 573090 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
import type { IProps } from './index';
import { NsGraph } from '@antv/xflow';
import type { Graph } from '@antv/x6';
import { createHookConfig, DisposableCollection } from '@antv/xflow';
import { DATASOURCE_NODE_RENDER_ID, GROUP_NODE_RENDER_ID } from './constant';
import { AlgoNode } from './ReactNodes/algoNode';
import { GroupNode } from './ReactNodes/group';
export const useGraphHookConfig = createHookConfig<IProps>((config) => {
// 获取 Props
// const props = proxy.getValue();
config.setRegisterHook((hooks) => {
const disposableList = [
// 注册增加 react Node Render
hooks.reactNodeRender.registerHook({
name: 'add react node',
handler: async (renderMap) => {
renderMap.set(DATASOURCE_NODE_RENDER_ID, AlgoNode);
renderMap.set(GROUP_NODE_RENDER_ID, GroupNode);
},
}),
// 注册修改graphOptions配置的钩子
hooks.graphOptions.registerHook({
name: 'custom-x6-options',
after: 'dag-extension-x6-options',
handler: async (options) => {
const graphOptions: Graph.Options = {
connecting: {
allowLoop: false,
// 是否触发交互事件
validateMagnet() {
// return magnet.getAttribute('port-group') !== NsGraph.AnchorGroup.TOP
return true;
},
// 显示可用的链接桩
validateConnection(args: any) {
const { sourceView, targetView, sourceMagnet, targetMagnet } = args;
// 不允许连接到自己
if (sourceView === targetView) {
return false;
}
// 没有起点的返回false
if (!sourceMagnet) {
return false;
}
if (!targetMagnet) {
return false;
}
// 只能从上游节点的输出链接桩创建连接
if (sourceMagnet?.getAttribute('port-group') === NsGraph.AnchorGroup.LEFT) {
return false;
}
// 只能连接到下游节点的输入桩
if (targetMagnet?.getAttribute('port-group') === NsGraph.AnchorGroup.RIGHT) {
return false;
}
const node = targetView!.cell as any;
// 判断目标链接桩是否可连接
const portId = targetMagnet.getAttribute('port')!;
const port = node.getPort(portId);
return !!port;
},
},
};
options.connecting = { ...options.connecting, ...graphOptions.connecting };
},
}),
// hooks.afterGraphInit.registerHook({
// name: '注册toolTips工具',
// handler: async (args) => {},
// }),
];
const toDispose = new DisposableCollection();
toDispose.pushAll(disposableList);
return toDispose;
});
});