import { useMemo, useState } from "react"; import { PackageCheck } from "lucide-react"; import { Badge, Button, Checkbox, Group, Loader, Paper, Stack, Text } from "@mantine/core"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import toast from "react-hot-toast"; import { api } from "@/services/api"; import type { ImportLoadingBooking, ImportLoadingBookingsResponse, LoadingStatus, } from "@/types/trainScheduling"; function ImportLoadingBookingRow({ booking, selected, onToggle, }: { booking: ImportLoadingBooking; selected: boolean; onToggle: () => void; }) { return ( {booking.reference ?? booking.id} {booking.loadingStatus} {booking.customer ?? "Unknown customer"} {booking.weightTons}T ); } export function ImportLoadingConfirmationPanel({ scheduleId, items, isLoading, }: { scheduleId: string; items: ImportLoadingBooking[]; isLoading?: boolean; }) { const [selectedIds, setSelectedIds] = useState([]); const queryClient = useQueryClient(); const updateStatus = useMutation< ImportLoadingBookingsResponse, Error, { id: string; bookingIds: string[]; loadingStatus: LoadingStatus } >({ ...api.trainScheduling.updateImportLoadingStatus.mutationOptions(), onSuccess: () => { setSelectedIds([]); queryClient.invalidateQueries({ queryKey: api.trainScheduling.importLoadingBookings.queryKey({ id: scheduleId }), }); }, onError: (error) => { toast.error(error instanceof Error ? error.message : "Could not update loading status"); }, }); const toggle = (id: string) => { setSelectedIds((prev) => prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id], ); }; const allIds = useMemo(() => items.map((b) => b.id), [items]); if (isLoading) { return ( Loading import bookings… ); } if (!items.length) { return ( No paid import bookings with wagons allocated on this schedule ); } return ( Import bookings ({items.length}) {items.map((booking) => ( toggle(booking.id)} /> ))} ); }