From cf27a896f3a0791d0708619c2a87f1e86ab11bb6 Mon Sep 17 00:00:00 2001 From: Christian Byrne Date: Wed, 9 Apr 2025 11:00:36 +0800 Subject: [PATCH] [Manager] Handle display of git hash versions for NIGHTLY node packs (#3359) --- .../content/manager/PackVersionBadge.vue | 9 ++++++-- .../manager/PackVersionSelectorPopover.vue | 21 ++++++++++++++++--- .../PackVersionSelectorPopover.test.ts | 4 +++- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/components/dialog/content/manager/PackVersionBadge.vue b/src/components/dialog/content/manager/PackVersionBadge.vue index a957bd8ea..25ff56819 100644 --- a/src/components/dialog/content/manager/PackVersionBadge.vue +++ b/src/components/dialog/content/manager/PackVersionBadge.vue @@ -39,6 +39,9 @@ import PackVersionSelectorPopover from '@/components/dialog/content/manager/Pack import { useComfyManagerStore } from '@/stores/comfyManagerStore' import { SelectedVersion } from '@/types/comfyManagerTypes' import { components } from '@/types/comfyRegistryTypes' +import { isSemVer } from '@/utils/formatUtil' + +const TRUNCATED_HASH_LENGTH = 7 const { nodePack } = defineProps<{ nodePack: components['schemas']['Node'] @@ -50,11 +53,13 @@ const managerStore = useComfyManagerStore() const installedVersion = computed(() => { if (!nodePack.id) return SelectedVersion.NIGHTLY - return ( + const version = managerStore.installedPacks[nodePack.id]?.ver ?? nodePack.latest_version?.version ?? SelectedVersion.NIGHTLY - ) + + // If Git hash, truncate to 7 characters + return isSemVer(version) ? version : version.slice(0, TRUNCATED_HASH_LENGTH) }) const toggleVersionSelector = (event: Event) => { diff --git a/src/components/dialog/content/manager/PackVersionSelectorPopover.vue b/src/components/dialog/content/manager/PackVersionSelectorPopover.vue index 5bdc2b68b..99a36c6a4 100644 --- a/src/components/dialog/content/manager/PackVersionSelectorPopover.vue +++ b/src/components/dialog/content/manager/PackVersionSelectorPopover.vue @@ -75,6 +75,7 @@ import { SelectedVersion } from '@/types/comfyManagerTypes' import { components } from '@/types/comfyRegistryTypes' +import { isSemVer } from '@/utils/formatUtil' const { nodePack } = defineProps<{ nodePack: components['schemas']['Node'] @@ -93,12 +94,26 @@ const isQueueing = ref(false) const selectedVersion = ref(SelectedVersion.LATEST) onMounted(() => { + const initialVersion = getInitialSelectedVersion() ?? SelectedVersion.LATEST selectedVersion.value = - nodePack.publisher?.name === 'Unclaimed' - ? SelectedVersion.NIGHTLY - : nodePack.latest_version?.version ?? SelectedVersion.NIGHTLY + // Use NIGHTLY when version is a Git hash + isSemVer(initialVersion) ? initialVersion : SelectedVersion.NIGHTLY }) +const getInitialSelectedVersion = () => { + if (!nodePack.id) return + + // If unclaimed, set selected version to nightly + if (nodePack.publisher?.name === 'Unclaimed') return SelectedVersion.NIGHTLY + + // If node pack is installed, set selected version to the installed version + if (managerStore.isPackInstalled(nodePack.id)) + return managerStore.getInstalledPackVersion(nodePack.id) + + // If node pack is not installed, set selected version to latest + return nodePack.latest_version?.version +} + const fetchVersions = async () => { if (!nodePack?.id) return [] return (await registryService.getPackVersions(nodePack.id)) || [] diff --git a/src/components/dialog/content/manager/__tests__/PackVersionSelectorPopover.test.ts b/src/components/dialog/content/manager/__tests__/PackVersionSelectorPopover.test.ts index 1ef6b72cc..d46b823b6 100644 --- a/src/components/dialog/content/manager/__tests__/PackVersionSelectorPopover.test.ts +++ b/src/components/dialog/content/manager/__tests__/PackVersionSelectorPopover.test.ts @@ -43,7 +43,9 @@ vi.mock('@/stores/comfyManagerStore', () => ({ installPack: { call: mockInstallPack, clear: vi.fn() - } + }, + isPackInstalled: vi.fn(() => false), + getInstalledPackVersion: vi.fn(() => undefined) })) }))