import React, { useEffect, useState } from 'react'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { toast } from 'sonner'; import { EyeIcon, EyeSlashIcon } from '@heroicons/react/24/outline'; 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 [showPass, setShowPass] = useState(false); 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?.errors?.[0]?.message ?? 'خطا در ورود'); return; } const json = await res.json(); login(json.access_token, json.refresh_token ?? ''); toast.success('خوش آمدید'); } catch { toast.error('خطا در اتصال به سرور'); } }; return (
{/* Logo */}

ورود به پنل ادمین

اطلاعات حساب مدیریتی خود را وارد کنید

{/* Mobile */}
{errors.mobile &&
{errors.mobile.message}
}
{/* Password */}
{errors.password &&
{errors.password.message}
}

ClinicPro — نسخه ۱.۰.۰

); }