import React, { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Plus } from 'lucide-react'; import { useToast } from '@/hooks/use-toast'; import { Privilege, FUNCTIONAL_PERMISSIONS } from './privileges/types'; import { PrivilegeForm } from './privileges/PrivilegeForm'; import { PrivilegeCard } from './privileges/PrivilegeCard'; interface PrivilegesManagerProps { privileges: Privilege[]; onCreate: (data: { name: string; description?: string; permissions: Record }) => Promise; onUpdate: (id: string, data: { name: string; description?: string; permissions: Record }) => Promise; onDelete: (id: string) => Promise; } export function PrivilegesManager({ privileges, onCreate, onUpdate, onDelete }: PrivilegesManagerProps) { const [editingPrivilege, setEditingPrivilege] = useState(null); const [showForm, setShowForm] = useState(false); const [formData, setFormData] = useState({ name: '', description: '', permissions: {} as Record }); const { toast } = useToast(); const resetForm = () => { setFormData({ name: '', description: '', permissions: {} }); setEditingPrivilege(null); setShowForm(false); }; // Function to clean permissions and keep only valid functional ones const cleanPermissions = (permissions: Record): Record => { const cleanedPermissions: Record = {}; // Keep only valid functional permissions FUNCTIONAL_PERMISSIONS.forEach(perm => { cleanedPermissions[perm.key] = permissions[perm.key] || false; }); return cleanedPermissions; }; const handleEdit = (privilege: Privilege) => { console.log('Editing privilege:', privilege.name); setEditingPrivilege(privilege); // Clean old permissions and keep only functional ones const cleanedPermissions = cleanPermissions(privilege.permissions || {}); setFormData({ name: privilege.name, description: privilege.description || '', permissions: cleanedPermissions }); setShowForm(true); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); // Ensure only one functional permission is active const activePermissions = Object.entries(formData.permissions).filter(([, value]) => value); if (activePermissions.length > 1) { toast({ title: "Erro de validação", description: "Apenas uma permissão funcional pode ser selecionada por privilégio.", variant: "destructive" }); return; } if (activePermissions.length === 0) { toast({ title: "Erro de validação", description: "Pelo menos uma permissão funcional deve ser selecionada.", variant: "destructive" }); return; } console.log('Submitting privilege:', { name: formData.name, functionalPermissions: formData.permissions }); try { if (editingPrivilege) { await onUpdate(editingPrivilege.id, formData); toast({ title: "Privilégio atualizado com sucesso!" }); } else { await onCreate(formData); toast({ title: "Privilégio criado com sucesso!" }); } resetForm(); } catch (error) { console.error('Error saving privilege:', error); toast({ title: "Erro ao salvar privilégio", description: "Verifique os dados e tente novamente.", variant: "destructive" }); } }; const handleDelete = async (id: string) => { if (window.confirm('Tem certeza que deseja excluir este privilégio?')) { try { await onDelete(id); toast({ title: "Privilégio excluído com sucesso!" }); } catch (error) { console.error('Error deleting privilege:', error); toast({ title: "Erro ao excluir privilégio", variant: "destructive" }); } } }; const handlePermissionChange = (permissionKey: string, checked: boolean) => { if (checked) { // Implement radio button behavior - only one functional permission at a time const newPermissions = FUNCTIONAL_PERMISSIONS.reduce((acc, perm) => { acc[perm.key] = perm.key === permissionKey; return acc; }, {} as Record); setFormData(prev => ({ ...prev, permissions: newPermissions })); } else { setFormData(prev => ({ ...prev, permissions: { ...prev.permissions, [permissionKey]: false } })); } }; return (

Privilégios do Sistema

Gerencie os privilégios funcionais dos usuários (sistema simplificado)

{showForm && ( Privilégios )}
{privileges.map((privilege) => ( ))}
); }