"use client"; import { CustomButton } from "@/core/components/base/button"; import { Card, CardContent, CardHeader, CardTitle, } from "@/core/components/base/card"; import { Dialog, DialogFooter, DialogHeader, DialogTitle, } from "@/core/components/base/dialog"; import { CustomInput } from "@/core/components/base/input"; import { OTPDialog } from "@modules/auth/components/otp/opt-dialog"; import { toast } from "react-toastify"; import { userInfoService } from "@/core/service/user-info.service"; import { DASHBOARD_ROUTE } from "@/modules/dashboard/routes/route.constant"; import { fetchUserProfile } from "@/modules/dashboard/service/user.service"; import { sendOtpService, verifyOtpService } from "@modules/auth/service/auth.service"; import { useMutation } from "@tanstack/react-query"; import { useState } from "react"; import { useNavigate } from "react-router-dom"; export function LoginPage() { const navigate = useNavigate(); const [isDialogOpen, setIsDialogOpen] = useState(false); const [otpDialog, setOtpDialog] = useState(false); const [phoneNumber, setPhoneNumber] = useState(""); const [otp, setOtp] = useState(""); const [error, setError] = useState(""); const [submitLoading, setSubmitLoading] = useState(false); const validatePhoneNumber = (value: string) => { const phoneRegex = /^[0-9]{10,11}$/; if (!value) { setError("شماره تلفن الزامی است"); return false; } else if (!phoneRegex.test(value)) { setError("شماره تلفن باید 10 یا 11 رقم باشد"); return false; } setError(""); return true; }; const sendOtpMutation = useMutation({ mutationFn: sendOtpService, onSuccess: (data) => { setSubmitLoading(false); if (data.resultType !== 0) { toast.error(data.message); return; } toast.success("کد یکبار مصرف ارسال شد"); setIsDialogOpen(false); setOtpDialog(true); // setPhoneNumber(""); }, onError: (error: any) => { setSubmitLoading(false); toast.error("مشکلی رخ داد"); console.log(error); }, }); const verifyOtpMutation = useMutation({ mutationFn: verifyOtpService, onSuccess: async(data) => { setSubmitLoading(false); if (data.resultType !== 0) { toast.error(data.message); return; } toast.success("ورود با موفقیت انجام شد"); const person = JSON.parse(data.data).Person; const token = JSON.parse(data.data).Token; localStorage.setItem("token", JSON.stringify(token)); userInfoService.updateUserInfo(person) await fetchUserProfile() const userInfo = userInfoService.getUserInfo() setOtpDialog(false); if (userInfo?.username) { navigate(`${DASHBOARD_ROUTE.sub}/${DASHBOARD_ROUTE.campaigns}`, { replace: true, }); } else { navigate(`${DASHBOARD_ROUTE.sub}/${DASHBOARD_ROUTE.profile}`, { replace: true, }); } }, onError: () => { setSubmitLoading(false); toast.error("خطا در تایید کد"); }, }); const handleSubmit = () => { if (!validatePhoneNumber(phoneNumber)) return; setSubmitLoading(true); sendOtpMutation.mutate(phoneNumber); }; const handleCancel = () => { setPhoneNumber(""); setError(""); setIsDialogOpen(false); }; const handleOtpSubmit = () => { setSubmitLoading(true); verifyOtpMutation.mutate({ mobile: phoneNumber, code: otp, }); }; return (
{/* Card */} ورود به سامانه

برای ورود به سامانه بر روی دکمه ورود کلیک نمایید.{" "}

setIsDialogOpen(true)} > ورود
{ handleCancel(); }} >
شماره تلفن خود را وارد کنید
{ setPhoneNumber(e.target.value); if (error) validatePhoneNumber(e.target.value); }} error={error} variant={error ? "error" : "primary"} className="w-full" />
تایید
{ setIsDialogOpen(false); }} onSubmit={handleOtpSubmit} submitLoading={submitLoading} />
); } export default LoginPage;