From b0108e0624da8aea47ae2dbc4122835b7c7c6fee Mon Sep 17 00:00:00 2001 From: Prospector <6166773+Prospector@users.noreply.github.com> Date: Sat, 4 Jul 2026 16:15:28 -0700 Subject: [PATCH] fix: environment filters (#6611) --- .../app-frontend/src/locales/en-US/index.json | 2 +- apps/app-frontend/src/pages/Browse.vue | 2 +- .../composables/use-server-install-content.ts | 35 ++++++++- .../src/pages/discover/[type]/index.vue | 11 ++- packages/ui/src/components/base/Accordion.vue | 4 +- .../components/search/SearchSidebarFilter.vue | 16 ++-- .../composables/use-browse-search.ts | 16 +++- .../src/layouts/shared/browse-tab/layout.vue | 6 +- .../browse-tab/providers/browse-manager.ts | 4 + .../src/layouts/shared/browse-tab/sidebar.vue | 73 +++++++++++------ packages/ui/src/locales/en-US/index.json | 5 +- packages/ui/src/utils/common-messages.ts | 6 +- packages/ui/src/utils/search.ts | 78 +++++++++++++------ 13 files changed, 190 insertions(+), 68 deletions(-) diff --git a/apps/app-frontend/src/locales/en-US/index.json b/apps/app-frontend/src/locales/en-US/index.json index e5a64ba46c..9b8fdec3b9 100644 --- a/apps/app-frontend/src/locales/en-US/index.json +++ b/apps/app-frontend/src/locales/en-US/index.json @@ -180,7 +180,7 @@ "message": "Discover servers" }, "app.browse.hide-added-servers": { - "message": "Hide already added servers" + "message": "Hide servers already added" }, "app.browse.project-type.modpacks": { "message": "Modpacks" diff --git a/apps/app-frontend/src/pages/Browse.vue b/apps/app-frontend/src/pages/Browse.vue index 7c5b0a0dbb..73cd969063 100644 --- a/apps/app-frontend/src/pages/Browse.vue +++ b/apps/app-frontend/src/pages/Browse.vue @@ -403,7 +403,7 @@ const messages = defineMessages({ }, hideAddedServers: { id: 'app.browse.hide-added-servers', - defaultMessage: 'Hide already added servers', + defaultMessage: 'Hide servers already added', }, installingToServer: { id: 'app.browse.server.installing', diff --git a/apps/frontend/src/composables/use-server-install-content.ts b/apps/frontend/src/composables/use-server-install-content.ts index e3c579d684..fba51994e6 100644 --- a/apps/frontend/src/composables/use-server-install-content.ts +++ b/apps/frontend/src/composables/use-server-install-content.ts @@ -4,6 +4,7 @@ import type { BrowseInstallPlan, BrowseSearchState, CreationFlowContextValue, + EnvironmentSearchOverride, FilterValue, PendingServerContentInstall, PendingServerContentInstallType, @@ -160,6 +161,7 @@ export function useServerInstallContent({ }) const serverHideInstalled = ref(false) + const serverContentServerOnly = ref(false) const hideSelectedServerInstalls = ref(false) const installingProjectIds = ref>(new Set()) const optimisticallyInstalledProjectIds = ref>(new Set()) @@ -348,10 +350,6 @@ export function useServerInstallContent({ filters.push({ type: 'plugin_loader', option: platform }) } - if (projectType.value?.id === 'mod') { - filters.push({ type: 'environment', option: 'server' }) - } - if (serverHideInstalled.value && hiddenInstalledProjectIds.value.size > 0) { for (const x of hiddenInstalledProjectIds.value) { filters.push({ @@ -383,6 +381,28 @@ export function useServerInstallContent({ return filters }) + const showServerOnlyToggle = computed(() => !!serverData.value && projectType.value?.id === 'mod') + + const serverEnvironmentOverride = computed(() => { + if (!showServerOnlyToggle.value) return undefined + if (serverContentServerOnly.value) { + return { + mode: 'include', + values: [ + 'server_only', + 'dedicated_server_only', + 'server_only_client_optional', + 'client_or_server_prefers_both', + 'client_or_server', + ], + } + } + return { + mode: 'exclude', + values: ['client_only', 'singleplayer_only'], + } + }) + function getCurrentServerInstallType(): BrowseInstallContentType { const type = projectType.value?.id if (type === 'modpack' || type === 'mod' || type === 'plugin' || type === 'datapack') { @@ -737,6 +757,10 @@ export function useServerInstallContent({ serverHideInstalled.value = route.query.shi === 'true' } + if (route.query.so && projectType.value?.id === 'mod') { + serverContentServerOnly.value = route.query.so === 'true' + } + watch(serverHideInstalled, (hideInstalled) => { if (hideInstalled) { syncHiddenInstalledProjectIds() @@ -763,6 +787,9 @@ export function useServerInstallContent({ serverContentData, serverFilters, serverHideInstalled, + serverContentServerOnly, + showServerOnlyToggle, + serverEnvironmentOverride, hideSelectedServerInstalls, installingProjectIds, optimisticallyInstalledProjectIds, diff --git a/apps/frontend/src/pages/discover/[type]/index.vue b/apps/frontend/src/pages/discover/[type]/index.vue index 3c02528a13..6cdd5da96d 100644 --- a/apps/frontend/src/pages/discover/[type]/index.vue +++ b/apps/frontend/src/pages/discover/[type]/index.vue @@ -158,6 +158,9 @@ const { serverContentData, serverFilters, serverHideInstalled, + serverContentServerOnly, + showServerOnlyToggle, + serverEnvironmentOverride, hideSelectedServerInstalls, installingProjectIds, optimisticallyInstalledProjectIds, @@ -378,10 +381,12 @@ const searchState = useBrowseSearch({ projectType: projectTypeId, tags, providedFilters: serverFilters, + environmentOverride: serverEnvironmentOverride, search, - persistentQueryParams: ['sid', 'wid', 'shi', 'from'], + persistentQueryParams: ['sid', 'wid', 'shi', 'so', 'from'], getExtraQueryParams: () => ({ shi: serverHideInstalled.value ? 'true' : undefined, + so: showServerOnlyToggle.value && serverContentServerOnly.value ? 'true' : undefined, }), maxResultsOptions: currentMaxResultsOptions, displayMode: resultsDisplayMode, @@ -469,6 +474,10 @@ provideBrowseManager({ queuedServerInstallCount.value > 0, ), hideSelectedLabel: computed(() => formatMessage(commonMessages.hideSelectedContentLabel)), + serverOnly: serverContentServerOnly, + showServerOnly: showServerOnlyToggle, + serverOnlyLabel: computed(() => formatMessage(commonMessages.serverOnlyLabel)), + hiddenFilterTypeIds: computed(() => (showServerOnlyToggle.value ? ['environment'] : [])), displayMode: resultsDisplayMode, cycleDisplayMode: cycleSearchDisplayMode, maxResultsOptions: currentMaxResultsOptions, diff --git a/packages/ui/src/components/base/Accordion.vue b/packages/ui/src/components/base/Accordion.vue index 634afc622b..4afe633d55 100644 --- a/packages/ui/src/components/base/Accordion.vue +++ b/packages/ui/src/components/base/Accordion.vue @@ -1,6 +1,6 @@