diff --git a/components/doctor/claim/index.js b/components/doctor/claim/index.js new file mode 100644 index 0000000..951cfb7 --- /dev/null +++ b/components/doctor/claim/index.js @@ -0,0 +1,184 @@ +"use client"; + +import { useState } from "react"; +import { useRouter } 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 { convertToJalali, isUserLoggedIn } from "@/helper"; +import { request } from "@/services/response"; + +const initialForm = { national_code: "", birth_date: "", first_name: "", last_name: "" }; + +/** + * احراز مالکیت پروفایل پزشک ایمپورتشده (unclaimed). + * کامپوننت مشترک برای دامنهٔ اصلی و همهٔ زیردامنهها/دامنههای نمایندگان — + * منطق claim به دامنه وابسته نیست؛ احراز هویت کاملاً سمت سرور انجام میشود. + */ +function ClaimProfileSection({ doctor }) { + const router = useRouter(); + 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); + + if (doctor?.owner_status !== "unclaimed" || claimed) { + return null; + } + + const loggedIn = isUserLoggedIn(); + + 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); + 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"); + }; + + return ( + <> +
+ این پروفایل بر اساس اطلاعات عمومی سازمان نظام پزشکی ایجاد شده و هنوز + توسط پزشک تأیید و مدیریت نمیشود؛ نوبتدهی آنلاین آن غیرفعال است. +
+آیا شما این پزشک هستید؟
+ +احراز مالکیت پروفایل
++ دکتر {form.first_name} {form.last_name}، به نوبت ۷۲۴ خوش آمدید 🎉 +
++ پروفایل شما با موفقیت تأیید شد و اکنون میتوانید اطلاعات پروفایل و + تنظیمات نوبتدهی خود را مدیریت کنید. +
+ ++ برای احراز مالکیت، ابتدا با شماره موبایل خود وارد شوید. پس از ورود، + به همین صفحه بازگردید و دوباره تلاش کنید. +
+ + + ++ اطلاعات هویتی شما بهصورت امن با سامانهٔ ثبت احوال و اطلاعات سازمان + نظام پزشکی تطبیق داده میشود. +
+{error}
+ )} + +