"use client"; import React, { useState, useEffect, useMemo } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { Label } from "@/components/ui/label"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Loader2, ShieldCheck } from "lucide-react"; import type { AuthorizationRole } from "@/lib/api"; export type AuthorizationState = { paciente: boolean; medico: boolean; }; export interface UpdateAuthorizationsDialogProperties { open: boolean; entityType: "paciente" | "medico"; entityName?: string | null; initialRoles?: Partial | null; loading?: boolean; error?: string | null; disableSubmit?: boolean; onOpenChange: (open: boolean) => void; onConfirm: (roles: AuthorizationState) => void; } const DEFAULT_ROLES: AuthorizationState = { paciente: false, medico: false }; export function UpdateAuthorizationsDialog({ open, entityType, entityName, initialRoles, loading = false, error, disableSubmit = false, onOpenChange, onConfirm, }: UpdateAuthorizationsDialogProperties) { const [roles, setRoles] = useState(DEFAULT_ROLES); console.log("[Dialog] render", { open, initialRoles, loading, disableSubmit, roles, }); useEffect(() => { console.log("[Dialog] useEffect open change", open, initialRoles); if (open) { setRoles({ paciente: initialRoles?.paciente ?? entityType === "paciente", medico: initialRoles?.medico ?? entityType === "medico", }); } }, [open, initialRoles, entityType]); // Debug: log when roles state changes useEffect(() => { console.log("[Dialog] roles updated", roles); }, [roles]); const title = useMemo( () => entityType === "paciente" ? "Atualizar autorizações do paciente" : "Atualizar autorizações do médico", [entityType], ); const description = useMemo( () => entityName ? `Defina quais tipos de acesso ${entityName} poderá utilizar no sistema.` : "Defina quem pode acessar este perfil.", [entityName], ); function handleToggle( role: AuthorizationRole, value: boolean | "indeterminate", ) { console.log("[Dialog] toggle", role, value); setRoles((previous) => ({ ...previous, [role]: value === true })); } const handleSave = () => { console.log("[Dialog] handleSave called with roles:", roles); console.log( "[Dialog] About to call onConfirm. Typeof onConfirm is:", typeof onConfirm, ); if (typeof onConfirm === "function") { onConfirm(roles); // Não fecha aqui - deixa o componente pai fechar após processar } else { console.error("[Dialog] onConfirm is NOT a function! It is:", onConfirm); } }; return ( {title} {description}
handleToggle("paciente", value)} />

Permite que este usuário acesse o portal do paciente.

handleToggle("medico", value)} />

Permite que este usuário acesse o portal profissional.

Você pode habilitar as duas opções para permitir login como paciente e médico usando as mesmas credenciais. {error && ( {error} )}
{/* Debug: botão nativo para garantir onClick */}
); }