diff --git a/src/pages/dashboard/settings/SettingsPage.tsx b/src/pages/dashboard/settings/SettingsPage.tsx new file mode 100644 index 0000000..6df64c3 --- /dev/null +++ b/src/pages/dashboard/settings/SettingsPage.tsx @@ -0,0 +1,286 @@ +import React from 'react'; +import { Building2, Mail, Phone, MapPin, Save, User } from 'lucide-react'; +import { supabase } from '../../../lib/supabase'; +import type { School } from '../../../types/database'; + +interface SchoolSettings { + name: string; + email: string; + phone: string; + address: string; + city: string; + state: string; + zipCode: string; + directorName: string; +} + +export function SettingsPage() { + const [settings, setSettings] = React.useState({ + name: '', + email: '', + phone: '', + address: '', + city: '', + state: '', + zipCode: '', + directorName: '' + }); + const [loading, setLoading] = React.useState(true); + const [saving, setSaving] = React.useState(false); + const [error, setError] = React.useState(null); + const [successMessage, setSuccessMessage] = React.useState(null); + + React.useEffect(() => { + const fetchSchoolSettings = async () => { + try { + const { data: { session } } = await supabase.auth.getSession(); + if (!session?.user?.id) return; + + const { data, error } = await supabase + .from('schools') + .select('*') + .eq('id', session.user.id) + .single(); + + if (error) throw error; + + if (data) { + setSettings({ + name: data.name || '', + email: data.email || '', + phone: data.phone || '', + address: data.address || '', + city: data.city || '', + state: data.state || '', + zipCode: data.zip_code || '', + directorName: data.director_name || '' + }); + } + } catch (err) { + console.error('Erro ao carregar configurações:', err); + setError('Não foi possível carregar as configurações da escola'); + } finally { + setLoading(false); + } + }; + + fetchSchoolSettings(); + }, []); + + const handleChange = (e: React.ChangeEvent) => { + const { name, value } = e.target; + setSettings(prev => ({ ...prev, [name]: value })); + }; + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setSaving(true); + setError(null); + setSuccessMessage(null); + + try { + const { data: { session } } = await supabase.auth.getSession(); + if (!session?.user?.id) throw new Error('Usuário não autenticado'); + + const { error } = await supabase + .from('schools') + .update({ + name: settings.name, + email: settings.email, + phone: settings.phone, + address: settings.address, + city: settings.city, + state: settings.state, + zip_code: settings.zipCode, + director_name: settings.directorName, + updated_at: new Date().toISOString() + }) + .eq('id', session.user.id); + + if (error) throw error; + setSuccessMessage('Configurações atualizadas com sucesso!'); + } catch (err) { + console.error('Erro ao salvar configurações:', err); + setError('Não foi possível salvar as configurações'); + } finally { + setSaving(false); + } + }; + + if (loading) { + return
Carregando...
; + } + + return ( +
+
+

Configurações da Escola

+
+ +
+
+ {error && ( +
+ {error} +
+ )} + + {successMessage && ( +
+ {successMessage} +
+ )} + +
+
+ +
+ + +
+
+ +
+ +
+ + +
+
+ +
+ +
+ + +
+
+ +
+ +
+ + +
+
+
+ +
+

Endereço

+
+
+ +
+ + +
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + +
+
+
+ +
+ +
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/routes.tsx b/src/routes.tsx index dadc0fd..37cb303 100644 --- a/src/routes.tsx +++ b/src/routes.tsx @@ -13,6 +13,7 @@ import { TeachersPage } from './pages/dashboard/teachers/TeachersPage'; import { InviteTeacherPage } from './pages/dashboard/teachers/InviteTeacherPage'; import { StudentsPage } from './pages/dashboard/students/StudentsPage'; import { AddStudentPage } from './pages/dashboard/students/AddStudentPage'; +import { SettingsPage } from './pages/dashboard/settings/SettingsPage'; export const router = createBrowserRouter([ { @@ -100,6 +101,10 @@ export const router = createBrowserRouter([ element: , } ] + }, + { + path: 'configuracoes', + element: } ] },