From a2c69aba87d769ebf30079732c088140036e7fdf Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Sat, 18 May 2024 00:49:57 -0700 Subject: [PATCH] improve deployment build version selector --- frontend/src/components/config/util.tsx | 2 +- .../deployment/config/components/image.tsx | 112 +++++++++++++----- .../deployment/config/components/network.tsx | 2 +- .../deployment/config/components/restart.tsx | 2 +- frontend/src/lib/formatting.ts | 2 +- 5 files changed, 85 insertions(+), 35 deletions(-) diff --git a/frontend/src/components/config/util.tsx b/frontend/src/components/config/util.tsx index b8ee80566..54589c04f 100644 --- a/frontend/src/components/config/util.tsx +++ b/frontend/src/components/config/util.tsx @@ -216,7 +216,7 @@ export const AccountSelector = ({ disabled={disabled} > diff --git a/frontend/src/components/resources/deployment/config/components/image.tsx b/frontend/src/components/resources/deployment/config/components/image.tsx index a2d8166df..3e7047b7b 100644 --- a/frontend/src/components/resources/deployment/config/components/image.tsx +++ b/frontend/src/components/resources/deployment/config/components/image.tsx @@ -1,10 +1,20 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { ConfigItem } from "@components/config/util"; import { ResourceSelector } from "@components/resources/common"; -import { fmt_version } from "@lib/formatting"; +import { fmt_date, fmt_version } from "@lib/formatting"; import { useRead } from "@lib/hooks"; import { Types } from "@monitor/client"; +import { CaretSortIcon } from "@radix-ui/react-icons"; +import { + Command, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, +} from "@ui/command"; import { Input } from "@ui/input"; +import { Popover, PopoverContent, PopoverTrigger } from "@ui/popover"; import { Select, SelectContent, @@ -12,6 +22,8 @@ import { SelectTrigger, SelectValue, } from "@ui/select"; +import { SearchX } from "lucide-react"; +import { useState } from "react"; const BuildVersionSelector = ({ disabled, @@ -21,37 +33,71 @@ const BuildVersionSelector = ({ }: { disabled: boolean; buildId: string | undefined; - selected: string | undefined; - onSelect: (version: string) => void; + selected: Types.Version | undefined; + onSelect: (version: Types.Version) => void; }) => { + const [open, setOpen] = useState(false); + const [input, setInput] = useState(""); const versions = useRead( "GetBuildVersions", { build: buildId! }, { enabled: !!buildId } ).data; return ( - + + +
+ {selected ? fmt_version(selected) : "Latest"} + +
+
+ + + + + + No Versions Found + + + + + { + onSelect({ major: 0, minor: 0, patch: 0 }); + setOpen(false); + }} + > +
Latest
+
+ {versions?.map((v) => { + const version = fmt_version(v.version); + return ( + { + onSelect(v.version); + setOpen(false); + }} + className="flex items-center justify-between cursor-pointer" + > +
{version}
+
+ {fmt_date(new Date(v.ts))} +
+
+ ); + })} +
+
+
+
+
); }; @@ -64,7 +110,11 @@ const ImageTypeSelector = ({ onSelect: (type: Types.DeploymentImage["type"]) => void; disabled: boolean; }) => ( - @@ -85,7 +135,7 @@ export const ImageConfig = ({ disabled: boolean; }) => ( -
+
{image?.type === "Build" && ( -
+ <> set({ image: { ...image, params: { ...image.params, - version: JSON.parse(version), + version, }, }, }) } disabled={disabled} /> -
+ )} {image?.type === "Image" && ( - + diff --git a/frontend/src/components/resources/deployment/config/components/restart.tsx b/frontend/src/components/resources/deployment/config/components/restart.tsx index 989efd73a..665ab2290 100644 --- a/frontend/src/components/resources/deployment/config/components/restart.tsx +++ b/frontend/src/components/resources/deployment/config/components/restart.tsx @@ -26,7 +26,7 @@ export const RestartModeSelector = ({ onValueChange={(restart: Types.RestartMode) => set({ restart })} disabled={disabled} > - + diff --git a/frontend/src/lib/formatting.ts b/frontend/src/lib/formatting.ts index 88f13dac3..4bd6e6b43 100644 --- a/frontend/src/lib/formatting.ts +++ b/frontend/src/lib/formatting.ts @@ -16,7 +16,7 @@ export const fmt_date_with_minutes = (d: Date) => { export const fmt_version = (version: Types.Version | undefined) => { if (!version) return "..."; const { major, minor, patch } = version; - if (major === 0 && minor === 0 && patch === 0) return "latest"; + if (major === 0 && minor === 0 && patch === 0) return "Latest"; return `v${major}.${minor}.${patch}`; };