"use client"; import { useState } from "react"; import { useRouter, usePathname } from "next/navigation"; import Link from "next/link"; import { Box, Button, Modal, TextField } from "@mui/material"; import { styleDefault } from "@/mui"; import JalaliDatePicker from "@/components/common/JalaliDatePicker"; import CloseModalD from "@/components/icons/CloseModalD"; import Cookies from "js-cookie"; import { convertToJalali, isUserLoggedIn } from "@/helper"; import { request } from "@/services/response"; import Altcha from "@/components/Altcha"; const initialForm = { national_code: "", birth_date: "", first_name: "", last_name: "" }; function currentUserMobile() { try { return JSON.parse(Cookies.get("userInfo") || "{}")?.mobile_number || ""; } catch { return ""; } } /** * احراز مالکیت پروفایل پزشک ایمپورتشده (unclaimed). * کامپوننت مشترک برای دامنهٔ اصلی و همهٔ زیردامنهها/دامنههای نمایندگان — * منطق claim به دامنه وابسته نیست؛ احراز هویت کاملاً سمت سرور انجام میشود. */ function ClaimProfileSection({ doctor }) { const router = useRouter(); const pathname = usePathname(); const [open, setOpen] = useState(false); const [form, setForm] = useState(initialForm); const [fieldErrors, setFieldErrors] = useState({}); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); const [claimed, setClaimed] = useState(false); const [success, setSuccess] = useState(false); const [altcha, setAltcha] = useState(null); // null=در حال آمادهسازی، ""=خاموش، payload=حلشده const [confirmDelete, setConfirmDelete] = useState(false); const [deleting, setDeleting] = useState(false); if (doctor?.owner_status !== "unclaimed" || claimed) { return null; } const loggedIn = isUserLoggedIn(); const userMobile = currentUserMobile(); const setField = (key, value) => { setForm((f) => ({ ...f, [key]: value })); setFieldErrors((e) => ({ ...e, [key]: undefined })); }; const validate = () => { const errs = {}; const nc = form.national_code.replace(/[۰-۹]/g, (d) => "۰۱۲۳۴۵۶۷۸۹".indexOf(d)); if (!/^\d{10}$/.test(nc)) errs.national_code = "کد ملی باید ۱۰ رقم باشد"; if (!form.birth_date) errs.birth_date = "تاریخ تولد را انتخاب کنید"; if (!form.first_name.trim()) errs.first_name = "نام الزامی است"; if (!form.last_name.trim()) errs.last_name = "نام خانوادگی الزامی است"; setFieldErrors(errs); return Object.keys(errs).length === 0; }; const submit = async () => { if (loading || !validate()) return; setLoading(true); setError(""); try { await request.postDoctorClaim(doctor.uuid, { ...form, mobile: userMobile, altcha }); setLoading(false); setSuccess(true); } catch (err) { setLoading(false); const first = err?.response?.data?.errors?.[0]; setError(first?.message || "خطایی رخ داد. لطفاً دوباره تلاش کنید."); } }; const closeAfterSuccess = () => { setOpen(false); setClaimed(true); router.push("/dashboard"); }; const removeProfile = async () => { if (deleting) return; setDeleting(true); setError(""); try { await request.deleteDoctor(doctor.uuid); setDeleting(false); setOpen(false); setClaimed(true); router.push("/"); } catch (err) { setDeleting(false); const first = err?.response?.data?.errors?.[0]; setError(first?.message || "حذف پروفایل ممکن نشد."); } }; return ( <>
این پروفایل بر اساس اطلاعات عمومی سازمان نظام پزشکی ایجاد شده است و هنوز توسط پزشک تأیید و مدیریت نمیشود. نوبتهای این پروفایل عمومی و غیرخاص هستند.
آیا شما این پزشک هستید؟
احراز مالکیت پروفایل
دکتر {form.first_name} {form.last_name}، به نوبت ۷۲۴ خوش آمدید 🎉
پروفایل شما با موفقیت تأیید شد و اکنون میتوانید اطلاعات پروفایل و تنظیمات نوبتدهی خود را مدیریت کنید.
{error && ({error}
)} {confirmDelete ? (آیا از حذف کامل این پروفایل مطمئن هستید؟ این عمل قابل بازگشت نیست.
برای احراز مالکیت، ابتدا با شماره موبایل خود وارد شوید. پس از ورود، به همین صفحه بازگردید و دوباره تلاش کنید.
اطلاعات هویتی شما بهصورت امن با سامانهٔ ثبت احوال و اطلاعات سازمان نظام پزشکی تطبیق داده میشود.
{error}
)}