Room List Store: Implement secondary filters (#29458)
* Implement the secondary filters * Use the new filters in the store * Write tests
This commit is contained in:
@@ -28,11 +28,22 @@ import { FavouriteFilter } from "./skip-list/filters/FavouriteFilter";
|
||||
import { UnreadFilter } from "./skip-list/filters/UnreadFilter";
|
||||
import { PeopleFilter } from "./skip-list/filters/PeopleFilter";
|
||||
import { RoomsFilter } from "./skip-list/filters/RoomsFilter";
|
||||
import { InvitesFilter } from "./skip-list/filters/InvitesFilter";
|
||||
import { MentionsFilter } from "./skip-list/filters/MentionsFilter";
|
||||
import { LowPriorityFilter } from "./skip-list/filters/LowPriorityFilter";
|
||||
|
||||
/**
|
||||
* These are the filters passed to the room skip list.
|
||||
*/
|
||||
const FILTERS = [new FavouriteFilter(), new UnreadFilter(), new PeopleFilter(), new RoomsFilter()];
|
||||
const FILTERS = [
|
||||
new FavouriteFilter(),
|
||||
new UnreadFilter(),
|
||||
new PeopleFilter(),
|
||||
new RoomsFilter(),
|
||||
new InvitesFilter(),
|
||||
new MentionsFilter(),
|
||||
new LowPriorityFilter(),
|
||||
];
|
||||
|
||||
/**
|
||||
* This store allows for fast retrieval of the room list in a sorted and filtered manner.
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
Copyright 2025 New Vector Ltd.
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import { type Room, KnownMembership } from "matrix-js-sdk/src/matrix";
|
||||
|
||||
import type { Filter } from ".";
|
||||
import { FilterKey } from ".";
|
||||
|
||||
export class InvitesFilter implements Filter {
|
||||
public matches(room: Room): boolean {
|
||||
return room.getMyMembership() === KnownMembership.Invite;
|
||||
}
|
||||
|
||||
public get key(): FilterKey.InvitesFilter {
|
||||
return FilterKey.InvitesFilter;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
Copyright 2025 New Vector Ltd.
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import type { Room } from "matrix-js-sdk/src/matrix";
|
||||
import type { Filter } from ".";
|
||||
import { FilterKey } from ".";
|
||||
import { DefaultTagID } from "../../../room-list/models";
|
||||
|
||||
export class LowPriorityFilter implements Filter {
|
||||
public matches(room: Room): boolean {
|
||||
return !!room.tags[DefaultTagID.LowPriority];
|
||||
}
|
||||
|
||||
public get key(): FilterKey.LowPriorityFilter {
|
||||
return FilterKey.LowPriorityFilter;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
Copyright 2025 New Vector Ltd.
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import type { Room } from "matrix-js-sdk/src/matrix";
|
||||
import type { Filter } from ".";
|
||||
import { FilterKey } from ".";
|
||||
import { RoomNotificationStateStore } from "../../../notifications/RoomNotificationStateStore";
|
||||
|
||||
export class MentionsFilter implements Filter {
|
||||
public matches(room: Room): boolean {
|
||||
return RoomNotificationStateStore.instance.getRoomState(room).hasMentions;
|
||||
}
|
||||
|
||||
public get key(): FilterKey.MentionsFilter {
|
||||
return FilterKey.MentionsFilter;
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,9 @@ export const enum FilterKey {
|
||||
UnreadFilter,
|
||||
PeopleFilter,
|
||||
RoomsFilter,
|
||||
LowPriorityFilter,
|
||||
MentionsFilter,
|
||||
InvitesFilter,
|
||||
}
|
||||
|
||||
export interface Filter {
|
||||
|
||||
Reference in New Issue
Block a user