import { useEffect } from 'react' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import * as z from 'zod' import { useTranslation } from 'react-i18next' import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogFooter, } from '@/components/ui/dialog' import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form' import { Input } from '@/components/ui/input' import { Button } from '@/components/ui/button' import { Checkbox } from '@/components/ui/checkbox' import type { User } from '@/types/auth' const createUserFormSchema = (t: (key: string) => string) => z.object({ username: z.string().min(3, t('user:validation.usernameMinLength')).max(20, t('user:validation.usernameMaxLength')), email: z.string().email(t('user:validation.emailInvalid')), password: z.string().optional(), is_active: z.boolean(), is_superuser: z.boolean(), can_use_local_model: z.boolean(), }) interface UserDialogProps { open: boolean onOpenChange: (open: boolean) => void user?: User | null onSubmit: (data: any) => Promise isLoading: boolean } export function UserDialog({ open, onOpenChange, user, onSubmit, isLoading, }: UserDialogProps) { const { t } = useTranslation(['user', 'common']) const isEditing = !!user const userFormSchema = createUserFormSchema(t) type UserFormValues = z.infer const form = useForm({ resolver: zodResolver(userFormSchema), defaultValues: { username: '', email: '', password: '', is_active: true, is_superuser: false, can_use_local_model: false, }, }) useEffect(() => { if (user) { form.reset({ username: user.username, email: user.email, password: '', is_active: user.is_active, is_superuser: user.is_superuser, can_use_local_model: user.can_use_local_model, }) } else { form.reset({ username: '', email: '', password: '', is_active: true, is_superuser: false, can_use_local_model: false, }) } }, [user, form]) const handleSubmit = async (data: UserFormValues) => { await onSubmit(data) form.reset() } return ( {isEditing ? t('user:editUserDialog') : t('user:createUserDialog')} {isEditing ? t('user:editUserDescription') : t('user:createUserDescription')}
( {t('user:username')} )} /> ( {t('user:email')} )} /> ( {isEditing ? t('user:passwordOptional') : t('user:password')} )} /> (
{t('user:isActive')}
)} /> (
{t('user:isSuperuser')}
)} /> (
{t('user:canUseLocalModel')}

{t('user:canUseLocalModelDescription')}

)} />
) }