TorbatYar/frontend/modules/hospitality/components/HospitalityBundleGate.tsx
Mortezakoohjani 065c053c16 Add complete Torbat Food hospitality frontend connected to backend APIs.
Introduces modules/hospitality with 54 routes, BFF proxy, capability-gated nav, CRUD factory, and architecture validation docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-26 20:54:26 +03:30

56 lines
1.9 KiB
TypeScript

"use client";
import { useHospitalityCapabilities } from "@/modules/hospitality/hooks/useHospitalityCapabilities";
import { EmptyState } from "@/components/ds";
import { HospitalityPageLoader } from "@/modules/hospitality/pages/shared";
const FEATURE_TO_BUNDLE: Record<string, string> = {
digital_menu: "digital_menu",
digital_menu_catalog: "digital_menu",
qr_menu: "qr_menu",
qr_ordering: "qr_ordering",
pos_lite: "pos_lite",
pos_pro: "pos_pro",
kitchen: "kitchen",
kitchen_engine: "kitchen",
reservation: "reservation",
table_service: "table_service",
delivery_integration: "delivery_connector",
delivery_connector: "delivery_connector",
accounting_integration: "accounting_connector",
crm_integration: "crm_connector",
crm_connector: "crm_connector",
loyalty_integration: "loyalty_connector",
loyalty_connector: "loyalty_connector",
communication_integration: "communication_connector",
communication_connector: "communication_connector",
website_integration: "website_connector",
website_connector: "website_connector",
analytics: "analytics",
};
export function HospitalityBundleGate({
feature,
capabilities,
children,
}: {
feature: string;
capabilities?: { features: Record<string, boolean> };
children: React.ReactNode;
}) {
const capsQ = useHospitalityCapabilities();
const caps = capabilities ?? capsQ.data;
if (capsQ.isLoading && !capabilities) return <HospitalityPageLoader />;
const enabled = caps?.features?.[feature] ?? caps?.features?.[FEATURE_TO_BUNDLE[feature] ?? feature];
if (enabled === false) {
return (
<EmptyState
title="ماژول غیرفعال"
description="این بخش در بسته فعال شما موجود نیست. از تنظیمات بسته‌ها فعال کنید."
/>
);
}
return <>{children}</>;
}