navigate(`/dashboard/turmas/${classItem.id}`)}
>
-
-
-
-
+
{classItem.name}
-
+
+
{classItem.grade} • {(classItem as any).students?.count || 0} alunos
-
+
+
+
+
+ Ativo
+
+
-
-
-
-
- Ativo
-
-
))}
diff --git a/src/pages/dashboard/teachers/TeachersPage.tsx b/src/pages/dashboard/teachers/TeachersPage.tsx
index 66bb819..75777fa 100644
--- a/src/pages/dashboard/teachers/TeachersPage.tsx
+++ b/src/pages/dashboard/teachers/TeachersPage.tsx
@@ -1,107 +1,42 @@
import React from 'react';
-import { Plus, Search, MoreVertical, Mail } from 'lucide-react';
+import { Plus, Search, MoreVertical, GraduationCap, Mail } from 'lucide-react';
import { useNavigate } from 'react-router-dom';
-import { useDatabase } from '../../../hooks/useDatabase';
import { supabase } from '../../../lib/supabase';
-
-interface Teacher {
- id: string;
- name: string;
- email: string;
- subject?: string;
- class_count: number;
- status: 'active' | 'pending' | 'inactive';
-}
+import type { Teacher } from '../../../types/database';
export function TeachersPage() {
const navigate = useNavigate();
- const { loading, error } = useDatabase();
const [teachers, setTeachers] = React.useState
([]);
const [searchTerm, setSearchTerm] = React.useState('');
+ const [loading, setLoading] = React.useState(true);
+ const [error, setError] = React.useState(null);
React.useEffect(() => {
const fetchTeachers = async () => {
try {
- const { data: authData } = await supabase.auth.getSession();
- if (!authData.session?.user) return;
+ const { data: { session } } = await supabase.auth.getSession();
+ if (!session?.user?.id) return;
- const { data: schoolData, error: schoolError } = await supabase
- .from('schools')
- .select('id')
- .eq('id', authData.session.user.id)
- .single();
-
- if (schoolError) throw schoolError;
-
- const { data: teachersData, error: teachersError } = await supabase
+ const { data, error } = await supabase
.from('teachers')
- .select(`
- id,
- name,
- email,
- subject,
- status
- `)
- .eq('school_id', schoolData.id);
+ .select('*')
+ .eq('school_id', session.user.id);
- if (teachersError) throw teachersError;
-
- // Buscar contagem de turmas para cada professor
- const teachersWithCounts = await Promise.all(
- teachersData.map(async (teacher) => {
- const { data: countData } = await supabase
- .rpc('get_teacher_class_count', { teacher_id: teacher.id });
-
- return {
- ...teacher,
- class_count: countData || 0
- };
- })
- );
-
- setTeachers(teachersWithCounts);
+ if (error) throw error;
+ setTeachers(data || []);
} catch (err) {
console.error('Erro ao buscar professores:', err);
+ setError('Erro ao buscar professores');
+ } finally {
+ setLoading(false);
}
};
fetchTeachers();
}, []);
- const handleInviteTeacher = () => {
- navigate('/dashboard/professores/convidar');
- };
-
- const handleTeacherClick = (teacherId: string) => {
- navigate(`/dashboard/professores/${teacherId}`);
- };
-
- const getStatusColor = (status: Teacher['status']) => {
- switch (status) {
- case 'active':
- return 'bg-green-100 text-green-800';
- case 'pending':
- return 'bg-yellow-100 text-yellow-800';
- case 'inactive':
- return 'bg-gray-100 text-gray-800';
- }
- };
-
- const getStatusText = (status: Teacher['status']) => {
- switch (status) {
- case 'active':
- return 'Ativo';
- case 'pending':
- return 'Pendente';
- case 'inactive':
- return 'Inativo';
- }
- };
-
- const filteredTeachers = teachers.filter(t =>
- t.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
- t.email.toLowerCase().includes(searchTerm.toLowerCase()) ||
- (t.subject && t.subject.toLowerCase().includes(searchTerm.toLowerCase()))
+ const filteredTeachers = teachers.filter(teacher =>
+ teacher.name.toLowerCase().includes(searchTerm.toLowerCase())
);
return (
@@ -109,7 +44,7 @@ export function TeachersPage() {
Professores