"use client"; import { useState } from "react"; import { Alert, ArchiveButton, ConfirmDialog,Toast } from "@/src/Components/UI"; import { RoleTable } from "@/src/Components/role/RoleTable"; import { RoleFormModal,RoleDetailModal } from "@/src/Components/role"; import { useRoles } from "@/src/hooks/useRole"; import { Role, RoleFormData } from "@/src/types/role"; import { ArchivedRolesModal } from "@/src/Components/role/archive/ArchivedRolesModal"; import Header from "@/src/Components/UI/Header"; 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 */} { if (!deleting) setDeleteTarget(null); }} onConfirm={handleDeleteConfirm} title="حذف الدور" description={`هل أنت متأكد من حذف دور ${deleteTarget?.name ?? ""}؟ لا يمكن التراجع عن هذا الإجراء.`} /> {/* Archive browser modal */} {archiveOpen && ( setArchiveOpen(false)} /> )}
{/* Page header */}
{}} setPage={setPage} isAudit={false} onAdd={() => setFormTarget(null)}/> {/* 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)} /> ); }