refactor(api/index.ts): remove unused variable property from APITemplateType
fix(utils/reactflowUtils.ts): import TemplateVariableType from types/api feat(utils/reactflowUtils.ts): add mergeNodeTemplates function to merge node templates and update display names feat(utils/reactflowUtils.ts): add isHandleConnected function to check if a handle is connected to an edge refactor(utils/reactflowUtils.ts): remove TODO comments and update comments for mergeNodeTemplates and isHandleConnected functions feat(utils/reactflowUtils.ts): add generateNodeTemplate function to generate node templates from a flow
This commit is contained in:
parent
8cdfb00af6
commit
056cf6f66d
2 changed files with 77 additions and 2 deletions
|
|
@ -5,7 +5,6 @@ export type APIDataType = { [key: string]: APIKindType };
|
||||||
export type APIObjectType = { kind: APIKindType; [key: string]: APIKindType };
|
export type APIObjectType = { kind: APIKindType; [key: string]: APIKindType };
|
||||||
export type APIKindType = { class: APIClassType; [key: string]: APIClassType };
|
export type APIKindType = { class: APIClassType; [key: string]: APIClassType };
|
||||||
export type APITemplateType = {
|
export type APITemplateType = {
|
||||||
variable: TemplateVariableType;
|
|
||||||
[key: string]: TemplateVariableType;
|
[key: string]: TemplateVariableType;
|
||||||
};
|
};
|
||||||
export type APIClassType = {
|
export type APIClassType = {
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import {
|
||||||
XYPosition,
|
XYPosition,
|
||||||
} from "reactflow";
|
} from "reactflow";
|
||||||
import { specialCharsRegex } from "../constants/constants";
|
import { specialCharsRegex } from "../constants/constants";
|
||||||
import { APITemplateType } from "../types/api";
|
import { APITemplateType, TemplateVariableType } from "../types/api";
|
||||||
import {
|
import {
|
||||||
FlowType,
|
FlowType,
|
||||||
NodeType,
|
NodeType,
|
||||||
|
|
@ -538,6 +538,82 @@ function updateGroupNodeTemplate(template: APITemplateType) {
|
||||||
});
|
});
|
||||||
return template;
|
return template;
|
||||||
}
|
}
|
||||||
|
// TODO UPDATE TO NEW HANDLE FORMAT
|
||||||
|
export function mergeNodeTemplates({
|
||||||
|
nodes,
|
||||||
|
edges,
|
||||||
|
}: {
|
||||||
|
nodes: NodeType[];
|
||||||
|
edges: Edge[];
|
||||||
|
}): APITemplateType {
|
||||||
|
/* this function receives a flow and iterate trhow each node
|
||||||
|
and merge the templates with only the visible fields
|
||||||
|
if there are two keys with the same name in the flow, we will update the display name of each one
|
||||||
|
to show from which node it came from
|
||||||
|
*/
|
||||||
|
let template: APITemplateType = {};
|
||||||
|
nodes.forEach((node) => {
|
||||||
|
let nodeTemplate = _.cloneDeep(node.data.node!.template);
|
||||||
|
Object.keys(nodeTemplate)
|
||||||
|
.filter((field_name) => field_name.charAt(0) !== "_")
|
||||||
|
.forEach((key) => {
|
||||||
|
if (
|
||||||
|
nodeTemplate[key].show &&
|
||||||
|
!isHandleConnected(edges, key, nodeTemplate[key], node.id)
|
||||||
|
) {
|
||||||
|
template[key + "_" + node.id] = nodeTemplate[key];
|
||||||
|
template[key + "_" + node.id].proxy = { id: node.id, field: key };
|
||||||
|
if (node.type === "groupNode") {
|
||||||
|
template[key + "_" + node.id].display_name =
|
||||||
|
node.data.node!.flow!.name + " - " + nodeTemplate[key].name;
|
||||||
|
} else {
|
||||||
|
template[key + "_" + node.id].display_name =
|
||||||
|
node.data.type + " - " + nodeTemplate[key].name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
// TODO UPDATE TO NEW HANDLE FORMAT
|
||||||
|
function isHandleConnected(
|
||||||
|
edges: Edge[],
|
||||||
|
key: string,
|
||||||
|
field: TemplateVariableType,
|
||||||
|
nodeId: string
|
||||||
|
) {
|
||||||
|
/*
|
||||||
|
this function receives a flow and a handleId and check if there is a connection with this handle
|
||||||
|
*/
|
||||||
|
if (field.proxy) {
|
||||||
|
if (
|
||||||
|
edges.some(
|
||||||
|
(e) =>
|
||||||
|
e.targetHandle ===
|
||||||
|
field.type +
|
||||||
|
"|" +
|
||||||
|
key +
|
||||||
|
"|" +
|
||||||
|
nodeId +
|
||||||
|
"|" +
|
||||||
|
field.proxy.id +
|
||||||
|
"|" +
|
||||||
|
field.proxy.field
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (
|
||||||
|
edges.some(
|
||||||
|
(e) => e.targetHandle === field.type + "|" + key + "|" + nodeId
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
export function generateNodeTemplate(Flow: FlowType) {
|
export function generateNodeTemplate(Flow: FlowType) {
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue