From 15ff4e497bf34006301c4eb2f7095a92b3d0db24 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Fri, 30 Jan 2026 13:18:35 +0200 Subject: [PATCH] Add a search bar to the space filters screen --- .../ChatsSpaceFiltersScreenModels.swift | 15 ++++++++++++++- .../View/ChatsSpaceFiltersScreen.swift | 5 ++++- .../chatsSpaceFiltersScreen.iPhone-en-GB-0.png | 4 ++-- .../chatsSpaceFiltersScreen.iPhone-pseudo-0.png | 4 ++-- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/ElementX/Sources/Screens/ChatsSpaceFiltersScreen/ChatsSpaceFiltersScreenModels.swift b/ElementX/Sources/Screens/ChatsSpaceFiltersScreen/ChatsSpaceFiltersScreenModels.swift index c5323e0f2..b63a2615e 100644 --- a/ElementX/Sources/Screens/ChatsSpaceFiltersScreen/ChatsSpaceFiltersScreenModels.swift +++ b/ElementX/Sources/Screens/ChatsSpaceFiltersScreen/ChatsSpaceFiltersScreenModels.swift @@ -15,9 +15,22 @@ enum ChatsSpaceFiltersScreenViewModelAction { struct ChatsSpaceFiltersScreenViewState: BindableState { var filters = [SpaceServiceFilter]() var bindings: ChatsSpaceFiltersScreenViewStateBindings + + var visibleFilters: [SpaceServiceFilter] { + if bindings.searchQuery.isEmpty { + return filters + } + + return filters.filter { filter in + filter.room.name.localizedStandardContains(bindings.searchQuery) || + (filter.room.canonicalAlias ?? "").localizedStandardContains(bindings.searchQuery) + } + } } -struct ChatsSpaceFiltersScreenViewStateBindings { } +struct ChatsSpaceFiltersScreenViewStateBindings { + var searchQuery = "" +} enum ChatsSpaceFiltersScreenViewAction: CustomStringConvertible { case confirm(SpaceServiceFilter) diff --git a/ElementX/Sources/Screens/ChatsSpaceFiltersScreen/View/ChatsSpaceFiltersScreen.swift b/ElementX/Sources/Screens/ChatsSpaceFiltersScreen/View/ChatsSpaceFiltersScreen.swift index 1ec71b50e..bba6e6513 100644 --- a/ElementX/Sources/Screens/ChatsSpaceFiltersScreen/View/ChatsSpaceFiltersScreen.swift +++ b/ElementX/Sources/Screens/ChatsSpaceFiltersScreen/View/ChatsSpaceFiltersScreen.swift @@ -15,13 +15,16 @@ struct ChatsSpaceFiltersScreen: View { NavigationStack { ScrollView { LazyVStack(spacing: 0) { - ForEach(context.viewState.filters) { filter in + ForEach(context.viewState.visibleFilters) { filter in ChatsSpaceFilterCell(filter: filter, mediaProvider: context.mediaProvider) { filter in context.send(viewAction: .confirm(filter)) } } } + .searchable(text: $context.searchQuery, placement: .navigationBarDrawer) + .focusSearchIfHardwareKeyboardAvailable() + .compoundSearchField() } .toolbar { toolbar } .navigationTitle(L10n.screenRoomlistYourSpaces) diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/chatsSpaceFiltersScreen.iPhone-en-GB-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/chatsSpaceFiltersScreen.iPhone-en-GB-0.png index 85b33fee1..3d6f5f139 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/chatsSpaceFiltersScreen.iPhone-en-GB-0.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/chatsSpaceFiltersScreen.iPhone-en-GB-0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e28fb24e8a9087f8e951ed8c18ab9048cfacd72fcb2c328ddf3e46169306a1b6 -size 100972 +oid sha256:fae14c3a25602d5220c0e36439b408999fda970f1e27cbf1b4a6ff57ecac5b6e +size 100370 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/chatsSpaceFiltersScreen.iPhone-pseudo-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/chatsSpaceFiltersScreen.iPhone-pseudo-0.png index 85b33fee1..c2297f99c 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/chatsSpaceFiltersScreen.iPhone-pseudo-0.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/chatsSpaceFiltersScreen.iPhone-pseudo-0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e28fb24e8a9087f8e951ed8c18ab9048cfacd72fcb2c328ddf3e46169306a1b6 -size 100972 +oid sha256:a250e7aedfcca3264b58fc4227d680d23ba37cbbe4dbfbbbbef09e36bf136f23 +size 101326