"use client"; import { useQuery } from "@tanstack/react-query"; import { PageHeader, Card, CardContent } from "@/components/ds"; import { crmApi } from "@/modules/crm/services/crm-api"; import { useTenantId } from "@/hooks/useTenantId"; import { CrmStatGrid } from "@/modules/crm/design-system"; import { CrmBreadcrumbs } from "@/modules/crm/components/CrmBreadcrumbs"; import { CrmPageLoader, CrmPageError } from "@/modules/crm/pages/shared"; export default function ReportsPage() { const { tenantId } = useTenantId(); const q = useQuery({ queryKey: ["crm", tenantId, "reports"], queryFn: async () => { const [leads, opps, quotes, forecasts] = await Promise.all([ crmApi.leads.list(tenantId!, { page: 1, page_size: 500 }), crmApi.opportunities.list(tenantId!, { page: 1, page_size: 500 }), crmApi.quotes.list(tenantId!, { page: 1, page_size: 500 }), crmApi.forecasts.list(tenantId!, { page: 1, page_size: 50 }), ]); const pipelineValue = opps .filter((o) => o.status === "open") .reduce((s, o) => s + Number(o.amount || 0), 0); return { leadCount: leads.length, openDeals: opps.filter((o) => o.status === "open").length, wonDeals: opps.filter((o) => o.status === "won").length, pipelineValue, quoteCount: quotes.length, forecastCount: forecasts.length, }; }, enabled: !!tenantId, }); if (!tenantId || q.isLoading) return ; if (q.error) return q.refetch()} />; return (
گزارش‌های پیشرفته (PDF/scheduled) در Analytics Platform آینده — فعلاً فقط aggregate از list endpoints.
); }