'use client'; import React, { useState, useEffect, useMemo } from 'react'; import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell, } from '../../renderers/react/Table'; import { Button } from '../../renderers/react/Button'; import { Badge } from '../../renderers/react/Badge'; import { Icon } from '../../renderers/react/Icon'; import { Navbar, NavbarBrand, NavbarActions } from '../../renderers/react/Navbar'; interface RecordItem { id: number; name: string; category: string; amount: number; status: 'نشط' | 'معلق' | 'متوقف'; date: string; } export function TablesPage() { const [theme, setTheme] = useState<'dark' | 'light'>('dark'); const [search, setSearch] = useState(''); const [sortCol, setSortCol] = useState('id'); const [sortDir, setSortDir] = useState<'asc' | 'desc'>('asc'); const [selectedIds, setSelectedIds] = useState([]); const [page, setPage] = useState(1); const pageSize = 5; const [records, setRecords] = useState([ { id: 101, name: 'مجموعة الفلك الملكية', category: 'مقتنيات فاخرة', amount: 340000, status: 'نشط', date: '2026-09-01' }, { id: 102, name: 'دار المعمار الفاطمي', category: 'تراث وعمران', amount: 185000, status: 'نشط', date: '2026-09-02' }, { id: 103, name: 'عقد المشربية التوزيعي', category: 'سلاسل إمداد', amount: 92400, status: 'معلق', date: '2026-09-03' }, { id: 104, name: 'صندوق الأوبسيديان للتجارة', category: 'أحجار ومعادن', amount: 512000, status: 'نشط', date: '2026-09-04' }, { id: 105, name: 'مختبرات النيل للقياس', category: 'بحث وتطوير', amount: 48000, status: 'متوقف', date: '2026-09-05' }, { id: 106, name: 'شركة الهيبة للاستثمار', category: 'استثمار مصرفي', amount: 720000, status: 'نشط', date: '2026-09-06' }, ]); // Editable Rows State const [editableRows, setEditableRows] = useState([ { id: 201, name: 'خاتم الأفق الذهبي', category: 'خواتم ملكية', price: 74200, stock: 14 }, { id: 202, name: 'سوار النيل المنقوش', category: 'أساور مصمتة', price: 58100, stock: 8 }, { id: 203, name: 'قلادة المشربية الفاطمية', category: 'سلاسل وتراث', price: 89450, stock: 5 }, ]); const [editingId, setEditingId] = useState(null); const [editDraft, setEditDraft] = useState({}); useEffect(() => { const saved = localStorage.getItem('qhr-theme') as 'dark' | 'light' | null; if (saved) setTheme(saved); }, []); const toggleTheme = () => { const next = theme === 'dark' ? 'light' : 'dark'; setTheme(next); if (typeof document !== 'undefined') { document.documentElement.setAttribute('data-theme', next); } localStorage.setItem('qhr-theme', next); }; const filtered = useMemo(() => { return records .filter((r) => r.name.includes(search) || r.category.includes(search)) .sort((a, b) => { const mod = sortDir === 'asc' ? 1 : -1; if (a[sortCol] < b[sortCol]) return -1 * mod; if (a[sortCol] > b[sortCol]) return 1 * mod; return 0; }); }, [records, search, sortCol, sortDir]); const totalPages = Math.ceil(filtered.length / pageSize) || 1; const pagedRecords = useMemo(() => { const start = (page - 1) * pageSize; return filtered.slice(start, start + pageSize); }, [filtered, page]); const handleSort = (col: keyof RecordItem) => { if (sortCol === col) { setSortDir(sortDir === 'asc' ? 'desc' : 'asc'); } else { setSortCol(col); setSortDir('asc'); } }; const handleSelectAll = (checked: boolean) => { if (checked) { setSelectedIds(pagedRecords.map((r) => r.id)); } else { setSelectedIds([]); } }; const handleSelectRow = (id: number) => { if (selectedIds.includes(id)) { setSelectedIds(selectedIds.filter((item) => item !== id)); } else { setSelectedIds([...selectedIds, id]); } }; // Inline editing methods const startEdit = (row: any) => { setEditingId(row.id); setEditDraft({ ...row }); }; const saveEdit = (id: number) => { setEditableRows(editableRows.map((r) => (r.id === id ? { ...editDraft } : r))); setEditingId(null); }; return (
ق قاهرة للجداول والشبكات
{/* Header Hero */}

منظومة الجداول والشبكات البيانية (Tables Suite)

معمارية متكاملة تشمل الجداول الأساسية المخططة والمؤطرة، جداول البيانات التفاعلية بالفرز والتصفية والترقيم، والجداول القابلة للتعديل الفوري.

{/* 1. Interactive Data Tables */}

جداول البيانات التفاعلية (Data Tables)

setSearch(e.target.value)} style={{ height: '36px', paddingInline: '12px', borderRadius: '8px', border: '1px solid var(--tbl-border, rgba(212,175,55,0.2))', background: 'var(--tbl-surface-card, #17120E)', color: 'inherit', fontSize: '13px', }} />
0 && selectedIds.length === pagedRecords.length} onChange={(e) => handleSelectAll(e.target.checked)} /> handleSort('id')} style={{ cursor: 'pointer' }}> المعرف {sortCol === 'id' ? (sortDir === 'asc' ? '↑' : '↓') : ''} handleSort('name')} style={{ cursor: 'pointer' }}> الاسم {sortCol === 'name' ? (sortDir === 'asc' ? '↑' : '↓') : ''} handleSort('category')} style={{ cursor: 'pointer' }}> القطاع {sortCol === 'category' ? (sortDir === 'asc' ? '↑' : '↓') : ''} handleSort('amount')} style={{ cursor: 'pointer' }}> القيمة {sortCol === 'amount' ? (sortDir === 'asc' ? '↑' : '↓') : ''} الحالة الإجراء {pagedRecords.map((row) => ( handleSelectRow(row.id)} /> #{row.id} {row.name} {row.category} {row.amount.toLocaleString()} ر.س {row.status} ))}
{/* Pagination bar */}
عرض {pagedRecords.length} من أصل {filtered.length} سجلات
{/* 2. Editable Tables Section */}

الجداول القابلة للتعديل اللحظي (Editable Tables)

الرمز اسم الصنف التصنيف السعر (ر.س) المخزون الإجراء {editableRows.map((row) => ( #{row.id} {editingId === row.id ? ( setEditDraft({ ...editDraft, name: e.target.value })} style={{ padding: '4px 8px', borderRadius: '4px', border: '1px solid #D4AF37', background: 'transparent', color: 'inherit' }} /> ) : ( row.name )} {row.category} {editingId === row.id ? ( setEditDraft({ ...editDraft, price: Number(e.target.value) })} style={{ padding: '4px 8px', borderRadius: '4px', border: '1px solid #D4AF37', background: 'transparent', color: 'inherit', width: '100px' }} /> ) : ( {row.price.toLocaleString()} ر.س )} {row.stock} قطعة {editingId === row.id ? ( ) : ( )} ))}
); }