/** * Admin page: list duties for the month and reassign duty to another user. * Visible only to admins (link shown on calendar when GET /api/admin/me returns is_admin). * Logic and heavy UI live in components/admin (useAdminPage, AdminDutyList, ReassignSheet). */ "use client"; import { useAdminPage, AdminDutyList, ReassignSheet } from "@/components/admin"; import { useTranslation } from "@/i18n/use-translation"; import { MonthNavHeader } from "@/components/calendar/MonthNavHeader"; import { AccessDeniedScreen } from "@/components/states/AccessDeniedScreen"; import { LoadingState } from "@/components/states/LoadingState"; import { ErrorState } from "@/components/states/ErrorState"; import { MiniAppScreen, MiniAppScreenContent, MiniAppStickyHeader } from "@/components/layout/MiniAppScreen"; import { useScreenReady } from "@/hooks/use-screen-ready"; export default function AdminPage() { const { t, monthName } = useTranslation(); const admin = useAdminPage(); useScreenReady(true); if (!admin.isAllowed) { return ( ); } if (admin.adminCheckComplete === null) { return (

{t("admin.loading_users")}

); } if (admin.adminAccessDenied) { return (

{admin.adminAccessDeniedDetail ?? t("admin.access_denied")}

); } const month = admin.adminMonth.getMonth(); const year = admin.adminMonth.getFullYear(); return ( {admin.successMessage && (

{admin.successMessage}

)} {admin.loading && (

{t("admin.loading_users")}

)} {admin.error && !admin.loading && ( window.location.reload()} className="my-3" /> )} {!admin.loading && !admin.error && (
{admin.visibleGroups.length > 0 && (

{t("admin.reassign_duty")}: {t("admin.select_user")}

)}
)}
); }