Task #706: إخفاء منتقي الوقت الحر قبل اختيار القاعة في نموذج الطلب العام

- نموذج الطلب العام (/protocol/request) كان يعرض منتقي التاريخ/الوقت الحر
  القديم قبل اختيار القاعة، لأن فحص وجود الأوقات (slot probe) مرتبط بالقاعة.
- الآن قبل اختيار القاعة تظهر رسالة "اختر القاعة أولًا لعرض المواعيد
  المتاحة"، وأثناء تحميل الفحص تظهر حالة تحميل، وعند فشله رسالة خطأ؛
  شبكة الأوقات أو المنتقي الحر لا يظهران إلا بعد نجاح الفحص.
- تعزيز: تغيير القاعة يصفّر التاريخ/الوقت/الوقت المحدد المختار لتجنّب
  قيم قديمة عند التبديل السريع بين القاعات.
- حوار الحجز الداخلي لم يحتج تعديلًا (الأوقات تُجلب عالميًا عبر
  /protocol/booking-slots/active فلا توجد المشكلة نفسها).
- لا تغييرات في الخادم. الصفحة العامة نصوصها عربية ثابتة (بدون i18n)
  فلم تلزم مفاتيح ترجمة جديدة — انحراف بسيط عن خطوة الترجمة في الخطة.
- tsc نظيف؛ مراجعة الarchitect: PASS.
This commit is contained in:
Replit Agent
2026-07-08 15:04:12 +00:00
parent 0873c3a0eb
commit d3d152ba86
+46 -2
View File
@@ -437,7 +437,22 @@ export default function ProtocolRequestPage() {
<Label htmlFor="room">
القاعة <span className="text-rose-500">*</span>
</Label>
<Select value={form.roomId} onValueChange={(v) => set("roomId", v)}>
<Select
value={form.roomId}
onValueChange={(v) =>
// Reset the time selection when the room changes so no stale
// date/slot/free-time values survive a room switch (the slot
// grid is per-room and slot mode itself may flip).
setForm((f) => ({
...f,
roomId: v,
date: "",
slotId: "",
startsAt: "",
endsAt: "",
}))
}
>
<SelectTrigger id="room">
<SelectValue
placeholder={
@@ -549,7 +564,36 @@ export default function ProtocolRequestPage() {
/>
</div>
{slotMode ? (
{form.roomId === "" ? (
// No room chosen yet → we don't know whether slot mode is on, so
// show a hint instead of the (possibly wrong) free pickers.
<div className="space-y-2">
<Label>
موعد الحجز <span className="text-rose-500">*</span>
</Label>
<p className="rounded-lg border border-slate-200 bg-slate-50 px-3 py-3 text-sm text-slate-500">
اختر القاعة أولًا لعرض المواعيد المتاحة.
</p>
</div>
) : slotProbe.isLoading ? (
<div className="space-y-2">
<Label>
موعد الحجز <span className="text-rose-500">*</span>
</Label>
<p className="text-sm text-slate-500">
جارٍ تحميل المواعيد المتاحة
</p>
</div>
) : slotProbe.isError ? (
<div className="space-y-2">
<Label>
موعد الحجز <span className="text-rose-500">*</span>
</Label>
<p className="text-xs text-rose-500">
تعذّر تحميل المواعيد، يرجى المحاولة مرة أخرى.
</p>
</div>
) : slotMode ? (
<>
<div className="space-y-2">
<Label htmlFor="bookingDate">