import { useQuery } from "@tanstack/react-query"; import { Copy } from "lucide-react"; import { useState } from "react"; import { useNavigate } from "react-router"; import { type ListVolumesResponse, listVolumes } from "~/api-client"; import { listVolumesOptions } from "~/api-client/@tanstack/react-query.gen"; import { CreateVolumeDialog } from "~/components/create-volume-dialog"; import { EditVolumeDialog } from "~/components/edit-volume-dialog"; import { Input } from "~/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "~/components/ui/select"; import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from "~/components/ui/table"; import { VolumeIcon } from "~/components/volume-icon"; import type { Route } from "./+types/home"; import { StatusDot } from "~/components/status-dot"; export function meta(_: Route.MetaArgs) { return [ { title: "Ironmount" }, { name: "description", content: "Create, manage, monitor, and automate your Docker volumes with ease.", }, ]; } export const clientLoader = async () => { const volumes = await listVolumes(); if (volumes.data) return { volumes: volumes.data.volumes }; return { volumes: [] }; }; export default function Home({ loaderData }: Route.ComponentProps) { const [volumeToEdit, setVolumeToEdit] = useState(); const [createVolumeOpen, setCreateVolumeOpen] = useState(false); const navigate = useNavigate(); const { data } = useQuery({ ...listVolumesOptions(), initialData: loaderData, }); return ( <>

Ironmount

Create, manage, monitor, and automate your volumes with ease.

A list of your managed volumes. Name Backend Mountpoint Status {data?.volumes.map((volume) => ( navigate(`/volumes/${volume.name}`)} > {volume.name} {volume.path} ))}
setVolumeToEdit(undefined)} initialValues={volumeToEdit} /> ); }