import { bindData } from "./dynamicBinder"; function generateTextElement(el, data) { const fontWeight = el.bold ? "bold" : el.fontWeight || "normal"; const fontStyle = el.italic ? "italic" : "normal"; const textDecoration = el.underline ? "underline" : "none"; return `
${bindData(el.text, data)}
`; } function generateImageElement(el, data) { if (!el.src) return ''; return ` `; } function generateQRCodeElement(el, data) { // For HTML export, we'll use a QR code API or placeholder const qrData = encodeURIComponent(bindData(el.data, data)); const qrUrl = `https://api.qrserver.com/v1/create-qr-code/?size=${el.size}x${el.size}&data=${qrData}`; return ` `; } function generateLineElement(el) { return `
`; } function generateRectangleElement(el) { return `
`; } function generateTableElement(el, data) { const visibleColumns = el.columns.filter(col => col.visible); const tableData = data?.tableData || el.sampleData || []; let tableHtml = `
`; // Header row visibleColumns.forEach(col => { tableHtml += ` `; }); tableHtml += ` `; // Data rows if (el.showSampleData && tableData.length > 0) { tableData.forEach(row => { tableHtml += ''; visibleColumns.forEach(col => { const cellValue = bindData(row[col.key] || '', data); tableHtml += ` `; }); tableHtml += ''; }); } tableHtml += `
${col.label}
${cellValue}
`; return tableHtml; } function generateSummaryElement(el, data) { const visibleFields = el.fields.filter(field => field.visible); let summaryHtml = `
`; visibleFields.forEach((field, index) => { const yPos = index * (el.fontSize + el.spacing); const value = bindData(`{{${field.key}}}`, data); summaryHtml += `
${field.label}: ${value}
`; }); summaryHtml += '
'; return summaryHtml; } export function generateHtml(template, data = {}) { const elementsHtml = template.elements .map((el) => { switch (el.type) { case "text": return generateTextElement(el, data); case "image": return generateImageElement(el, data); case "qrcode": return generateQRCodeElement(el, data); case "line": return generateLineElement(el); case "rectangle": return generateRectangleElement(el); case "table": return generateTableElement(el, data); case "summary": return generateSummaryElement(el, data); default: return ""; } }) .join(""); return ` Invoice
${elementsHtml}
`; }