"use client"; import { Shield, Trash2, UserPlus, Plus } from "lucide-react"; import { PageHeader } from "@/components/ui/PageHeader"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Separator } from "@/components/ui/separator"; import type { AccessList } from "@/lib/models/access-lists"; import { addAccessEntryAction, createAccessListAction, deleteAccessEntryAction, deleteAccessListAction, updateAccessListAction } from "./actions"; import { usePathname, useRouter, useSearchParams } from "next/navigation"; type Props = { lists: AccessList[]; pagination: { total: number; page: number; perPage: number }; }; // Cycling accent colors per card const ACCENT_COLORS = [ { border: "border-l-violet-500", icon: "border-violet-500/30 bg-violet-500/10 text-violet-500", countBadge: "border-violet-500/30 bg-violet-500/10 text-violet-600 dark:text-violet-400", avatar: "bg-violet-500/15 text-violet-600 dark:text-violet-400", }, { border: "border-l-cyan-500", icon: "border-cyan-500/30 bg-cyan-500/10 text-cyan-500", countBadge: "border-cyan-500/30 bg-cyan-500/10 text-cyan-600 dark:text-cyan-400", avatar: "bg-cyan-500/15 text-cyan-600 dark:text-cyan-400", }, { border: "border-l-emerald-500", icon: "border-emerald-500/30 bg-emerald-500/10 text-emerald-500", countBadge: "border-emerald-500/30 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400", avatar: "bg-emerald-500/15 text-emerald-600 dark:text-emerald-400", }, { border: "border-l-amber-500", icon: "border-amber-500/30 bg-amber-500/10 text-amber-500", countBadge: "border-amber-500/30 bg-amber-500/10 text-amber-600 dark:text-amber-400", avatar: "bg-amber-500/15 text-amber-600 dark:text-amber-400", }, { border: "border-l-rose-500", icon: "border-rose-500/30 bg-rose-500/10 text-rose-500", countBadge: "border-rose-500/30 bg-rose-500/10 text-rose-600 dark:text-rose-400", avatar: "bg-rose-500/15 text-rose-600 dark:text-rose-400", }, ]; function getInitials(username: string): string { return username.slice(0, 2).toUpperCase(); } export default function AccessListsClient({ lists, pagination }: Props) { const router = useRouter(); const pathname = usePathname(); const searchParams = useSearchParams(); const pageCount = Math.ceil(pagination.total / pagination.perPage); function handlePageChange(page: number) { const params = new URLSearchParams(searchParams.toString()); params.set("page", String(page)); router.push(`${pathname}?${params.toString()}`); } return (
{list.name}
{list.entries.length} {list.entries.length === 1 ? "account" : "accounts"} {list.description && ` · ${list.description}`}
Accounts
{list.entries.length === 0 ? ({entry.username}
Added {new Date(entry.createdAt).toLocaleDateString()}