"use client";
import { ActionButton } from "@/components/ui/action-button";
import LoadingSpinner from "@/components/ui/spinner";
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table";
import { toast } from "@/components/ui/use-toast";
import { api } from "@/lib/trpc";
import { keepPreviousData } from "@tanstack/react-query";
import { useSession } from "next-auth/react";
import { useRouter } from "next/navigation";
export default function AdminPage() {
const router = useRouter();
const { data: session, status } = useSession();
if (status == "loading") {
return ;
}
if (!session || session.user.role != "admin") {
router.push("/");
return;
}
const { data } = api.admin.stats.useQuery(undefined, {
refetchInterval: 1000,
placeholderData: keepPreviousData,
});
const { mutate: recrawlLinks, isPending: isRecrawlPending } =
api.admin.recrawlAllLinks.useMutation({
onSuccess: () => {
toast({
description: "Recrawl enqueued",
});
},
onError: (e) => {
toast({
variant: "destructive",
description: e.message,
});
},
});
const { mutate: reindexBookmarks, isPending: isReindexPending } =
api.admin.reindexAllBookmarks.useMutation({
onSuccess: () => {
toast({
description: "Reindex enqueued",
});
},
onError: (e) => {
toast({
variant: "destructive",
description: e.message,
});
},
});
return (
Admin
{data ? (
<>
Server Stats
Num Users
{data.numUsers}
Num Bookmarks
{data.numBookmarks}
Background Jobs
Pending Crawling Jobs
{data.pendingCrawls}
Pending Indexing Jobs
{data.pendingIndexing}
Pending OpenAI Jobs
{data.pendingOpenai}
>
) : (
)}
Actions
recrawlLinks()}
>
Recrawl All Links
reindexBookmarks()}
>
Reindex All Bookmarks
);
}