Fix Mark all as read in settings (#12205)

* Fix `Mark all as read` in settings

* Update tests
This commit is contained in:
Florian Duros 2024-02-01 18:58:57 +01:00 committed by GitHub
parent 40ee1bb400
commit 8299abd344
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 16 additions and 11 deletions

View file

@ -74,6 +74,9 @@ export function doesRoomHaveUnreadMessages(room: Room, includeThreads: boolean):
}
function doesTimelineHaveUnreadMessages(room: Room, timeline: Array<MatrixEvent>): boolean {
// The room is a space, let's ignore it
if (room.isSpaceRoom()) return false;
const myUserId = room.client.getSafeUserId();
const latestImportantEventId = findLatestImportantEvent(room.client, timeline)?.getId();
if (latestImportantEventId) {

View file

@ -57,6 +57,7 @@ import {
import { Caption } from "../typography/Caption";
import { SettingsSubsectionHeading } from "./shared/SettingsSubsectionHeading";
import SettingsSubsection from "./shared/SettingsSubsection";
import { doesRoomHaveUnreadMessages } from "../../../Unread";
// TODO: this "view" component still has far too much application logic in it,
// which should be factored out to other files.
@ -739,7 +740,7 @@ export default class Notifications extends React.PureComponent<IProps, IState> {
category === RuleClass.VectorOther &&
MatrixClientPeg.safeGet()
.getRooms()
.some((r) => r.getUnreadNotificationCount() > 0)
.some((r) => doesRoomHaveUnreadMessages(r, true))
) {
clearNotifsButton = (
<AccessibleButton

View file

@ -34,7 +34,8 @@ export abstract class ReadyWatchingStore extends EventEmitter implements IDestro
public async start(): Promise<void> {
this.dispatcherRef = this.dispatcher.register(this.onAction);
const matrixClient = MatrixClientPeg.get();
// MatrixClientPeg can be undefined in tests because of circular dependencies with other stores
const matrixClient = MatrixClientPeg?.get();
if (matrixClient) {
this.matrixClient = matrixClient;
await this.onReady();

View file

@ -26,6 +26,7 @@ import { IndicatorIcon } from "@vector-im/compound-web";
import SettingsStore from "../settings/SettingsStore";
import { NotificationLevel } from "../stores/notifications/NotificationLevel";
import { doesRoomHaveUnreadMessages } from "../Unread";
export const deviceNotificationSettingsKeys = [
"notificationsEnabled",
@ -105,7 +106,7 @@ export async function clearRoomNotification(room: Room, client: MatrixClient): P
*/
export function clearAllNotifications(client: MatrixClient): Promise<Array<{} | undefined>> {
const receiptPromises = client.getRooms().reduce((promises: Array<Promise<{} | undefined>>, room: Room) => {
if (room.getUnreadNotificationCount() > 0) {
if (doesRoomHaveUnreadMessages(room, true)) {
const promise = clearRoomNotification(room, client);
promises.push(promise);
}