import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { supabase } from '@/lib/supabase'; import { Button } from '@/components/ui/button'; import { Plus, Search, Filter, PenTool } from 'lucide-react'; import { useSession } from '@/hooks/useSession'; import { useUppercasePreference } from '@/hooks/useUppercasePreference'; import { AdaptiveText } from '@/components/ui/adaptive-text'; interface Essay { id: string; title: string; type_id: string; genre_id: string; status: 'draft' | 'submitted' | 'analyzed'; created_at: string; essay_type: { title: string; }; essay_genre: { title: string; }; } type EssayStatus = 'all' | 'draft' | 'submitted' | 'analyzed'; type SortOption = 'recent' | 'oldest' | 'title'; export function EssaysPage() { const navigate = useNavigate(); const [essays, setEssays] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [searchTerm, setSearchTerm] = useState(''); const [statusFilter, setStatusFilter] = useState('all'); const [sortBy, setSortBy] = useState('recent'); const [showFilters, setShowFilters] = useState(false); const { session } = useSession(); const { isUpperCase } = useUppercasePreference(session?.user?.id); useEffect(() => { loadEssays(); }, [statusFilter, sortBy]); async function loadEssays() { try { const { data: { session } } = await supabase.auth.getSession(); if (!session?.user?.id) return; const query = supabase .from('student_essays') .select(` *, essay_type:essay_types(title), essay_genre:essay_genres(title) `) .eq('student_id', session.user.id); if (statusFilter !== 'all') { query.eq('status', statusFilter); } const { data, error } = await query; if (error) { setError('Não foi possível carregar suas redações'); return; } // Aplicar ordenação const sortedData = (data || []).sort((a, b) => { switch (sortBy) { case 'oldest': return new Date(a.created_at).getTime() - new Date(b.created_at).getTime(); case 'title': return a.title.localeCompare(b.title); default: // recent return new Date(b.created_at).getTime() - new Date(a.created_at).getTime(); } }); setEssays(sortedData); } catch (error) { console.error('Erro ao carregar redações:', error); setError('Não foi possível carregar suas redações'); } finally { setLoading(false); } } const filteredEssays = essays.filter(essay => essay.title.toLowerCase().includes(searchTerm.toLowerCase()) ); function getStatusBadge(status: Essay['status']) { const statusMap = { draft: { label: 'Rascunho', variant: 'secondary' as const, classes: 'bg-yellow-100 text-yellow-800' }, submitted: { label: 'Enviada', variant: 'default' as const, classes: 'bg-blue-100 text-blue-800' }, analyzed: { label: 'Analisada', variant: 'success' as const, classes: 'bg-green-100 text-green-800' } }; const { label, classes } = statusMap[status]; return ( ); } if (loading) { return (
{[...Array(6)].map((_, i) => (
))}
); } return (

{/* Busca */}
setSearchTerm(e.target.value)} className="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-purple-500 focus:border-purple-500" />
{/* Filtros e Ordenação */}
{/* Painel de Filtros */} {showFilters && (
)}
{/* Lista de Redações */} {filteredEssays.length === 0 ? (

{!searchTerm && ( )}
) : (
{filteredEssays.map((essay) => (
navigate(`/aluno/redacoes/${essay.id}`)} >

{new Date(essay.created_at).toLocaleDateString('pt-BR')} {getStatusBadge(essay.status)}
))}
)}
); }