cambios en la interfaz de organizaciones
This commit is contained in:
@@ -40,11 +40,29 @@ export const CellAction: React.FC<CellActionProps> = ({ data, apiUrl }) => {
|
||||
}
|
||||
};
|
||||
|
||||
const handleExport = (id?: number | undefined) => {
|
||||
window.open(`${apiUrl}/training/export/${id}`, '_blank');
|
||||
};
|
||||
// Mapear roles a minúsculas para comparación segura
|
||||
const userRoles = session?.user?.role?.map((r) => r.rol.toLowerCase()) || [];
|
||||
|
||||
const isAdminOrSuper = userRoles.some((r) =>
|
||||
['superadmin', 'admin'].includes(r),
|
||||
);
|
||||
|
||||
// Soporta tanto 'coordinator' como 'coordinador'
|
||||
const isCoordinator = userRoles.some(r =>
|
||||
r.includes('coordinator') || r.includes('coordinador')
|
||||
);
|
||||
|
||||
const role = session?.user.role[0]?.rol;
|
||||
const isOtherAuthorized = userRoles.some((r) =>
|
||||
['autoridad', 'manager'].includes(r),
|
||||
);
|
||||
|
||||
// El creador del registro: intentamos createdBy o created_by por si acaso
|
||||
const createdBy = data.createdBy ?? (data as any).created_by;
|
||||
|
||||
// Comparación robusta de IDs
|
||||
const isOwner = createdBy !== undefined &&
|
||||
createdBy !== null &&
|
||||
Number(createdBy) === Number(session?.user?.id);
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -64,10 +82,8 @@ export const CellAction: React.FC<CellActionProps> = ({ data, apiUrl }) => {
|
||||
/>
|
||||
|
||||
<div className="flex gap-1">
|
||||
{/* VER DETALLE: superadmin, admin, autoridad, manager */}
|
||||
{['superadmin', 'admin', 'autoridad', 'manager'].includes(
|
||||
role ?? '',
|
||||
) && (
|
||||
{/* VER DETALLE: superadmin, admin, autoridad, manager, or owner coordinator */}
|
||||
{(isAdminOrSuper || isOtherAuthorized || (isCoordinator && isOwner)) && (
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
@@ -86,47 +102,46 @@ export const CellAction: React.FC<CellActionProps> = ({ data, apiUrl }) => {
|
||||
</TooltipProvider>
|
||||
)}
|
||||
|
||||
{/* EDITAR Y ELIMINAR: Solo superadmin y admin */}
|
||||
{['superadmin', 'admin'].includes(role ?? '') && (
|
||||
<>
|
||||
{/* Editar */}
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="icon"
|
||||
onClick={() =>
|
||||
router.push(`/dashboard/formulario/editar/${data.id}`)
|
||||
}
|
||||
>
|
||||
<Edit className="h-4 w-4" />
|
||||
</Button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>
|
||||
<p>Editar</p>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
{/* EDITAR: Superadmin, admin OR (coordinator if owner) */}
|
||||
{(isAdminOrSuper || (isCoordinator && isOwner)) && (
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="icon"
|
||||
onClick={() =>
|
||||
router.push(`/dashboard/formulario/editar/${data.id}`)
|
||||
}
|
||||
>
|
||||
<Edit className="h-4 w-4" />
|
||||
</Button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>
|
||||
<p>Editar</p>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
)}
|
||||
|
||||
{/* Eliminar */}
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="icon"
|
||||
onClick={() => setOpen(true)}
|
||||
>
|
||||
<Trash className="h-4 w-4" />
|
||||
</Button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>
|
||||
<p>Eliminar</p>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
</>
|
||||
{/* ELIMINAR: Solo superadmin y admin */}
|
||||
{isAdminOrSuper && (
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="icon"
|
||||
onClick={() => setOpen(true)}
|
||||
>
|
||||
<Trash className="h-4 w-4" />
|
||||
</Button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>
|
||||
<p>Eliminar</p>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
)}
|
||||
</div>
|
||||
</>
|
||||
|
||||
Reference in New Issue
Block a user