import React, { useState } from 'react' function RecommendationsSection({ uxCritique, accessibility, report }) { const [filterPriority, setFilterPriority] = useState('all') const [expandedRec, setExpandedRec] = useState(null) // Combine recommendations from different sources const recommendations = [] // Add UX recommendations if (uxCritique?.structured_critique?.recommendations) { recommendations.push(...uxCritique.structured_critique.recommendations.map(rec => ({ ...rec, source: 'UX Analysis', sourceIcon: '🎨' }))) } // Add accessibility recommendations (converted from violations) if (accessibility?.violations) { const a11yRecs = accessibility.violations .filter(v => v.impact === 'critical' || v.impact === 'serious') .slice(0, 5) // Limit to top 5 most important .map(violation => ({ priority: violation.impact === 'critical' ? 'High' : 'Medium', category: 'Accessibility', title: violation.help, description: violation.description, impact: `Affects ${violation.nodes?.length || 0} elements. ${violation.impact} accessibility issue.`, effort: 'Medium', source: 'Accessibility Scan', sourceIcon: '♿', helpUrl: violation.helpUrl })) recommendations.push(...a11yRecs) } // Filter by priority const filteredRecommendations = recommendations.filter(rec => { if (filterPriority === 'all') return true return rec.priority.toLowerCase() === filterPriority.toLowerCase() }) // Sort by priority const priorityOrder = { High: 3, Medium: 2, Low: 1 } filteredRecommendations.sort((a, b) => priorityOrder[b.priority] - priorityOrder[a.priority] ) const getPriorityColor = (priority) => { if (priority === 'High') return 'badge-error' if (priority === 'Medium') return 'badge-warning' return 'badge-success' } const getEffortColor = (effort) => { if (effort === 'High') return 'text-error-600' if (effort === 'Medium') return 'text-warning-600' return 'text-success-600' } return (
{/* Summary */}

Recommendations Summary

{recommendations.filter(r => r.priority === 'High').length}

High Priority

{recommendations.filter(r => r.priority === 'Medium').length}

Medium Priority

{recommendations.filter(r => r.priority === 'Low').length}

Low Priority

{recommendations.length}

Total Items

{/* Quick Action Items */} {report?.summary?.priorityLevel === 'High' && (

🚨 Immediate Action Required

Your website has critical issues that should be addressed immediately. Focus on the high-priority items below to improve user experience and accessibility.

)}
{/* Filters */}

Action Items

{/* Recommendations List */} {filteredRecommendations.length === 0 ? (

{filterPriority === 'all' ? 'No Recommendations' : `No ${filterPriority} priority items`}

{filterPriority === 'all' ? 'Great job! No specific recommendations were generated.' : 'Try selecting "All Priorities" to see other recommendations.' }

) : (
{filteredRecommendations.map((rec, index) => (
{expandedRec === index && (
{/* Full Description */}
Description

{rec.description}

{/* Expected Impact */} {rec.impact && (
Expected Impact

{rec.impact}

)} {/* Implementation Details */}
Implementation
Priority: {rec.priority}
{rec.effort && (
Effort Required: {rec.effort}
)}
Category: {rec.category}
Resources
{rec.helpUrl && ( 📖 Learn more about this issue → )} {rec.source === 'UX Analysis' && (

💡 Generated by AI UX analysis

)} {rec.source === 'Accessibility Scan' && (

♿ Found in accessibility audit

)}
{/* Action Buttons */}
)}
))}
)} {/* Implementation Guide */}

Implementation Guide

🚀 Start Here

  • • Focus on high-priority items first
  • • Address accessibility issues quickly
  • • Test changes before deploying

📈 Track Progress

  • • Re-run analysis after changes
  • • Monitor user feedback
  • • Measure performance impact

🎯 Best Practices

  • • Make changes incrementally
  • • Consider user impact
  • • Document improvements
) } export default RecommendationsSection