"use client"; import { InputNodeData, WorkflowNodeData, } from "lib/ai/workflow/workflow.interface"; import { memo, useCallback } from "react"; import { Feild, EditJsonSchemaFieldPopup, getFieldKey, } from "../../edit-json-schema-field-popup"; import { InfoIcon, PlusIcon, TrashIcon, VariableIcon } from "lucide-react"; import { PencilIcon } from "lucide-react"; import { objectFlow } from "lib/utils"; import { Button } from "ui/button"; import { Label } from "ui/label"; import { useReactFlow } from "@xyflow/react"; import { useTranslations } from "next-intl"; import { Tooltip, TooltipContent, TooltipTrigger } from "ui/tooltip"; export const InputNodeDataConfig = memo(function ({ data, }: { data: InputNodeData; }) { const t = useTranslations(); const { updateNodeData } = useReactFlow(); const checkRequired = useCallback( (key: string) => { return data.outputSchema.required?.includes(key); }, [data.outputSchema], ); const addField = useCallback( (field: Feild) => { updateNodeData(data.id, (node) => { const prev = node.data as InputNodeData; const outputSchema = { ...prev.outputSchema, properties: { ...prev.outputSchema.properties, [field.key]: { type: field.type, enum: field.type == "string" && field.enum ? field.enum : undefined, description: field.description, default: field.defaultValue, }, }, required: !field.required ? prev.outputSchema.required?.filter((k) => k != field.key) : Array.from( new Set([...(prev.outputSchema.required ?? []), field.key]), ), }; return { outputSchema, }; }); }, [data.id], ); const removeField = useCallback( (key: string) => { updateNodeData(data.id, (node) => { const prev = node.data as InputNodeData; const outputSchema = { ...prev.outputSchema, properties: objectFlow(prev.outputSchema.properties).filter( (_, k) => k != key, ), required: prev.outputSchema.required?.filter((k) => k != key), }; return { outputSchema, }; }); }, [data.outputSchema], ); return (