feat: split settings management pages

This commit is contained in:
2026-07-02 04:28:35 -07:00
parent 99bcfb1038
commit a555c9dd23
22 changed files with 2131 additions and 37 deletions

View File

@@ -0,0 +1,62 @@
import Link from "next/link";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { buildPageHref } from "@/modules/settings/lib/pagination";
type TableToolbarProps = {
actionLabel?: string;
page: number;
pageCount: number;
pathname: string;
query: string;
searchPlaceholder: string;
total: number;
};
export function TableToolbar({
actionLabel,
page,
pageCount,
pathname,
query,
searchPlaceholder,
total,
}: TableToolbarProps): React.ReactElement {
return (
<div className="flex flex-col gap-3 border-b p-4 lg:flex-row lg:items-center lg:justify-between">
<form className="flex w-full max-w-xl gap-2" action={pathname}>
<Input name="q" placeholder={searchPlaceholder} defaultValue={query} />
<Button type="submit" variant="outline">
</Button>
</form>
<div className="flex items-center justify-between gap-3 text-sm text-muted-foreground">
<span>{actionLabel ?? `${total}`}</span>
<div className="flex items-center gap-2">
{page <= 1 ? (
<Button disabled size="sm" variant="outline">
</Button>
) : (
<Button asChild size="sm" variant="outline">
<Link href={buildPageHref(pathname, query, page - 1)}></Link>
</Button>
)}
<span className="min-w-16 text-center">
{page}/{pageCount}
</span>
{page >= pageCount ? (
<Button disabled size="sm" variant="outline">
</Button>
) : (
<Button asChild size="sm" variant="outline">
<Link href={buildPageHref(pathname, query, page + 1)}></Link>
</Button>
)}
</div>
</div>
</div>
);
}