= {
id: config.id,
header: ({ column }) =>
config.sortable
? renderSortableHeader(column, config.header)
: config.header,
...(config.accessor && { accessorKey: config.accessor }),
...(config.accessorFn && { accessorFn: config.accessorFn }),
cell: ({ row }) => {
const value = row.getValue(config.id);
return config.cell ? (
config.cell(value)
) : (
{value as React.ReactNode}
);
},
enableSorting: config.sortable !== false,
enableHiding: config.id !== "select" && config.id !== "actions",
};
return column;
});
if (
userRole &&
(hasPermission(userRole, "credential", "read") ||
hasPermission(userRole, "credential", "update") ||
hasPermission(userRole, "credential", "delete"))
) {
baseColumns.push({
id: "actions",
enableHiding: false,
cell: ({ row }) => {
const credential = row.original;
return (
<>
Aksi
{hasPermission(userRole, "credential", "update") && (
router.push(`/admin/credential/edit/${credential.id}`)
}
className="flex items-center gap-2"
>
Edit Credential
)}
{hasPermission(userRole, "credential", "delete") && (
<>
setCredentialToDelete(credential)}
className="flex items-center gap-2 text-destructive focus:text-destructive"
>
Hapus Credential
>
)}
{credentialToDelete?.id === credential.id && (
deleteMutation.mutate(credentialToDelete.id)}
onCancel={() => setCredentialToDelete(null)}
open={true}
/>
)}
>
);
},
});
}
return baseColumns;
};