mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Add a Mentions room list filter (#5885)
* Add a Mentions room list filter Adds a new filter chip to the room list that shows only rooms with unread mentions, using the new mentions room list filter from the Rust SDK (matrix-org/matrix-rust-sdk branch matthew/mentions-filter). The SDK version needs bumping to a release that includes the new filter kind before this can build against the released components. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Order the room list filters by expected usage Move Favourites ahead of People and Rooms so the more commonly used filters (Unreads, Mentions, Favourites) sit first in the chip row — Rooms and Invites are used rarely enough that it's fine for them to wrap off the side. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uk8aPxHn3BHCe52L226jdG * update the SDK and use the appropriate rust filter types * preview tests + app settings flag for mentions --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Mauro Romito <mauro.romito@element.io>
This commit is contained in:
@@ -13,7 +13,8 @@ import Testing
|
||||
final class RoomListFiltersStateTests {
|
||||
var appSettings: AppSettings
|
||||
var state: RoomListFiltersState
|
||||
let allCasesWithoutLowPriority = RoomListFilter.allCases.filter { $0 != .lowPriority }
|
||||
/// The filters that aren't hidden behind a feature flag.
|
||||
let defaultFilters = RoomListFilter.allCases.filter { $0 != .mentions && $0 != .lowPriority }
|
||||
|
||||
init() {
|
||||
appSettings = AppSettings.volatile()
|
||||
@@ -24,7 +25,7 @@ final class RoomListFiltersStateTests {
|
||||
func initialState() {
|
||||
#expect(!state.isFiltering)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
||||
#expect(state.availableFilters == defaultFilters)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -32,11 +33,11 @@ final class RoomListFiltersStateTests {
|
||||
state.activateFilter(.unreads)
|
||||
#expect(state.isFiltering)
|
||||
#expect(state.activeFilters == [.unreads])
|
||||
#expect(state.availableFilters == [.people, .rooms, .favourites])
|
||||
#expect(state.availableFilters == [.favourites, .people, .rooms])
|
||||
state.deactivateFilter(.unreads)
|
||||
#expect(!state.isFiltering)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
||||
#expect(state.availableFilters == defaultFilters)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -49,7 +50,7 @@ final class RoomListFiltersStateTests {
|
||||
state.deactivateFilter(.people)
|
||||
#expect(!state.isFiltering)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
||||
#expect(state.availableFilters == defaultFilters)
|
||||
|
||||
state.activateFilter(.rooms)
|
||||
#expect(state.isFiltering)
|
||||
@@ -87,7 +88,7 @@ final class RoomListFiltersStateTests {
|
||||
state.clearFilters()
|
||||
#expect(!state.isFiltering)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
||||
#expect(state.availableFilters == defaultFilters)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -98,7 +99,7 @@ final class RoomListFiltersStateTests {
|
||||
|
||||
state.deactivateFilter(.favourites)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
||||
#expect(state.availableFilters == defaultFilters)
|
||||
|
||||
state.activateFilter(.rooms)
|
||||
#expect(state.activeFilters == [.rooms])
|
||||
@@ -121,17 +122,38 @@ final class RoomListFiltersStateTests {
|
||||
enableLowPriorityFeature()
|
||||
#expect(!state.isFiltering)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == RoomListFilter.allCases)
|
||||
#expect(state.availableFilters == defaultFilters + [.lowPriority])
|
||||
|
||||
state.activateFilter(.lowPriority)
|
||||
#expect(state.activeFilters == [.lowPriority])
|
||||
#expect(state.availableFilters == [.unreads, .people, .rooms])
|
||||
}
|
||||
|
||||
// MARK: Mentions feature flag
|
||||
|
||||
/// Don't forget to add .mentions into the mix above when enabling the feature.
|
||||
@Test
|
||||
func withMentionsFeature() {
|
||||
enableMentionsFeature()
|
||||
#expect(!state.isFiltering)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == [.unreads, .mentions, .favourites, .people, .rooms, .invites])
|
||||
|
||||
state.activateFilter(.mentions)
|
||||
#expect(state.isFiltering)
|
||||
#expect(state.activeFilters == [.mentions])
|
||||
#expect(state.availableFilters == [.unreads, .favourites, .people, .rooms])
|
||||
}
|
||||
|
||||
// MARK: - Helpers
|
||||
|
||||
private func enableLowPriorityFeature() {
|
||||
appSettings.lowPriorityFilterEnabled = true
|
||||
state = RoomListFiltersState(appSettings: appSettings)
|
||||
}
|
||||
|
||||
private func enableMentionsFeature() {
|
||||
appSettings.mentionsFilterEnabled = true
|
||||
state = RoomListFiltersState(appSettings: appSettings)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user