import { useQuery } from "@tanstack/react-query"; import { useTranslation } from "react-i18next"; import { Info, Sparkles } from "lucide-react"; import { api } from "../lib/api"; import { FRONTEND_VERSION, FRONTEND_SHA, FRONTEND_BUILD_DATE } from "../lib/version"; import Modal from "./Modal"; function fmtDate(d?: string | null): string { if (!d) return "—"; const t = new Date(d); return isNaN(t.getTime()) ? d : t.toLocaleString(); } // About dialog: app + build + schema versions (frontend/backend/database), plus a // shortcut into the release notes. export default function About({ onClose, onOpenReleaseNotes, }: { onClose: () => void; onOpenReleaseNotes: () => void; }) { const { t } = useTranslation(); const { data } = useQuery({ queryKey: ["version"], queryFn: api.version, staleTime: 5 * 60_000 }); const rows: [string, string][] = [ [t("about.frontend"), FRONTEND_VERSION + (FRONTEND_SHA !== "unknown" ? ` · ${FRONTEND_SHA}` : "")], [ t("about.backend"), data ? data.app_version + (data.git_sha !== "unknown" ? ` · ${data.git_sha}` : "") : "…", ], [t("about.database"), data?.db_revision ?? "…"], [t("about.buildDate"), fmtDate(data?.build_date ?? FRONTEND_BUILD_DATE)], ]; return ( {t("about.title")} } onClose={onClose} >
Siftlode
v{FRONTEND_VERSION}

{t("about.tagline")}

{rows.map(([k, v], i) => (
{k} {v}
))}
); }