From 9b3f30a01fb78c7812544782ef13644cfdce7514 Mon Sep 17 00:00:00 2001 From: Dave Date: Sat, 24 Oct 2026 21:45:46 +0200 Subject: [PATCH] feat(process): show the blue price check on both Process pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The blue price-check badge now appears under the purple AI marker on every line the AI filled (reviewed or not): - quote Process page, mobile card: its own row under the header, so the one-line summary is readable on a phone - quote Process page, desktop table: inside the Description cell rather than the cramped 32-px "#" column, which has no room for a summary - order Process page: its own full-width row under the markers, so the summary is readable on a phone The summary truncates rather than wrapping — the popover always shows it in full. Co-Authored-By: Claude Opus 5.5 --- src/app/(app)/orders/[id]/process/page.tsx | 20 ++++++++++++++++++++ src/app/(app)/quotes/[id]/process/page.tsx | 20 ++++++++++++++++++++ src/components/quotes/process-item-card.tsx | 19 +++++++++++++++++++ 3 files changed, 59 insertions(+) diff --git a/src/app/(app)/orders/[id]/process/page.tsx b/src/app/(app)/orders/[id]/process/page.tsx index 7441980..008dc45 100644 --- a/src/app/(app)/orders/[id]/process/page.tsx +++ b/src/app/(app)/orders/[id]/process/page.tsx @@ -60,6 +60,7 @@ import { MarginApprovalDialog } from "@/components/margin-approval-dialog"; import { SplitRemainderDialog } from "@/components/ui/split-remainder-dialog"; import { AiItemHistoryTrigger } from "@/components/ai-item-history-trigger"; import { AiFillMarker } from "@/components/ai-fill-marker"; +import { PriceCheckMarker } from "@/components/price-check-marker"; import { orderAiRowClass } from "@/lib/order-assistant-review"; import { orderReviewerFromAuthRecord, @@ -2707,6 +2708,25 @@ function ItemCard({ + {/* Price check — the blue badge. It goes under the purple AI + marker in the left-hand marker column, on its own full-width + row so the one-line summary is readable on a phone (it + truncates rather than wrapping). Only on lines the AI + filled, reviewed or not. */} + {item.ai_fill?.status === "filled" ? ( +
+ +
+ ) : null} + {/* Middle row: qty + supplier + status badge — inline on all screens */}
{/* Quantity display: diff --git a/src/app/(app)/quotes/[id]/process/page.tsx b/src/app/(app)/quotes/[id]/process/page.tsx index a0ea9c5..ff0dcc8 100644 --- a/src/app/(app)/quotes/[id]/process/page.tsx +++ b/src/app/(app)/quotes/[id]/process/page.tsx @@ -53,6 +53,7 @@ import { ProcessItemCard } from "@/components/quotes/process-item-card"; import { QuoteNoteCard } from "@/components/quotes/process-quote-note-card"; import { AiItemHistoryTrigger } from "@/components/ai-item-history-trigger"; import { AiFillMarker } from "@/components/ai-fill-marker"; +import { PriceCheckMarker } from "@/components/price-check-marker"; import { AiFillQuoteButton } from "@/components/ai-fill-quote-button"; import { aiRowClass, canAiFillQuote, isAiFillPending } from "@/lib/quote-assistant-review"; import { reviewerFromAuthRecord, withAiReview } from "@/lib/quote-assistant-save"; @@ -1605,6 +1606,25 @@ export default function QuoteProcessPage({ params }: { params: Promise<{ id: str {isExpanded ? : }
+ {/* Price check — the blue badge. It lives in + the Description cell (not the cramped 32-px + `#` column) so the one-line summary has + room; it sits under the purple AI + marker in the `#` column. Only on lines + the AI filled, reviewed or not. */} + {item.ai_fill?.status === "filled" ? ( +
+ +
+ ) : null} + {/* Price check — the blue badge under the purple AI marker. It + only shows on lines the AI filled (reviewed or not). Full + card width, so the one-line summary is readable on a phone; + it truncates rather than wrapping. */} + {item.ai_fill?.status === "filled" ? ( +
+ +
+ ) : null} + {/* Row 2: status badges — own line so they never overflow into neighbouring cells. Each badge is gated on its own condition; the whole row only renders if at least one badge is relevant. */}