import { Copy, Folder } from "lucide-react"; import { useState } from "react"; import { listVolumes } from "~/api-client"; import { CreateVolumeDialog } from "~/components/create-volume-dialog"; import { Button } from "~/components/ui/button"; 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 { cn } from "~/lib/utils"; import type { Route } from "./+types/home"; import { useFetcher } from "react-router"; export function meta(_: Route.MetaArgs) { return [ { title: "Ironmount" }, { name: "description", content: "Create, manage, monitor, and automate your Docker volumes with ease.", }, ]; } export async function clientAction({ request }: Route.ClientActionArgs) { const formData = await request.formData(); const { _action, ...rest } = Object.fromEntries(formData.entries()); if (_action === "delete") { return { yolo: "swag", _action: "delete" as const }; console.log("Delete action triggered", rest); // Delete volume logic } if (_action === "create") { console.log("Create action triggered", rest); return { error: "Volume with this name already exists.", _action: "create" as const, }; } } export async function clientLoader(_: Route.ClientLoaderArgs) { const volumes = await listVolumes(); return volumes.data; } export default function Home({ loaderData, actionData }: Route.ComponentProps) { const [open, setOpen] = useState(false); const createFetcher = useFetcher>(); const deleteFetcher = useFetcher>(); createFetcher.data; deleteFetcher.data; const isDeleting = deleteFetcher.state === "submitting"; const isCreating = createFetcher.state === "submitting"; console.log(createFetcher); const handleDeleteConfirm = (name: string) => { deleteFetcher.submit({ _action: "delete", name }, { method: "DELETE" }); }; return (

Ironmount

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

createFetcher.submit({ _action: "create", ...values }, { method: "POST" })} />
A list of your managed Docker volumes. Name Backend Mountpoint Status Actions {loaderData?.volumes.map((volume) => ( {volume.name} Dir {volume.mountpoint} ))}
); }