-
Result
-
{error || JSON.stringify(result, null, 2) || "No run yet."}
+
+
+ {quotes.map((quote, index) => (
+
+ ))}
-
+
+
+
+
+
+
+
+
+
+
);
}
+
+function Recommendation({ result }) {
+ return (
+
+
Recommendation
+
{result.recommendation.vendor}
+
{result.recommendation.reason}
+
+ - Score
- {result.recommendation.score}
+ - Quotes
- {result.quote_count}
+ - Receipt
- {result.receipt?.receipt_id || "persisted by gateway"}
+
+
+ | Vendor | Total | Days | Warranty | Score |
+
+ {result.quotes?.map((quote) => (
+
+ | {quote.vendor} |
+ {quote.total_price} |
+ {quote.delivery_days} |
+ {quote.warranty_months} |
+ {quote.scores.weighted_total} |
+
+ ))}
+
+
+
+ );
+}
+
+function EmptyOrError({ result }) {
+ if (result && result.ok === false) {
+ return
{result.code}
{result.message}
{result.action};
+ }
+ return
No comparison opened yet.
Run the success fixture or reopen a saved comparison to see ranked vendors and receipt details.
;
+}
+
+function fileToBase64(file) {
+ return new Promise((resolve, reject) => {
+ const reader = new FileReader();
+ reader.onload = () => resolve(String(reader.result || "").split(",").pop() || "");
+ reader.onerror = () => reject(reader.error || new Error("file read failed"));
+ reader.readAsDataURL(file);
+ });
+}