fix: update SuperAdmin to use real API
All checks were successful
Build and Deploy / build-and-push (push) Successful in 1m22s

This commit is contained in:
Cauê Faleiros
2026-02-24 15:53:15 -03:00
parent 5e54d96119
commit 3198784087

View File

@@ -3,7 +3,7 @@ import {
Building2, Users, MessageSquare, Plus, Search,
Edit, Trash2, ChevronDown, ChevronUp, ChevronsUpDown, X
} from 'lucide-react';
import { TENANTS } from '../constants';
import { getTenants, createTenant } from '../services/dataService';
import { Tenant } from '../types';
import { DateRangePicker } from '../components/DateRangePicker';
import { KPICard } from '../components/KPICard';
@@ -15,7 +15,8 @@ export const SuperAdmin: React.FC = () => {
});
const [selectedTenantId, setSelectedTenantId] = useState<string>('all');
const [searchQuery, setSearchQuery] = useState('');
const [tenants, setTenants] = useState<Tenant[]>(TENANTS);
const [tenants, setTenants] = useState<Tenant[]>([]);
const [loading, setLoading] = useState(true);
const [isModalOpen, setIsModalOpen] = useState(false);
const [editingTenant, setEditingTenant] = useState<Tenant | null>(null);
@@ -23,6 +24,18 @@ export const SuperAdmin: React.FC = () => {
const [sortKey, setSortKey] = useState<keyof Tenant>('created_at');
const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('desc');
// Load Tenants from API
const loadTenants = async () => {
setLoading(true);
const data = await getTenants();
setTenants(data);
setLoading(false);
};
React.useEffect(() => {
loadTenants();
}, []);
// --- Metrics ---
const totalTenants = tenants.length;
const totalUsersGlobal = tenants.reduce((acc, t) => acc + (t.user_count || 0), 0);
@@ -82,12 +95,25 @@ export const SuperAdmin: React.FC = () => {
}
};
const handleSaveTenant = (e: React.FormEvent) => {
const handleSaveTenant = async (e: React.FormEvent) => {
e.preventDefault();
// Logic to save (mock)
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;
const success = await createTenant({ name, slug, admin_email, status });
if (success) {
setIsModalOpen(false);
setEditingTenant(null);
alert('Organização salva com sucesso (Mock)');
loadTenants(); // Reload list
alert('Organização salva com sucesso!');
} else {
alert('Erro ao salvar organização. Verifique o console.');
}
};
// --- Helper Components ---
@@ -293,6 +319,7 @@ export const SuperAdmin: React.FC = () => {
<label className="text-sm font-medium text-slate-700">Nome da Organização</label>
<input
type="text"
name="name"
defaultValue={editingTenant?.name}
className="w-full px-3 py-2 bg-slate-50 border border-slate-200 rounded-lg text-sm focus:ring-2 focus:ring-blue-100 outline-none"
placeholder="ex. Acme Corp"
@@ -305,6 +332,7 @@ export const SuperAdmin: React.FC = () => {
<label className="text-sm font-medium text-slate-700">Slug</label>
<input
type="text"
name="slug"
defaultValue={editingTenant?.slug}
className="w-full px-3 py-2 bg-slate-50 border border-slate-200 rounded-lg text-sm focus:ring-2 focus:ring-blue-100 outline-none"
placeholder="ex. acme-corp"
@@ -313,6 +341,7 @@ export const SuperAdmin: React.FC = () => {
<div className="space-y-2">
<label className="text-sm font-medium text-slate-700">Status</label>
<select
name="status"
defaultValue={editingTenant?.status || 'active'}
className="w-full px-3 py-2 bg-slate-50 border border-slate-200 rounded-lg text-sm focus:ring-2 focus:ring-blue-100 outline-none"
>
@@ -327,6 +356,7 @@ export const SuperAdmin: React.FC = () => {
<label className="text-sm font-medium text-slate-700">E-mail do Admin</label>
<input
type="email"
name="admin_email"
defaultValue={editingTenant?.admin_email}
className="w-full px-3 py-2 bg-slate-50 border border-slate-200 rounded-lg text-sm focus:ring-2 focus:ring-blue-100 outline-none"
placeholder="admin@empresa.com"