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:
committed by
Stefan Ceriu
parent
dcb4ccad12
commit
7347c75ba3
@@ -112,6 +112,7 @@ struct HomeScreenViewState: BindableState {
|
||||
|
||||
var spaceFiltersEnabled = false
|
||||
|
||||
var shouldShowSpaceFilters = false
|
||||
var selectedSpaceFilter: SpaceServiceFilter?
|
||||
|
||||
var visibleRooms: [HomeScreenRoom] {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user