'use client'; import { getNodeTagList } from '@/services/admin/server'; import { zodResolver } from '@hookform/resolvers/zod'; import { useQuery } from '@tanstack/react-query'; import { Button } from '@workspace/ui/components/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@workspace/ui/components/form'; import { ScrollArea } from '@workspace/ui/components/scroll-area'; import { Sheet, SheetContent, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, } from '@workspace/ui/components/sheet'; import { Textarea } from '@workspace/ui/components/textarea'; import { Combobox } from '@workspace/ui/custom-components/combobox'; import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input'; import { Icon } from '@workspace/ui/custom-components/icon'; import { UploadImage } from '@workspace/ui/custom-components/upload-image'; import { useTranslations } from 'next-intl'; import { useEffect, useState } from 'react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; const formSchema = z.object({ name: z.string().min(1, { message: '请输入规则名称' }), tags: z.array(z.string()).default([]), rules: z.string().default(''), icon: z.string().default(''), }); interface RuleFormProps { onSubmit: (data: T) => Promise | boolean; initialValues?: T; loading?: boolean; trigger: string; title: string; } export default function RuleForm>({ onSubmit, initialValues, loading, trigger, title, }: RuleFormProps) { const t = useTranslations('rules'); const [open, setOpen] = useState(false); const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { ...initialValues, } as any, }); useEffect(() => { if (initialValues) { form.reset(initialValues); } }, [form, initialValues]); async function handleSubmit(data: { [x: string]: any }) { const bool = await onSubmit(data as T); if (bool) setOpen(false); } const { data: tags } = useQuery({ queryKey: ['getNodeTagList'], queryFn: async () => { const { data } = await getNodeTagList(); return data.data?.tags || []; }, }); return ( {title}
( {t('appIcon')} { form.setValue(field.name, value as string); }} /> } onValueChange={(value) => { form.setValue(field.name, value); }} /> )} /> ( {t('name')} { form.setValue(field.name, value); }} /> )} /> ( {t('tagsLabel')} multiple placeholder={t('selectTags')} value={field.value} onChange={(value) => { form.setValue(field.name, value); }} options={tags?.map((item: string) => ({ value: item, label: item, }))} /> )} /> ( {t('rulesLabel')}