import { useRef } from 'react'; import { calculateQuote } from '../utils/quoteCalculator'; export default function QuoteSummary({ pricing, selections, onBack, onNew }) { const quoteRef = useRef(null); const quote = calculateQuote(pricing, selections); const operator = selections.operator && typeof selections.operator === 'object' ? selections.operator : pricing.operators.find((o) => o.id === selections.operator); const handleDownloadPDF = async () => { const html2canvas = (await import('html2canvas')).default; const { jsPDF } = await import('jspdf'); const element = quoteRef.current; if (!element) return; const canvas = await html2canvas(element, { scale: 2, backgroundColor: '#ffffff', logging: false, }); const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF('p', 'mm', 'a4'); const margin = 14; const pageWidth = pdf.internal.pageSize.getWidth(); const pageHeight = pdf.internal.pageSize.getHeight(); const imgWidth = pageWidth - 2 * margin; const imgHeight = (canvas.height * imgWidth) / canvas.width; let heightLeft = imgHeight; let position = margin; pdf.addImage(imgData, 'PNG', margin, position, imgWidth, imgHeight); heightLeft -= pageHeight - margin; while (heightLeft > 0) { position -= pageHeight - margin; pdf.addPage(); pdf.addImage(imgData, 'PNG', margin, position, imgWidth, imgHeight); heightLeft -= pageHeight - margin; } const modelName = operator?.tiltModel || operator?.model || 'Quote'; pdf.save('Gate_Quote_' + modelName + '.pdf'); }; return (
Review your selection and itemized cost estimate
Quotation Date: {new Date().toLocaleDateString('en-CA')}
| Item | Qty | Unit Price | Total |
|---|---|---|---|
|
{item.name}
{item.category}
|
{item.qty} | {pricing.currency.symbol} {item.unitPrice.toLocaleString(pricing.currency.locale, { minimumFractionDigits: 2, maximumFractionDigits: 2, })} | {pricing.currency.symbol} {item.lineTotal.toLocaleString(pricing.currency.locale, { minimumFractionDigits: 2, maximumFractionDigits: 2, })} |
This is a preliminary cost estimate. Final pricing may vary based on site-specific requirements.
Generated by Gate Operator Quotation System — {new Date().toLocaleDateString('en-CA')}