fix: vers page link query persistence

This commit is contained in:
Calum H. (IMB11)
2026-06-16 19:17:04 +01:00
parent e52846dac3
commit d22dfb04d2
2 changed files with 32 additions and 4 deletions
@@ -5,7 +5,7 @@
:current-title="version.name" :current-title="version.name"
:link-stack="[ :link-stack="[
{ {
href: `/project/${route.params.id}/versions`, href: buildProjectHref(`/project/${route.params.id}/versions`),
label: 'Versions', label: 'Versions',
}, },
]" ]"
@@ -249,6 +249,19 @@ const author = computed(() =>
const displayDependencies = ref({}) const displayDependencies = ref({})
function buildProjectHref(path) {
const params = new URLSearchParams()
for (const [key, val] of Object.entries(route.query)) {
if (Array.isArray(val)) {
for (const v of val) params.append(key, v)
} else if (val) {
params.append(key, String(val))
}
}
const qs = params.toString()
return qs ? `${path}?${qs}` : path
}
async function refreshDisplayDependencies() { async function refreshDisplayDependencies() {
const projectIds = new Set() const projectIds = new Set()
const versionIds = new Set() const versionIds = new Set()
@@ -282,7 +295,7 @@ async function refreshDisplayDependencies() {
icon: project?.icon_url, icon: project?.icon_url,
title: project?.title || project?.name, title: project?.title || project?.name,
subtitle: `Version ${version.version_number} is ${dependency.dependency_type}`, subtitle: `Version ${version.version_number} is ${dependency.dependency_type}`,
link: `/project/${project.slug}/version/${version.id}`, link: buildProjectHref(`/project/${project.slug}/version/${version.id}`),
} }
} else { } else {
const project = dependencies.projects.find((obj) => obj.id === dependency.project_id) const project = dependencies.projects.find((obj) => obj.id === dependency.project_id)
@@ -292,7 +305,7 @@ async function refreshDisplayDependencies() {
icon: project?.icon_url, icon: project?.icon_url,
title: project?.title || project?.name, title: project?.title || project?.name,
subtitle: `${dependency.dependency_type}`, subtitle: `${dependency.dependency_type}`,
link: `/project/${project.slug}`, link: buildProjectHref(`/project/${project.slug}`),
} }
} else { } else {
return { return {
@@ -5,7 +5,7 @@
:game-versions="gameVersions" :game-versions="gameVersions"
:versions="versions" :versions="versions"
:project="project" :project="project"
:version-link="(version) => `/project/${project.id}/version/${version.id}`" :version-link="(version) => buildProjectHref(`/project/${project.id}/version/${version.id}`)"
> >
<template #actions="{ version }"> <template #actions="{ version }">
<ButtonStyled circular type="transparent"> <ButtonStyled circular type="transparent">
@@ -73,6 +73,7 @@ import {
ProjectPageVersions, ProjectPageVersions,
} from '@modrinth/ui' } from '@modrinth/ui'
import { ref } from 'vue' import { ref } from 'vue'
import { useRoute } from 'vue-router'
import { SwapIcon } from '@/assets/icons/index.js' import { SwapIcon } from '@/assets/icons/index.js'
import { get_game_versions, get_loaders } from '@/helpers/tags.js' import { get_game_versions, get_loaders } from '@/helpers/tags.js'
@@ -109,6 +110,20 @@ defineProps({
}) })
const { handleError } = injectNotificationManager() const { handleError } = injectNotificationManager()
const route = useRoute()
function buildProjectHref(path) {
const params = new URLSearchParams()
for (const [key, val] of Object.entries(route.query)) {
if (Array.isArray(val)) {
for (const v of val) params.append(key, v)
} else if (val) {
params.append(key, String(val))
}
}
const qs = params.toString()
return qs ? `${path}?${qs}` : path
}
const [loaders, gameVersions] = await Promise.all([ const [loaders, gameVersions] = await Promise.all([
get_loaders().catch(handleError).then(ref), get_loaders().catch(handleError).then(ref),