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) }