feat(doctor): fix map render + claim modal captcha/mobile + owner delete

- Doctor page map: the visible locations card read doctor.address (empty
  from the detail endpoint) while coordinates live in the separately
  fetched addresses. Thread `addresses` (with map.latitude/longitude) down
  page → DoctorPage → DetailDoctor → Locations; card hidden when empty
- Claim modal: updated info-box text ("نوبت‌های این پروفایل عمومی و غیرخاص
  هستند")، added mobile field (validated, must match account), added ALTCHA
  widget (submit disabled until captcha resolves; payload sent as `altcha`)
- Owner delete: services.deleteDoctor + a guarded two-step "حذف این پروفایل"
  in the claim success screen (owner enforced server-side; 403/409 shown)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
hamed
2026-07-11 15:04:28 +03:30
co-authored by Claude Opus 4.8
parent d8ab26b4b7
commit 4fed9a8c57
7 changed files with 204 additions and 11 deletions
+2 -1
View File
@@ -5,7 +5,7 @@ import DetailDoctor from "./detailDoctor";
import Share from "./detailDoctor/Share";
import CustomLoading from "@/app/component/loading/Custom";
function DoctorPage({ doctor, comments, rateAggregate, slug }) {
function DoctorPage({ doctor, comments, rateAggregate, addresses, slug }) {
return (
<div className="pt-[92px] sm:pt-[120px] mt:pt-[148px] lg:pt-[176px] mt-[px] padding-responsive">
<div className="flex items-center justify-between">
@@ -38,6 +38,7 @@ function DoctorPage({ doctor, comments, rateAggregate, slug }) {
doctor={doctor}
comments={comments}
rateAggregate={rateAggregate}
addresses={addresses}
/>
<AppointmentList doctor={doctor} doctorSlug={slug} />
</div>