update available deployment table

This commit is contained in:
mbecker20
2025-02-02 13:07:18 -08:00
parent cac877e6bb
commit ca050dd50a
3 changed files with 65 additions and 39 deletions

View File

@@ -1,7 +1,7 @@
import { useLocalStorage, useRead } from "@lib/hooks";
import { Types } from "komodo_client";
import { RequiredResourceComponents } from "@types";
import { HardDrive, Rocket, Server } from "lucide-react";
import { CircleArrowUp, HardDrive, Rocket, Server } from "lucide-react";
import { cn } from "@lib/utils";
import { useServer } from "../server";
import {
@@ -200,34 +200,7 @@ export const DeploymentComponents: RequiredResourceComponents = {
},
Status: {
UpdateAvailable: ({ id }) => {
const info = useDeployment(id)?.info;
const state = info?.state ?? Types.DeploymentState.Unknown;
if (
!info ||
!info?.update_available ||
[
Types.DeploymentState.NotDeployed,
Types.DeploymentState.Unknown,
].includes(state)
) {
return null;
}
return (
<HoverCard openDelay={200}>
<HoverCardTrigger asChild>
<Card className="px-3 py-2 border-blue-400 hover:border-blue-500 transition-colors cursor-pointer">
<div className="text-sm text-nowrap overflow-hidden overflow-ellipsis">
Update Available
</div>
</Card>
</HoverCardTrigger>
<HoverCardContent align="start" className="w-fit text-sm">
There is a newer image available
</HoverCardContent>
</HoverCard>
);
},
UpdateAvailable: ({ id }) => <UpdateAvailable id={id} />,
},
Info: {
@@ -327,3 +300,45 @@ export const DeploymentComponents: RequiredResourceComponents = {
);
},
};
export const UpdateAvailable = ({
id,
small,
}: {
id: string;
small?: boolean;
}) => {
const info = useDeployment(id)?.info;
const state = info?.state ?? Types.DeploymentState.Unknown;
if (
!info ||
!info?.update_available ||
[Types.DeploymentState.NotDeployed, Types.DeploymentState.Unknown].includes(
state
)
) {
return null;
}
return (
<HoverCard openDelay={200}>
<HoverCardTrigger asChild>
<Card
className={cn(
"border-blue-400 hover:border-blue-500 transition-colors cursor-pointer flex items-center gap-2",
small ? "px-2 py-1" : "px-3 py-2"
)}
>
<CircleArrowUp className="w-4 h-4" />
{!small && (
<div className="text-sm text-nowrap overflow-hidden overflow-ellipsis">
Update Available
</div>
)}
</Card>
</HoverCardTrigger>
<HoverCardContent align="start" className="w-fit text-sm">
There is a newer image available
</HoverCardContent>
</HoverCard>
);
};

View File

@@ -3,7 +3,7 @@ import { Types } from "komodo_client";
import { DataTable, SortableHeader } from "@ui/data-table";
import { useRead, useSelectedResources } from "@lib/hooks";
import { ResourceLink } from "../common";
import { DeploymentComponents } from ".";
import { DeploymentComponents, UpdateAvailable } from ".";
import { HardDrive } from "lucide-react";
import { useCallback } from "react";
@@ -35,7 +35,10 @@ export const DeploymentTable = ({
<SortableHeader column={column} title="Name" />
),
cell: ({ row }) => (
<ResourceLink type="Deployment" id={row.original.id} />
<div className="flex items-center justify-between gap-2">
<ResourceLink type="Deployment" id={row.original.id} />
<UpdateAvailable id={row.original.id} small />
</div>
),
size: 200,
},

View File

@@ -468,15 +468,23 @@ export const UpdateAvailable = ({
return (
<HoverCard openDelay={200}>
<HoverCardTrigger asChild>
<Card className="px-3 py-2 border-blue-400 hover:border-blue-500 transition-colors cursor-pointer flex items-center gap-2">
<Card
className={cn(
"border-blue-400 hover:border-blue-500 transition-colors cursor-pointer flex items-center gap-2",
small ? "px-2 py-1" : "px-3 py-2"
)}
>
<CircleArrowUp className="w-4 h-4" />
<div className="text-sm text-nowrap overflow-hidden overflow-ellipsis">
Update
{(info?.services.filter((s) => s.update_available).length ?? 0) > 1
? "s"
: ""}{" "}
{!small && "Available"}
</div>
{!small && (
<div className="text-sm text-nowrap overflow-hidden overflow-ellipsis">
Update
{(info?.services.filter((s) => s.update_available).length ?? 0) >
1
? "s"
: ""}{" "}
Available
</div>
)}
</Card>
</HoverCardTrigger>
<HoverCardContent align="start" className="flex flex-col gap-2 w-fit">