mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Room List Filters implementation (#2423)
This commit is contained in:
@@ -212,88 +212,3 @@ extension HomeScreenRoom {
|
||||
avatarURL: details.avatarURL)
|
||||
}
|
||||
}
|
||||
|
||||
enum RoomListFilter: Int, CaseIterable, Identifiable {
|
||||
var id: Int {
|
||||
rawValue
|
||||
}
|
||||
|
||||
case people
|
||||
case rooms
|
||||
case unreads
|
||||
case favourites
|
||||
case lowPriority
|
||||
|
||||
var localizedName: String {
|
||||
switch self {
|
||||
case .people:
|
||||
return L10n.screenRoomlistFilterPeople
|
||||
case .rooms:
|
||||
return L10n.screenRoomlistFilterRooms
|
||||
case .unreads:
|
||||
return L10n.screenRoomlistFilterUnreads
|
||||
case .favourites:
|
||||
return L10n.screenRoomlistFilterFavourites
|
||||
case .lowPriority:
|
||||
return L10n.screenRoomlistFilterLowPriority
|
||||
}
|
||||
}
|
||||
|
||||
var complementaryFilter: RoomListFilter? {
|
||||
switch self {
|
||||
case .people:
|
||||
return .rooms
|
||||
case .rooms:
|
||||
return .people
|
||||
case .unreads:
|
||||
return nil
|
||||
case .favourites:
|
||||
return .lowPriority
|
||||
case .lowPriority:
|
||||
return .favourites
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final class RoomListFiltersState: ObservableObject {
|
||||
@Published private var enabledFilters: Set<RoomListFilter>
|
||||
|
||||
init(enabledFilters: Set<RoomListFilter> = []) {
|
||||
self.enabledFilters = enabledFilters
|
||||
}
|
||||
|
||||
var sortedEnabledFilters: [RoomListFilter] {
|
||||
enabledFilters.sorted(by: { $0.rawValue < $1.rawValue })
|
||||
}
|
||||
|
||||
var sortedAvailableFilters: [RoomListFilter] {
|
||||
var availableFilters = Set(RoomListFilter.allCases)
|
||||
for filter in enabledFilters {
|
||||
availableFilters.remove(filter)
|
||||
if let complementaryFilter = filter.complementaryFilter {
|
||||
availableFilters.remove(complementaryFilter)
|
||||
}
|
||||
}
|
||||
return availableFilters.sorted(by: { $0.rawValue < $1.rawValue })
|
||||
}
|
||||
|
||||
var isFiltering: Bool {
|
||||
!enabledFilters.isEmpty
|
||||
}
|
||||
|
||||
func set(_ filter: RoomListFilter, isEnabled: Bool) {
|
||||
if isEnabled {
|
||||
enabledFilters.insert(filter)
|
||||
} else {
|
||||
enabledFilters.remove(filter)
|
||||
}
|
||||
}
|
||||
|
||||
func clearFilters() {
|
||||
enabledFilters.removeAll()
|
||||
}
|
||||
|
||||
func isEnabled(_ filter: RoomListFilter) -> Bool {
|
||||
enabledFilters.contains(filter)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user