// Client dashboard const Dashboard = ({ t, lang, setPage, setSelectedParcel }) => { const data = window.DAOOB_DATA; const [tab, setTab] = React.useState("active"); const [filter, setFilter] = React.useState("all"); const filtered = data.studies.filter(s => { if (filter === "all") return true; if (filter === "active") return s.status === "progress"; if (filter === "review") return s.status === "review"; if (filter === "done") return s.status === "done"; return true; }); const portfolioValue = data.studies.reduce((acc, s) => { const parcel = data.parcels.find(p => p.id === s.parcelId); if (!parcel?.price) return acc; return acc + parcel.price * parcel.area; }, 0); return (

{t.dash.h1}

{t.dash.sub}

{/* Usage meter — subscription quota */} {(() => { const used = 23, allocated = 30, daysLeft = 12, carryOver = 4; const pct = (used / allocated) * 100; const remaining = allocated - used; return (
{lang === "ar" ? "باقة احترافية · شهرية" : "Professional plan · monthly"}
{lang === "ar" ? "استخدامك هذا الشهر" : "Your usage this month"}
{used}
{lang === "ar" ? "مستخدم" : "Used"}
{remaining}
{lang === "ar" ? "متبقي" : "Remaining"}
{daysLeft}{lang === "ar" ? " يوم" : "d"}
{lang === "ar" ? "حتى التجديد" : "Until renewal"}
+{carryOver}
{lang === "ar" ? "مُرحَّل من الشهر السابق" : "Carried over"}
{used}/{allocated}
); })()} {/* KPIs */}
{t.dash.pf_value}
{(portfolioValue / 1e6).toFixed(1)}M
SAR · {lang === "ar" ? "تقديري" : "indicative"}
{t.dash.pf_avg_roi}
14.2%
{lang === "ar" ? "متوسط 6 دراسات" : "across 6 studies"}
{t.dash.pf_parcels}
12
{lang === "ar" ? "3 جديدة" : "3 new this month"}
{t.dash.pf_alerts}
2
{lang === "ar" ? "تغيّر اشتراطات" : "zoning changes"}
{/* Filters */}
{[ { k: "all", lbl: t.dash.filter_all }, { k: "active", lbl: t.dash.filter_active }, { k: "review", lbl: t.dash.filter_review }, { k: "done", lbl: t.dash.filter_done }, ].map(f => ( ))}
{/* Studies table */} {filtered.map(s => { const p = data.parcels.find(x => x.id === s.parcelId); const district = p ? data.districts[p.district][lang] : "—"; return ( ); })}
{lang === "ar" ? "المرجع" : "Reference"} {lang === "ar" ? "القطعة" : "Parcel"} {lang === "ar" ? "نوع الدراسة" : "Study type"} {lang === "ar" ? "الحالة" : "Status"} {t.dash.assigned} {t.dash.eta} {lang === "ar" ? "السعر" : "Price"}
{s.ref}
{district}
{s.parcelId}
{s.type[lang]} {s.status === "progress" ? t.dash.filter_active : s.status === "review" ? t.dash.filter_review : t.dash.filter_done} {s.status !== "done" && (
)}
{s.assignee} {s.eta} {s.price.toLocaleString()}
{/* Activity feed */}

{t.dash.activity_h}

{[ { t: "Valuation Agent uploaded interim valuation for DAO-2026-0184", time: "2h ago", icon: "file" }, { t: "Zoning change detected on RYD-3402-HT", time: "5h ago", icon: "shield" }, { t: "Market Agent completed cross-check on DAO-2026-0182", time: "Yesterday", icon: "users" }, { t: "Comparable transaction added · RYD-7204-RW · 4.1M SAR", time: "Yesterday", icon: "chart" }, { t: "Report delivered: Highest & Best Use, RYD-3402-HT", time: "9 May", icon: "check" }, ].map((a, i) => (
{a.t}
{a.time}
))}

{t.dash.portfolio_h}

{lang === "ar" ? "توزيع القطع" : "Parcels by district"}
{[ { d: "Olaya", c: 4, p: 33 }, { d: "KAFD", c: 3, p: 25 }, { d: "Malqa", c: 2, p: 17 }, { d: "Hittin",c: 2, p: 17 }, { d: "Other", c: 1, p: 8 }, ].map((r, i) => (
{r.d}{r.c}
))}

{lang === "ar" ? "نشاط 90 يومًا" : "Activity 90d"}
{[12,16,10,22,18,28,24,32,28,38,42,36,48,52,44,58,48,62,56,68,72,64,76,80].map((v,i) => ( ))}
); }; Object.assign(window, { Dashboard });