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.
This commit is contained in:
Stefan Ceriu
2026-02-05 12:02:20 +02:00
committed by Stefan Ceriu
parent dcb4ccad12
commit 7347c75ba3
3 changed files with 18 additions and 1 deletions

View File

@@ -112,6 +112,7 @@ struct HomeScreenViewState: BindableState {
var spaceFiltersEnabled = false
var shouldShowSpaceFilters = false
var selectedSpaceFilter: SpaceServiceFilter?
var visibleRooms: [HomeScreenRoom] {

View File

@@ -28,6 +28,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
actionsSubject.eraseToAnyPublisher()
}
// swiftlint:disable:next function_body_length
init(userSession: UserSessionProtocol,
selectedRoomPublisher: CurrentValuePublisher<String?, Never>,
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)

View File

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