import { z } from "zod"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "../ui/dialog"; import { useWorkflowStore, WorkflowState } from "@/providers/workflow"; import { useShallow } from "zustand/shallow"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "../ui/form"; import { Input } from "../ui/input"; import { Button } from "../ui/button"; import { useTranslation } from "react-i18next"; import { memo, useEffect, useMemo, useState } from "react"; import { Textarea } from "../ui/textarea"; type WorkflowNameEditDialogProps = { trigger: React.ReactNode; }; const formSchema = z.object({ name: z.string(), description: z.string(), }); const selectState = (state: WorkflowState) => ({ setBaseInfo: state.setBaseInfo, workflow: state.workflow, }); const WorkflowNameBaseInfoDialog = ({ trigger }: WorkflowNameEditDialogProps) => { const { setBaseInfo, workflow } = useWorkflowStore(useShallow(selectState)); const form = useForm>({ resolver: zodResolver(formSchema), }); const memoWorkflow = useMemo(() => workflow, [workflow]); useEffect(() => { form.reset({ name: workflow.name, description: workflow.description }); }, [memoWorkflow]); const { t } = useTranslation(); const [open, setOpen] = useState(false); const onSubmit = async (config: z.infer) => { await setBaseInfo(config.name, config.description); setOpen(false); }; return ( <> { setOpen(val); }} > {trigger} {t("workflow.baseinfo.title")}
{ e.stopPropagation(); form.handleSubmit(onSubmit)(e); }} className="space-y-8 dark:text-stone-200" > ( {t("workflow.props.name")} { form.setValue("name", e.target.value); }} /> )} /> ( {t("workflow.props.description")}