Flatted and issues fixed with Claude Desktop.

This commit is contained in:
khalid@traclabs.com
2026-04-22 06:21:02 -05:00
parent 66bd69efe7
commit 4d19363d58
86 changed files with 1561 additions and 9232 deletions

47
src/hooks/useExport.js Normal file
View File

@@ -0,0 +1,47 @@
import { useState, useCallback } from 'react';
export function useExport() {
const [exporting, setExporting] = useState(false);
const [progress, setProgress] = useState(0);
const [exportUrl, setExportUrl] = useState(null);
const [error, setError] = useState(null);
const exportDesign = useCallback(async (elements, designName = 'design', template = null) => {
setExporting(true); setProgress(0); setError(null); setExportUrl(null);
try {
const progressInterval = setInterval(() => { setProgress((prev) => Math.min(prev + 10, 90)); }, 200);
const response = await fetch('/api/export', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ elements, designName, template }),
});
clearInterval(progressInterval);
setProgress(100);
if (!response.ok) { const errorData = await response.json(); throw new Error(errorData.error || 'Export failed'); }
const data = await response.json();
setExportUrl(data.export.url);
const link = document.createElement('a');
link.href = data.export.url;
link.download = data.export.filename;
link.click();
setExporting(false);
return data;
} catch (err) {
console.error('Export failed:', err);
setError(err.message);
setExporting(false);
throw err;
}
}, []);
const clearExport = useCallback(() => { setExportUrl(null); setError(null); }, []);
return { exporting, progress, exportUrl, error, exportDesign, clearExport };
}