Space filters (#4977)

* Add support for SpaceFilters on the SpaceServiceProxy level and a screen that renders them

* Add aliases to a couple of space room mocks

* Update translations and related snapshots

* Add a feature flag for space filters

* Add a new room summary provider filter that takes a list of room identifiers next to the normal state filters

This will take the SpaceFilter's descendants and combine it with the normal filters to reduce the rooms shown

* Add a new space filter button to the home screen and link it to the SpaceFiltersScreen and the actual RoomSummaryProvider room list filters

* Bump the RustSDK to v26.01.20-2 for SpaceFilter support.

* Add a cancellation button to the space filters screen

* Make the filter presentation mode liquidy, move the sheet to within the home screen.

* Address PR comments
This commit is contained in:
Stefan Ceriu
2026-01-21 22:19:39 +02:00
committed by GitHub
parent 0d34a28ec2
commit b4b9f6affa
41 changed files with 808 additions and 13 deletions
@@ -684,7 +684,7 @@ class ChatsTabFlowCoordinator: FlowCoordinatorProtocol {
let hostingController = UIHostingController(rootView: coordinator.toPresentable())
hostingController.view.backgroundColor = .clear
flowParameters.windowManager.globalSearchWindow.rootViewController = hostingController
flowParameters.windowManager.showGlobalSearch()
}
@@ -23,7 +23,7 @@ class ChatsTabFlowCoordinatorStateMachine {
/// Showing the home screen. The `roomListSelectedRoomID` represents the timeline shown on the detail panel (if any)
case roomList(detailState: DetailState?)
/// Showing the feedback screen.
case feedbackScreen(detailState: DetailState?)
@@ -52,7 +52,7 @@ class ChatsTabFlowCoordinatorStateMachine {
case declineAndBlockUserScreen(detailState: DetailState?)
/// The selected room ID from the state if available.
/// The state of the currently selected room
var detailState: DetailState? {
switch self {
case .initial, .userProfileScreen, .shareExtensionRoomList:
@@ -157,7 +157,7 @@ class ChatsTabFlowCoordinatorStateMachine {
case (.roomList(let detailState), .deselectRoom):
// Ignore the flow's dismissal if it has already been replaced with a space.
return detailState == .space ? nil : .roomList(detailState: nil)
case (.roomList, .startSpaceFlow):
return .roomList(detailState: .space)
case (.roomList, .finishedSpaceFlow):