"use client"; import React, { useEffect, useState, useCallback } from "react"; import ManagerLayout from "@/components/manager-layout"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Plus, Edit, Trash2, Eye, Filter, Loader2 } from "lucide-react"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "@/components/ui/alert-dialog"; import { usersService } from "services/usersApi.mjs"; interface User { user: { id: string; email: string; email_confirmed_at?: string; created_at?: string; last_sign_in_at?: string; }; profile: { id?: string; full_name?: string; email?: string; phone?: string | null; avatar_url?: string; disabled?: boolean; created_at?: string; updated_at?: string; }; roles: string[]; permissions: { isAdmin?: boolean; isManager?: boolean; isDoctor?: boolean; isSecretary?: boolean; isAdminOrManager?: boolean; [key: string]: boolean | undefined; }; } interface FlatUser { id: string; user_id: string; full_name?: string; email: string; phone?: string | null; role: string; } export default function UsersPage() { const router = useRouter(); const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [detailsDialogOpen, setDetailsDialogOpen] = useState(false); const [userDetails, setUserDetails] = useState(null); const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); const [userToDeleteId, setUserToDeleteId] = useState(null); const [selectedRole, setSelectedRole] = useState(""); const fetchUsers = useCallback(async () => { setLoading(true); setError(null); try { const data = await usersService.list_roles(); // já retorna o JSON diretamente console.log("Resposta da API list_roles:", data); if (Array.isArray(data)) { const mappedUsers: FlatUser[] = data.map((item: any) => ({ id: item.id || (item.user_id ?? ""), // id da linha ou fallback user_id: item.user_id || item.id || "", // garante que user_id exista full_name: item.full_name || "—", email: item.email || "—", phone: item.phone ?? "—", role: item.role || "—", })); setUsers(mappedUsers); } else { console.warn("Formato inesperado recebido em list_roles:", data); setUsers([]); } } catch (err: any) { console.error("Erro ao buscar usuários:", err); setError("Não foi possível carregar os usuários. Tente novamente."); setUsers([]); } finally { setLoading(false); } }, []); useEffect(() => { fetchUsers(); }, [fetchUsers]); const openDetailsDialog = async (flatUser: FlatUser) => { setDetailsDialogOpen(true); setUserDetails(null); try { console.log("Buscando detalhes do user_id:", flatUser.user_id); const fullUserData: User = await usersService.full_data(flatUser.user_id); setUserDetails(fullUserData); } catch (err: any) { console.error("Erro ao buscar detalhes do usuário:", err); setUserDetails({ user: { id: flatUser.user_id, email: flatUser.email || "", created_at: "Erro ao Carregar", last_sign_in_at: "Erro ao Carregar", }, profile: { full_name: flatUser.full_name || "Erro ao Carregar Detalhes", phone: flatUser.phone || "—", }, roles: [], permissions: {}, } as any); } }; const filteredUsers = selectedRole && selectedRole !== "all" ? users.filter((u) => u.role === selectedRole) : users; return (

Usuários Cadastrados

Gerencie todos os usuários e seus papéis no sistema.

{loading ? (
Carregando usuários...
) : error ? (
{error}
) : filteredUsers.length === 0 ? (
Nenhum usuário encontrado.{" "} Adicione um novo .
) : (
{filteredUsers.map((user) => ( ))}
ID Nome E-mail Telefone Papel Ações
{user.id} {user.full_name || "—"} {user.email || "—"} {user.phone || "—"} {user.role || "—"}
)}
{userDetails?.profile?.full_name || userDetails?.user?.email || "Detalhes do Usuário"} {!userDetails ? (
Buscando dados completos...
) : (
ID: {userDetails.user.id}
E-mail: {userDetails.user.email}
Email confirmado em: {userDetails.user.email_confirmed_at || "—"}
Último login: {userDetails.user.last_sign_in_at || "—"}
Criado em: {userDetails.user.created_at || "—"}
Nome completo: {userDetails.profile.full_name || "—"}
Telefone: {userDetails.profile.phone || "—"}
{userDetails.profile.avatar_url && (
Avatar:
)}
Conta desativada: {userDetails.profile.disabled ? "Sim" : "Não"}
Profile criado em: {userDetails.profile.created_at || "—"}
Profile atualizado em: {userDetails.profile.updated_at || "—"}
Roles:
    {userDetails.roles.map((role, idx) =>
  • {role}
  • )}
Permissões:
    {Object.entries(userDetails.permissions).map(([key, value]) => (
  • {key}: {value ? "Sim" : "Não"}
  • ))}
)}
Fechar
); }