"use client"; const MAX_PREVIEW_SERVICES = 3; /** * زیرنویس کارت: نام سرویس‌ها تا سه‌تا و بعد «+n». * * شمارِ خالی («۳ سرویس») به بیمار نمی‌گوید این دستگاه به کارش می‌آید یا نه، و او را * مجبور می‌کند کورکورانه کلیک کند. */ function servicesLabel(services = []) { if (services.length === 0) return null; const shown = services.slice(0, MAX_PREVIEW_SERVICES).map((s) => s.name); const rest = services.length - shown.length; return rest > 0 ? `${shown.join("، ")} +${rest}` : shown.join("، "); } /** * انتخاب نوع نوبت — پیش از انتخاب سرویس و روز، و فقط وقتی این پزشک در این محل * دست‌کم یک منبعِ قابل رزرو دارد. * * «منبع» واژهٔ داخلی است و به بیمار نشان داده نمی‌شود؛ کارت‌ها نام واقعی دستگاه/اتاق * و نوعشان را نشان می‌دهند. کارت اول همیشه جریان همیشگی است: نوبت با خودِ پزشک. */ function ResourceSelect({ resources = [], selected = null, onSelect, allowDoctorOption = true }) { const cardClass = (active) => `w-full text-right p-[16px] rounded-[8px] border border-solid transition-colors ${ active ? "border-[#5559CE] bg-[rgba(85,89,206,0.06)]" : "border-[#EFEFEF] bg-[#FFF] hover:border-[#C7C9EC]" }`; return (

۱. انتخاب نوع نوبت

{/* پزشکی که برنامهٔ هفتگی ندارد، ویزیتِ مستقیم هم ندارد؛ نشان‌دادن این کارت کاربر را به فهرست ساعتِ همیشه‌خالی می‌برد. */} {allowDoctorOption && ( )} {resources.map((resource) => { const active = selected?.uuid === resource.uuid; const label = servicesLabel(resource.services); return ( ); })}
); } export default ResourceSelect;