"use client"; import type { dockerRouterType } from "@/server/api/routers/docker"; import { api } from "@/trpc/react"; import type { JSX } from "react"; function DockerCard({ containerInfo, }: { containerInfo: dockerRouterType["list"][number]; }) { const { data: latest, isError, isLoading, error } = api.docker.latest.useQuery({ id: containerInfo.container.id }, { refetchOnMount: false, refetchOnWindowFocus: false, refetchOnReconnect: false }); let latestFragment: JSX.Element | null = null; if (isError) { latestFragment = (
Tag
Error: {error.message}
Short Hash
Error: {error.message}
); } else if (isLoading) { latestFragment = (
Tag
Short Hash
); } else if (latest) { latestFragment = (
Tag
{latest?.latest.tag ?? "Unknown"}
Short Hash
{latest?.latest.hash ?? "Unknown"}
); } const outdated = containerInfo.image.current.hash !== latest?.latest.hash; const showWarning = isLoading || (!isError && !isLoading && (!latest?.latest.tag || !latest?.latest.hash)); return (

{containerInfo.container.name}

{containerInfo.image.name}

Current

Tag
{containerInfo.image.current.tag}
Short Hash
{containerInfo.image.current.hash}

Latest

{latestFragment}
); } export function DockerTable() { const { data: list, isLoading: listLoading, error } = api.docker.list.useQuery(undefined, { refetchOnMount: false, refetchOnWindowFocus: false, refetchOnReconnect: false }); return ( <> {listLoading ? ( <>Loading docker container list... ) : ( <>
{list ? ( list .sort((ca, cb) => { if (ca.container.name && cb.container.name) { if (ca.container.name < cb.container.name) { return -1; } if (ca.container.name > cb.container.name) { return 1; } } return 0; }) .map((containerInfo) => ) ) : ( <>Error loading docker container list: {error?.message} )}
)} ); }