"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.
);
}