import { TextInput } from "@mantine/core"; import type { Node, NodeProps } from "@xyflow/react"; import { transformObject } from "core/utils"; import { TriggerMap } from "flows"; import type { TAppFlowTriggerSchema } from "flows/AppFlows"; import { useForm } from "react-hook-form"; import { JsonViewer } from "ui/components/code/JsonViewer"; import { MantineSegmentedControl } from "ui/components/form/hook-form-mantine/MantineSegmentedControl"; import { MantineSelect } from "ui/components/form/hook-form-mantine/MantineSelect"; import { useFlowCanvas, useFlowSelector } from "../../../hooks/use-flow"; import { BaseNode } from "../BaseNode"; import { Handle } from "../Handle"; import { s } from "bknd/utils"; import { standardSchemaResolver } from "@hookform/resolvers/standard-schema"; const schema = s.object({ trigger: s.anyOf( Object.values( transformObject(TriggerMap, (trigger, name) => s.strictObject( { type: s.literal(name), config: trigger.cls.schema, }, { title: String(name) }, ), ), ), ), }); export const TriggerNode = (props: NodeProps>) => { const { data: { label, ...trigger }, } = props; //console.log("TriggerNode"); const state = useFlowSelector((s) => s.flow!.trigger!); const { actions } = useFlowCanvas(); const { register, handleSubmit, setValue, getValues, formState: { isValid, errors }, watch, control, } = useForm({ resolver: standardSchemaResolver(schema), defaultValues: { trigger: state } as s.Static, mode: "onChange", }); const data = watch("trigger"); async function onSubmit(data: s.Static) { console.log("submit", data.trigger); // @ts-ignore await actions.trigger.update(data.trigger); } async function onChangeName(name: string) { console.log("change name", name); await actions.flow.setName(name); } /*useEffect(() => { console.log("trigger update", data); actions.trigger.update(data); }, [data]);*/ return (
{data.type === "manual" && } {data.type === "http" && ( )}
); }; const Manual = () => { return null; }; const Http = ({ form }) => { return ( <>
); }; const TriggerNodeTabs = ({ data, ...props }) => [ { id: "json", label: "JSON", content: () => , }, { id: "test", label: "test", content: () =>
test
, }, ];