fix: browse page not respecting instance source via wid param

This commit is contained in:
Calum H. (IMB11)
2026-06-26 17:09:23 +01:00
parent 77e74f840a
commit 7618f9bc09
3 changed files with 61 additions and 14 deletions
+33 -7
View File
@@ -90,6 +90,9 @@ const {
effectiveServerWorldId,
serverContextServerData,
serverContextWorldName,
serverContextWorldGameVersion,
serverContextWorldLoader,
serverContextWorldLoaderVersion,
serverContentProjectIds,
queuedServerInstallProjectIds,
queuedServerInstallCount,
@@ -296,10 +299,10 @@ const serverContextFilters = computed(() => {
const pt = projectType.value
if (pt !== 'modpack') {
const gameVersion = serverContextServerData.value.mc_version
const gameVersion = serverContextWorldGameVersion.value
if (gameVersion) filters.push({ type: 'game_version', option: gameVersion })
const platform = serverContextServerData.value.loader?.toLowerCase()
const platform = serverContextWorldLoader.value?.toLowerCase().replaceAll('_', '')
if (platform && ['fabric', 'forge', 'quilt', 'neoforge'].includes(platform))
filters.push({ type: 'mod_loader', option: platform })
if (platform && ['paper', 'purpur'].includes(platform))
@@ -334,6 +337,14 @@ const combinedProvidedFilters = computed(() =>
isServerContext.value ? serverContextFilters.value : instanceFilters.value,
)
const serverContentProjectType = computed<ProjectType | null>(() => {
const loader = serverContextWorldLoader.value?.toLowerCase()
if (!loader) return null
if (loader === 'paper' || loader === 'purpur') return 'plugin'
if (loader === 'vanilla') return 'datapack'
return 'mod'
})
const {
serverPings,
contextMenuRef,
@@ -477,6 +488,21 @@ function resetInstanceContext() {
breadcrumbs.setContext(null)
}
watch(
[isServerContext, isSetupServerContext, projectType, serverContentProjectType],
([serverContext, setupServerContext, currentProjectType, targetProjectType]) => {
if (!serverContext || setupServerContext || !targetProjectType) return
if (!['mod', 'plugin', 'datapack'].includes(currentProjectType)) return
if (currentProjectType === targetProjectType) return
router.replace({
path: `/browse/${targetProjectType}`,
query: route.query,
})
},
{ immediate: true },
)
watch(
() => route.params.projectType as ProjectType,
async (newType) => {
@@ -562,9 +588,9 @@ const installContext = computed(() => {
if (isServerContext.value && serverContextServerData.value) {
return {
name: serverContextWorldName.value ?? formatMessage(messages.worldFallbackName),
loader: serverContextServerData.value.loader ?? '',
loaderVersion: serverContextServerData.value.loader_version ?? '',
gameVersion: serverContextServerData.value.mc_version ?? '',
loader: serverContextWorldLoader.value ?? '',
loaderVersion: serverContextWorldLoaderVersion.value ?? '',
gameVersion: serverContextWorldGameVersion.value ?? '',
serverId: serverIdQuery.value,
upstream: serverContextServerData.value.upstream,
iconSrc: null as string | null,
@@ -639,8 +665,8 @@ function getCurrentSelectedInstallPreferences(projectTypeValue: string) {
function getServerInstallTargetPreferences(contentType: BrowseInstallContentType) {
return getTargetInstallPreferences(
{
gameVersion: serverContextServerData.value?.mc_version,
loader: serverContextServerData.value?.loader,
gameVersion: serverContextWorldGameVersion.value,
loader: serverContextWorldLoader.value,
},
contentType,
)
@@ -65,6 +65,9 @@ export interface ServerInstallContentContext {
effectiveServerWorldId: ComputedRef<string | null>
serverContextServerData: Ref<Archon.Servers.v0.Server | null>
serverContextWorldName: ComputedRef<string | null>
serverContextWorldGameVersion: ComputedRef<string | null>
serverContextWorldLoader: ComputedRef<string | null>
serverContextWorldLoaderVersion: ComputedRef<string | null>
serverContentProjectIds: Ref<Set<string>>
queuedServerInstallProjectIds: ComputedRef<Set<string>>
queuedServerInstallCount: ComputedRef<number>
@@ -283,6 +286,21 @@ export function createServerInstallContent(opts: {
return serverFull.worlds.find((world) => world.is_active) ?? serverFull.worlds[0] ?? null
})
const serverContextWorldName = computed(() => serverContextWorld.value?.name ?? null)
const serverContextWorldGameVersion = computed(() => {
const worldGameVersion = serverContextWorld.value?.content?.game_version
if (worldIdQuery.value) return worldGameVersion ?? null
return worldGameVersion ?? serverContextServerData.value?.mc_version ?? null
})
const serverContextWorldLoader = computed(() => {
const worldLoader = serverContextWorld.value?.content?.modloader
if (worldIdQuery.value) return worldLoader ?? null
return worldLoader ?? serverContextServerData.value?.loader ?? null
})
const serverContextWorldLoaderVersion = computed(() => {
const worldLoaderVersion = serverContextWorld.value?.content?.modloader_version
if (worldIdQuery.value) return worldLoaderVersion ?? null
return worldLoaderVersion ?? serverContextServerData.value?.loader_version ?? null
})
const serverBackUrl = computed(() => {
const sid = serverIdQuery.value
if (!sid) return '/hosting/manage'
@@ -688,6 +706,9 @@ export function createServerInstallContent(opts: {
effectiveServerWorldId,
serverContextServerData,
serverContextWorldName,
serverContextWorldGameVersion,
serverContextWorldLoader,
serverContextWorldLoaderVersion,
serverContentProjectIds,
queuedServerInstallProjectIds,
queuedServerInstallCount,