import React, { useState } from 'react'
function CritiqueSection({ critique }) {
const [expandedSections, setExpandedSections] = useState({})
if (!critique) {
return (
UX critique data not available
)
}
const toggleSection = (sectionKey) => {
setExpandedSections(prev => ({
...prev,
[sectionKey]: !prev[sectionKey]
}))
}
const getScoreColor = (score) => {
if (score >= 90) return 'text-success-600'
if (score >= 75) return 'text-primary-600'
if (score >= 60) return 'text-warning-600'
return 'text-error-600'
}
const getSeverityColor = (severity) => {
if (severity === 'High') return 'badge-error'
if (severity === 'Medium') return 'badge-warning'
return 'badge-success'
}
// Handle both structured and quick critique formats
if (critique.quick_critique) {
return (
Quick UX Assessment
{critique.quick_critique}
)
}
const structuredCritique = critique.structured_critique
if (!structuredCritique) {
return (
UX Analysis
The AI critique is available but couldn't be parsed into structured format.
{critique.raw_response && (
View Raw Response
{critique.raw_response}
)}
)
}
const sections = [
{ key: 'visual_design', title: '🎨 Visual Design', data: structuredCritique.visual_design },
{ key: 'usability', title: '🖱️ Usability', data: structuredCritique.usability },
{ key: 'accessibility', title: '♿ Accessibility', data: structuredCritique.accessibility },
{ key: 'mobile_responsiveness', title: '📱 Mobile Responsiveness', data: structuredCritique.mobile_responsiveness },
{ key: 'performance', title: '⚡ Performance', data: structuredCritique.performance }
]
return (
{/* Overall Assessment */}
{structuredCritique.overall_assessment && (
Overall Assessment
{structuredCritique.overall_assessment.score}
/100
Overall UX Score
{structuredCritique.overall_assessment.summary}
✅ Strengths
{structuredCritique.overall_assessment.strengths?.map((strength, index) => (
-
•
{strength}
))}
⚠️ Areas for Improvement
{structuredCritique.overall_assessment.weaknesses?.map((weakness, index) => (
-
•
{weakness}
))}
)}
{/* Detailed Sections */}
{sections.map(section => {
if (!section.data) return null
const isExpanded = expandedSections[section.key]
return (
{isExpanded && (
{/* Feedback */}
Feedback
{section.data.feedback}
{/* Issues */}
{section.data.issues && section.data.issues.length > 0 && (
Issues Found
{section.data.issues.map((issue, index) => (
{issue.category}
{issue.severity}
{issue.description}
💡 Recommendation
{issue.recommendation}
))}
)}
)}
)
})}
{/* Generated Info */}
Analysis generated by {critique.model_used} at{' '}
{new Date(critique.generated_at).toLocaleString()}
)
}
export default CritiqueSection