"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}>
)}
>
)}
>
);
}