From 7347c75ba3ef0e775b23ddb903991773e3d7cdce Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Thu, 5 Feb 2026 12:02:20 +0200 Subject: [PATCH] Hide the space filters button when not part of any spaces Also automatically dismiss a selected filter if no longer available i.e. the space has been left. --- .../Screens/HomeScreen/HomeScreenModels.swift | 1 + .../Screens/HomeScreen/HomeScreenViewModel.swift | 16 ++++++++++++++++ .../Screens/HomeScreen/View/HomeScreen.swift | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift index 99fdfee76..190cb6a94 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift @@ -112,6 +112,7 @@ struct HomeScreenViewState: BindableState { var spaceFiltersEnabled = false + var shouldShowSpaceFilters = false var selectedSpaceFilter: SpaceServiceFilter? var visibleRooms: [HomeScreenRoom] { diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift index f96cbeb8d..00f27fd7c 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift @@ -28,6 +28,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol actionsSubject.eraseToAnyPublisher() } + // swiftlint:disable:next function_body_length init(userSession: UserSessionProtocol, selectedRoomPublisher: CurrentValuePublisher, appSettings: AppSettings, @@ -95,6 +96,21 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol } .store(in: &cancellables) + userSession.clientProxy.spaceService.spaceFilterPublisher + .receive(on: DispatchQueue.main) + .sink { [weak self] filters in + guard let self else { return } + + state.shouldShowSpaceFilters = !filters.isEmpty + + if let selectedSpaceFilter = spaceFilterSubject.value, + !filters.contains(selectedSpaceFilter) { + // Clear the spaces filter if the space has been left. + spaceFilterSubject.send(nil) + } + } + .store(in: &cancellables) + selectedRoomPublisher .weakAssign(to: \.state.selectedRoomID, on: self) .store(in: &cancellables) diff --git a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift index 3ab63ce34..692ae306f 100644 --- a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift +++ b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift @@ -66,7 +66,7 @@ struct HomeScreen: View { } } - if context.viewState.spaceFiltersEnabled { + if context.viewState.spaceFiltersEnabled, context.viewState.shouldShowSpaceFilters { if #available(iOS 26, *) { ToolbarSpacer(.fixed, placement: .primaryAction) }