feat: enhance online booking toggle UI and improve booking window controls
This commit is contained in:
@@ -12,7 +12,7 @@ import {
|
|||||||
BuildingOfficeIcon, MapPinIcon, AcademicCapIcon, UserIcon,
|
BuildingOfficeIcon, MapPinIcon, AcademicCapIcon, UserIcon,
|
||||||
PlusIcon, CameraIcon, ChevronDownIcon, ChevronRightIcon, ChevronLeftIcon,
|
PlusIcon, CameraIcon, ChevronDownIcon, ChevronRightIcon, ChevronLeftIcon,
|
||||||
CheckCircleIcon, XMarkIcon, ExclamationTriangleIcon,
|
CheckCircleIcon, XMarkIcon, ExclamationTriangleIcon,
|
||||||
HeartIcon, CheckIcon, IdentificationIcon, DocumentTextIcon,
|
HeartIcon, CheckIcon, IdentificationIcon, DocumentTextIcon, GlobeAltIcon,
|
||||||
} from '@heroicons/react/24/outline';
|
} from '@heroicons/react/24/outline';
|
||||||
import { StarIcon as StarSolid } from '@heroicons/react/24/solid';
|
import { StarIcon as StarSolid } from '@heroicons/react/24/solid';
|
||||||
import { toast } from 'sonner';
|
import { toast } from 'sonner';
|
||||||
@@ -1312,39 +1312,54 @@ function WeeklyScheduleTab({ doctorUuid, addresses }: { doctorUuid: string; addr
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
{/* ─ نوبتدهی آنلاین */}
|
{/* ─ نوبتدهی آنلاین */}
|
||||||
<div className="mb-3 p-3 rounded-xl border border-slate-200 dark:border-gray-700 space-y-3">
|
<div className="mb-3 rounded-xl border border-slate-200 dark:border-gray-700 overflow-hidden">
|
||||||
<label className="flex items-center justify-between gap-3 cursor-pointer">
|
{/* header + toggle */}
|
||||||
<span className="text-sm font-medium text-slate-700 dark:text-slate-200">نوبتدهی آنلاین</span>
|
<label className="flex items-center justify-between gap-3 px-4 py-3 cursor-pointer bg-slate-50 dark:bg-gray-800/50">
|
||||||
<input
|
<div className="flex items-center gap-2">
|
||||||
type="checkbox"
|
<GlobeAltIcon className="w-4 h-4 text-slate-500 dark:text-slate-400 shrink-0" />
|
||||||
checked={meta.online_booking_enabled}
|
<span className="text-sm font-medium text-slate-700 dark:text-slate-200">نوبتدهی آنلاین</span>
|
||||||
onChange={(e) => setMeta(m => ({ ...m, online_booking_enabled: e.target.checked }))}
|
</div>
|
||||||
/>
|
<span className="relative inline-flex shrink-0">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
className="peer sr-only"
|
||||||
|
checked={meta.online_booking_enabled}
|
||||||
|
onChange={(e) => setMeta(m => ({ ...m, online_booking_enabled: e.target.checked }))}
|
||||||
|
/>
|
||||||
|
<span className="w-10 h-6 rounded-full bg-slate-300 dark:bg-gray-600 transition-colors peer-checked:bg-emerald-500" />
|
||||||
|
<span className="absolute top-0.5 right-0.5 w-5 h-5 rounded-full bg-white shadow transition-transform peer-checked:-translate-x-4" />
|
||||||
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<div className="flex items-center gap-2">
|
|
||||||
<span className="text-sm text-slate-600 dark:text-slate-400">رزرو آنلاین تا</span>
|
{/* booking window control */}
|
||||||
<input
|
<div className={`px-4 py-3 transition-opacity ${meta.online_booking_enabled ? '' : 'opacity-50 pointer-events-none'}`}>
|
||||||
type="number"
|
<div className="flex flex-wrap items-center gap-2">
|
||||||
min={1}
|
<span className="text-sm text-slate-600 dark:text-slate-400">رزرو آنلاین تا</span>
|
||||||
value={meta.booking_window_value}
|
<div className="flex items-stretch rounded-lg border border-slate-200 dark:border-gray-700 overflow-hidden bg-white dark:bg-gray-900">
|
||||||
disabled={!meta.online_booking_enabled}
|
<input
|
||||||
onChange={(e) => setMeta(m => ({ ...m, booking_window_value: Math.max(1, Number(e.target.value) || 1) }))}
|
type="number"
|
||||||
className="input w-16 text-center"
|
min={1}
|
||||||
/>
|
value={meta.booking_window_value}
|
||||||
<select
|
disabled={!meta.online_booking_enabled}
|
||||||
value={meta.booking_window_unit}
|
onChange={(e) => setMeta(m => ({ ...m, booking_window_value: Math.max(1, Number(e.target.value) || 1) }))}
|
||||||
disabled={!meta.online_booking_enabled}
|
className="w-14 text-center text-sm bg-transparent border-0 focus:outline-none focus:ring-0 px-2 py-1.5"
|
||||||
onChange={(e) => setMeta(m => ({ ...m, booking_window_unit: e.target.value as 'week' | 'month' }))}
|
/>
|
||||||
className="input"
|
<select
|
||||||
>
|
value={meta.booking_window_unit}
|
||||||
<option value="week">هفته</option>
|
disabled={!meta.online_booking_enabled}
|
||||||
<option value="month">ماه</option>
|
onChange={(e) => setMeta(m => ({ ...m, booking_window_unit: e.target.value as 'week' | 'month' }))}
|
||||||
</select>
|
className="text-sm bg-slate-50 dark:bg-gray-800 border-0 border-r border-slate-200 dark:border-gray-700 focus:outline-none focus:ring-0 px-2 py-1.5"
|
||||||
<span className="text-sm text-slate-600 dark:text-slate-400">آینده</span>
|
>
|
||||||
|
<option value="week">هفته</option>
|
||||||
|
<option value="month">ماه</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<span className="text-sm text-slate-600 dark:text-slate-400">آینده</span>
|
||||||
|
</div>
|
||||||
|
<p className="text-xs text-slate-400 dark:text-slate-500 mt-2 leading-relaxed">
|
||||||
|
بیمار فقط تا این بازه میتواند آنلاین نوبت بگیرد؛ روزهای بعد از آن روی تقویم غیرفعالاند.
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<p className="text-xs text-slate-400 dark:text-slate-500">
|
|
||||||
بیمار فقط تا این بازه میتواند آنلاین نوبت بگیرد؛ روزهای بعد از آن روی تقویم غیرفعالاند.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{SCHEDULE_DAYS.map(day => {
|
{SCHEDULE_DAYS.map(day => {
|
||||||
|
|||||||
Reference in New Issue
Block a user