import React, { useEffect, useState } from "react"; import { Box } from "@mui/material"; import { CvTheme, cvBuilderApi } from "../cvBuilder"; const previewCache = new Map(); export default function CvTemplateThumbnail({ theme, height = 150 }: { theme?: CvTheme; height?: number }) { const [previewHtml, setPreviewHtml] = useState(() => theme ? previewCache.get(theme.id) ?? "" : ""); const accent = theme?.swatches?.[0] || "#3157d5"; const sidebar = theme?.swatches?.[1] || "#eef1f4"; const paper = theme?.swatches?.[2] || "#ffffff"; const layout = theme?.layout || "header-band"; const hasSidebar = layout === "sidebar-left" || layout === "sidebar-right"; const sidebarRight = layout === "sidebar-right"; const lines = [92, 72, 84, 61, 88, 76, 95, 67]; useEffect(() => { if (!theme) return; const cached = previewCache.get(theme.id); if (cached) { setPreviewHtml(cached); return; } setPreviewHtml(""); let active = true; void cvBuilderApi.themePreview(theme.id).then((render) => { previewCache.set(theme.id, render.html); if (active) setPreviewHtml(render.html); }).catch(() => undefined); return () => { active = false; }; }, [theme]); if (previewHtml) { const scale = height / (297 * 96 / 25.4); return (