|
- import { PipelineGlobalParam, PipelineNodeModelParameter } from '@/types';
- import { parseJsonText } from '@/utils';
- import { Graph, INode } from '@antv/g6';
- import { type MenuProps } from 'antd';
-
- // 找到节点所以的上游节点
- export const findAllParentNodes = (graph: Graph, node: INode) => {
- const parentNodes: INode[] = [];
- let index = -1;
- let targetNode = node;
- while (targetNode) {
- const neighbors: INode[] = graph.getNeighbors(targetNode, 'source');
- for (const sourceNode of neighbors) {
- // 避免重复,也避免循环
- const idx = parentNodes.findIndex((item) => sourceNode.getID() === item.getID());
- if (idx === -1 && sourceNode.getID() !== node.getID()) {
- parentNodes.push(sourceNode);
- }
- }
- targetNode = parentNodes[++index];
- }
-
- return parentNodes;
- };
-
- // 判断并找到全局参数第一个重复项,有重复项时,全局参数不允许保存
- export function findFirstDuplicate(params: PipelineGlobalParam[]): string | null {
- const seen = new Set();
- for (const item of params) {
- if (seen.has(item.param_name)) {
- return item.param_name;
- }
- seen.add(item.param_name);
- }
- return null;
- }
-
- // 创建参数下拉菜单
- export function createMenuItems(
- params: PipelineGlobalParam[],
- parentNodes: INode[],
- ): MenuProps['items'] {
- const nodes: MenuProps['items'] = parentNodes.map((item) => {
- const model = item.getModel();
- const out_parameters = model.out_parameters as string | undefined | null;
- const out_parametersObj = parseJsonText(out_parameters);
- const outParametersList = Object.keys(out_parametersObj ?? {});
- return {
- key: model.id as string,
- label: model.label as string,
- children: outParametersList.map((key: string) => ({
- key: key as string,
- label: out_parametersObj[key].label,
- })),
- };
- });
-
- return [
- {
- key: 'global',
- label: '全局参数',
- children: params.map((item) => ({
- key: item.param_name,
- label: item.param_name,
- })),
- },
- ...nodes,
- ];
- }
-
- export function getInParameterComponent(
- parameter: PipelineNodeModelParameter,
- ): React.ReactNode | null {
- if (parameter.value) {
- }
-
- return null;
- }
-
- export function canInput(parameter: PipelineNodeModelParameter) {
- const { type, item_type } = parameter;
- return !(
- type === 'ref' &&
- (item_type === 'dataset' || item_type === 'model' || item_type === 'image')
- );
- }
|