import type { Metadata } from "next";
import Link from "next/link";
import { Plus, Search, ShieldCheck, ShieldPlus } from "lucide-react";
import { redirect } from "next/navigation";
import { auth } from "@/auth";
import { TopNav } from "@/components/navigation/top-nav";
import { prisma } from "@/lib/db/prisma";
import { hasPermission } from "@/lib/auth/permissions";
import { Permission } from "@/generated/prisma/enums";
import { getActingBusinessContext } from "@/lib/business/get-acting-business-context";
import { listStaffForBusiness } from "@/services/staff/staff.service";
import { cn } from "@/lib/utils/cn";
export const metadata: Metadata = { title: "Team" };
export const dynamic = "force-dynamic";
export default async function OwnerTeamPage({
searchParams,
}: {
searchParams: Promise<{ q?: string }>;
}) {
const session = await auth();
if (!session?.user) redirect("/sign-in");
const canManage = await hasPermission(session.user.id, Permission.MANAGE_STAFF);
if (!canManage) redirect("/staff");
const context = await getActingBusinessContext();
if (!context) redirect("/staff");
const { q = "" } = await searchParams;
const staff = await listStaffForBusiness(prisma, { businessId: context.businessId, q, includeInactive: true });
const headerAction = (
);
return (
{staff.length === 0 ? (
No staff match “{q}”.
) : (
staff.map((s) => (
{(s.user.name ?? "?").charAt(0)}
{s.user.name}
{s.user.email}
{s.role.name === "Administrator" && (
)}
{s.role.name}
{s.status === "INACTIVE" && · Inactive}
{s.status === "ACTIVE" && s.invitation && !s.invitation.acceptedAt && (
· Invite Pending
)}
))
)}
);
}