From 8427a7a6e4c873c17ee9fc7fd206b1a427690f8e Mon Sep 17 00:00:00 2001 From: "Calum H. (IMB11)" Date: Mon, 6 Jul 2026 12:10:47 +0100 Subject: [PATCH 1/2] feat: project page header when visiting from browse --- apps/app-frontend/src/pages/Browse.vue | 10 +- apps/app-frontend/src/pages/project/Index.vue | 6 +- apps/frontend/src/locales/en-US/index.json | 3 + apps/frontend/src/pages/[type]/[project].vue | 115 +++++++++- apps/frontend/src/pages/discover.vue | 17 +- .../src/pages/discover/[type]/index.vue | 217 +++++++++--------- .../composables/use-browse-search.ts | 33 ++- 7 files changed, 272 insertions(+), 129 deletions(-) diff --git a/apps/app-frontend/src/pages/Browse.vue b/apps/app-frontend/src/pages/Browse.vue index 815aa137c1..cc0fe68582 100644 --- a/apps/app-frontend/src/pages/Browse.vue +++ b/apps/app-frontend/src/pages/Browse.vue @@ -72,6 +72,7 @@ const debugLog = useDebugLogger('Browse') const router = useRouter() const route = useRoute() const themeStore = useTheming() +const browseRouteActive = computed(() => route.path.startsWith('/browse/')) const serverSetupModalRef = ref | null>(null) const serverInstallContent = createServerInstallContent({ serverSetupModalRef }) provideServerInstallContent(serverInstallContent) @@ -490,6 +491,9 @@ function resetInstanceContext() { watch( () => route.params.projectType as ProjectType, async (newType) => { + if (!browseRouteActive.value) { + return + } if (isSetupServerContext.value) { enforceSetupModpackRoute(newType) if (newType !== 'modpack') return @@ -960,6 +964,7 @@ const lockedFilterMessages = computed(() => ({ const searchState = useBrowseSearch({ projectType, tags, + active: browseRouteActive, providedFilters: combinedProvidedFilters, search, persistentQueryParams: ['i', 'ai', 'shi', 'sid', 'wid', 'from'], @@ -1035,6 +1040,9 @@ onUnmounted(() => { }) function getProjectBrowseQuery() { + if (!browseRouteActive.value) { + return undefined + } if (!installContext.value) return undefined return { ...route.query, @@ -1139,7 +1147,7 @@ provideBrowseManager({ @browse-modpacks="() => {}" @create="handleServerModpackFlowCreate" /> - + diff --git a/apps/app-frontend/src/pages/project/Index.vue b/apps/app-frontend/src/pages/project/Index.vue index a4aff5dfa6..52c50fc968 100644 --- a/apps/app-frontend/src/pages/project/Index.vue +++ b/apps/app-frontend/src/pages/project/Index.vue @@ -320,10 +320,6 @@ const messages = defineMessages({ id: 'app.project.install-button.already-installed', defaultMessage: 'This project is already installed', }, - installContentToInstance: { - id: 'app.project.install-context.install-content-to-instance', - defaultMessage: 'Install content to instance', - }, switchVersion: { id: 'app.project.install-button.switch-version', defaultMessage: 'Switch version', @@ -450,7 +446,7 @@ const projectInstallContext = computed(() => { iconSrc: instance.value.icon_path ? convertFileSrc(instance.value.icon_path) : null, backUrl: projectBrowseBackUrl.value, backLabel: formatMessage(messages.backToBrowse), - heading: formatMessage(messages.installContentToInstance), + heading: formatMessage(commonMessages.installingContentLabel), } } diff --git a/apps/frontend/src/locales/en-US/index.json b/apps/frontend/src/locales/en-US/index.json index a3fbe84593..5bc45be605 100644 --- a/apps/frontend/src/locales/en-US/index.json +++ b/apps/frontend/src/locales/en-US/index.json @@ -3455,6 +3455,9 @@ "project.gallery.title": { "message": "Gallery" }, + "project.install-context.back-to-discover": { + "message": "Back to discover" + }, "project.license.error": { "message": "License text could not be retrieved." }, diff --git a/apps/frontend/src/pages/[type]/[project].vue b/apps/frontend/src/pages/[type]/[project].vue index 7f908b9904..429efe8d5f 100644 --- a/apps/frontend/src/pages/[type]/[project].vue +++ b/apps/frontend/src/pages/[type]/[project].vue @@ -97,6 +97,22 @@ +
+ +
+