import React, { useState, useEffect } from 'react'; function CodeImplementationSection({ analysisId }) { const [codeData, setCodeData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [activeTab, setActiveTab] = useState('html'); useEffect(() => { if (analysisId) { fetchImplementationCode(); } }, [analysisId]); const fetchImplementationCode = async () => { try { setLoading(true); const response = await fetch(`/api/analyze/${analysisId}/code`); if (response.ok) { const data = await response.json(); setCodeData(data.code); setError(null); // Set initial tab to first available code type const availableTabs = ['html', 'css', 'javascript'].filter(tab => data.code[tab] && data.code[tab].length > 0 ); if (availableTabs.length > 0) { setActiveTab(availableTabs[0]); } } else if (response.status === 404) { setError('No implementation code available for this analysis'); } else { throw new Error('Failed to fetch implementation code'); } } catch (err) { setError(err.message); } finally { setLoading(false); } }; const copyToClipboard = (code) => { navigator.clipboard.writeText(code); // You could add a toast notification here }; const downloadCode = (code, filename) => { const blob = new Blob([code], { type: 'text/plain' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = filename; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); }; const downloadAllCode = () => { if (!codeData) return; const zipContent = []; if (codeData.html && codeData.html.length > 0) { const htmlCode = codeData.html.map(item => `\n${item.code}\n\n\n` ).join('\n'); zipContent.push({ name: 'improvements.html', content: htmlCode }); } if (codeData.css && codeData.css.length > 0) { const cssCode = codeData.css.map(item => `/* ${item.title} */\n${item.code}\n\n/* Instructions: ${item.instructions} */\n` ).join('\n'); zipContent.push({ name: 'improvements.css', content: cssCode }); } if (codeData.javascript && codeData.javascript.length > 0) { const jsCode = codeData.javascript.map(item => `// ${item.title}\n${item.code}\n\n// Instructions: ${item.instructions}\n` ).join('\n'); zipContent.push({ name: 'improvements.js', content: jsCode }); } // Create implementation guide const guide = `# UX Implementation Guide\n\n${codeData.instructions.map(item => `## ${item.recommendation}\n\n${item.steps}\n\n**Notes:** ${item.notes}\n` ).join('\n')}`; zipContent.push({ name: 'IMPLEMENTATION_GUIDE.md', content: guide }); // For now, download each file separately (in a real app, you'd create a ZIP) zipContent.forEach(file => { const blob = new Blob([file.content], { type: 'text/plain' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = file.name; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); }); }; if (loading) { return (
{error}
Ready-to-use code to implement the UX improvements identified in your analysis. Each code block includes implementation instructions and best practices.
Notes: {instruction.notes}
{codeBlock.code}