This commit is contained in:
Calum H. (IMB11)
2026-07-28 18:53:50 +01:00
parent 9263e8a57d
commit 82025a72fe
5 changed files with 56 additions and 30 deletions
+8
View File
@@ -970,6 +970,14 @@ async function search(requestParams: string) {
} }
} }
for (const hit of rawResults.result.hits) {
for (const identifier of [hit.project_id, hit.slug]) {
if (identifier) {
queryClient.setQueryData(['projects', 'summary', identifier], hit)
}
}
}
if (isServer) { if (isServer) {
const hits = rawResults.result.hits ?? [] const hits = rawResults.result.hits ?? []
updateServerHits(hits) updateServerHits(hits)
@@ -83,20 +83,34 @@ const serverId = computed(() => {
return Array.isArray(rawId) ? (rawId[0] ?? '') : (rawId ?? '') return Array.isArray(rawId) ? (rawId[0] ?? '') : (rawId ?? '')
}) })
function getCachedServerName(id: string): string | undefined {
return queryClient
.getQueryData<Archon.Servers.v0.ServerGetResponse>(['servers'])
?.servers.find((server) => server.server_id === id)?.name
}
const { data: serverData } = useQuery({ const { data: serverData } = useQuery({
queryKey: computed(() => ['servers', 'detail', serverId.value]), queryKey: computed(() => ['servers', 'detail', serverId.value]),
queryFn: () => null as unknown as Archon.Servers.v0.Server, queryFn: () => client.archon.servers_v0.get(serverId.value),
enabled: false, enabled: computed(() => Boolean(serverId.value)),
placeholderData: () =>
queryClient
.getQueryData<Archon.Servers.v0.ServerGetResponse>(['servers'])
?.servers.find((server) => server.server_id === serverId.value),
staleTime: 30_000,
}) })
const breadcrumbServerId = ref(serverId.value) const breadcrumbServerId = ref(serverId.value)
const breadcrumbLabel = ref(formatMessage(commonMessages.loadingLabel)) const breadcrumbLabel = ref(
getCachedServerName(serverId.value) ?? formatMessage(commonMessages.loadingLabel),
)
watch( watch(
serverId, serverId,
(value) => { (value) => {
if (!route.path.startsWith('/hosting/manage/') || route.name === 'Servers') return if (!route.path.startsWith('/hosting/manage/') || route.name === 'Servers') return
breadcrumbServerId.value = value breadcrumbServerId.value = value
breadcrumbLabel.value = formatMessage(commonMessages.loadingLabel) breadcrumbLabel.value =
getCachedServerName(value) ?? formatMessage(commonMessages.loadingLabel)
}, },
{ flush: 'sync' }, { flush: 'sync' },
) )
@@ -117,18 +131,6 @@ const serverBreadcrumb = useBreadcrumb({
}) })
provideBreadcrumbParent(serverBreadcrumb) provideBreadcrumbParent(serverBreadcrumb)
if (serverId.value) {
try {
await queryClient.ensureQueryData({
queryKey: ['servers', 'detail', serverId.value],
queryFn: () => client.archon.servers_v0.get(serverId.value)!,
staleTime: 30_000,
})
} catch {
// Let mounted layouts' useQuery surface errors; do not fail route setup.
}
}
watch( watch(
() => auth.user.value, () => auth.user.value,
(user, previousUser) => { (user, previousUser) => {
@@ -197,6 +197,7 @@ import { handleSevereError } from '@/store/error.js'
import { import {
provideBreadcrumbParent, provideBreadcrumbParent,
useBreadcrumb, useBreadcrumb,
useRootBreadcrumb,
} from '@/providers/breadcrumbs' } from '@/providers/breadcrumbs'
import { useTheming } from '@/store/state' import { useTheming } from '@/store/state'
@@ -226,7 +227,7 @@ window.addEventListener('online', () => {
}) })
const instance = ref<GameInstance>() const instance = ref<GameInstance>()
const instanceBreadcrumb = useBreadcrumb({ const instanceBreadcrumb = useRootBreadcrumb({
slot: 'instance', slot: 'instance',
id: () => `instance:${String(displayedInstanceRoute.value.params.id ?? '')}`, id: () => `instance:${String(displayedInstanceRoute.value.params.id ?? '')}`,
label: () => label: () =>
+15 -6
View File
@@ -343,9 +343,20 @@ const { installingServerProjects, playServerProject, showAddServerToInstanceModa
injectServerInstall() injectServerInstall()
const installing = ref(false) const installing = ref(false)
const data = shallowRef(null) const data = shallowRef(null)
const projectBreadcrumbLabel = ref(
String(route.params.id ?? formatMessage(commonMessages.loadingLabel)), function getProjectBreadcrumbLabel(projectId) {
) const identifier = Array.isArray(projectId) ? projectId[0] : projectId
if (typeof identifier !== 'string' || !identifier) {
return formatMessage(commonMessages.loadingLabel)
}
return (
queryClient.getQueryData(['projects', 'summary', identifier])?.name ??
formatMessage(commonMessages.loadingLabel)
)
}
const projectBreadcrumbLabel = ref(getProjectBreadcrumbLabel(route.params.id))
const projectBreadcrumb = useBreadcrumb({ const projectBreadcrumb = useBreadcrumb({
slot: 'project', slot: 'project',
id: () => `project:${String(displayedProjectRoute.value.params.id ?? '')}`, id: () => `project:${String(displayedProjectRoute.value.params.id ?? '')}`,
@@ -634,9 +645,7 @@ function reportProject() {
} }
async function fetchProjectData() { async function fetchProjectData() {
projectBreadcrumbLabel.value = String( projectBreadcrumbLabel.value = getProjectBreadcrumbLabel(route.params.id)
route.params.id ?? formatMessage(commonMessages.loadingLabel),
)
const [project, projectV3Result] = await Promise.all([ const [project, projectV3Result] = await Promise.all([
get_project(route.params.id, 'must_revalidate').catch(handleError), get_project(route.params.id, 'must_revalidate').catch(handleError),
get_project_v3(route.params.id, 'must_revalidate').catch(handleError), get_project_v3(route.params.id, 'must_revalidate').catch(handleError),
@@ -95,7 +95,7 @@ import {
useVIntl, useVIntl,
VersionPage, VersionPage,
} from '@modrinth/ui' } from '@modrinth/ui'
import { ref, shallowRef, watch } from 'vue' import { computed, ref, shallowRef, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import { SwapIcon } from '@/assets/icons' import { SwapIcon } from '@/assets/icons'
@@ -143,6 +143,17 @@ const props = defineProps<{
}>() }>()
const version = ref(props.versions.find((version) => version.id === route.params.version)) const version = ref(props.versions.find((version) => version.id === route.params.version))
const versionBreadcrumbLabel = computed(() => {
const versionName = version.value?.name
if (!versionName) {
return formatMessage(commonMessages.loadingLabel)
}
const projectNamePrefix = `${props.project.title} `
return versionName.startsWith(projectNamePrefix)
? versionName.slice(projectNamePrefix.length).trim() || versionName
: versionName
})
const versionsBreadcrumb = useBreadcrumb({ const versionsBreadcrumb = useBreadcrumb({
slot: 'project-section', slot: 'project-section',
id: () => `project-versions:${props.project.id}`, id: () => `project-versions:${props.project.id}`,
@@ -160,12 +171,7 @@ useBreadcrumb(
`version:${props.project.id}:${String( `version:${props.project.id}:${String(
displayedVersionRoute.value.params.version ?? '', displayedVersionRoute.value.params.version ?? '',
)}`, )}`,
label: () => label: versionBreadcrumbLabel,
version.value?.name ??
String(
displayedVersionRoute.value.params.version ??
formatMessage(commonMessages.loadingLabel),
),
to: () => displayedVersionRoute.value.fullPath, to: () => displayedVersionRoute.value.fullPath,
}, },
{ parent: versionsBreadcrumb }, { parent: versionsBreadcrumb },