aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/components/admin/BasicStats.tsx
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-10-12 13:42:24 +0000
committerMohamed Bassem <me@mbassem.com>2025-10-12 18:29:40 +0000
commitfda1c851cf507ca7e309e80ff068444dfaab93c3 (patch)
treed349fdae4fa1a3a1e32152f0df41948fd56b7f89 /apps/web/components/admin/BasicStats.tsx
parent7ee9416e8f1689b6390ea51c7a8484936c12026d (diff)
downloadkarakeep-fda1c851cf507ca7e309e80ff068444dfaab93c3.tar.zst
feat: Add service dependency checks in the server overview page
Diffstat (limited to '')
-rw-r--r--apps/web/components/admin/BasicStats.tsx (renamed from apps/web/components/admin/ServerStats.tsx)31
1 files changed, 23 insertions, 8 deletions
diff --git a/apps/web/components/admin/ServerStats.tsx b/apps/web/components/admin/BasicStats.tsx
index e60f0fbe..67352f66 100644
--- a/apps/web/components/admin/ServerStats.tsx
+++ b/apps/web/components/admin/BasicStats.tsx
@@ -1,10 +1,10 @@
"use client";
-import LoadingSpinner from "@/components/ui/spinner";
+import { AdminCard } from "@/components/admin/AdminCard";
import { useClientConfig } from "@/lib/clientConfig";
import { useTranslation } from "@/lib/i18n/client";
import { api } from "@/lib/trpc";
-import { keepPreviousData, useQuery } from "@tanstack/react-query";
+import { useQuery } from "@tanstack/react-query";
const REPO_LATEST_RELEASE_API =
"https://api.github.com/repos/karakeep-app/karakeep/releases/latest";
@@ -54,20 +54,35 @@ function ReleaseInfo() {
);
}
-export default function ServerStats() {
+function StatsSkeleton() {
+ return (
+ <AdminCard>
+ <div className="mb-4 h-7 w-32 animate-pulse rounded bg-gray-200 dark:bg-gray-700"></div>
+ <div className="flex flex-col gap-4 sm:flex-row">
+ {[1, 2, 3].map((i) => (
+ <div key={i} className="rounded-md border bg-background p-4 sm:w-1/4">
+ <div className="mb-2 h-4 w-24 animate-pulse rounded bg-gray-200 dark:bg-gray-700"></div>
+ <div className="h-9 w-16 animate-pulse rounded bg-gray-200 dark:bg-gray-700"></div>
+ </div>
+ ))}
+ </div>
+ </AdminCard>
+ );
+}
+
+export default function BasicStats() {
const { t } = useTranslation();
const { data: serverStats } = api.admin.stats.useQuery(undefined, {
refetchInterval: 5000,
- placeholderData: keepPreviousData,
});
if (!serverStats) {
- return <LoadingSpinner />;
+ return <StatsSkeleton />;
}
return (
- <div className="flex flex-col gap-4">
- <div className="mb-2 text-xl font-medium">
+ <AdminCard>
+ <div className="mb-4 text-xl font-medium">
{t("admin.server_stats.server_stats")}
</div>
<div className="flex flex-col gap-4 sm:flex-row">
@@ -92,6 +107,6 @@ export default function ServerStats() {
<ReleaseInfo />
</div>
</div>
- </div>
+ </AdminCard>
);
}