/** * Main Mini App page: current duty deep link or calendar view. * Delegates to CurrentDutyView or CalendarPage; runs theme and app init. */ "use client"; import { useCallback, useEffect } from "react"; import { useAppStore, type AppState } from "@/store/app-store"; import { useShallow } from "zustand/react/shallow"; import { useTelegramAuth } from "@/hooks/use-telegram-auth"; import { useAppInit } from "@/hooks/use-app-init"; import { fetchAdminMe } from "@/lib/api"; import { getLang } from "@/i18n/messages"; import { AccessDeniedScreen } from "@/components/states/AccessDeniedScreen"; import { CurrentDutyView } from "@/components/current-duty/CurrentDutyView"; import { CalendarPage } from "@/components/CalendarPage"; export default function Home() { const { initDataRaw, startParam, isLocalhost } = useTelegramAuth(); const isAllowed = isLocalhost || !!initDataRaw; useAppInit({ isAllowed, startParam }); const setIsAdmin = useAppStore((s) => s.setIsAdmin); useEffect(() => { if (!isAllowed || !initDataRaw) { setIsAdmin(false); return; } fetchAdminMe(initDataRaw, getLang()).then(({ is_admin }) => setIsAdmin(is_admin)); }, [isAllowed, initDataRaw, setIsAdmin]); const { accessDenied, currentView, setCurrentView, setSelectedDay, appContentReady, setAppContentReady } = useAppStore( useShallow((s: AppState) => ({ accessDenied: s.accessDenied, currentView: s.currentView, setCurrentView: s.setCurrentView, setSelectedDay: s.setSelectedDay, appContentReady: s.appContentReady, setAppContentReady: s.setAppContentReady, })) ); // When showing access-denied or current-duty view, mark content ready so ReadyGate can call miniAppReady(). useEffect(() => { if (accessDenied || currentView === "currentDuty") { setAppContentReady(true); } }, [accessDenied, currentView, setAppContentReady]); const handleBackFromCurrentDuty = useCallback(() => { setCurrentView("calendar"); setSelectedDay(null); }, [setCurrentView, setSelectedDay]); const content = accessDenied ? (
) : currentView === "currentDuty" ? (
) : ( ); return (
{content}
); }