From 12f9ac94fd63ca02c7cdfcd09a40abbfdf1f2b3d Mon Sep 17 00:00:00 2001 From: miloschwartz Date: Thu, 2 Jul 2026 22:07:30 -0400 Subject: [PATCH] allow grouping when filter applied --- messages/en-US.json | 2 +- server/routers/launcher/launcherScale.ts | 5 ++- .../LauncherSettingsMenu.tsx | 12 ++++--- .../resource-launcher/ResourceLauncher.tsx | 6 ---- src/lib/launcherScale.ts | 31 +++++++++++++++---- 5 files changed, 37 insertions(+), 19 deletions(-) diff --git a/messages/en-US.json b/messages/en-US.json index e699aba9f..fede28c11 100644 --- a/messages/en-US.json +++ b/messages/en-US.json @@ -3613,7 +3613,7 @@ "resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.", "resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.", "resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.", - "resourceLauncherCompactGroupingLocked": "Grouping is set to None in compact mode.", + "resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping in compact mode.", "resourceLauncherCopiedToClipboard": "Copied to clipboard", "resourceLauncherCopiedAccessDescription": "Resource access has been copied to your clipboard.", "resourceLauncherViewNamePlaceholder": "View name", diff --git a/server/routers/launcher/launcherScale.ts b/server/routers/launcher/launcherScale.ts index ec7750cfb..5d9eb42c2 100644 --- a/server/routers/launcher/launcherScale.ts +++ b/server/routers/launcher/launcherScale.ts @@ -76,6 +76,7 @@ async function getLauncherScaleForUserUncached( : "compact"; const siteFilterIds = parseIdListParam(query.siteIds); + const labelFilterIds = parseIdListParam(query.labelIds); const allowSiteGrouping = siteGroupCount <= LAUNCHER_FULL_MAX_SITE_GROUPS || @@ -83,7 +84,9 @@ async function getLauncherScaleForUserUncached( siteFilterIds.length <= LAUNCHER_FILTERED_SITE_GROUPING_MAX); const allowLabelGrouping = - labelGroupCount <= LAUNCHER_FULL_MAX_LABEL_GROUPS; + labelGroupCount <= LAUNCHER_FULL_MAX_LABEL_GROUPS || + (labelFilterIds.length > 0 && + labelFilterIds.length <= LAUNCHER_FILTERED_SITE_GROUPING_MAX); const requireSearchOrFilter = mode === "compact" && resourceCount > LAUNCHER_FULL_MAX_RESOURCES; diff --git a/src/components/resource-launcher/LauncherSettingsMenu.tsx b/src/components/resource-launcher/LauncherSettingsMenu.tsx index abce2e5e6..2cf2a3cbb 100644 --- a/src/components/resource-launcher/LauncherSettingsMenu.tsx +++ b/src/components/resource-launcher/LauncherSettingsMenu.tsx @@ -78,8 +78,9 @@ export function LauncherSettingsMenu({ {t("resourceLauncherGroupBySite")} @@ -87,8 +88,9 @@ export function LauncherSettingsMenu({ {t("resourceLauncherGroupByLabel")} @@ -97,7 +99,7 @@ export function LauncherSettingsMenu({ {isCompactMode ? (

- {t("resourceLauncherCompactGroupingLocked")} + {t("resourceLauncherCompactGroupingHint")}

) : null} {!isCompactMode && !capabilities.allowSiteGrouping ? ( diff --git a/src/components/resource-launcher/ResourceLauncher.tsx b/src/components/resource-launcher/ResourceLauncher.tsx index 2cc9d50a2..23db498ea 100644 --- a/src/components/resource-launcher/ResourceLauncher.tsx +++ b/src/components/resource-launcher/ResourceLauncher.tsx @@ -549,12 +549,6 @@ export default function ResourceLauncher({ )} - {scale.mode === "compact" && !showSearchFirstGate ? ( -

- {t("resourceLauncherCompactModeHint")} -

- ) : null} - {showSearchFirstGate ? ( ) : showGroupList ? ( diff --git a/src/lib/launcherScale.ts b/src/lib/launcherScale.ts index 6b086bab9..a9e03ecb4 100644 --- a/src/lib/launcherScale.ts +++ b/src/lib/launcherScale.ts @@ -15,11 +15,27 @@ export function getEffectiveGroupBy( scale: LauncherScaleInfo, config: LauncherViewConfig ): LauncherViewConfig["groupBy"] { - if (scale.mode === "compact") { - return "none"; + if (scale.mode !== "compact") { + return config.groupBy; } - return config.groupBy; + if ( + config.groupBy === "site" && + config.siteIds.length > 0 && + scale.capabilities.allowSiteGrouping + ) { + return "site"; + } + + if ( + config.groupBy === "label" && + config.labelIds.length > 0 && + scale.capabilities.allowLabelGrouping + ) { + return "label"; + } + + return "none"; } export function getEffectiveLauncherConfig( @@ -49,9 +65,12 @@ export function shouldFetchLauncherGroups( } return ( - scale.capabilities.allowSiteGrouping && - groupBy === "site" && - config.siteIds.length > 0 + (scale.capabilities.allowSiteGrouping && + groupBy === "site" && + config.siteIds.length > 0) || + (scale.capabilities.allowLabelGrouping && + groupBy === "label" && + config.labelIds.length > 0) ); }