From 496838c1844817d6d8b04e17cb8151df1cac3a32 Mon Sep 17 00:00:00 2001 From: 7w1 Date: Mon, 23 Mar 2026 20:33:42 -0500 Subject: [PATCH] context aware search menu --- .changeset/add-context-aware-search.md | 5 +++++ src/app/features/search/Search.tsx | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 .changeset/add-context-aware-search.md diff --git a/.changeset/add-context-aware-search.md b/.changeset/add-context-aware-search.md new file mode 100644 index 000000000..ab398a1d2 --- /dev/null +++ b/.changeset/add-context-aware-search.md @@ -0,0 +1,5 @@ +--- +default: minor +--- + +`Ctrl + K` search menu is now context aware and lists the current space's rooms at the top. diff --git a/src/app/features/search/Search.tsx b/src/app/features/search/Search.tsx index 9ec8f150a..65c79ba83 100644 --- a/src/app/features/search/Search.tsx +++ b/src/app/features/search/Search.tsx @@ -55,6 +55,7 @@ import { useKeyDown } from '$hooks/useKeyDown'; import { useMediaAuthentication } from '$hooks/useMediaAuthentication'; import { KeySymbol } from '$utils/key-symbol'; import { isMacOS } from '$utils/user-agent'; +import { useSelectedSpace } from '$hooks/router/useSelectedSpace'; enum SearchRoomType { Rooms = '#', @@ -167,7 +168,19 @@ export function Search({ requestClose }: SearchProps) { ); const [result, search, resetSearch] = useAsyncSearch(targetRooms, getTargetStr, SEARCH_OPTIONS); - const roomsToRender = result ? result.items : topActiveRooms; + const selectedSpaceId = useSelectedSpace(); + + const roomsToRender = useMemo(() => { + const items = result ? result.items : topActiveRooms; + if (!selectedSpaceId) return items; + + return [...items].sort((a, b) => { + const aInSpace = getAllParents(roomToParents, a)?.has(selectedSpaceId) ? 1 : 0; + const bInSpace = getAllParents(roomToParents, b)?.has(selectedSpaceId) ? 1 : 0; + return bInSpace - aInSpace; + }); + }, [result, topActiveRooms, selectedSpaceId, roomToParents]); + const listFocus = useListFocusIndex(roomsToRender.length, 0); const queryHighlighRegex = result?.query