// ========================================== // DXA Admin · Page components // ========================================== // ---------- DASHBOARD ---------- const DashboardPage = ({ content, submissions, log, onNav }) => { const newCount = submissions.filter(s => s.status==='new').length; const pubInfo = PUB_STATUS[content.publishStatus]; return (

نظرة عامة

ملخّص حالة الموقع وأحدث النشاطات.

{I.eye}
الزيارات · 30 يوم
12,438
↑ 18% عن الشهر السابق
{I.inbox}
طلبات جديدة
{newCount}
↑ 2 منذ الأمس
{I.portfolio}
عناصر Portfolio
{content.portfolio.length}
{content.portfolio.filter(p=>p.featured).length} مميّز
{I.clients}
العملاء
{content.clients.length}
{content.services.length} خدمات نشطة

أحدث طلبات عروض الأسعار

{newCount} طلب جديد بحاجة لمراجعة
{submissions.slice(0,5).map(s => ( ))}
الاسمالجهةالخدمةالحالة
{s.name} {s.org} {s.service} {SUB_STATUS[s.status].label}

حالة الموقع

{I.check}
الموقع {pubInfo.label}
آخر نشر: 09 مايو · 14:30
{[ ['اللغات', 'العربية + الإنجليزية'], ['آخر نسخة احتياطية', 'اليوم · 04:00'], ['SSL', '✓ مفعّل'], ['الأداء', '94 / 100'], ].map(([k,v]) => (
{k} {v}
))}
اختصارات سريعة

آخر التعديلات

{log.slice(0,5).map(l => (
{l.what}
{l.when} · بواسطة {l.who}
))}
); }; // ---------- Split editor wrapper ---------- const SplitEditor = ({ title, sub, anchor, children, content }) => { const previewRef = useRef(null); const [device, setDevice] = useState('desktop'); useEffect(() => { // refresh preview iframe by appending hash on content change if (previewRef.current) { previewRef.current.src = `home.html#${anchor}`; } }, [anchor, content]); return (

{title}

{sub}

{children}
home.html#{anchor}
معاينة مباشرة {I.external}