"use client"; import * as React from "react"; import type { AuditEvent, ReadinessResponse } from "@agy/contracts"; import { Badge, Card, CardHint, CardTitle, EmptyState, ErrorState, LoadingState, Stat, Timeline, UsageBar, } from "@agy/ui"; import { ApiError, api } from "@/lib/api"; import { useSession } from "@/lib/session"; export default function DashboardPage() { const { activeOrganization, user } = useSession(); const [readiness, setReadiness] = React.useState(null); const [audit, setAudit] = React.useState([]); const [loading, setLoading] = React.useState(true); const [error, setError] = React.useState(null); const load = React.useCallback(async () => { setLoading(true); setError(null); try { const health = await api.readiness(); setReadiness(health); if (activeOrganization) { setAudit(await api.listAudit(activeOrganization.id).catch(() => [])); } } catch (err) { setError(err instanceof ApiError ? err.message : "دریافت وضعیت ناموفق بود."); } finally { setLoading(false); } }, [activeOrganization]); React.useEffect(() => { void load(); }, [load]); if (loading) return ; if (error) return ; if (!activeOrganization) { return ( ساخت سازمان } /> ); } const adapters = readiness?.checks.adapters ?? {}; const databaseOk = readiness?.checks.database === "ok"; return (

{activeOrganization.name}

خوش آمدید{user?.name ? `، ${user.name}` : ""}. وضعیت کلی سازمان در یک نگاه.

مصرف این ماه سقف مصرف بر اساس پلن سازمان محاسبه می‌شود.
وضعیت اتصال‌ها مدل و provider از دید شما پنهان است؛ این‌ها فقط وضعیت فنی سرویس‌اند.
پایگاه داده: {databaseOk ? "متصل" : "خطا"} {Object.entries(adapters).map(([key, value]) => ( {key}: {value} ))}
رویدادهای اخیر سازمان هر عملیات حساس در audit log ثبت می‌شود.
{audit.length === 0 ? (

رویدادی ثبت نشده است.

) : ( ({ id: event.id, title: event.action, meta: new Date(event.created_at).toLocaleString("fa-IR"), }))} /> )}
دامنه‌های پیش‌نمایش پس از فاز Domain Routing، دامنه‌های تست پروژه‌ها اینجا دیده می‌شوند.

دامنه‌ای ثبت نشده است.

); }