import { zodResolver } from '@hookform/resolvers/zod' import { useForm } from 'react-hook-form' import { useTranslation } from 'react-i18next' import { z } from 'zod' import { Button } from '@/shared/ui/button' import { Input } from '@/shared/ui/input' import { Label } from '@/shared/ui/label' import { toast } from '@/shared/ui/toast-store' import { HttpError } from '@/shared/api/client' import { applyAuthResponse, login } from './api' const schema = z.object({ userName: z.string().min(1), password: z.string().min(1), }) type FormValues = z.infer export function LoginForm({ onSuccess }: { onSuccess: () => void }) { const { t } = useTranslation() const { register: registerField, handleSubmit, formState: { errors, isSubmitting }, } = useForm({ resolver: zodResolver(schema) }) const onSubmit = async (values: FormValues) => { try { const auth = await login(values.userName, values.password) applyAuthResponse(auth) onSuccess() } catch (error) { const status = error instanceof HttpError ? error.status : 0 let message = t('auth.genericError') if (status === 401) message = t('auth.invalidCredentials') else if (status === 403) message = t('auth.blocked') toast.error(message) } } return (
{errors.userName &&

{errors.userName.message}

}
{errors.password &&

{errors.password.message}

}
) }