import React from 'react'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { toast } from 'sonner'; import { useAuthStore } from '../stores/authStore'; const schema = z.object({ mobile: z.string().min(10, 'شماره موبایل معتبر نیست'), password: z.string().min(6, 'رمز عبور باید حداقل ۶ کاراکتر باشد'), }); type FormData = z.infer; export default function LoginPage() { const login = useAuthStore((s) => s.login); const { register, handleSubmit, formState: { errors, isSubmitting } } = useForm({ resolver: zodResolver(schema), }); const onSubmit = async (data: FormData) => { try { const res = await fetch('/api/v1/user/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ mobile_number: data.mobile, password: data.password }), }); if (!res.ok) { const err = await res.json(); toast.error(err.message || 'خطا در ورود'); return; } const json = await res.json(); login(json.access_token, json.refresh_token ?? ''); toast.success('ورود موفق'); } catch { toast.error('خطا در اتصال به سرور'); } }; return (

ClinicPro

پنل مدیریت

{errors.mobile && (

{errors.mobile.message}

)}
{errors.password && (

{errors.password.message}

)}
); }