From 1e1489df7591eff8456efd4dea07f951b3a71b40 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sat, 17 May 2025 23:49:44 +0200 Subject: [PATCH] Show pinned sources on top of global search --- src/modules/global-search/screens/SearchAll.tsx | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/modules/global-search/screens/SearchAll.tsx b/src/modules/global-search/screens/SearchAll.tsx index 097d69ce..382ae9a0 100644 --- a/src/modules/global-search/screens/SearchAll.tsx +++ b/src/modules/global-search/screens/SearchAll.tsx @@ -31,9 +31,10 @@ import { translateExtensionLanguage } from '@/modules/extension/Extensions.utils import { AppRoutes } from '@/modules/core/AppRoute.constants.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { Sources } from '@/modules/source/services/Sources.ts'; -import { SourceDisplayNameInfo, SourceIdInfo } from '@/modules/source/Source.types.ts'; +import { SourceDisplayNameInfo, SourceIdInfo, SourceMetaInfo } from '@/modules/source/Source.types.ts'; import { useMetadataServerSettings } from '@/modules/settings/services/ServerSettingsMetadata.ts'; import { useAppTitleAndAction } from '@/modules/navigation-bar/hooks/useAppTitleAndAction.ts'; +import { getSourceMetadata } from '@/modules/source/services/SourceMetadata.ts'; type SourceLoadingState = { isLoading: boolean; hasResults: boolean; emptySearch: boolean; error: any }; type SourceToLoadingStateMap = Map; @@ -42,10 +43,13 @@ const compareSourceByName = (sourceA: SourceDisplayNameInfo, sourceB: SourceDisp sourceA.displayName.localeCompare(sourceB.displayName); const compareSourcesBySearchResult = ( - sourceA: SourceIdInfo, - sourceB: SourceIdInfo, + sourceA: SourceIdInfo & SourceMetaInfo, + sourceB: SourceIdInfo & SourceMetaInfo, sourceToFetchedStateMap: SourceToLoadingStateMap, ): -1 | 0 | 1 => { + const isSourceAPinned = getSourceMetadata(sourceA).isPinned; + const isSourceBPinned = getSourceMetadata(sourceB).isPinned; + const sourceAState = sourceToFetchedStateMap.get(sourceA.id); const sourceBState = sourceToFetchedStateMap.get(sourceB.id); @@ -78,6 +82,13 @@ const compareSourcesBySearchResult = ( return 1; } + if (isSourceAPinned && !isSourceBPinned) { + return -1; + } + if (!isSourceAPinned && isSourceBPinned) { + return 1; + } + return 0; }; const TRIGGER_SEARCH_THRESHOLD = 1000; // ms