'use client'; import React, { useState } from 'react'; import { DataTableToolbar, FilterBar, Pagination, ConfirmationDialog, } from '../../renderers/react/patterns'; import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell, } from '../../renderers/react/Table'; import { Badge } from '../../renderers/react/Badge'; import { Button } from '../../renderers/react/Button'; import { Icon } from '../../renderers/react/Icon'; interface ResourceItem { id: string; name: string; category: string; status: 'active' | 'pending' | 'archived'; date: string; } const INITIAL_DATA: ResourceItem[] = [ { id: 'RES-101', name: 'خدمة التحقق المعيارية', category: 'الأنظمة', status: 'active', date: '2026-09-01' }, { id: 'RES-102', name: 'واجهة بوابة الدفع الإلكتروني', category: 'المالية', status: 'active', date: '2026-09-02' }, { id: 'RES-103', name: 'خادم معالجة الوسائط والملفات', category: 'البنية التحتية', status: 'pending', date: '2026-09-03' }, { id: 'RES-104', name: 'مكتبة العقود والرموز المشتركة', category: 'التطوير', status: 'active', date: '2026-09-04' }, { id: 'RES-105', name: 'خدمة التنبيهات البريدية المجمعة', category: 'الاتصالات', status: 'archived', date: '2026-09-05' }, ]; export const AdminPage: React.FC = () => { const [data, setData] = useState(INITIAL_DATA); const [searchQuery, setSearchQuery] = useState(''); const [selectedFilter, setSelectedFilter] = useState('all'); const [selectedIds, setSelectedIds] = useState([]); const [currentPage, setCurrentPage] = useState(1); const [theme, setTheme] = useState<'dark' | 'light'>('dark'); const [confirmOpen, setConfirmOpen] = useState(false); const [targetDeleteId, setTargetDeleteId] = useState(null); const toggleTheme = () => { const next = theme === 'dark' ? 'light' : 'dark'; setTheme(next); if (typeof document !== 'undefined') { document.documentElement.setAttribute('data-theme', next); } }; const filters = [ { key: 'all', label: 'كافة الموارد', count: data.length, active: selectedFilter === 'all' }, { key: 'active', label: 'نشط', count: data.filter((d) => d.status === 'active').length, active: selectedFilter === 'active' }, { key: 'pending', label: 'قيد الانتظار', count: data.filter((d) => d.status === 'pending').length, active: selectedFilter === 'pending' }, { key: 'archived', label: 'مؤرشف', count: data.filter((d) => d.status === 'archived').length, active: selectedFilter === 'archived' }, ]; const filteredData = data.filter((item) => { const matchesSearch = item.name.includes(searchQuery) || item.id.includes(searchQuery) || item.category.includes(searchQuery); const matchesCategory = selectedFilter === 'all' || item.status === selectedFilter; return matchesSearch && matchesCategory; }); const handleSelectAll = (checked: boolean) => { if (checked) { setSelectedIds(filteredData.map((d) => d.id)); } else { setSelectedIds([]); } }; const handleSelectItem = (id: string, checked: boolean) => { if (checked) { setSelectedIds((prev) => [...prev, id]); } else { setSelectedIds((prev) => prev.filter((i) => i !== id)); } }; const handleDeleteRequest = (id?: string) => { if (id) { setTargetDeleteId(id); } else { setTargetDeleteId(null); } setConfirmOpen(true); }; const handleConfirmDelete = () => { if (targetDeleteId) { setData((prev) => prev.filter((d) => d.id !== targetDeleteId)); setSelectedIds((prev) => prev.filter((i) => i !== targetDeleteId)); } else if (selectedIds.length > 0) { setData((prev) => prev.filter((d) => !selectedIds.includes(d.id))); setSelectedIds([]); } setConfirmOpen(false); setTargetDeleteId(null); }; return (

إدارة الموارد والعمليات

استعراض شامل لكافة موارد النظام، مع إمكانية الفرز، والتعديل، والعمليات المجمعة.

{ setTargetDeleteId(null); setConfirmOpen(true); }, }, ]} createLabel="إضافة مورد جديد" onCreate={() => alert('إضافة مورد جديد')} onExport={() => alert('تصدير البيانات')} /> setSelectedFilter('all')} />
0 } onChange={(e) => handleSelectAll(e.target.checked)} aria-label="تحديد كافة السجلات" /> المعرف اسم المورد التصنيف الحالة تاريخ الإنشاء الإجراءات {filteredData.length === 0 ? ( لا توجد سجلات مطابقة لمعايير البحث الحالية. ) : ( filteredData.map((row) => { const isSelected = selectedIds.includes(row.id); const tone = row.status === 'active' ? 'success' : row.status === 'pending' ? 'warning' : 'neutral'; const label = row.status === 'active' ? 'نشط' : row.status === 'pending' ? 'قيد الانتظار' : 'مؤرشف'; return ( handleSelectItem(row.id, e.target.checked)} aria-label={`تحديد ${row.name}`} /> {row.id} {row.name} {row.category} {label} {row.date} ); }) )}
setConfirmOpen(false)} onConfirm={handleConfirmDelete} title={targetDeleteId ? `تأكيد حذف المورد (${targetDeleteId})` : 'تأكيد حذف الموارد المحددة'} description="هذا الإجراء سيؤدي إلى حذف السجل نهائياً من قاعدة البيانات. هل تريد الاستمرار؟" confirmLabel="نعم، حذف نهائي" destructive={true} />
); };