import React from 'react'; import { Plus, Search, MoreVertical, GraduationCap } from 'lucide-react'; import { useNavigate } from 'react-router-dom'; import { useDatabase } from '../../../hooks/useDatabase'; import { supabase } from '../../../lib/supabase'; interface StudentData { id: string; name: string; email: string; class_id: string; school_id: string; status: 'active' | 'inactive'; classes: { name: string; }[]; } interface StudentWithDetails { id: string; name: string; email: string; class_name: string; stories_count: number; status: 'active' | 'inactive'; } export function StudentsPage() { const navigate = useNavigate(); const { loading, error } = useDatabase(); const [students, setStudents] = React.useState([]); const [searchTerm, setSearchTerm] = React.useState(''); React.useEffect(() => { const fetchStudents = async () => { try { const { data: authData } = await supabase.auth.getSession(); if (!authData.session?.user) return; const { data: studentsData, error: studentsError } = await supabase .from('students') .select(` id, name, email, class_id, status, classes ( name ) `); if (studentsError) throw studentsError; const studentsWithCounts = studentsData.map((student) => ({ id: student.id, name: student.name, email: student.email, class_name: student.classes && student.classes[0] ? student.classes[0].name : 'Sem turma', stories_count: 0, status: student.status || 'active' })); setStudents(studentsWithCounts); } catch (err) { console.error('Erro ao buscar alunos:', err); } }; fetchStudents(); }, []); const handleAddStudent = () => { navigate('/dashboard/alunos/novo'); }; const handleStudentClick = (studentId: string) => { navigate(`/dashboard/alunos/${studentId}`); }; const getStatusColor = (status: StudentData['status']) => { return status === 'active' ? 'bg-green-100 text-green-800' : 'bg-gray-100 text-gray-800'; }; const getStatusText = (status: StudentData['status']) => { return status === 'active' ? 'Ativo' : 'Inativo'; }; const filteredStudents = students.filter(s => s.name.toLowerCase().includes(searchTerm.toLowerCase()) || s.class_name.toLowerCase().includes(searchTerm.toLowerCase()) ); return (

Alunos

{error && (
{error}
)}
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" />
{loading ? (
Carregando...
) : filteredStudents.length === 0 ? (
Nenhum aluno encontrado
) : (
{filteredStudents.map((student) => (
handleStudentClick(student.id)} >

{student.name}

{student.class_name}
{student.stories_count} {' '} histórias
{getStatusText(student.status)}
))}
)}
); }