import React, { useState } from 'react'; import { Card } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Input } from '@/components/ui/input'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog'; import { Checkbox } from '@/components/ui/checkbox'; import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; import { Plus, Edit, Trash2, Users, Shield } from 'lucide-react'; import { EntityType, Role, PERMISSIONS } from '@/types/roles'; import { useRolesPermissions } from '@/hooks/useRolesPermissions'; interface RoleManagementProps { entityType: EntityType; } const RoleManagement: React.FC = ({ entityType }) => { const { roles, getRolesByEntity, createRole, updateRole, deleteRole } = useRolesPermissions(); const [isCreateOpen, setIsCreateOpen] = useState(false); const [editingRole, setEditingRole] = useState(null); const [formData, setFormData] = useState({ name: '', description: '', permissions: [] as string[], }); const entityRoles = getRolesByEntity(entityType); const availablePermissions = PERMISSIONS[entityType] || []; const getEntityTitle = () => { const titles: Record = { admin: 'Admin System', hotel: 'Hotel Management', restaurant: 'Restaurant Management', commerce: 'Commerce Management', }; return titles[entityType]; }; const handleSubmit = () => { if (editingRole) { updateRole(editingRole.id, formData); setEditingRole(null); } else { createRole({ ...formData, entityType, }); } setIsCreateOpen(false); setFormData({ name: '', description: '', permissions: [] }); }; const handleEdit = (role: Role) => { setEditingRole(role); setFormData({ name: role.name, description: role.description, permissions: role.permissions, }); setIsCreateOpen(true); }; const handleDelete = (roleId: string) => { if (confirm('Are you sure you want to delete this role?')) { deleteRole(roleId); } }; const togglePermission = (permissionId: string) => { setFormData(prev => ({ ...prev, permissions: prev.permissions.includes(permissionId) ? prev.permissions.filter(p => p !== permissionId) : [...prev.permissions, permissionId], })); }; return (

{getEntityTitle()}

Manage roles and permissions

{editingRole ? 'Edit Role' : 'Create New Role'} Define role name, description, and permissions
setFormData({ ...formData, name: e.target.value })} placeholder="e.g., Manager, Operator" />