import Link from "next/link"; import { BellRing, Plus } from "lucide-react"; import { prisma } from "@/lib/prisma"; import { requireUser } from "@/lib/rbac"; import { formatRelativeID } from "@/lib/utils"; import { FOLLOW_UP_STATUSES, FOLLOW_UP_META } from "@/lib/constants"; import { PageHeader } from "@/components/ui/page-header"; import { Card } from "@/components/ui/card"; import { Avatar } from "@/components/ui/avatar"; import { EmptyState } from "@/components/ui/empty-state"; import { FollowUpStatusForm } from "@/components/follow-up/status-form"; import { SourceChip, StatusBadge } from "@/components/students/badges"; import { cn } from "@/lib/utils"; export const metadata = { title: "Follow Up — Kodeva" }; export default async function FollowUpPage() { await requireUser(); const followUps = await prisma.followUp.findMany({ include: { student: true, pic: true, activities: { orderBy: { createdAt: "desc" }, take: 1 } }, orderBy: { updatedAt: "desc" }, }); const columns = FOLLOW_UP_STATUSES.map((status) => ({ status, items: followUps.filter((f) => f.status === status), })); const now = new Date(); const isDue = (d: Date | null) => d && d.getTime() <= now.getTime(); return (
{/* Quick create */}

Follow up baru dibuat otomatis saat menambah calon siswa. Lihat calon siswa →

{/* Board */}
{columns.map((col) => { const meta = FOLLOW_UP_META[col.status]; return (

{meta.label}

{col.items.length}
{col.items.length === 0 ? (
Kosong
) : ( col.items.map((f) => (

{f.student.fullName}

{f.student.phone}

{f.nextFollowUpAt ? ( {formatRelativeID(f.nextFollowUpAt)} ) : null}
{f.activities[0] ? (

{f.activities[0].note}

) : null}
)) )}
); })}
{followUps.length === 0 ? (
} title="Belum ada follow up" description="Tambahkan calon siswa untuk mulai follow up." />
) : null}
); }