import { fetch } from "@marzneshin/utils" import { LoginSchema, useAuth } from "@marzneshin/features/auth"; import { useNavigate } from "@tanstack/react-router"; import { useState } from "react"; import { FieldValues, useForm } from "react-hook-form"; import { zodResolver } from '@hookform/resolvers/zod'; import { Button, Form, FormControl, FormField, FormItem, FormLabel, FormMessage, Input } from "@marzneshin/components"; import { useTranslation } from "react-i18next"; import { FormError } from "./form-error"; export const LoginForm = () => { const { setAuthToken, setSudo } = useAuth(); const form = useForm({ resolver: zodResolver(LoginSchema), defaultValues: { username: '', password: '', } }) const navigate = useNavigate({ from: '/login' }); const [error, setError] = useState(''); const { t } = useTranslation(); const submit = async (values: FieldValues) => { setError(''); const formData = new FormData(); formData.append('username', values.username); formData.append('password', values.password); formData.append('grant_type', 'password'); try { const { access_token, is_sudo } = await fetch('/admins/token', { method: 'post', body: formData }); setAuthToken(access_token); setSudo(is_sudo); navigate({ to: '/' }); } catch (err: any) { setError(err.response._data?.detail || 'An error occurred'); } }; return (
( {t('username')} )} /> ( {t('password')} )} /> {error && } ) }