Files
sofa/components/update-toast.tsx
T
jake 8d8c49a7f0 Replace API route handlers with server actions across the app
- Delete 10 API routes (stats, system-health, update-check, jobs/trigger,
  backup/restore, person, titles import/resolve, registration/status) and
  move logic into server actions in lib/actions/settings.ts and
  lib/actions/watchlist.ts
- Refactor SystemHealthCards to accept initialData prop and hydrate Jotai
  atoms via useHydrateAtoms; replace useSystemHealth SWR hook with a
  lightweight useSystemHealthRefresh that calls getSystemHealthAction
- Convert BackupRestoreSection to use restoreBackupAction + useTransition
  instead of a raw fetch call
- Split SystemStatusCard, BackgroundJobsCard, and StorageCard into
  standalone components reading from systemHealthDataAtom
- Make SetupPage async with connection() to opt into dynamic rendering
2026-03-06 17:31:14 -05:00

34 lines
902 B
TypeScript

"use client";
import { useAtom } from "jotai";
import { useEffect } from "react";
import { toast } from "sonner";
import { getUpdateCheckAction } from "@/lib/actions/settings";
import { updateToastShownAtom } from "@/lib/atoms/update-check";
export function UpdateToast() {
const [shown, setShown] = useAtom(updateToastShownAtom);
useEffect(() => {
if (shown) return;
getUpdateCheckAction().then((data) => {
if (!data?.updateAvailable) return;
setShown(true);
toast.info(`Sofa v${data.latestVersion} is available`, {
description: `You're running v${data.currentVersion}.`,
duration: 15_000,
action: data.releaseUrl
? {
label: "View release",
onClick: () => window.open(data.releaseUrl as string, "_blank"),
}
: undefined,
});
});
}, [shown, setShown]);
return null;
}