import React from "react"; import { Button } from "../UI/Button"; import { Panel } from "../UI/Panel"; import { formatDeliveryDate, getDeliveryRelativeDayLabel } from "./deliveryDateFormatting"; const groupSlotsByDate = (slots) => { const groups = new Map(); const getSlotPriority = (slot) => { const time = String(slot?.time || "").toLowerCase(); if (time.includes("первая") || time.includes("до обеда")) { return 0; } if (time.includes("вторая") || time.includes("после обеда")) { return 1; } return 2; }; for (const slot of slots) { if (!groups.has(slot.date)) { groups.set(slot.date, []); } groups.get(slot.date).push(slot); } return Array.from(groups.entries()) .map(([date, dateSlots]) => [ date, [...dateSlots].sort((left, right) => getSlotPriority(left) - getSlotPriority(right)), ]) .sort(([a], [b]) => a.localeCompare(b)); }; const getDeliverySlotGroupHeading = (dateStr, referenceDate = new Date()) => { const relative = getDeliveryRelativeDayLabel(dateStr, referenceDate); const formatted = formatDeliveryDate(dateStr); if (relative) { return `Доставка ${relative.charAt(0).toLowerCase()}${relative.slice(1)} · ${formatted}`; } return `Доставка ${formatted}`; }; export { formatDeliveryDate, formatDeliverySlotGroupLabel } from "./deliveryDateFormatting"; export { getDeliverySlotGroupHeading }; export const DeliverySlotsPicker = ({ slots, onSelectSlot, selectedSlotId, referenceDate = new Date(), }) => { if (!slots || !slots.length) { return (

Нет доступных слотов для выбора. Логист назначит слот позже.

); } const grouped = groupSlotsByDate(slots); return (
{grouped.map(([date, dateSlots]) => (

{getDeliverySlotGroupHeading(date, referenceDate)}

Раскрыть Свернуть
{dateSlots.map((slot) => { const isSelected = selectedSlotId === slot.id; return ( ); })}
))}
); };