import { HandleType } from '@vue-flow/core';
|
import { v4 as uuid } from 'uuid';
|
import { VueFlowConstant } from './VueFlowConstant';
|
import { CompareOperation, ConditionOperator, NodeType, VarType, nodeTypeMap } from './vueFlowEnum';
|
import { get } from 'lodash';
|
|
export class VueFlowHelper {
|
static genId() {
|
return uuid().slice(0, 8);
|
}
|
|
static genGeometryId(){
|
return uuid().slice(0, 12);
|
}
|
|
static getDefaultData = (type: NodeType) => {
|
let data: any = {
|
title: nodeTypeMap[type],
|
};
|
switch (type) {
|
case NodeType.Start:
|
data[VueFlowConstant.GROUP_PARAMS_KEY] = [
|
{
|
[VueFlowConstant.PARAMS_KEY]: [
|
{
|
key: 'var_list',
|
label: '',
|
type: 'var_list',
|
value: [],
|
},
|
],
|
},
|
];
|
break;
|
case NodeType.Condition:
|
data[VueFlowConstant.GROUP_PARAMS_KEY] = [
|
{
|
[VueFlowConstant.PARAMS_KEY]: [
|
{
|
key: 'condition',
|
label: '',
|
type: 'condition',
|
value: [ConditionHelper.getDefaultConditionGroup()],
|
},
|
],
|
},
|
];
|
break;
|
default:
|
break;
|
}
|
return data;
|
};
|
|
static getHandleId = (node: any, handleType: HandleType, order?: number) => {
|
const orderSuffix = order == undefined ? '' : `__${order + ''}`;
|
return `${node.id}__handle-${handleType}${orderSuffix}`;
|
};
|
|
static getFieldValue = (data, key, index = 0) => {
|
let varList = [];
|
const group = data?.[VueFlowConstant.GROUP_PARAMS_KEY];
|
if (group && group.length > 0) {
|
if (index !== null) {
|
const val = group?.[index]?.[VueFlowConstant.PARAMS_KEY]?.find((item) => item.key === key)?.value;
|
if (val) {
|
varList.push(val);
|
}
|
} else {
|
for (const item of group) {
|
if (item[VueFlowConstant.PARAMS_KEY].key === key) {
|
varList.push(item[VueFlowConstant.PARAMS_KEY].value);
|
}
|
}
|
}
|
}
|
if (varList.length === 0) {
|
return null;
|
} else if (varList.length === 1) {
|
return varList[0];
|
} else {
|
return varList;
|
}
|
};
|
}
|
|
export class StartNodeHelper {
|
// static getDefaultData = () => {
|
// return {
|
// title: nodeTypeMap[NodeType.Start],
|
// };
|
// };
|
|
static getVarList = (data) => {
|
const varList = data[VueFlowConstant.GROUP_PARAMS_KEY][0][VueFlowConstant.PARAMS_KEY].find(
|
(item) => item.key === 'condition'
|
).value;
|
return varList;
|
};
|
}
|
|
export class ConditionHelper {
|
static getConditionItem = (
|
left?: {
|
var: string;
|
label: string;
|
},
|
right?: {
|
type: VarType;
|
value: string;
|
label: string;
|
},
|
operation?: CompareOperation
|
) => {
|
return {
|
id: VueFlowHelper.genId(),
|
left_var: left?.var ?? '',
|
left_label: left?.label ?? '',
|
comparison_operation: operation ?? '',
|
right_value_type: right?.type ?? VarType.Input,
|
right_value: right?.value ?? '',
|
right_label: right?.label ?? '',
|
};
|
};
|
|
static getDefaultConditionGroup = () => {
|
return {
|
id: VueFlowHelper.genId(),
|
operator: ConditionOperator.And,
|
conditions: [],
|
};
|
};
|
}
|