From 3a3324a5c911eff2a2bf377133a1e6038d630a39 Mon Sep 17 00:00:00 2001 From: rohithgoje21 Date: Fri, 1 Aug 2025 13:11:54 +0530 Subject: [PATCH] Fix: Separate loading animations for PNG and SVG export buttons --- components/diagram/diagram-generator.tsx | 55 ++++++++++++++---------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/components/diagram/diagram-generator.tsx b/components/diagram/diagram-generator.tsx index fcaf91d9..e79a4872 100644 --- a/components/diagram/diagram-generator.tsx +++ b/components/diagram/diagram-generator.tsx @@ -86,7 +86,8 @@ export function DiagramGenerator() { const [selectedTemplate, setSelectedTemplate] = useState("flowchart"); const [isGenerating, setIsGenerating] = useState(false); const [isCopying, setIsCopying] = useState(false); - const [isExporting, setIsExporting] = useState(false); + const [isExportingPNG, setIsExportingPNG] = useState(false); + const [isExportingSVG, setIsExportingSVG] = useState(false); const [activeTab, setActiveTab] = useState("editor"); const { toast } = useToast(); const diagramRef = useRef(null); @@ -158,14 +159,15 @@ export function DiagramGenerator() { const exportDiagram = async (format: 'png' | 'svg') => { if (!diagramRef.current) return; - setIsExporting(true); - + const setLoading = format === 'png' ? setIsExportingPNG : setIsExportingSVG; + setLoading(true); + try { const element = diagramRef.current.querySelector('#mermaid-diagram'); if (!element) throw new Error('Diagram element not found'); - + let dataUrl: string; - + if (format === 'png') { dataUrl = await toPng(element as HTMLElement, { backgroundColor: '#ffffff', @@ -177,8 +179,7 @@ export function DiagramGenerator() { backgroundColor: '#ffffff' }); } - - // Create download link + const link = document.createElement('a'); link.download = `diagram.${format}`; link.href = dataUrl; @@ -196,7 +197,7 @@ export function DiagramGenerator() { variant: "destructive", }); } finally { - setIsExporting(false); + setLoading(false); } }; @@ -376,10 +377,10 @@ export function DiagramGenerator() {