"use client"; import { useQuery } from "@tanstack/react-query"; import { useParams } from "next/navigation"; import Link from "next/link"; import { Button, PageHeader, StatCard, Card, CardContent } from "@/components/ds"; import { useTenantId } from "@/hooks/useTenantId"; import { workspaceApi } from "@/modules/workspace/services/workspace-api"; import { CONTENT_STATUS, displayPerson, formatDay, labelOf } from "@/modules/workspace/labels"; import { StatusChip } from "@/modules/workspace/components/StatusChip"; import { WorkspaceEmptyState, WorkspacePageError, WorkspacePageLoader } from "@/modules/workspace/pages/shared"; export const WorkspaceHubDashboard = function WorkspaceHubDashboardPage() { const params = useParams<{ id: string }>(); const { tenantId } = useTenantId(); const hubId = params.id; const dash = useQuery({ queryKey: ["workspace", tenantId, "dashboard", hubId], queryFn: () => workspaceApi.hubs.dashboard(tenantId!, hubId), enabled: !!tenantId && !!hubId, }); const hub = useQuery({ queryKey: ["workspace", tenantId, "hub", hubId], queryFn: () => workspaceApi.hubs.get(tenantId!, hubId), enabled: !!tenantId && !!hubId, }); if (!tenantId || dash.isLoading || hub.isLoading) return ; if (dash.error) return dash.refetch()} />; const data = dash.data!; const overview = data.overview; return (
} />

قیف محتوا

{Object.entries(data.content).map(([status, count]) => (
{labelOf(CONTENT_STATUS, status)} {count}
))}

بار کاری تیم

{data.workload.length === 0 ? ( ) : ( data.workload.map((row) => (
{displayPerson(row.user_id)} {row.tasks} وظیفه · {row.content} محتوا · {row.overdue} عقب‌افتاده
)) )}

مهلت‌های پیش‌رو

{data.upcoming.length === 0 ? (

مهلت نزدیکی ثبت نشده است.

) : ( data.upcoming.map((task) => (
{String(task.title || "وظیفه")}
{formatDay(String(task.due_date || ""))}
)) )}
); }; export default WorkspaceHubDashboard;