"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"; import { HospitalityStatGrid } from "@/modules/hospitality/design-system"; 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, menus, qrSessions] = 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 }), hospitalityApi.menus.list(tenantId!, { page: 1, page_size: 500 }), hospitalityApi.qrOrderingSessions.list(tenantId!, { page: 1, page_size: 500 }), ]); return { venues: venues.length, reservations: reservations.filter((r) => r.status === "confirmed" || r.status === "pending").length, openOrders: tickets.filter((t) => t.status === "open" || t.status === "draft").length, kitchenActive: kitchen.filter((k) => k.status !== "completed" && k.status !== "cancelled").length, menus: menus.filter((m) => m.status === "published" || m.status === "active").length, onlineOrders: qrSessions.filter((s) => s.status === "submitted" || s.status === "preparing").length, }; }, enabled: !!tenantId, refetchInterval: 30_000, }); if (!tenantId || countsQ.isLoading || caps.isLoading) return ; if (countsQ.error) return countsQ.refetch()} />; const c = countsQ.data!; return ( Torbat Food v{caps.data?.version} countsQ.refetch()}> بروزرسانی } /> عملیات سریع رزروها آشپزخانه POS Lite منو آنالیتیکس سفارش آنلاین ); }; export default ExecutiveDashboard;
عملیات سریع