"use client"; import { useState } from "react"; import { Alert, ArchiveButton } from "@/src/Components/UI"; import { RoleTable } from "@/src/Components/role/RoleTable"; import { RoleFormModal } from "@/src/Components/role/RoleFormModal"; import { RoleDetailModal } from "@/src/Components/role/RoleDetailModal"; import { DeleteRoleModal } from "@/src/Components/role/DeleteRoleModal"; import { Toast } from "@/src/Components/UI"; import { useRoles } from "@/src/hooks/useRole"; import { Role, RoleFormData } from "@/src/types/role"; import { ArchivedRolesModal } from "@/src/Components/role/archive/ArchivedRolesModal"; export default function RolesPage() { // ── Modal state ────────────────────────────────────────────────────────────── // false = closed | null = create | Role = edit const [formTarget, setFormTarget] = useState(false); const [deleteTarget, setDeleteTarget] = useState(null); const [viewRoleId, setViewRoleId] = useState(null); const [deleting, setDeleting] = useState(false); // Archive browser modal open/closed const [archiveOpen, setArchiveOpen] = useState(false); // ── Data hook ──────────────────────────────────────────────────────────────── const { roles, loading, total, pages, error, permissions, page, search, setPage, handleSearch, clearError, createRole, updateRole, deleteRole, assignPermission, removePermission, notification, } = useRoles(); // ── Create / Update ────────────────────────────────────────────────────────── const handleFormSubmit = async (data: RoleFormData, isNew: boolean): Promise => { if (isNew) return createRole(data); const currentPermIds = (formTarget as Role)?.permissions?.map(p => p.permission.id) ?? []; return updateRole((formTarget as Role).id, data, currentPermIds); }; // ── Delete ─────────────────────────────────────────────────────────────────── const handleDeleteConfirm = async () => { if (!deleteTarget || deleting) return; setDeleting(true); const ok = await deleteRole(deleteTarget.id); setDeleting(false); if (ok) setDeleteTarget(null); }; // ── Render ─────────────────────────────────────────────────────────────────── return ( <> {/* Toast notifications */} {/* Detail modal */} {viewRoleId && ( setViewRoleId(null)} onAssign={assignPermission} onRemove={removePermission} /> )} {/* Create / Edit modal */} {formTarget !== false && ( setFormTarget(false)} onSubmit={handleFormSubmit} /> )} {/* Delete confirmation */} {deleteTarget && ( { if (!deleting) setDeleteTarget(null); }} onConfirm={handleDeleteConfirm} /> )} {/* Archive browser modal */} {archiveOpen && ( setArchiveOpen(false)} /> )}
{/* Page header */}

إدارة الصلاحيات

الأدوار

إجمالي {total} دور

{/* Search */}
handleSearch(e.target.value)} dir="rtl" style={{ width: "100%", height: 40, paddingRight: 36, paddingLeft: 12, borderRadius: "var(--radius-lg)", border: "1px solid var(--color-border)", background: "var(--color-surface)", fontSize: 13, outline: "none", fontFamily: "var(--font-sans)", color: "var(--color-text-primary)", }} />
{/* Add role button */}
{/* Error alert */} {error && } {/* Roles table */} setViewRoleId(role.id)} onEdit={role => setFormTarget(role)} onDelete={role => setDeleteTarget(role)} onAddFirst={() => setFormTarget(null)} onPageChange={setPage} />
{/* Floating button to open the archive browser */} setArchiveOpen(true)} /> ); }