From 8b1b9b8a0b7b6ea3224a85073258724aa1089ea5 Mon Sep 17 00:00:00 2001 From: tdgao Date: Tue, 7 Jul 2026 10:55:38 -0700 Subject: [PATCH] feat: implement compatible version card and update download dependency buttons --- .../CompatibleVersionCard.vue | 144 ++++++++ .../DownloadDependencies.vue | 24 +- .../ProjectDownloadModal/DownloadProject.vue | 339 +++++------------- .../ui/ProjectDownloadModal/index.vue | 292 ++++++++++++++- 4 files changed, 525 insertions(+), 274 deletions(-) create mode 100644 apps/frontend/src/components/ui/ProjectDownloadModal/CompatibleVersionCard.vue diff --git a/apps/frontend/src/components/ui/ProjectDownloadModal/CompatibleVersionCard.vue b/apps/frontend/src/components/ui/ProjectDownloadModal/CompatibleVersionCard.vue new file mode 100644 index 0000000000..1f26104bb2 --- /dev/null +++ b/apps/frontend/src/components/ui/ProjectDownloadModal/CompatibleVersionCard.vue @@ -0,0 +1,144 @@ + + + diff --git a/apps/frontend/src/components/ui/ProjectDownloadModal/DownloadDependencies.vue b/apps/frontend/src/components/ui/ProjectDownloadModal/DownloadDependencies.vue index d70ae48c27..2151a9d8de 100644 --- a/apps/frontend/src/components/ui/ProjectDownloadModal/DownloadDependencies.vue +++ b/apps/frontend/src/components/ui/ProjectDownloadModal/DownloadDependencies.vue @@ -95,6 +95,7 @@ const props = withDefaults( const emit = defineEmits<{ download: [] 'update:downloadable-files': [files: DownloadableDependencyFile[]] + 'update:downloadable-files-loaded': [loaded: boolean] }>() const client = injectModrinthClient() const { createProjectDownloadUrl } = useCdnDownloadContext() @@ -109,7 +110,7 @@ const dependencyResolutionPreferences = computed [ 'project-download-modal', 'content-resolve', @@ -147,7 +148,7 @@ const dependencyVersionIds = computed(() => { ] }) -const { data: dependencyVersions } = useQuery({ +const { data: dependencyVersions, isFetching: dependencyVersionsFetching } = useQuery({ queryKey: computed(() => [ 'project-download-modal', 'resolved-versions', @@ -176,7 +177,7 @@ const dependencyProjectIds = computed(() => { ] }) -const { data: dependencyProjects } = useQuery({ +const { data: dependencyProjects, isFetching: dependencyProjectsFetching } = useQuery({ queryKey: computed(() => [ 'project-download-modal', 'resolved-projects', @@ -210,6 +211,7 @@ const dependenciesByParentVersionId = computed(() => { const dependenciesLoaded = computed(() => { if (!shouldResolveDependencies.value) return false + if (dependencyResolutionFetching.value) return false if (!dependencyResolution.value) return false if ( dependencyResolution.value.primary.version_id && @@ -218,11 +220,13 @@ const dependenciesLoaded = computed(() => { return false } if ( + dependencyVersionsFetching.value || !dependencyVersionIds.value.every((versionId) => dependencyVersionById.value.has(versionId)) ) { return false } if ( + dependencyProjectsFetching.value || !dependencyProjectIds.value.every((projectId) => dependencyProjectById.value.has(projectId)) ) { return false @@ -288,6 +292,12 @@ const downloadableDependencyFiles = computed(() => collectDownloadableDependencyFiles(visibleDependencyRows.value), ) +const downloadableDependencyFilesLoaded = computed(() => { + if (props.dependencies) return true + if (!shouldResolveDependencies.value) return false + return dependenciesLoaded.value +}) + watch( downloadableDependencyFiles, (files) => { @@ -296,6 +306,14 @@ watch( { immediate: true }, ) +watch( + downloadableDependencyFilesLoaded, + (loaded) => { + emit('update:downloadable-files-loaded', loaded) + }, + { immediate: true }, +) + function primaryFileForVersion(version?: Labrinth.Versions.v3.Version) { return version?.files?.find((file) => file.primary) || version?.files?.[0] } diff --git a/apps/frontend/src/components/ui/ProjectDownloadModal/DownloadProject.vue b/apps/frontend/src/components/ui/ProjectDownloadModal/DownloadProject.vue index 60d00a0f5c..1a01aa90d5 100644 --- a/apps/frontend/src/components/ui/ProjectDownloadModal/DownloadProject.vue +++ b/apps/frontend/src/components/ui/ProjectDownloadModal/DownloadProject.vue @@ -80,107 +80,59 @@ -
-
-

- {{ formatMessage(messages.compatibleVersionTitle) }} -

- - - -
-
+

-
-
- - - {{ selectedVersion.version_number }} - - - -
-

- {{ selectedVersion.name }} -

-
- - - - -

+ {{ formatMessage(messages.compatibleVersionTitle) }} + + +
-

- {{ - formatMessage(messages.noVersionsAvailable, { - gameVersion: currentGameVersion, - platform: currentPlatformText, - }) - }} -