import { useQuery } from "@tanstack/react-query"; import { redirect, useParams } from "react-router"; import { listSnapshotFilesOptions } from "~/api-client/@tanstack/react-query.gen"; import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card"; import { RestoreSnapshotDialog } from "../components/restore-snapshot-dialog"; import { SnapshotFileBrowser } from "~/modules/backups/components/snapshot-file-browser"; import { getSnapshotDetails } from "~/api-client"; import type { Route } from "./+types/snapshot-details"; export const clientLoader = async ({ params }: Route.ClientLoaderArgs) => { const snapshot = await getSnapshotDetails({ path: { name: params.name, snapshotId: params.snapshotId } }); if (snapshot.data) return snapshot.data; return redirect("/repositories"); }; export default function SnapshotDetailsPage({ loaderData }: Route.ComponentProps) { const { name, snapshotId } = useParams<{ name: string; snapshotId: string }>(); const { data } = useQuery({ ...listSnapshotFilesOptions({ path: { name: name ?? "", snapshotId: snapshotId ?? "" }, query: { path: "/" }, }), enabled: !!name && !!snapshotId, }); if (!name || !snapshotId) { return (
Invalid snapshot reference
Snapshot: {snapshotId}
{data.snapshot.id}
{data.snapshot.short_id}
{data.snapshot.hostname}
{new Date(data.snapshot.time).toLocaleString()}
{path}
))}