'use client'; import { Icon } from '@iconify/react'; import { EnhancedInput } from '@repo/ui/enhanced-input'; import { unitConversion } from '@repo/ui/utils'; import { Button } from '@shadcn/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@shadcn/ui/form'; import { useForm } from '@shadcn/ui/lib/react-hook-form'; import { z, zodResolver } from '@shadcn/ui/lib/zod'; import { ScrollArea } from '@shadcn/ui/scroll-area'; import { Sheet, SheetContent, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, } from '@shadcn/ui/sheet'; import { Switch } from '@shadcn/ui/switch'; import { useTranslations } from 'next-intl'; import { useEffect, useState } from 'react'; interface UserFormProps { onSubmit: (data: T) => Promise | boolean; initialValues?: T; loading?: boolean; trigger: string; title: string; update?: boolean; } export default function UserForm>({ onSubmit, initialValues, loading, trigger, title, }: UserFormProps) { const t = useTranslations('user'); const [open, setOpen] = useState(false); const formSchema = z.object({ email: z.string().email(t('form.invalidEmailFormat')), password: z.string().optional(), referer_id: z.number().optional(), refer_code: z.string().optional(), is_admin: z.boolean().optional(), balance: z.number().optional(), }); const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { ...initialValues, }, }); useEffect(() => { form?.reset(initialValues); }, [form, initialValues]); async function handleSubmit(data: { [x: string]: any }) { const bool = await onSubmit(data as T); if (bool) setOpen(false); } return ( {title}
( {t('form.userEmail')} { form.setValue(field.name, value); }} /> )} /> ( {t('form.password')} { form.setValue(field.name, value); }} /> )} /> ( {t('form.refererId')} { form.setValue(field.name, value); }} /> )} /> ( {t('form.inviteCode')} { form.setValue(field.name, value); }} /> )} /> ( {t('form.balance')} unitConversion('centsToDollars', value)} formatOutput={(value) => unitConversion('dollarsToCents', value)} onValueChange={(value) => { form.setValue(field.name, value); }} min={0} /> )} /> ( {t('form.manager')}
)} />
); }