diff --git a/src/frontend/src/CustomNodes/GenericNode/index.tsx b/src/frontend/src/CustomNodes/GenericNode/index.tsx index 8881e5055..f1a409c3f 100644 --- a/src/frontend/src/CustomNodes/GenericNode/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/index.tsx @@ -23,6 +23,7 @@ import { getNodeInputColors } from "../helpers/get-node-input-colors"; import { getNodeInputColorsName } from "../helpers/get-node-input-colors-name"; import { getNodeOutputColors } from "../helpers/get-node-output-colors"; import { getNodeOutputColorsName } from "../helpers/get-node-output-colors-name"; +import { processNodeAdvancedFields } from "../helpers/process-node-advanced-fields"; import useCheckCodeValidity from "../hooks/use-check-code-validity"; import useUpdateNodeCode from "../hooks/use-update-node-code"; import getFieldTitle from "../utils/get-field-title"; @@ -85,6 +86,8 @@ export default function GenericNode({ const { mutate: validateComponentCode } = usePostValidateComponentCode(); + const edges = useFlowStore((state) => state.edges); + const handleUpdateCode = () => { setLoadingUpdate(true); takeSnapshot(); @@ -99,9 +102,15 @@ export default function GenericNode({ validateComponentCode( { code: currentCode, frontend_node: data.node }, { - onSuccess: ({ data, type }) => { - if (data && type && updateNodeCode) { - updateNodeCode(data, currentCode, "code", type); + onSuccess: ({ data: resData, type }) => { + if (resData && type && updateNodeCode) { + const newNode = processNodeAdvancedFields( + resData, + edges, + data.id, + ); + + updateNodeCode(newNode, currentCode, "code", type); setLoadingUpdate(false); } }, diff --git a/src/frontend/src/CustomNodes/helpers/process-node-advanced-fields.ts b/src/frontend/src/CustomNodes/helpers/process-node-advanced-fields.ts new file mode 100644 index 000000000..b3c448fcc --- /dev/null +++ b/src/frontend/src/CustomNodes/helpers/process-node-advanced-fields.ts @@ -0,0 +1,32 @@ +import { APIClassType } from "@/types/api"; +import { cloneDeep } from "lodash"; +import { Edge } from "reactflow"; + +export function processNodeAdvancedFields( + resData: APIClassType, + edges: Edge[], + nodeId: string, +) { + let newNode = cloneDeep(resData); + + const relevantEdges = edges.filter( + (edge) => edge.source !== nodeId || edge.target !== nodeId, + ); + + if (relevantEdges.length === 0) { + return newNode; + } + + for (const edge of relevantEdges) { + const field = edge?.data?.targetHandle?.fieldName; + + if (field) { + const fieldTemplate = newNode.template[field]; + if (fieldTemplate?.advanced === true) { + newNode.template[field].advanced = false; + } + } + } + + return newNode; +}