fix(appointment): ensure appointment details are always fetched from the server to avoid incorrect pricing
This commit is contained in:
@@ -119,12 +119,14 @@ export default function ConfirmAppointmentModal({
|
||||
const [touched, setTouched] = useState(false);
|
||||
const [stepIdx, setStepIdx] = useState(0);
|
||||
|
||||
// وقتی صفحهی میزبان نوبت را ندارد (مثل ردیف لیست) خودمان جزئیات را میگیریم:
|
||||
// مبلغ ویزیت و قیمت سرویسها فقط در detail هستند.
|
||||
// جزئیات همیشه گرفته میشود، حتی وقتی صفحهٔ میزبان نوبتی پاس داده است: ردیفِ
|
||||
// فهرست نوبتها `visit_price_rials` و بیمه را ندارد، و مودال با اعتماد به همان
|
||||
// ردیف، هزینهٔ ویزیتِ ثبتشده را صفر نشان میداد و همان صفر را هم ثبت میکرد.
|
||||
// مبلغ چیزی نیست که از یک payload ناقص حدس زده شود.
|
||||
const detailQuery = useQuery({
|
||||
queryKey: ['appointment', appointmentUuid],
|
||||
queryFn: () => api.get<ApiResponse<AppointmentLike>>(`/api/v1/appointment/${appointmentUuid}`),
|
||||
enabled: open && !appointment,
|
||||
enabled: open,
|
||||
});
|
||||
|
||||
// روشهای پرداختِ ثبتشده — فقط وقتی مودال باز است.
|
||||
@@ -151,8 +153,10 @@ export default function ConfirmAppointmentModal({
|
||||
[bankQuery.data],
|
||||
);
|
||||
|
||||
const appt: AppointmentLike | null = appointment
|
||||
?? ((detailQuery.data?.data as any)?.data ?? detailQuery.data?.data ?? null);
|
||||
// پاسخ سرور مرجع است؛ نوبتِ پاسدادهشده فقط تا رسیدنِ آن، صفحه را خالی نگه نمیدارد.
|
||||
const detail: AppointmentLike | null =
|
||||
(detailQuery.data?.data as any)?.data ?? detailQuery.data?.data ?? null;
|
||||
const appt: AppointmentLike | null = detail ?? appointment ?? null;
|
||||
|
||||
// ── بیمه: نوع خدمت + بیمهٔ پایهٔ نوبت ──────────────────────────────────────
|
||||
const insurance = useAppointmentInsurance(open);
|
||||
@@ -278,7 +282,9 @@ export default function ConfirmAppointmentModal({
|
||||
onClose();
|
||||
}
|
||||
|
||||
const loading = detailQuery.isLoading && !appointment;
|
||||
// تا رسیدنِ جزئیات، دکمهها قفلاند: کاربر نباید روی مبلغی که هنوز از سرور نیامده
|
||||
// «مرحلهٔ بعد» بزند و پرداختِ صفر ثبت کند.
|
||||
const loading = detailQuery.isLoading;
|
||||
const currentStep: ConfirmStepKey = CONFIRM_STEPS[Math.min(stepIdx, CONFIRM_STEPS.length - 1)].key;
|
||||
const isLastStep = currentStep === 'review';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user