diff --git a/pages/SuperAdmin.tsx b/pages/SuperAdmin.tsx index 7ef59eb..a7cbe14 100644 --- a/pages/SuperAdmin.tsx +++ b/pages/SuperAdmin.tsx @@ -1,9 +1,8 @@ import React, { useState, useMemo } from 'react'; -import { - Building2, Users, MessageSquare, Plus, Search, - Edit, Trash2, ChevronDown, ChevronUp, ChevronsUpDown, X, CheckCircle2 -} from 'lucide-react'; -import { getTenants, createTenant, deleteTenant, updateTenant } from '../services/dataService'; +import { + Building2, Users, MessageSquare, Plus, Search, + Edit, Trash2, ChevronDown, ChevronUp, ChevronsUpDown, X, CheckCircle2, Loader2 +} from 'lucide-react';import { getTenants, createTenant, deleteTenant, updateTenant } from '../services/dataService'; import { Tenant } from '../types'; import { DateRangePicker } from '../components/DateRangePicker'; import { KPICard } from '../components/KPICard'; @@ -93,42 +92,53 @@ export const SuperAdmin: React.FC = () => { const [successMessage, setSuccessMessage] = useState(''); const [errorMessage, setErrorMessage] = useState(''); + const [isSaving, setIsSaving] = useState(false); const handleSaveTenant = async (e: React.FormEvent) => { e.preventDefault(); setErrorMessage(''); setSuccessMessage(''); + setIsSaving(true); const form = e.target as HTMLFormElement; const name = (form.elements.namedItem('name') as HTMLInputElement).value; const slug = (form.elements.namedItem('slug') as HTMLInputElement).value; const admin_email = (form.elements.namedItem('admin_email') as HTMLInputElement).value; const status = (form.elements.namedItem('status') as HTMLSelectElement).value; - if (editingTenant) { - const success = await updateTenant(editingTenant.id, { name, slug, admin_email, status }); - if (success) { - setSuccessMessage('Organização atualizada com sucesso!'); - loadTenants(); - setTimeout(() => { - setIsModalOpen(false); - setSuccessMessage(''); - setEditingTenant(null); - }, 2000); + try { + if (editingTenant) { + const success = await updateTenant(editingTenant.id, { name, slug, admin_email, status }); + if (success) { + setSuccessMessage('Organização atualizada com sucesso!'); + loadTenants(); + setTimeout(() => { + setIsModalOpen(false); + setSuccessMessage(''); + setEditingTenant(null); + setIsSaving(false); + }, 2000); + } else { + setErrorMessage('Erro ao atualizar organização.'); + setIsSaving(false); + } } else { - setErrorMessage('Erro ao atualizar organização.'); - } - } else { - const result = await createTenant({ name, slug, admin_email, status }); - if (result.success) { - setSuccessMessage(result.message || 'Organização criada com sucesso!'); - loadTenants(); - setTimeout(() => { - setIsModalOpen(false); - setSuccessMessage(''); - }, 3000); - } else { - setErrorMessage(result.message || 'Erro ao salvar organização.'); + const result = await createTenant({ name, slug, admin_email, status }); + if (result.success) { + setSuccessMessage(result.message || 'Organização criada com sucesso!'); + loadTenants(); + setTimeout(() => { + setIsModalOpen(false); + setSuccessMessage(''); + setIsSaving(false); + }, 3000); + } else { + setErrorMessage(result.message || 'Erro ao salvar organização.'); + setIsSaving(false); + } } + } catch (err) { + setErrorMessage('Ocorreu um erro inesperado.'); + setIsSaving(false); } }; @@ -282,7 +292,9 @@ export const SuperAdmin: React.FC = () => {
- +