import Link from 'next/link'; import { Wrench, ClipboardCheck, ChevronRight } from 'lucide-react'; import { getTranslations } from 'next-intl/server'; import { resolveUser } from '@/lib/auth'; import { api } from '@/lib/trpc/server'; import { SignOutButton } from './sign-out-button'; import { StatusBadge } from './status-badge'; import { SyncChip } from './sync-chip'; import { LanguageSwitcher } from './language-switcher'; import { BadgeInPanel } from './badge-in-panel'; import { SessionBar } from './session-bar'; export default async function HomePage() { const t = await getTranslations('home'); const user = await resolveUser(); // Current badge-in session (operator bound to a workstation). let session: Awaited> = null; try { session = await api.operatorSession.current(); } catch { // No auth / error — treat as not badged in. } const header = (

{t('operator')}

{user?.email ?? '—'}

); // ── Not badged in: prompt to pick a workstation ── if (!session) { let workstations: Awaited> = []; try { workstations = await api.workstation.list(); } catch { // ignore } return (
{header}
); } // ── Badged in: full home ── type RecentItem = Awaited>[number]; let recent: RecentItem[] = []; try { recent = await api.maintenanceRequest.myRecent({ limit: 5 }); } catch { // ignore } let openDefects = 0; try { const defects = await api.qualityDefect.forMyStation(); openDefects = defects.filter((d) => d.status === 'OPEN').length; } catch { // ignore } return (
{header}
{/* Current workstation + badge-out */} {/* Primary CTAs */}
{t('requestMaintenance')} {t('defects')} {openDefects > 0 ? t('defectsWithCount', { count: openDefects }) : t('noDefects')} {openDefects > 0 && ( {openDefects} )}
{/* Recent requests */}

{t('myRequests')}

{recent.length === 0 ? (

{t('noRequests')}

) : (
    {recent.map((req) => (
  • {req.workstation.code} — {req.workstation.name}

    {req.description}

  • ))}
)}
); }