diff --git a/src/components/order-item-context-popover-trigger.tsx b/src/components/order-item-context-popover-trigger.tsx new file mode 100644 index 0000000..5476931 --- /dev/null +++ b/src/components/order-item-context-popover-trigger.tsx @@ -0,0 +1,69 @@ +"use client"; + +import { useState } from "react"; +import { Info } from "lucide-react"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { OrderItemContextPanel, type ApplyPayload } from "@/components/order-item-context-panel"; +import type { OrderItemContextResponse } from "@/lib/server/order-item-context-service"; +import { cn } from "@/lib/utils"; + +interface Props { + itemId: string; + /** Optional pre-loaded context. Saves a fetch on first open if supplied. */ + initialData?: OrderItemContextResponse | null; + className?: string; +} + +/** + * ⓘ popover trigger that renders the deterministic order-item + * context inside the orders detail page items table. Fetches lazily + * on first open. Hidden entirely if the fetch 404s (e.g. the + * endpoint is feature-flagged off). + */ +export function OrderItemContextPopoverTrigger({ itemId, initialData, className }: Props) { + const [open, setOpen] = useState(false); + const [hidden, setHidden] = useState(false); + + const handleOpen = async (next: boolean) => { + setOpen(next); + }; + + if (hidden) return null; + + return ( + + + + + + { + // Orders page is read-only at the row level — apply + // requires the user to open the process modal. Close + // the popover and let the row click target the modal. + setOpen(false); + }} + /> + + + ); +}