import React from 'react'; import { Plus, Search, Filter, BookOpen, ArrowUpDown } from 'lucide-react'; import { useNavigate } from 'react-router-dom'; import { supabase } from '../../lib/supabase'; import type { Story } from '../../types/database'; type StoryStatus = 'all' | 'draft' | 'published'; type SortOption = 'recent' | 'oldest' | 'title' | 'performance'; export function StudentStoriesPage() { const navigate = useNavigate(); const [stories, setStories] = React.useState([]); const [loading, setLoading] = React.useState(true); const [error, setError] = React.useState(null); const [searchTerm, setSearchTerm] = React.useState(''); const [statusFilter, setStatusFilter] = React.useState('all'); const [sortBy, setSortBy] = React.useState('recent'); const [showFilters, setShowFilters] = React.useState(false); React.useEffect(() => { const fetchStories = async () => { try { const { data: { session } } = await supabase.auth.getSession(); if (!session?.user?.id) return; const query = supabase .from('stories') .select(` *, pages:story_pages ( image_url ) `) .eq('student_id', session.user.id) .order('created_at', { ascending: false }); if (statusFilter !== 'all') { query.eq('status', statusFilter); } let { data, error } = await query; if (error) throw error; // 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); case 'performance': return (b.performance_score || 0) - (a.performance_score || 0); default: // recent return new Date(b.created_at).getTime() - new Date(a.created_at).getTime(); } }); setStories(sortedData); } catch (err) { console.error('Erro ao buscar histórias:', err); setError('Não foi possível carregar suas histórias'); } finally { setLoading(false); } }; fetchStories(); }, [statusFilter, sortBy]); const filteredStories = stories.filter(story => story.title.toLowerCase().includes(searchTerm.toLowerCase()) ); if (loading) { return (
{[...Array(6)].map((_, i) => (
))}
); } return (

Minhas Histórias

{/* 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 Histórias */} {filteredStories.length === 0 ? (

Nenhuma história encontrada

{searchTerm ? 'Tente usar outros termos na busca' : 'Comece criando sua primeira história!'}

{!searchTerm && ( )}
) : (
{filteredStories.map((story) => (
navigate(`/aluno/historias/${story.id}`)} > {!story.cover?.image_url && (
)} {story.cover?.image_url && (
{`Capa { e.currentTarget.style.display = 'none'; }} />
)}

{story.title}

{new Date(story.created_at).toLocaleDateString()} {story.status === 'published' ? 'Publicada' : 'Rascunho'}
))}
)}
); }