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, effectiveServerWorldId,
serverContextServerData, serverContextServerData,
serverContextWorldName, serverContextWorldName,
serverContextWorldGameVersion,
serverContextWorldLoader,
serverContextWorldLoaderVersion,
serverContentProjectIds, serverContentProjectIds,
queuedServerInstallProjectIds, queuedServerInstallProjectIds,
queuedServerInstallCount, queuedServerInstallCount,
@@ -296,10 +299,10 @@ const serverContextFilters = computed(() => {
const pt = projectType.value const pt = projectType.value
if (pt !== 'modpack') { if (pt !== 'modpack') {
const gameVersion = serverContextServerData.value.mc_version const gameVersion = serverContextWorldGameVersion.value
if (gameVersion) filters.push({ type: 'game_version', option: gameVersion }) 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)) if (platform && ['fabric', 'forge', 'quilt', 'neoforge'].includes(platform))
filters.push({ type: 'mod_loader', option: platform }) filters.push({ type: 'mod_loader', option: platform })
if (platform && ['paper', 'purpur'].includes(platform)) if (platform && ['paper', 'purpur'].includes(platform))
@@ -334,6 +337,14 @@ const combinedProvidedFilters = computed(() =>
isServerContext.value ? serverContextFilters.value : instanceFilters.value, 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 { const {
serverPings, serverPings,
contextMenuRef, contextMenuRef,
@@ -477,6 +488,21 @@ function resetInstanceContext() {
breadcrumbs.setContext(null) 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( watch(
() => route.params.projectType as ProjectType, () => route.params.projectType as ProjectType,
async (newType) => { async (newType) => {
@@ -562,9 +588,9 @@ const installContext = computed(() => {
if (isServerContext.value && serverContextServerData.value) { if (isServerContext.value && serverContextServerData.value) {
return { return {
name: serverContextWorldName.value ?? formatMessage(messages.worldFallbackName), name: serverContextWorldName.value ?? formatMessage(messages.worldFallbackName),
loader: serverContextServerData.value.loader ?? '', loader: serverContextWorldLoader.value ?? '',
loaderVersion: serverContextServerData.value.loader_version ?? '', loaderVersion: serverContextWorldLoaderVersion.value ?? '',
gameVersion: serverContextServerData.value.mc_version ?? '', gameVersion: serverContextWorldGameVersion.value ?? '',
serverId: serverIdQuery.value, serverId: serverIdQuery.value,
upstream: serverContextServerData.value.upstream, upstream: serverContextServerData.value.upstream,
iconSrc: null as string | null, iconSrc: null as string | null,
@@ -639,8 +665,8 @@ function getCurrentSelectedInstallPreferences(projectTypeValue: string) {
function getServerInstallTargetPreferences(contentType: BrowseInstallContentType) { function getServerInstallTargetPreferences(contentType: BrowseInstallContentType) {
return getTargetInstallPreferences( return getTargetInstallPreferences(
{ {
gameVersion: serverContextServerData.value?.mc_version, gameVersion: serverContextWorldGameVersion.value,
loader: serverContextServerData.value?.loader, loader: serverContextWorldLoader.value,
}, },
contentType, contentType,
) )
@@ -65,6 +65,9 @@ export interface ServerInstallContentContext {
effectiveServerWorldId: ComputedRef<string | null> effectiveServerWorldId: ComputedRef<string | null>
serverContextServerData: Ref<Archon.Servers.v0.Server | null> serverContextServerData: Ref<Archon.Servers.v0.Server | null>
serverContextWorldName: ComputedRef<string | null> serverContextWorldName: ComputedRef<string | null>
serverContextWorldGameVersion: ComputedRef<string | null>
serverContextWorldLoader: ComputedRef<string | null>
serverContextWorldLoaderVersion: ComputedRef<string | null>
serverContentProjectIds: Ref<Set<string>> serverContentProjectIds: Ref<Set<string>>
queuedServerInstallProjectIds: ComputedRef<Set<string>> queuedServerInstallProjectIds: ComputedRef<Set<string>>
queuedServerInstallCount: ComputedRef<number> queuedServerInstallCount: ComputedRef<number>
@@ -283,6 +286,21 @@ export function createServerInstallContent(opts: {
return serverFull.worlds.find((world) => world.is_active) ?? serverFull.worlds[0] ?? null return serverFull.worlds.find((world) => world.is_active) ?? serverFull.worlds[0] ?? null
}) })
const serverContextWorldName = computed(() => serverContextWorld.value?.name ?? 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 serverBackUrl = computed(() => {
const sid = serverIdQuery.value const sid = serverIdQuery.value
if (!sid) return '/hosting/manage' if (!sid) return '/hosting/manage'
@@ -688,6 +706,9 @@ export function createServerInstallContent(opts: {
effectiveServerWorldId, effectiveServerWorldId,
serverContextServerData, serverContextServerData,
serverContextWorldName, serverContextWorldName,
serverContextWorldGameVersion,
serverContextWorldLoader,
serverContextWorldLoaderVersion,
serverContentProjectIds, serverContentProjectIds,
queuedServerInstallProjectIds, queuedServerInstallProjectIds,
queuedServerInstallCount, queuedServerInstallCount,
@@ -129,13 +129,6 @@ const { canSetup, permissionDeniedMessage } = useServerPermissions()
const router = useRouter() const router = useRouter()
const queryClient = useQueryClient() const queryClient = useQueryClient()
const type = computed(() => {
const loader = server.value?.loader?.toLowerCase()
if (loader === 'paper' || loader === 'purpur') return 'plugin'
if (loader === 'vanilla') return 'datapack'
return 'mod'
})
const queryKey = computed(() => ['content', 'list', 'v1', serverId, worldId.value]) const queryKey = computed(() => ['content', 'list', 'v1', serverId, worldId.value])
const modpackContentQueryKey = computed(() => [ const modpackContentQueryKey = computed(() => [
'content', 'content',
@@ -159,6 +152,13 @@ const contentQuery = useQuery({
staleTime: 0, staleTime: 0,
}) })
const type = computed(() => {
const loader = (contentQuery.data.value?.modloader ?? server.value?.loader)?.toLowerCase()
if (loader === 'paper' || loader === 'purpur') return 'plugin'
if (loader === 'vanilla') return 'datapack'
return 'mod'
})
const isModpackContentModalOpen = ref(false) const isModpackContentModalOpen = ref(false)
const modpackContentQuery = useQuery({ const modpackContentQuery = useQuery({
queryKey: modpackContentQueryKey, queryKey: modpackContentQueryKey,