"use client"; import { useQuery } from "@tanstack/react-query"; import Link from "next/link"; import { hospitalityApi } from "@/modules/hospitality/services/hospitality-api"; import { useTenantId } from "@/hooks/useTenantId"; import { useHospitalityCapabilities } from "@/modules/hospitality/hooks/useHospitalityCapabilities"; import { HospitalityPageLoader, HospitalityPageError } from "@/modules/hospitality/pages/shared"; import { PageHeader, StatCard, Card, CardContent, Button, Badge } from "@/components/ds"; import { HospitalityBreadcrumbs } from "@/modules/hospitality/components/HospitalityBreadcrumbs"; export const ExecutiveDashboard = function HospitalityDashboard() { const { tenantId } = useTenantId(); const caps = useHospitalityCapabilities(); const countsQ = useQuery({ queryKey: ["hospitality", tenantId, "dashboard-counts"], queryFn: async () => { const [venues, reservations, tickets, kitchen] = await Promise.all([ hospitalityApi.venues.list(tenantId!, { page: 1, page_size: 500 }), hospitalityApi.reservations.list(tenantId!, { page: 1, page_size: 500 }), hospitalityApi.posTickets.list(tenantId!, { page: 1, page_size: 500 }), hospitalityApi.kitchenTickets.list(tenantId!, { page: 1, page_size: 500 }), ]); return { venues: venues.length, reservations: reservations.length, openOrders: tickets.filter((t) => t.status === "open" || t.status === "draft").length, kitchenActive: kitchen.filter((k) => k.status !== "completed" && k.status !== "cancelled").length, }; }, enabled: !!tenantId, }); if (!tenantId || countsQ.isLoading || caps.isLoading) return ; if (countsQ.error) return countsQ.refetch()} />; const c = countsQ.data!; return (
Torbat Food v{caps.data?.version}} />
); }; export default ExecutiveDashboard;