import React from 'react'; import { PlusIcon } from '@heroicons/react/24/outline'; import { formatNumber } from '../../lib/utils'; import StatusBadge from '../ui/StatusBadge'; import type { Appointment, ClinicResource } from '../../types'; function hhmm(ts: number): string { const d = new Date(ts * 1000); return `${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}`; } /** * نمای روزِ یک منبع. * * عمداً تایم‌لاین اسلاتی نیست: منبع برنامهٔ هفتگیِ اسلات‌شده ندارد، تقویمش از مدتِ * سرویس‌ها و اشغالِ واقعی ساخته می‌شود. نشان دادن شبکهٔ اسلات برای منبع یعنی وعدهٔ * زمان‌هایی که موتور رزرو اصلاً نمی‌شناسد. * * پس فقط دو چیز: آنچه امروز روی این منبع رزرو شده، و یک راه برای افزودن نوبتِ سرویسی. */ export default function ResourceDayPanel({ resource, appointments, loading, canCreate, onBook, onView, }: { resource: ClinicResource; appointments: Appointment[]; loading: boolean; canCreate: boolean; onBook: () => void; onView: (appointment: Appointment) => void; }) { const rows = [...appointments].sort((a, b) => a.slot_start - b.slot_start); return (
نوبت‌دهی این منبع سرویسی است — زمان از مدت سرویس و آزادبودن خودِ منبع می‌آید، نه از اسلات ثابت. {resource.supervisor && ( زیر نظر {resource.supervisor.name} )}
{canCreate && ( )} {loading ? (
) : rows.length === 0 ? (

برای «{resource.name}» در این روز نوبتی ثبت نشده است.

) : (
{rows.map((a) => ( ))}
)} {rows.length > 0 && (

{formatNumber(rows.length)} نوبت روی این منبع در این روز

)}
); }