"use client"; import Link from "next/link"; import { useMemo, useState } from "react"; import { useDerived, useSnap } from "@/lib/client"; import { QueueGroup, QueueRow } from "@/components/portal"; import { ErrorLine } from "@/components/ui"; import { NewOrderDialog } from "@/components/dialogs"; import { useServerCounts } from "@/lib/portalcounts"; import { bagStock, isPickable, useRequestActions, useRequests, type RequestRow } from "@/components/requests/RequestList"; import { relativeDay } from "@/lib/today"; import { Lines } from "./Lines"; export default function PickGroup() { const { s } = useSnap(); const { L, byId } = useDerived(); const server = useServerCounts(); const { data, error, loading, reload } = useRequests(); const { act, error: actErr } = useRequestActions(reload); const [orderFor, setOrderFor] = useState<{ r: RequestRow; short: RequestRow["bag"] } | null>(null); const rows = useMemo(() => { if (!data) return []; return data.requests .filter(isPickable) .sort((a, b) => ((a.decidedAt || a.createdAt) < (b.decidedAt || b.createdAt) ? -1 : 1)) .map((r) => ({ r, stock: bagStock(s, L, r) })); }, [data, s, L]); const count = data ? rows.length : server.pick; return ( <> {actErr && } {!data && error && !loading && ( Requests couldn’t be loaded. reload()}>Try again )} {rows.map(({ r, stock }) => { const lines = (r.bag.length ? r.bag : r.lines).map((l) => ({ garment: l.item, size: l.size, qty: l.qty })); const when = relativeDay(r.decidedAt, s); return ( {r.staffName}} meta={<> {r.managerName ? ` · approved by ${r.managerName}` : " · approved"}{when ? ` ${when}` : ""} {" · "} {stock.inStock ? "in stock" : none on the shelf} >} actions={stock.inStock ? act("request.pick", { id: r.id })}>Start picking : setOrderFor({ r, short: stock.shortLines })}>Order it in} /> ); })} {orderFor && ( setOrderFor(null)} initOrderFor="Staff Member" initStaffId={orderFor.r.staffId} initLines={orderFor.short.map((l) => ({ itemId: l.itemId, size: l.size, qty: l.qty }))} initSupplier={orderFor.short[0] ? byId[orderFor.short[0].itemId]?.supplier : undefined} /> )} > ); }