Room list: remove direct usage of the old rls in rls v3 (#32692)
* refactor: move `DefaultTagID` and `TagID` to rls v3 Move the enum and type in rls v3 and update imports * refactor: move `getChangedOverrideRoomMutePushRules` from rls to rls v3 * refactor: replace `VisiblityProvider` by `isRoomVisible` and move it to rls v3
This commit is contained in:
@@ -17,7 +17,7 @@ import { _t } from "../languageHandler";
|
|||||||
import { type AsyncActionPayload } from "../dispatcher/payloads";
|
import { type AsyncActionPayload } from "../dispatcher/payloads";
|
||||||
import RoomListStore from "../stores/room-list/RoomListStore";
|
import RoomListStore from "../stores/room-list/RoomListStore";
|
||||||
import { SortAlgorithm } from "../stores/room-list/algorithms/models";
|
import { SortAlgorithm } from "../stores/room-list/algorithms/models";
|
||||||
import { DefaultTagID, type TagID } from "../stores/room-list/models";
|
import { DefaultTagID, type TagID } from "../stores/room-list-v3/skip-list/tag";
|
||||||
import ErrorDialog from "../components/views/dialogs/ErrorDialog";
|
import ErrorDialog from "../components/views/dialogs/ErrorDialog";
|
||||||
|
|
||||||
export default class RoomListActions {
|
export default class RoomListActions {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import { SettingLevel } from "../../settings/SettingLevel";
|
|||||||
import ResizeHandle from "../views/elements/ResizeHandle";
|
import ResizeHandle from "../views/elements/ResizeHandle";
|
||||||
import { CollapseDistributor, Resizer } from "../../resizer";
|
import { CollapseDistributor, Resizer } from "../../resizer";
|
||||||
import PlatformPeg from "../../PlatformPeg";
|
import PlatformPeg from "../../PlatformPeg";
|
||||||
import { DefaultTagID } from "../../stores/room-list/models";
|
import { DefaultTagID } from "../../stores/room-list-v3/skip-list/tag";
|
||||||
import { hideToast as hideServerLimitToast, showToast as showServerLimitToast } from "../../toasts/ServerLimitToast";
|
import { hideToast as hideServerLimitToast, showToast as showServerLimitToast } from "../../toasts/ServerLimitToast";
|
||||||
import { Action } from "../../dispatcher/actions";
|
import { Action } from "../../dispatcher/actions";
|
||||||
import LeftPanel from "./LeftPanel";
|
import LeftPanel from "./LeftPanel";
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { useEffect, useState } from "react";
|
|||||||
|
|
||||||
import { useTypedEventEmitter } from "../../../hooks/useEventEmitter";
|
import { useTypedEventEmitter } from "../../../hooks/useEventEmitter";
|
||||||
import { useDmMember, usePresence, type Presence } from "../../views/avatars/WithPresenceIndicator";
|
import { useDmMember, usePresence, type Presence } from "../../views/avatars/WithPresenceIndicator";
|
||||||
import { DefaultTagID } from "../../../stores/room-list/models";
|
import { DefaultTagID } from "../../../stores/room-list-v3/skip-list/tag";
|
||||||
|
|
||||||
export enum AvatarBadgeDecoration {
|
export enum AvatarBadgeDecoration {
|
||||||
LowPriority = "LowPriority",
|
LowPriority = "LowPriority",
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import defaultDispatcher from "../../../dispatcher/dispatcher";
|
|||||||
import { Action } from "../../../dispatcher/actions";
|
import { Action } from "../../../dispatcher/actions";
|
||||||
import RoomListStore, { LISTS_UPDATE_EVENT } from "../../../stores/room-list/RoomListStore";
|
import RoomListStore, { LISTS_UPDATE_EVENT } from "../../../stores/room-list/RoomListStore";
|
||||||
import { canInviteTo } from "../../../utils/room/canInviteTo";
|
import { canInviteTo } from "../../../utils/room/canInviteTo";
|
||||||
import { DefaultTagID } from "../../../stores/room-list/models";
|
import { DefaultTagID } from "../../../stores/room-list-v3/skip-list/tag";
|
||||||
import { useEventEmitterState } from "../../../hooks/useEventEmitter";
|
import { useEventEmitterState } from "../../../hooks/useEventEmitter";
|
||||||
import RightPanelStore from "../../../stores/right-panel/RightPanelStore";
|
import RightPanelStore from "../../../stores/right-panel/RightPanelStore";
|
||||||
import { RightPanelPhases } from "../../../stores/right-panel/RightPanelStorePhases";
|
import { RightPanelPhases } from "../../../stores/right-panel/RightPanelStorePhases";
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import { useUnreadNotifications } from "../../../hooks/useUnreadNotifications";
|
|||||||
import { getKeyBindingsManager } from "../../../KeyBindingsManager";
|
import { getKeyBindingsManager } from "../../../KeyBindingsManager";
|
||||||
import { _t } from "../../../languageHandler";
|
import { _t } from "../../../languageHandler";
|
||||||
import { NotificationLevel } from "../../../stores/notifications/NotificationLevel";
|
import { NotificationLevel } from "../../../stores/notifications/NotificationLevel";
|
||||||
import { DefaultTagID, type TagID } from "../../../stores/room-list/models";
|
import { DefaultTagID, type TagID } from "../../../stores/room-list-v3/skip-list/tag";
|
||||||
import RoomListStore, { LISTS_UPDATE_EVENT } from "../../../stores/room-list/RoomListStore";
|
import RoomListStore, { LISTS_UPDATE_EVENT } from "../../../stores/room-list/RoomListStore";
|
||||||
import DMRoomMap from "../../../utils/DMRoomMap";
|
import DMRoomMap from "../../../utils/DMRoomMap";
|
||||||
import { clearRoomNotification, setMarkedUnreadState } from "../../../utils/notifications";
|
import { clearRoomNotification, setMarkedUnreadState } from "../../../utils/notifications";
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import { abbreviateUrl } from "../../../utils/UrlUtils";
|
|||||||
import IdentityAuthClient from "../../../IdentityAuthClient";
|
import IdentityAuthClient from "../../../IdentityAuthClient";
|
||||||
import { type IInviteResult, inviteMultipleToRoom, showAnyInviteErrors } from "../../../RoomInvite";
|
import { type IInviteResult, inviteMultipleToRoom, showAnyInviteErrors } from "../../../RoomInvite";
|
||||||
import { Action } from "../../../dispatcher/actions";
|
import { Action } from "../../../dispatcher/actions";
|
||||||
import { DefaultTagID } from "../../../stores/room-list/models";
|
import { DefaultTagID } from "../../../stores/room-list-v3/skip-list/tag";
|
||||||
import RoomListStore from "../../../stores/room-list/RoomListStore";
|
import RoomListStore from "../../../stores/room-list/RoomListStore";
|
||||||
import SettingsStore from "../../../settings/SettingsStore";
|
import SettingsStore from "../../../settings/SettingsStore";
|
||||||
import { UIFeature } from "../../../settings/UIFeature";
|
import { UIFeature } from "../../../settings/UIFeature";
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ import { useFeatureEnabled } from "../../../hooks/useSettings.ts";
|
|||||||
import { UIComponent } from "../../../settings/UIFeature.ts";
|
import { UIComponent } from "../../../settings/UIFeature.ts";
|
||||||
import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore.ts";
|
import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore.ts";
|
||||||
import { type ITagMap } from "../../../stores/room-list/algorithms/models.ts";
|
import { type ITagMap } from "../../../stores/room-list/algorithms/models.ts";
|
||||||
import { DefaultTagID, type TagID } from "../../../stores/room-list/models.ts";
|
import { DefaultTagID, type TagID } from "../../../stores/room-list-v3/skip-list/tag";
|
||||||
import { UPDATE_EVENT } from "../../../stores/AsyncStore.ts";
|
import { UPDATE_EVENT } from "../../../stores/AsyncStore.ts";
|
||||||
import RoomListStore, { LISTS_UPDATE_EVENT } from "../../../stores/room-list/RoomListStore.ts";
|
import RoomListStore, { LISTS_UPDATE_EVENT } from "../../../stores/room-list/RoomListStore.ts";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import { type ListNotificationState } from "../../../stores/notifications/ListNo
|
|||||||
import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore";
|
import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore";
|
||||||
import { ListAlgorithm, SortAlgorithm } from "../../../stores/room-list/algorithms/models";
|
import { ListAlgorithm, SortAlgorithm } from "../../../stores/room-list/algorithms/models";
|
||||||
import { type ListLayout } from "../../../stores/room-list/ListLayout";
|
import { type ListLayout } from "../../../stores/room-list/ListLayout";
|
||||||
import { DefaultTagID, type TagID } from "../../../stores/room-list/models";
|
import { DefaultTagID, type TagID } from "../../../stores/room-list-v3/skip-list/tag";
|
||||||
import RoomListLayoutStore from "../../../stores/room-list/RoomListLayoutStore";
|
import RoomListLayoutStore from "../../../stores/room-list/RoomListLayoutStore";
|
||||||
import RoomListStore, { LISTS_UPDATE_EVENT, LISTS_LOADING_EVENT } from "../../../stores/room-list/RoomListStore";
|
import RoomListStore, { LISTS_UPDATE_EVENT, LISTS_LOADING_EVENT } from "../../../stores/room-list/RoomListStore";
|
||||||
import { arrayFastClone, arrayHasOrderChange } from "../../../utils/arrays";
|
import { arrayFastClone, arrayHasOrderChange } from "../../../utils/arrays";
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import defaultDispatcher from "../../../dispatcher/dispatcher";
|
|||||||
import { Action } from "../../../dispatcher/actions";
|
import { Action } from "../../../dispatcher/actions";
|
||||||
import { _t } from "../../../languageHandler";
|
import { _t } from "../../../languageHandler";
|
||||||
import { ChevronFace, ContextMenuTooltipButton, type MenuProps } from "../../structures/ContextMenu";
|
import { ChevronFace, ContextMenuTooltipButton, type MenuProps } from "../../structures/ContextMenu";
|
||||||
import { DefaultTagID, type TagID } from "../../../stores/room-list/models";
|
import { DefaultTagID, type TagID } from "../../../stores/room-list-v3/skip-list/tag";
|
||||||
import { type MessagePreview, MessagePreviewStore } from "../../../stores/room-list/MessagePreviewStore";
|
import { type MessagePreview, MessagePreviewStore } from "../../../stores/room-list/MessagePreviewStore";
|
||||||
import DecoratedRoomAvatar from "../avatars/DecoratedRoomAvatar";
|
import DecoratedRoomAvatar from "../avatars/DecoratedRoomAvatar";
|
||||||
import { RoomNotifState } from "../../../RoomNotifs";
|
import { RoomNotifState } from "../../../RoomNotifs";
|
||||||
|
|||||||
+2
-2
@@ -16,7 +16,7 @@ import { getThreadNotificationLevel } from "../../../../utils/notifications";
|
|||||||
import { useSettingValue } from "../../../../hooks/useSettings";
|
import { useSettingValue } from "../../../../hooks/useSettings";
|
||||||
import { useMatrixClientContext } from "../../../../contexts/MatrixClientContext";
|
import { useMatrixClientContext } from "../../../../contexts/MatrixClientContext";
|
||||||
import { useEventEmitter } from "../../../../hooks/useEventEmitter";
|
import { useEventEmitter } from "../../../../hooks/useEventEmitter";
|
||||||
import { VisibilityProvider } from "../../../../stores/room-list/filters/VisibilityProvider";
|
import { isRoomVisible } from "../../../../stores/room-list-v3/isRoomVisible";
|
||||||
|
|
||||||
const MIN_UPDATE_INTERVAL_MS = 500;
|
const MIN_UPDATE_INTERVAL_MS = 500;
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ function computeUnreadThreadRooms(
|
|||||||
|
|
||||||
for (const room of visibleRooms) {
|
for (const room of visibleRooms) {
|
||||||
// We only care about rooms with unread threads
|
// We only care about rooms with unread threads
|
||||||
if (VisibilityProvider.instance.isRoomVisible(room) && doesRoomHaveUnreadThreads(room)) {
|
if (isRoomVisible(room) && doesRoomHaveUnreadThreads(room)) {
|
||||||
// Get the greatest notification level of all threads
|
// Get the greatest notification level of all threads
|
||||||
const notificationLevel = getThreadNotificationLevel(room);
|
const notificationLevel = getThreadNotificationLevel(room);
|
||||||
|
|
||||||
|
|||||||
@@ -11,11 +11,11 @@ import { type Room, ClientEvent, SyncState, type EmptyObject } from "matrix-js-s
|
|||||||
import { type ActionPayload } from "../../dispatcher/payloads";
|
import { type ActionPayload } from "../../dispatcher/payloads";
|
||||||
import { AsyncStoreWithClient } from "../AsyncStoreWithClient";
|
import { AsyncStoreWithClient } from "../AsyncStoreWithClient";
|
||||||
import defaultDispatcher, { type MatrixDispatcher } from "../../dispatcher/dispatcher";
|
import defaultDispatcher, { type MatrixDispatcher } from "../../dispatcher/dispatcher";
|
||||||
import { DefaultTagID, type TagID } from "../room-list/models";
|
import { DefaultTagID, type TagID } from "../room-list-v3/skip-list/tag";
|
||||||
import { type FetchRoomFn, ListNotificationState } from "./ListNotificationState";
|
import { type FetchRoomFn, ListNotificationState } from "./ListNotificationState";
|
||||||
import { RoomNotificationState } from "./RoomNotificationState";
|
import { RoomNotificationState } from "./RoomNotificationState";
|
||||||
import { SummarizedNotificationState } from "./SummarizedNotificationState";
|
import { SummarizedNotificationState } from "./SummarizedNotificationState";
|
||||||
import { VisibilityProvider } from "../room-list/filters/VisibilityProvider";
|
import { isRoomVisible } from "../room-list-v3/isRoomVisible";
|
||||||
import { PosthogAnalytics } from "../../PosthogAnalytics";
|
import { PosthogAnalytics } from "../../PosthogAnalytics";
|
||||||
import SettingsStore from "../../settings/SettingsStore";
|
import SettingsStore from "../../settings/SettingsStore";
|
||||||
|
|
||||||
@@ -116,7 +116,7 @@ export class RoomNotificationStateStore extends AsyncStoreWithClient<EmptyObject
|
|||||||
|
|
||||||
let numFavourites = 0;
|
let numFavourites = 0;
|
||||||
for (const room of visibleRooms) {
|
for (const room of visibleRooms) {
|
||||||
if (VisibilityProvider.instance.isRoomVisible(room)) {
|
if (isRoomVisible(room)) {
|
||||||
globalState.add(this.getRoomState(room));
|
globalState.add(this.getRoomState(room));
|
||||||
|
|
||||||
if (room.tags[DefaultTagID.Favourite] && !room.getType()) numFavourites++;
|
if (room.tags[DefaultTagID.Favourite] && !room.getType()) numFavourites++;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { NotificationLevel } from "./NotificationLevel";
|
|||||||
import { arrayDiff } from "../../utils/arrays";
|
import { arrayDiff } from "../../utils/arrays";
|
||||||
import { type RoomNotificationState } from "./RoomNotificationState";
|
import { type RoomNotificationState } from "./RoomNotificationState";
|
||||||
import { NotificationState, NotificationStateEvents } from "./NotificationState";
|
import { NotificationState, NotificationStateEvents } from "./NotificationState";
|
||||||
import { DefaultTagID } from "../room-list/models";
|
import { DefaultTagID } from "../room-list-v3/skip-list/tag";
|
||||||
import RoomListStore from "../room-list/RoomListStore";
|
import RoomListStore from "../room-list/RoomListStore";
|
||||||
import { RoomNotificationStateStore } from "./RoomNotificationStateStore";
|
import { RoomNotificationStateStore } from "./RoomNotificationStateStore";
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import type { ActionPayload } from "../../dispatcher/payloads";
|
|||||||
import type { FilterKey } from "./skip-list/filters";
|
import type { FilterKey } from "./skip-list/filters";
|
||||||
import { AsyncStoreWithClient } from "../AsyncStoreWithClient";
|
import { AsyncStoreWithClient } from "../AsyncStoreWithClient";
|
||||||
import SettingsStore from "../../settings/SettingsStore";
|
import SettingsStore from "../../settings/SettingsStore";
|
||||||
import { VisibilityProvider } from "../room-list/filters/VisibilityProvider";
|
|
||||||
import defaultDispatcher from "../../dispatcher/dispatcher";
|
import defaultDispatcher from "../../dispatcher/dispatcher";
|
||||||
import { RoomSkipList } from "./skip-list/RoomSkipList";
|
import { RoomSkipList } from "./skip-list/RoomSkipList";
|
||||||
import { RecencySorter } from "./skip-list/sorters/RecencySorter";
|
import { RecencySorter } from "./skip-list/sorters/RecencySorter";
|
||||||
@@ -33,9 +32,10 @@ import { LowPriorityFilter } from "./skip-list/filters/LowPriorityFilter";
|
|||||||
import { type Sorter, SortingAlgorithm } from "./skip-list/sorters";
|
import { type Sorter, SortingAlgorithm } from "./skip-list/sorters";
|
||||||
import { SettingLevel } from "../../settings/SettingLevel";
|
import { SettingLevel } from "../../settings/SettingLevel";
|
||||||
import { MARKED_UNREAD_TYPE_STABLE, MARKED_UNREAD_TYPE_UNSTABLE } from "../../utils/notifications";
|
import { MARKED_UNREAD_TYPE_STABLE, MARKED_UNREAD_TYPE_UNSTABLE } from "../../utils/notifications";
|
||||||
import { getChangedOverrideRoomMutePushRules } from "../room-list/utils/roomMute";
|
|
||||||
import { Action } from "../../dispatcher/actions";
|
import { Action } from "../../dispatcher/actions";
|
||||||
import { UnreadSorter } from "./skip-list/sorters/UnreadSorter";
|
import { UnreadSorter } from "./skip-list/sorters/UnreadSorter";
|
||||||
|
import { getChangedOverrideRoomMutePushRules } from "./utils";
|
||||||
|
import { isRoomVisible } from "./isRoomVisible";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* These are the filters passed to the room skip list.
|
* These are the filters passed to the room skip list.
|
||||||
@@ -92,7 +92,7 @@ export class RoomListStoreV3Class extends AsyncStoreWithClient<EmptyObject> {
|
|||||||
*/
|
*/
|
||||||
public getRooms(): Room[] {
|
public getRooms(): Room[] {
|
||||||
let rooms = this.matrixClient?.getVisibleRooms(this.msc3946ProcessDynamicPredecessor) ?? [];
|
let rooms = this.matrixClient?.getVisibleRooms(this.msc3946ProcessDynamicPredecessor) ?? [];
|
||||||
rooms = rooms.filter((r) => VisibilityProvider.instance.isRoomVisible(r));
|
rooms = rooms.filter((r) => isRoomVisible(r));
|
||||||
return rooms;
|
return rooms;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -356,7 +356,7 @@ export class RoomListStoreV3Class extends AsyncStoreWithClient<EmptyObject> {
|
|||||||
private addRoomAndEmit(room: Room, isNewRoom = false): void {
|
private addRoomAndEmit(room: Room, isNewRoom = false): void {
|
||||||
if (!this.roomSkipList) throw new Error("roomSkipList hasn't been created yet!");
|
if (!this.roomSkipList) throw new Error("roomSkipList hasn't been created yet!");
|
||||||
if (isNewRoom) {
|
if (isNewRoom) {
|
||||||
if (!VisibilityProvider.instance.isRoomVisible(room)) {
|
if (!isRoomVisible(room)) {
|
||||||
logger.info(
|
logger.info(
|
||||||
`RoomListStoreV3: Refusing to add new room ${room.roomId} because isRoomVisible returned false.`,
|
`RoomListStoreV3: Refusing to add new room ${room.roomId} because isRoomVisible returned false.`,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2026 Element Creations 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 { isLocalRoom } from "../../utils/localRoom/isLocalRoom";
|
||||||
|
import { RoomListCustomisations } from "../../customisations/RoomList";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines whether a room should be visible in the room list
|
||||||
|
* @param room - The room to check for visibility
|
||||||
|
*/
|
||||||
|
export function isRoomVisible(room?: Room): boolean {
|
||||||
|
if (!room) return false;
|
||||||
|
|
||||||
|
// hide space rooms as they'll be shown in the SpacePanel
|
||||||
|
if (room.isSpaceRoom()) return false;
|
||||||
|
|
||||||
|
// local rooms shouldn't show up anywhere
|
||||||
|
if (isLocalRoom(room)) return false;
|
||||||
|
|
||||||
|
if (RoomListCustomisations.isRoomVisible) return RoomListCustomisations.isRoomVisible(room);
|
||||||
|
|
||||||
|
return true; // default
|
||||||
|
}
|
||||||
@@ -7,7 +7,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import type { Room } from "matrix-js-sdk/src/matrix";
|
import type { Room } from "matrix-js-sdk/src/matrix";
|
||||||
import type { Filter } from ".";
|
import type { Filter } from ".";
|
||||||
import { FilterKey } from ".";
|
import { FilterKey } from ".";
|
||||||
import { DefaultTagID } from "../../../room-list/models";
|
import { DefaultTagID } from "../tag";
|
||||||
|
|
||||||
export class FavouriteFilter implements Filter {
|
export class FavouriteFilter implements Filter {
|
||||||
public matches(room: Room): boolean {
|
public matches(room: Room): boolean {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import type { Room } from "matrix-js-sdk/src/matrix";
|
import type { Room } from "matrix-js-sdk/src/matrix";
|
||||||
import type { Filter } from ".";
|
import type { Filter } from ".";
|
||||||
import { FilterKey } from ".";
|
import { FilterKey } from ".";
|
||||||
import { DefaultTagID } from "../../../room-list/models";
|
import { DefaultTagID } from "../tag";
|
||||||
|
|
||||||
export class LowPriorityFilter implements Filter {
|
export class LowPriorityFilter implements Filter {
|
||||||
public matches(room: Room): boolean {
|
public matches(room: Room): boolean {
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import type { Room } from "matrix-js-sdk/src/matrix";
|
import type { Room } from "matrix-js-sdk/src/matrix";
|
||||||
import { type Sorter, SortingAlgorithm } from ".";
|
import { type Sorter, SortingAlgorithm } from ".";
|
||||||
import { RoomNotificationStateStore } from "../../../notifications/RoomNotificationStateStore";
|
import { RoomNotificationStateStore } from "../../../notifications/RoomNotificationStateStore";
|
||||||
import { DefaultTagID } from "../../../room-list/models";
|
|
||||||
import { BaseRecencySorter } from "./BaseRecencySorter";
|
import { BaseRecencySorter } from "./BaseRecencySorter";
|
||||||
|
import { DefaultTagID } from "../tag";
|
||||||
|
|
||||||
export class RecencySorter extends BaseRecencySorter implements Sorter {
|
export class RecencySorter extends BaseRecencySorter implements Sorter {
|
||||||
public get type(): SortingAlgorithm.Recency {
|
public get type(): SortingAlgorithm.Recency {
|
||||||
|
|||||||
@@ -9,10 +9,10 @@ import { KnownMembership, RoomType, type Room } from "matrix-js-sdk/src/matrix";
|
|||||||
|
|
||||||
import { type Sorter, SortingAlgorithm } from ".";
|
import { type Sorter, SortingAlgorithm } from ".";
|
||||||
import { RoomNotificationStateStore } from "../../../notifications/RoomNotificationStateStore";
|
import { RoomNotificationStateStore } from "../../../notifications/RoomNotificationStateStore";
|
||||||
import { DefaultTagID } from "../../../room-list/models";
|
|
||||||
import { CallStore } from "../../../CallStore";
|
import { CallStore } from "../../../CallStore";
|
||||||
import { getMarkedUnreadState } from "../../../../utils/notifications";
|
import { getMarkedUnreadState } from "../../../../utils/notifications";
|
||||||
import { BaseRecencySorter } from "./BaseRecencySorter";
|
import { BaseRecencySorter } from "./BaseRecencySorter";
|
||||||
|
import { DefaultTagID } from "../tag";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Similar to RecencySorter but with the following special order:
|
* Similar to RecencySorter but with the following special order:
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2026 Element Creations 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default tags that are used for rooms that don't have a user defined tag. These are used to determine where a room should be placed in the room list and how it should be sorted.
|
||||||
|
*/
|
||||||
|
export enum DefaultTagID {
|
||||||
|
Invite = "im.vector.fake.invite",
|
||||||
|
Untagged = "im.vector.fake.recent", // legacy: used to just be 'recent rooms' but now it's all untagged rooms
|
||||||
|
Archived = "im.vector.fake.archived",
|
||||||
|
LowPriority = "m.lowpriority",
|
||||||
|
Favourite = "m.favourite",
|
||||||
|
DM = "im.vector.fake.direct",
|
||||||
|
Conference = "im.vector.fake.conferences",
|
||||||
|
ServerNotice = "m.server_notice",
|
||||||
|
Suggested = "im.vector.fake.suggested",
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A tag ID is either a user defined tag (which is just a string) or one of the default tags defined in DefaultTagID.
|
||||||
|
*/
|
||||||
|
export type TagID = string | DefaultTagID;
|
||||||
+3
-3
@@ -8,9 +8,9 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
|
|
||||||
import { type MatrixEvent, EventType, type IPushRules } from "matrix-js-sdk/src/matrix";
|
import { type MatrixEvent, EventType, type IPushRules } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type ActionPayload } from "../../../dispatcher/payloads";
|
import { type ActionPayload } from "../../dispatcher/payloads";
|
||||||
import { isRuleMaybeRoomMuteRule } from "../../../RoomNotifs";
|
import { isRuleMaybeRoomMuteRule } from "../../RoomNotifs";
|
||||||
import { arrayDiff } from "../../../utils/arrays";
|
import { arrayDiff } from "../../utils/arrays";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets any changed push rules that are room specific overrides
|
* Gets any changed push rules that are room specific overrides
|
||||||
@@ -9,7 +9,8 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import type { Room } from "matrix-js-sdk/src/matrix";
|
import type { Room } from "matrix-js-sdk/src/matrix";
|
||||||
import type { EventEmitter } from "events";
|
import type { EventEmitter } from "events";
|
||||||
import { type ITagMap, type ListAlgorithm, type SortAlgorithm } from "./algorithms/models";
|
import { type ITagMap, type ListAlgorithm, type SortAlgorithm } from "./algorithms/models";
|
||||||
import { type RoomUpdateCause, type TagID } from "./models";
|
import { type RoomUpdateCause } from "./models";
|
||||||
|
import { type TagID } from "../room-list-v3/skip-list/tag";
|
||||||
import { type IFilterCondition } from "./filters/IFilterCondition";
|
import { type IFilterCondition } from "./filters/IFilterCondition";
|
||||||
|
|
||||||
export enum RoomListStoreEvent {
|
export enum RoomListStoreEvent {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com
|
|||||||
Please see LICENSE files in the repository root for full details.
|
Please see LICENSE files in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { type TagID } from "./models";
|
import { type TagID } from "../room-list-v3/skip-list/tag";
|
||||||
|
|
||||||
const TILE_HEIGHT_PX = 44;
|
const TILE_HEIGHT_PX = 44;
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import { AsyncStoreWithClient } from "../AsyncStoreWithClient";
|
|||||||
import defaultDispatcher from "../../dispatcher/dispatcher";
|
import defaultDispatcher from "../../dispatcher/dispatcher";
|
||||||
import { MessageEventPreview } from "./previews/MessageEventPreview";
|
import { MessageEventPreview } from "./previews/MessageEventPreview";
|
||||||
import { PollStartEventPreview } from "./previews/PollStartEventPreview";
|
import { PollStartEventPreview } from "./previews/PollStartEventPreview";
|
||||||
import { type TagID } from "./models";
|
import { type TagID } from "../room-list-v3/skip-list/tag";
|
||||||
import { LegacyCallInviteEventPreview } from "./previews/LegacyCallInviteEventPreview";
|
import { LegacyCallInviteEventPreview } from "./previews/LegacyCallInviteEventPreview";
|
||||||
import { LegacyCallAnswerEventPreview } from "./previews/LegacyCallAnswerEventPreview";
|
import { LegacyCallAnswerEventPreview } from "./previews/LegacyCallAnswerEventPreview";
|
||||||
import { LegacyCallHangupEvent } from "./previews/LegacyCallHangupEvent";
|
import { LegacyCallHangupEvent } from "./previews/LegacyCallHangupEvent";
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
import { type EmptyObject } from "matrix-js-sdk/src/matrix";
|
import { type EmptyObject } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type TagID } from "./models";
|
import { type TagID } from "../room-list-v3/skip-list/tag";
|
||||||
import { ListLayout } from "./ListLayout";
|
import { ListLayout } from "./ListLayout";
|
||||||
import { AsyncStoreWithClient } from "../AsyncStoreWithClient";
|
import { AsyncStoreWithClient } from "../AsyncStoreWithClient";
|
||||||
import defaultDispatcher from "../../dispatcher/dispatcher";
|
import defaultDispatcher from "../../dispatcher/dispatcher";
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { type MatrixClient, type Room, EventType, type EmptyObject } from "matri
|
|||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
|
|
||||||
import SettingsStore from "../../settings/SettingsStore";
|
import SettingsStore from "../../settings/SettingsStore";
|
||||||
import { DefaultTagID, OrderedDefaultTagIDs, RoomUpdateCause, type TagID } from "./models";
|
import { OrderedDefaultTagIDs, RoomUpdateCause } from "./models";
|
||||||
import {
|
import {
|
||||||
type IListOrderingMap,
|
type IListOrderingMap,
|
||||||
type ITagMap,
|
type ITagMap,
|
||||||
@@ -28,13 +28,14 @@ import RoomListLayoutStore from "./RoomListLayoutStore";
|
|||||||
import { MarkedExecution } from "../../utils/MarkedExecution";
|
import { MarkedExecution } from "../../utils/MarkedExecution";
|
||||||
import { AsyncStoreWithClient } from "../AsyncStoreWithClient";
|
import { AsyncStoreWithClient } from "../AsyncStoreWithClient";
|
||||||
import { RoomNotificationStateStore } from "../notifications/RoomNotificationStateStore";
|
import { RoomNotificationStateStore } from "../notifications/RoomNotificationStateStore";
|
||||||
import { VisibilityProvider } from "./filters/VisibilityProvider";
|
import { isRoomVisible } from "../room-list-v3/isRoomVisible";
|
||||||
import { SpaceWatcher } from "./SpaceWatcher";
|
import { SpaceWatcher } from "./SpaceWatcher";
|
||||||
import { type IRoomTimelineActionPayload } from "../../actions/MatrixActionCreators";
|
import { type IRoomTimelineActionPayload } from "../../actions/MatrixActionCreators";
|
||||||
import { type RoomListStore as Interface, RoomListStoreEvent } from "./Interface";
|
import { type RoomListStore as Interface, RoomListStoreEvent } from "./Interface";
|
||||||
import { UPDATE_EVENT } from "../AsyncStore";
|
import { UPDATE_EVENT } from "../AsyncStore";
|
||||||
import { SdkContextClass } from "../../contexts/SDKContext";
|
import { SdkContextClass } from "../../contexts/SDKContext";
|
||||||
import { getChangedOverrideRoomMutePushRules } from "./utils/roomMute";
|
import { getChangedOverrideRoomMutePushRules } from "../room-list-v3/utils";
|
||||||
|
import { DefaultTagID, type TagID } from "../room-list-v3/skip-list/tag";
|
||||||
|
|
||||||
export const LISTS_UPDATE_EVENT = RoomListStoreEvent.ListsUpdate;
|
export const LISTS_UPDATE_EVENT = RoomListStoreEvent.ListsUpdate;
|
||||||
export const LISTS_LOADING_EVENT = RoomListStoreEvent.ListsLoading; // unused; used by SlidingRoomListStore
|
export const LISTS_LOADING_EVENT = RoomListStoreEvent.ListsLoading; // unused; used by SlidingRoomListStore
|
||||||
@@ -346,7 +347,7 @@ export class RoomListStoreClass extends AsyncStoreWithClient<EmptyObject> implem
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise<any> {
|
private async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise<any> {
|
||||||
if (!VisibilityProvider.instance.isRoomVisible(room)) {
|
if (!isRoomVisible(room)) {
|
||||||
return; // don't do anything on rooms that aren't visible
|
return; // don't do anything on rooms that aren't visible
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -514,7 +515,7 @@ export class RoomListStoreClass extends AsyncStoreWithClient<EmptyObject> implem
|
|||||||
if (!this.matrixClient) return [];
|
if (!this.matrixClient) return [];
|
||||||
|
|
||||||
let rooms = this.matrixClient.getVisibleRooms(this.msc3946ProcessDynamicPredecessor);
|
let rooms = this.matrixClient.getVisibleRooms(this.msc3946ProcessDynamicPredecessor);
|
||||||
rooms = rooms.filter((r) => VisibilityProvider.instance.isRoomVisible(r));
|
rooms = rooms.filter((r) => isRoomVisible(r));
|
||||||
|
|
||||||
if (this.prefilterConditions.length > 0) {
|
if (this.prefilterConditions.length > 0) {
|
||||||
rooms = rooms.filter((r) => {
|
rooms = rooms.filter((r) => {
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ import { logger } from "matrix-js-sdk/src/logger";
|
|||||||
|
|
||||||
import DMRoomMap from "../../../utils/DMRoomMap";
|
import DMRoomMap from "../../../utils/DMRoomMap";
|
||||||
import { arrayDiff, arrayHasDiff } from "../../../utils/arrays";
|
import { arrayDiff, arrayHasDiff } from "../../../utils/arrays";
|
||||||
import { DefaultTagID, RoomUpdateCause, type TagID } from "../models";
|
import { DefaultTagID, type TagID } from "../../room-list-v3/skip-list/tag";
|
||||||
|
import { RoomUpdateCause } from "../models";
|
||||||
import {
|
import {
|
||||||
type IListOrderingMap,
|
type IListOrderingMap,
|
||||||
type IOrderingAlgorithmMap,
|
type IOrderingAlgorithmMap,
|
||||||
@@ -31,7 +32,7 @@ import {
|
|||||||
} from "../../../utils/membership";
|
} from "../../../utils/membership";
|
||||||
import { type OrderingAlgorithm } from "./list-ordering/OrderingAlgorithm";
|
import { type OrderingAlgorithm } from "./list-ordering/OrderingAlgorithm";
|
||||||
import { getListAlgorithmInstance } from "./list-ordering";
|
import { getListAlgorithmInstance } from "./list-ordering";
|
||||||
import { VisibilityProvider } from "../filters/VisibilityProvider";
|
import { isRoomVisible } from "../../room-list-v3/isRoomVisible";
|
||||||
import { CallStore, CallStoreEvent } from "../../CallStore";
|
import { CallStore, CallStoreEvent } from "../../CallStore";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -170,7 +171,7 @@ export class Algorithm extends EventEmitter {
|
|||||||
val = null;
|
val = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (val && !VisibilityProvider.instance.isRoomVisible(val)) {
|
if (val && !isRoomVisible(val)) {
|
||||||
val = null; // the room isn't visible - lie to the rest of this function
|
val = null; // the room isn't visible - lie to the rest of this function
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import { type Room } from "matrix-js-sdk/src/matrix";
|
import { type Room } from "matrix-js-sdk/src/matrix";
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
|
|
||||||
import { RoomUpdateCause, type TagID } from "../../models";
|
import { type TagID } from "../../../room-list-v3/skip-list/tag";
|
||||||
|
import { RoomUpdateCause } from "../../models";
|
||||||
import { SortAlgorithm } from "../models";
|
import { SortAlgorithm } from "../models";
|
||||||
import { sortRoomsWithAlgorithm } from "../tag-sorting";
|
import { sortRoomsWithAlgorithm } from "../tag-sorting";
|
||||||
import { OrderingAlgorithm } from "./OrderingAlgorithm";
|
import { OrderingAlgorithm } from "./OrderingAlgorithm";
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ import { logger } from "matrix-js-sdk/src/logger";
|
|||||||
import { type SortAlgorithm } from "../models";
|
import { type SortAlgorithm } from "../models";
|
||||||
import { sortRoomsWithAlgorithm } from "../tag-sorting";
|
import { sortRoomsWithAlgorithm } from "../tag-sorting";
|
||||||
import { OrderingAlgorithm } from "./OrderingAlgorithm";
|
import { OrderingAlgorithm } from "./OrderingAlgorithm";
|
||||||
import { RoomUpdateCause, type TagID } from "../../models";
|
import { type TagID } from "../../../room-list-v3/skip-list/tag";
|
||||||
|
import { RoomUpdateCause } from "../../models";
|
||||||
import { RoomNotificationStateStore } from "../../../notifications/RoomNotificationStateStore";
|
import { RoomNotificationStateStore } from "../../../notifications/RoomNotificationStateStore";
|
||||||
|
|
||||||
type NaturalCategorizedRoomMap = {
|
type NaturalCategorizedRoomMap = {
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import { type Room } from "matrix-js-sdk/src/matrix";
|
import { type Room } from "matrix-js-sdk/src/matrix";
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
|
|
||||||
import { type RoomUpdateCause, type TagID } from "../../models";
|
import { type RoomUpdateCause } from "../../models";
|
||||||
|
import { type TagID } from "../../../room-list-v3/skip-list/tag";
|
||||||
import { SortAlgorithm } from "../models";
|
import { SortAlgorithm } from "../models";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import { ImportanceAlgorithm } from "./ImportanceAlgorithm";
|
import { ImportanceAlgorithm } from "./ImportanceAlgorithm";
|
||||||
import { ListAlgorithm, type SortAlgorithm } from "../models";
|
import { ListAlgorithm, type SortAlgorithm } from "../models";
|
||||||
import { NaturalAlgorithm } from "./NaturalAlgorithm";
|
import { NaturalAlgorithm } from "./NaturalAlgorithm";
|
||||||
import { type TagID } from "../../models";
|
import { type TagID } from "../../../room-list-v3/skip-list/tag";
|
||||||
import { type OrderingAlgorithm } from "./OrderingAlgorithm";
|
import { type OrderingAlgorithm } from "./OrderingAlgorithm";
|
||||||
|
|
||||||
interface AlgorithmFactory {
|
interface AlgorithmFactory {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
|
|
||||||
import { type Room } from "matrix-js-sdk/src/matrix";
|
import { type Room } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type TagID } from "../models";
|
import { type TagID } from "../../room-list-v3/skip-list/tag";
|
||||||
import { type OrderingAlgorithm } from "./list-ordering/OrderingAlgorithm";
|
import { type OrderingAlgorithm } from "./list-ordering/OrderingAlgorithm";
|
||||||
|
|
||||||
export enum SortAlgorithm {
|
export enum SortAlgorithm {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
|
|
||||||
import { type Room } from "matrix-js-sdk/src/matrix";
|
import { type Room } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type TagID } from "../../models";
|
import { type TagID } from "../../../room-list-v3/skip-list/tag";
|
||||||
import { type IAlgorithm } from "./IAlgorithm";
|
import { type IAlgorithm } from "./IAlgorithm";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
|
|
||||||
import { type Room } from "matrix-js-sdk/src/matrix";
|
import { type Room } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type TagID } from "../../models";
|
import { type TagID } from "../../../room-list-v3/skip-list/tag";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a tag sorting algorithm.
|
* Represents a tag sorting algorithm.
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
|
|
||||||
import { type Room } from "matrix-js-sdk/src/matrix";
|
import { type Room } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type TagID } from "../../models";
|
import { type TagID } from "../../../room-list-v3/skip-list/tag";
|
||||||
import { type IAlgorithm } from "./IAlgorithm";
|
import { type IAlgorithm } from "./IAlgorithm";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
|
|
||||||
import { type Room, type MatrixEvent, EventType } from "matrix-js-sdk/src/matrix";
|
import { type Room, type MatrixEvent, EventType } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type TagID } from "../../models";
|
import { type TagID } from "../../../room-list-v3/skip-list/tag";
|
||||||
import { type IAlgorithm } from "./IAlgorithm";
|
import { type IAlgorithm } from "./IAlgorithm";
|
||||||
import { MatrixClientPeg } from "../../../../MatrixClientPeg";
|
import { MatrixClientPeg } from "../../../../MatrixClientPeg";
|
||||||
import * as Unread from "../../../../Unread";
|
import * as Unread from "../../../../Unread";
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import { type Room } from "matrix-js-sdk/src/matrix";
|
|||||||
import { SortAlgorithm } from "../models";
|
import { SortAlgorithm } from "../models";
|
||||||
import { ManualAlgorithm } from "./ManualAlgorithm";
|
import { ManualAlgorithm } from "./ManualAlgorithm";
|
||||||
import { type IAlgorithm } from "./IAlgorithm";
|
import { type IAlgorithm } from "./IAlgorithm";
|
||||||
import { type TagID } from "../../models";
|
import { type TagID } from "../../../room-list-v3/skip-list/tag";
|
||||||
import { RecentAlgorithm } from "./RecentAlgorithm";
|
import { RecentAlgorithm } from "./RecentAlgorithm";
|
||||||
import { AlphabeticAlgorithm } from "./AlphabeticAlgorithm";
|
import { AlphabeticAlgorithm } from "./AlphabeticAlgorithm";
|
||||||
|
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2024 New Vector Ltd.
|
|
||||||
* Copyright 2020 The Matrix.org Foundation C.I.C.
|
|
||||||
*
|
|
||||||
* 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 { RoomListCustomisations } from "../../../customisations/RoomList";
|
|
||||||
import { isLocalRoom } from "../../../utils/localRoom/isLocalRoom";
|
|
||||||
|
|
||||||
export class VisibilityProvider {
|
|
||||||
private static internalInstance: VisibilityProvider;
|
|
||||||
|
|
||||||
private constructor() {}
|
|
||||||
|
|
||||||
public static get instance(): VisibilityProvider {
|
|
||||||
if (!VisibilityProvider.internalInstance) {
|
|
||||||
VisibilityProvider.internalInstance = new VisibilityProvider();
|
|
||||||
}
|
|
||||||
return VisibilityProvider.internalInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public isRoomVisible(room?: Room): boolean {
|
|
||||||
if (!room) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// hide space rooms as they'll be shown in the SpacePanel
|
|
||||||
if (room.isSpaceRoom()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isLocalRoom(room)) {
|
|
||||||
// local rooms shouldn't show up anywhere
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RoomListCustomisations.isRoomVisible) {
|
|
||||||
return RoomListCustomisations.isRoomVisible(room);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true; // default
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -6,17 +6,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com
|
|||||||
Please see LICENSE files in the repository root for full details.
|
Please see LICENSE files in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export enum DefaultTagID {
|
import { DefaultTagID } from "../room-list-v3/skip-list/tag";
|
||||||
Invite = "im.vector.fake.invite",
|
|
||||||
Untagged = "im.vector.fake.recent", // legacy: used to just be 'recent rooms' but now it's all untagged rooms
|
|
||||||
Archived = "im.vector.fake.archived",
|
|
||||||
LowPriority = "m.lowpriority",
|
|
||||||
Favourite = "m.favourite",
|
|
||||||
DM = "im.vector.fake.direct",
|
|
||||||
Conference = "im.vector.fake.conferences",
|
|
||||||
ServerNotice = "m.server_notice",
|
|
||||||
Suggested = "im.vector.fake.suggested",
|
|
||||||
}
|
|
||||||
|
|
||||||
export const OrderedDefaultTagIDs = [
|
export const OrderedDefaultTagIDs = [
|
||||||
DefaultTagID.Invite,
|
DefaultTagID.Invite,
|
||||||
@@ -30,8 +20,6 @@ export const OrderedDefaultTagIDs = [
|
|||||||
DefaultTagID.Archived,
|
DefaultTagID.Archived,
|
||||||
];
|
];
|
||||||
|
|
||||||
export type TagID = string | DefaultTagID;
|
|
||||||
|
|
||||||
export enum RoomUpdateCause {
|
export enum RoomUpdateCause {
|
||||||
Timeline = "TIMELINE",
|
Timeline = "TIMELINE",
|
||||||
PossibleTagChange = "POSSIBLE_TAG_CHANGE",
|
PossibleTagChange = "POSSIBLE_TAG_CHANGE",
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
|
|
||||||
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type TagID } from "../models";
|
import { type TagID } from "../../room-list-v3/skip-list/tag";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents an event preview.
|
* Represents an event preview.
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type IPreview } from "./IPreview";
|
import { type IPreview } from "./IPreview";
|
||||||
import { type TagID } from "../models";
|
import { type TagID } from "../../room-list-v3/skip-list/tag";
|
||||||
import { getSenderName, isSelf, shouldPrefixMessagesIn } from "./utils";
|
import { getSenderName, isSelf, shouldPrefixMessagesIn } from "./utils";
|
||||||
import { _t } from "../../../languageHandler";
|
import { _t } from "../../../languageHandler";
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type IPreview } from "./IPreview";
|
import { type IPreview } from "./IPreview";
|
||||||
import { type TagID } from "../models";
|
import { type TagID } from "../../room-list-v3/skip-list/tag";
|
||||||
import { getSenderName, isSelf, shouldPrefixMessagesIn } from "./utils";
|
import { getSenderName, isSelf, shouldPrefixMessagesIn } from "./utils";
|
||||||
import { _t } from "../../../languageHandler";
|
import { _t } from "../../../languageHandler";
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type IPreview } from "./IPreview";
|
import { type IPreview } from "./IPreview";
|
||||||
import { type TagID } from "../models";
|
import { type TagID } from "../../room-list-v3/skip-list/tag";
|
||||||
import { getSenderName, isSelf, shouldPrefixMessagesIn } from "./utils";
|
import { getSenderName, isSelf, shouldPrefixMessagesIn } from "./utils";
|
||||||
import { _t } from "../../../languageHandler";
|
import { _t } from "../../../languageHandler";
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import { type MatrixEvent, MsgType, RelationType } from "matrix-js-sdk/src/matrix";
|
import { type MatrixEvent, MsgType, RelationType } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type IPreview } from "./IPreview";
|
import { type IPreview } from "./IPreview";
|
||||||
import { type TagID } from "../models";
|
import { type TagID } from "../../room-list-v3/skip-list/tag";
|
||||||
import { _t, sanitizeForTranslation } from "../../../languageHandler";
|
import { _t, sanitizeForTranslation } from "../../../languageHandler";
|
||||||
import { getSenderName, isSelf, shouldPrefixMessagesIn } from "./utils";
|
import { getSenderName, isSelf, shouldPrefixMessagesIn } from "./utils";
|
||||||
import { getHtmlText } from "../../../HtmlUtils";
|
import { getHtmlText } from "../../../HtmlUtils";
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import { InvalidEventError } from "matrix-js-sdk/src/extensible_events_v1/Invali
|
|||||||
import { PollStartEvent } from "matrix-js-sdk/src/extensible_events_v1/PollStartEvent";
|
import { PollStartEvent } from "matrix-js-sdk/src/extensible_events_v1/PollStartEvent";
|
||||||
|
|
||||||
import { type IPreview } from "./IPreview";
|
import { type IPreview } from "./IPreview";
|
||||||
import { type TagID } from "../models";
|
import { type TagID } from "../../room-list-v3/skip-list/tag";
|
||||||
import { _t, sanitizeForTranslation } from "../../../languageHandler";
|
import { _t, sanitizeForTranslation } from "../../../languageHandler";
|
||||||
import { getSenderName, isSelf, shouldPrefixMessagesIn } from "./utils";
|
import { getSenderName, isSelf, shouldPrefixMessagesIn } from "./utils";
|
||||||
import MatrixClientContext from "../../../contexts/MatrixClientContext";
|
import MatrixClientContext from "../../../contexts/MatrixClientContext";
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type IPreview } from "./IPreview";
|
import { type IPreview } from "./IPreview";
|
||||||
import { type TagID } from "../models";
|
import { type TagID } from "../../room-list-v3/skip-list/tag";
|
||||||
import { getSenderName, isSelf } from "./utils";
|
import { getSenderName, isSelf } from "./utils";
|
||||||
import { _t } from "../../../languageHandler";
|
import { _t } from "../../../languageHandler";
|
||||||
import { MatrixClientPeg } from "../../../MatrixClientPeg";
|
import { MatrixClientPeg } from "../../../MatrixClientPeg";
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { type IPreview } from "./IPreview";
|
import { type IPreview } from "./IPreview";
|
||||||
import { type TagID } from "../models";
|
import { type TagID } from "../../room-list-v3/skip-list/tag";
|
||||||
import { getSenderName, isSelf, shouldPrefixMessagesIn } from "./utils";
|
import { getSenderName, isSelf, shouldPrefixMessagesIn } from "./utils";
|
||||||
import { _t } from "../../../languageHandler";
|
import { _t } from "../../../languageHandler";
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { MatrixClientPeg } from "../../../MatrixClientPeg";
|
import { MatrixClientPeg } from "../../../MatrixClientPeg";
|
||||||
import { DefaultTagID, type TagID } from "../models";
|
import { DefaultTagID, type TagID } from "../../room-list-v3/skip-list/tag";
|
||||||
|
|
||||||
export function isSelf(event: MatrixEvent): boolean {
|
export function isSelf(event: MatrixEvent): boolean {
|
||||||
const selfUserId = MatrixClientPeg.safeGet().getSafeUserId();
|
const selfUserId = MatrixClientPeg.safeGet().getSafeUserId();
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import SettingsStore from "../../settings/SettingsStore";
|
|||||||
import DMRoomMap from "../../utils/DMRoomMap";
|
import DMRoomMap from "../../utils/DMRoomMap";
|
||||||
import { SpaceNotificationState } from "../notifications/SpaceNotificationState";
|
import { SpaceNotificationState } from "../notifications/SpaceNotificationState";
|
||||||
import { RoomNotificationStateStore } from "../notifications/RoomNotificationStateStore";
|
import { RoomNotificationStateStore } from "../notifications/RoomNotificationStateStore";
|
||||||
import { DefaultTagID } from "../room-list/models";
|
import { DefaultTagID } from "../room-list-v3/skip-list/tag";
|
||||||
import { EnhancedMap, mapDiff } from "../../utils/maps";
|
import { EnhancedMap, mapDiff } from "../../utils/maps";
|
||||||
import { setDiff, setHasDiff } from "../../utils/sets";
|
import { setDiff, setHasDiff } from "../../utils/sets";
|
||||||
import { Action } from "../../dispatcher/actions";
|
import { Action } from "../../dispatcher/actions";
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { type Room } from "matrix-js-sdk/src/matrix";
|
|||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
|
|
||||||
import RoomListStore from "../../stores/room-list/RoomListStore";
|
import RoomListStore from "../../stores/room-list/RoomListStore";
|
||||||
import { DefaultTagID, type TagID } from "../../stores/room-list/models";
|
import { DefaultTagID, type TagID } from "../../stores/room-list-v3/skip-list/tag";
|
||||||
import RoomListActions from "../../actions/RoomListActions";
|
import RoomListActions from "../../actions/RoomListActions";
|
||||||
import dis from "../../dispatcher/dispatcher";
|
import dis from "../../dispatcher/dispatcher";
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import { RoomNotificationStateStore } from "../../stores/notifications/RoomNotif
|
|||||||
import { NotificationStateEvents } from "../../stores/notifications/NotificationState";
|
import { NotificationStateEvents } from "../../stores/notifications/NotificationState";
|
||||||
import { MessagePreviewStore } from "../../stores/room-list/MessagePreviewStore";
|
import { MessagePreviewStore } from "../../stores/room-list/MessagePreviewStore";
|
||||||
import { UPDATE_EVENT } from "../../stores/AsyncStore";
|
import { UPDATE_EVENT } from "../../stores/AsyncStore";
|
||||||
import { DefaultTagID } from "../../stores/room-list/models";
|
import { DefaultTagID } from "../../stores/room-list-v3/skip-list/tag";
|
||||||
import DMRoomMap from "../../utils/DMRoomMap";
|
import DMRoomMap from "../../utils/DMRoomMap";
|
||||||
import SettingsStore from "../../settings/SettingsStore";
|
import SettingsStore from "../../settings/SettingsStore";
|
||||||
import { NotificationLevel } from "../../stores/notifications/NotificationLevel";
|
import { NotificationLevel } from "../../stores/notifications/NotificationLevel";
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import {
|
|||||||
import { createTestClient, mkStubRoom } from "../../../../test-utils";
|
import { createTestClient, mkStubRoom } from "../../../../test-utils";
|
||||||
import DMRoomMap from "../../../../../src/utils/DMRoomMap";
|
import DMRoomMap from "../../../../../src/utils/DMRoomMap";
|
||||||
import * as PresenceIndicatorModule from "../../../../../src/components/views/avatars/WithPresenceIndicator";
|
import * as PresenceIndicatorModule from "../../../../../src/components/views/avatars/WithPresenceIndicator";
|
||||||
import { DefaultTagID } from "../../../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
|
|
||||||
jest.mock("../../../../../src/utils/room/getJoinedNonFunctionalMembers", () => ({
|
jest.mock("../../../../../src/utils/room/getJoinedNonFunctionalMembers", () => ({
|
||||||
getJoinedNonFunctionalMembers: jest.fn().mockReturnValue([]),
|
getJoinedNonFunctionalMembers: jest.fn().mockReturnValue([]),
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ import { useRoomSummaryCardViewModel } from "../../../../../src/components/viewm
|
|||||||
import { mkStubRoom, stubClient, withClientContextRenderOptions } from "../../../../test-utils";
|
import { mkStubRoom, stubClient, withClientContextRenderOptions } from "../../../../test-utils";
|
||||||
import defaultDispatcher from "../../../../../src/dispatcher/dispatcher";
|
import defaultDispatcher from "../../../../../src/dispatcher/dispatcher";
|
||||||
import RoomListStore from "../../../../../src/stores/room-list/RoomListStore";
|
import RoomListStore from "../../../../../src/stores/room-list/RoomListStore";
|
||||||
import { DefaultTagID } from "../../../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
import RightPanelStore from "../../../../../src/stores/right-panel/RightPanelStore";
|
import RightPanelStore from "../../../../../src/stores/right-panel/RightPanelStore";
|
||||||
import { RightPanelPhases } from "../../../../../src/stores/right-panel/RightPanelStorePhases";
|
import { RightPanelPhases } from "../../../../../src/stores/right-panel/RightPanelStorePhases";
|
||||||
import Modal from "../../../../../src/Modal";
|
import Modal from "../../../../../src/Modal";
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ import {
|
|||||||
} from "../../../../../src/components/views/context_menus/RoomGeneralContextMenu";
|
} from "../../../../../src/components/views/context_menus/RoomGeneralContextMenu";
|
||||||
import MatrixClientContext from "../../../../../src/contexts/MatrixClientContext";
|
import MatrixClientContext from "../../../../../src/contexts/MatrixClientContext";
|
||||||
import { MatrixClientPeg } from "../../../../../src/MatrixClientPeg";
|
import { MatrixClientPeg } from "../../../../../src/MatrixClientPeg";
|
||||||
import { DefaultTagID } from "../../../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
import RoomListStore from "../../../../../src/stores/room-list/RoomListStore";
|
import RoomListStore from "../../../../../src/stores/room-list/RoomListStore";
|
||||||
import DMRoomMap from "../../../../../src/utils/DMRoomMap";
|
import DMRoomMap from "../../../../../src/utils/DMRoomMap";
|
||||||
import { mkMessage, stubClient } from "../../../../test-utils/test-utils";
|
import { mkMessage, stubClient } from "../../../../test-utils/test-utils";
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import SpaceStore from "../../../../../src/stores/spaces/SpaceStore";
|
|||||||
import DMRoomMap from "../../../../../src/utils/DMRoomMap";
|
import DMRoomMap from "../../../../../src/utils/DMRoomMap";
|
||||||
import RoomListStore from "../../../../../src/stores/room-list/RoomListStore";
|
import RoomListStore from "../../../../../src/stores/room-list/RoomListStore";
|
||||||
import { type ITagMap } from "../../../../../src/stores/room-list/algorithms/models";
|
import { type ITagMap } from "../../../../../src/stores/room-list/algorithms/models";
|
||||||
import { DefaultTagID } from "../../../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
|
|
||||||
jest.mock("../../../../../src/customisations/helpers/UIComponents", () => ({
|
jest.mock("../../../../../src/customisations/helpers/UIComponents", () => ({
|
||||||
shouldShowComponent: jest.fn(),
|
shouldShowComponent: jest.fn(),
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import {
|
|||||||
} from "../../../../test-utils";
|
} from "../../../../test-utils";
|
||||||
import { CallStore } from "../../../../../src/stores/CallStore";
|
import { CallStore } from "../../../../../src/stores/CallStore";
|
||||||
import RoomTile from "../../../../../src/components/views/rooms/RoomTile";
|
import RoomTile from "../../../../../src/components/views/rooms/RoomTile";
|
||||||
import { DefaultTagID } from "../../../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
import DMRoomMap from "../../../../../src/utils/DMRoomMap";
|
import DMRoomMap from "../../../../../src/utils/DMRoomMap";
|
||||||
import PlatformPeg from "../../../../../src/PlatformPeg";
|
import PlatformPeg from "../../../../../src/PlatformPeg";
|
||||||
import type BasePlatform from "../../../../../src/BasePlatform";
|
import type BasePlatform from "../../../../../src/BasePlatform";
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import { SettingLevel } from "../../../src/settings/SettingLevel";
|
|||||||
import { Action } from "../../../src/dispatcher/actions";
|
import { Action } from "../../../src/dispatcher/actions";
|
||||||
import { MatrixClientPeg } from "../../../src/MatrixClientPeg";
|
import { MatrixClientPeg } from "../../../src/MatrixClientPeg";
|
||||||
import RoomListStore from "../../../src/stores/room-list/RoomListStore";
|
import RoomListStore from "../../../src/stores/room-list/RoomListStore";
|
||||||
import { DefaultTagID } from "../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
import { RoomNotificationStateStore } from "../../../src/stores/notifications/RoomNotificationStateStore";
|
import { RoomNotificationStateStore } from "../../../src/stores/notifications/RoomNotificationStateStore";
|
||||||
import { NotificationLevel } from "../../../src/stores/notifications/NotificationLevel";
|
import { NotificationLevel } from "../../../src/stores/notifications/NotificationLevel";
|
||||||
import { storeRoomAliasInCache } from "../../../src/RoomAliasCache.ts";
|
import { storeRoomAliasInCache } from "../../../src/RoomAliasCache.ts";
|
||||||
|
|||||||
@@ -20,14 +20,14 @@ import { AlphabeticSorter } from "../../../../src/stores/room-list-v3/skip-list/
|
|||||||
import dispatcher from "../../../../src/dispatcher/dispatcher";
|
import dispatcher from "../../../../src/dispatcher/dispatcher";
|
||||||
import SpaceStore from "../../../../src/stores/spaces/SpaceStore";
|
import SpaceStore from "../../../../src/stores/spaces/SpaceStore";
|
||||||
import { MetaSpace, UPDATE_SELECTED_SPACE } from "../../../../src/stores/spaces";
|
import { MetaSpace, UPDATE_SELECTED_SPACE } from "../../../../src/stores/spaces";
|
||||||
import { DefaultTagID } from "../../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
import { FilterKey } from "../../../../src/stores/room-list-v3/skip-list/filters";
|
import { FilterKey } from "../../../../src/stores/room-list-v3/skip-list/filters";
|
||||||
import { RoomNotificationStateStore } from "../../../../src/stores/notifications/RoomNotificationStateStore";
|
import { RoomNotificationStateStore } from "../../../../src/stores/notifications/RoomNotificationStateStore";
|
||||||
import DMRoomMap from "../../../../src/utils/DMRoomMap";
|
import DMRoomMap from "../../../../src/utils/DMRoomMap";
|
||||||
import { SortingAlgorithm } from "../../../../src/stores/room-list-v3/skip-list/sorters";
|
import { SortingAlgorithm } from "../../../../src/stores/room-list-v3/skip-list/sorters";
|
||||||
import SettingsStore from "../../../../src/settings/SettingsStore";
|
import SettingsStore from "../../../../src/settings/SettingsStore";
|
||||||
import * as utils from "../../../../src/utils/notifications";
|
import * as utils from "../../../../src/utils/notifications";
|
||||||
import * as roomMute from "../../../../src/stores/room-list/utils/roomMute";
|
import * as utilsRLS from "../../../../src/stores/room-list-v3/utils.ts";
|
||||||
import { Action } from "../../../../src/dispatcher/actions";
|
import { Action } from "../../../../src/dispatcher/actions";
|
||||||
import { SettingLevel } from "../../../../src/settings/SettingLevel.ts";
|
import { SettingLevel } from "../../../../src/settings/SettingLevel.ts";
|
||||||
|
|
||||||
@@ -852,7 +852,7 @@ describe("RoomListStoreV3", () => {
|
|||||||
|
|
||||||
// Let's say that muted room 64 becomes un-muted.
|
// Let's say that muted room 64 becomes un-muted.
|
||||||
const unmutedRoom = rooms[64];
|
const unmutedRoom = rooms[64];
|
||||||
jest.spyOn(roomMute, "getChangedOverrideRoomMutePushRules").mockImplementation(() => [unmutedRoom.roomId]);
|
jest.spyOn(utilsRLS, "getChangedOverrideRoomMutePushRules").mockImplementation(() => [unmutedRoom.roomId]);
|
||||||
client.getRoom = jest.fn().mockReturnValue(unmutedRoom);
|
client.getRoom = jest.fn().mockReturnValue(unmutedRoom);
|
||||||
const payload = {
|
const payload = {
|
||||||
action: "MatrixActions.accountData",
|
action: "MatrixActions.accountData",
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2026 Element Creations 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 { mocked } from "jest-mock";
|
||||||
|
import { type MatrixClient } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
|
import { RoomListCustomisations } from "../../../../src/customisations/RoomList";
|
||||||
|
import { isRoomVisible } from "../../../../src/stores/room-list-v3/isRoomVisible";
|
||||||
|
import { createTestClient, mkRoom, mkSpace } from "../../../test-utils";
|
||||||
|
import { LOCAL_ROOM_ID_PREFIX, LocalRoom } from "../../../../src/models/LocalRoom";
|
||||||
|
|
||||||
|
jest.mock("../../../../src/customisations/RoomList", () => ({
|
||||||
|
RoomListCustomisations: {
|
||||||
|
isRoomVisible: jest.fn(),
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe("isRoomVisible", () => {
|
||||||
|
let matrixClient: MatrixClient;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
matrixClient = createTestClient();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return false without room", () => {
|
||||||
|
expect(isRoomVisible()).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return false for a space room", () => {
|
||||||
|
const room = mkSpace(matrixClient, "space-room");
|
||||||
|
expect(isRoomVisible(room)).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return false for a local room", () => {
|
||||||
|
const room = new LocalRoom(LOCAL_ROOM_ID_PREFIX + "test", createTestClient(), "@test:example.com");
|
||||||
|
room.isSpaceRoom = () => false;
|
||||||
|
|
||||||
|
expect(isRoomVisible(room)).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return false if visibility customisation returns false", () => {
|
||||||
|
mocked(RoomListCustomisations.isRoomVisible!).mockReturnValue(false);
|
||||||
|
const room = mkRoom(matrixClient, "test-room");
|
||||||
|
expect(isRoomVisible(room)).toBe(false);
|
||||||
|
expect(RoomListCustomisations.isRoomVisible!).toHaveBeenCalledWith(room);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return true if visibility customisation returns true", () => {
|
||||||
|
mocked(RoomListCustomisations.isRoomVisible!).mockReturnValue(true);
|
||||||
|
const room = mkRoom(matrixClient, "test-room");
|
||||||
|
expect(isRoomVisible(room)).toBe(true);
|
||||||
|
expect(RoomListCustomisations.isRoomVisible).toHaveBeenCalledWith(room);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -11,7 +11,7 @@ import { stubClient } from "../../../../../test-utils";
|
|||||||
import { getMockedRooms } from "../getMockedRooms";
|
import { getMockedRooms } from "../getMockedRooms";
|
||||||
import { CallStore } from "../../../../../../src/stores/CallStore";
|
import { CallStore } from "../../../../../../src/stores/CallStore";
|
||||||
import type { Call } from "../../../../../../src/models/Call";
|
import type { Call } from "../../../../../../src/models/Call";
|
||||||
import { DefaultTagID } from "../../../../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
import { RoomNotificationStateStore } from "../../../../../../src/stores/notifications/RoomNotificationStateStore";
|
import { RoomNotificationStateStore } from "../../../../../../src/stores/notifications/RoomNotificationStateStore";
|
||||||
import type { RoomNotificationState } from "../../../../../../src/stores/notifications/RoomNotificationState";
|
import type { RoomNotificationState } from "../../../../../../src/stores/notifications/RoomNotificationState";
|
||||||
import * as utils from "../../../../../../src/utils/notifications";
|
import * as utils from "../../../../../../src/utils/notifications";
|
||||||
|
|||||||
+2
-2
@@ -8,8 +8,8 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
|
|
||||||
import { ConditionKind, EventType, type IPushRule, MatrixEvent, PushRuleActionName } from "matrix-js-sdk/src/matrix";
|
import { ConditionKind, EventType, type IPushRule, MatrixEvent, PushRuleActionName } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { getChangedOverrideRoomMutePushRules } from "../../../../../src/stores/room-list/utils/roomMute";
|
import { getChangedOverrideRoomMutePushRules } from "../../../../src/stores/room-list-v3/utils";
|
||||||
import { DEFAULT_PUSH_RULES, getDefaultRuleWithKind, makePushRule } from "../../../../test-utils/pushRules";
|
import { DEFAULT_PUSH_RULES, getDefaultRuleWithKind, makePushRule } from "../../../test-utils/pushRules";
|
||||||
|
|
||||||
describe("getChangedOverrideRoomMutePushRules()", () => {
|
describe("getChangedOverrideRoomMutePushRules()", () => {
|
||||||
const makePushRulesEvent = (overrideRules: IPushRule[] = []): MatrixEvent => {
|
const makePushRulesEvent = (overrideRules: IPushRule[] = []): MatrixEvent => {
|
||||||
@@ -20,7 +20,7 @@ import {
|
|||||||
|
|
||||||
import { MessagePreviewStore } from "../../../../src/stores/room-list/MessagePreviewStore";
|
import { MessagePreviewStore } from "../../../../src/stores/room-list/MessagePreviewStore";
|
||||||
import { mkEvent, mkMessage, mkReaction, setupAsyncStoreWithClient, stubClient } from "../../../test-utils";
|
import { mkEvent, mkMessage, mkReaction, setupAsyncStoreWithClient, stubClient } from "../../../test-utils";
|
||||||
import { DefaultTagID } from "../../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
import { mkThread } from "../../../test-utils/threads";
|
import { mkThread } from "../../../test-utils/threads";
|
||||||
|
|
||||||
describe("MessagePreviewStore", () => {
|
describe("MessagePreviewStore", () => {
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ import defaultDispatcher, { type MatrixDispatcher } from "../../../../src/dispat
|
|||||||
import { SettingLevel } from "../../../../src/settings/SettingLevel";
|
import { SettingLevel } from "../../../../src/settings/SettingLevel";
|
||||||
import SettingsStore, { type CallbackFn } from "../../../../src/settings/SettingsStore";
|
import SettingsStore, { type CallbackFn } from "../../../../src/settings/SettingsStore";
|
||||||
import { ListAlgorithm, SortAlgorithm } from "../../../../src/stores/room-list/algorithms/models";
|
import { ListAlgorithm, SortAlgorithm } from "../../../../src/stores/room-list/algorithms/models";
|
||||||
import { DefaultTagID, OrderedDefaultTagIDs, RoomUpdateCause } from "../../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
|
import { OrderedDefaultTagIDs, RoomUpdateCause } from "../../../../src/stores/room-list/models";
|
||||||
import RoomListStore, { RoomListStoreClass } from "../../../../src/stores/room-list/RoomListStore";
|
import RoomListStore, { RoomListStoreClass } from "../../../../src/stores/room-list/RoomListStore";
|
||||||
import DMRoomMap from "../../../../src/utils/DMRoomMap";
|
import DMRoomMap from "../../../../src/utils/DMRoomMap";
|
||||||
import { flushPromises, stubClient, upsertRoomStateEvents, mkRoom } from "../../../test-utils";
|
import { flushPromises, stubClient, upsertRoomStateEvents, mkRoom } from "../../../test-utils";
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import {
|
|||||||
} from "../../../../test-utils";
|
} from "../../../../test-utils";
|
||||||
import { MatrixClientPeg } from "../../../../../src/MatrixClientPeg";
|
import { MatrixClientPeg } from "../../../../../src/MatrixClientPeg";
|
||||||
import DMRoomMap from "../../../../../src/utils/DMRoomMap";
|
import DMRoomMap from "../../../../../src/utils/DMRoomMap";
|
||||||
import { DefaultTagID } from "../../../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
import { SortAlgorithm, ListAlgorithm } from "../../../../../src/stores/room-list/algorithms/models";
|
import { SortAlgorithm, ListAlgorithm } from "../../../../../src/stores/room-list/algorithms/models";
|
||||||
import "../../../../../src/stores/room-list/RoomListStore"; // must be imported before Algorithm to avoid cycles
|
import "../../../../../src/stores/room-list/RoomListStore"; // must be imported before Algorithm to avoid cycles
|
||||||
import { Algorithm } from "../../../../../src/stores/room-list/algorithms/Algorithm";
|
import { Algorithm } from "../../../../../src/stores/room-list/algorithms/Algorithm";
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import { MatrixClientPeg } from "../../../../../src/MatrixClientPeg";
|
|||||||
import "../../../../../src/stores/room-list/RoomListStore";
|
import "../../../../../src/stores/room-list/RoomListStore";
|
||||||
import { RecentAlgorithm } from "../../../../../src/stores/room-list/algorithms/tag-sorting/RecentAlgorithm";
|
import { RecentAlgorithm } from "../../../../../src/stores/room-list/algorithms/tag-sorting/RecentAlgorithm";
|
||||||
import { makeThreadEvent, mkThread } from "../../../../test-utils/threads";
|
import { makeThreadEvent, mkThread } from "../../../../test-utils/threads";
|
||||||
import { DefaultTagID } from "../../../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
|
|
||||||
describe("RecentAlgorithm", () => {
|
describe("RecentAlgorithm", () => {
|
||||||
let algorithm: RecentAlgorithm;
|
let algorithm: RecentAlgorithm;
|
||||||
|
|||||||
+2
-1
@@ -13,7 +13,8 @@ import { RoomNotificationStateStore } from "../../../../../../src/stores/notific
|
|||||||
import { ImportanceAlgorithm } from "../../../../../../src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm";
|
import { ImportanceAlgorithm } from "../../../../../../src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm";
|
||||||
import { SortAlgorithm } from "../../../../../../src/stores/room-list/algorithms/models";
|
import { SortAlgorithm } from "../../../../../../src/stores/room-list/algorithms/models";
|
||||||
import * as RoomNotifs from "../../../../../../src/RoomNotifs";
|
import * as RoomNotifs from "../../../../../../src/RoomNotifs";
|
||||||
import { DefaultTagID, RoomUpdateCause } from "../../../../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
|
import { RoomUpdateCause } from "../../../../../../src/stores/room-list/models";
|
||||||
import { NotificationLevel } from "../../../../../../src/stores/notifications/NotificationLevel";
|
import { NotificationLevel } from "../../../../../../src/stores/notifications/NotificationLevel";
|
||||||
import { AlphabeticAlgorithm } from "../../../../../../src/stores/room-list/algorithms/tag-sorting/AlphabeticAlgorithm";
|
import { AlphabeticAlgorithm } from "../../../../../../src/stores/room-list/algorithms/tag-sorting/AlphabeticAlgorithm";
|
||||||
import { getMockClientWithEventEmitter, mockClientMethodsUser } from "../../../../../test-utils";
|
import { getMockClientWithEventEmitter, mockClientMethodsUser } from "../../../../../test-utils";
|
||||||
|
|||||||
+2
-1
@@ -11,7 +11,8 @@ import { logger } from "matrix-js-sdk/src/logger";
|
|||||||
|
|
||||||
import { NaturalAlgorithm } from "../../../../../../src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm";
|
import { NaturalAlgorithm } from "../../../../../../src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm";
|
||||||
import { SortAlgorithm } from "../../../../../../src/stores/room-list/algorithms/models";
|
import { SortAlgorithm } from "../../../../../../src/stores/room-list/algorithms/models";
|
||||||
import { DefaultTagID, RoomUpdateCause } from "../../../../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
|
import { RoomUpdateCause } from "../../../../../../src/stores/room-list/models";
|
||||||
import { AlphabeticAlgorithm } from "../../../../../../src/stores/room-list/algorithms/tag-sorting/AlphabeticAlgorithm";
|
import { AlphabeticAlgorithm } from "../../../../../../src/stores/room-list/algorithms/tag-sorting/AlphabeticAlgorithm";
|
||||||
import { RecentAlgorithm } from "../../../../../../src/stores/room-list/algorithms/tag-sorting/RecentAlgorithm";
|
import { RecentAlgorithm } from "../../../../../../src/stores/room-list/algorithms/tag-sorting/RecentAlgorithm";
|
||||||
import { RoomNotificationStateStore } from "../../../../../../src/stores/notifications/RoomNotificationStateStore";
|
import { RoomNotificationStateStore } from "../../../../../../src/stores/notifications/RoomNotificationStateStore";
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2024 New Vector Ltd.
|
|
||||||
Copyright 2022 The Matrix.org Foundation C.I.C.
|
|
||||||
|
|
||||||
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 { mocked } from "jest-mock";
|
|
||||||
import { type Room, RoomType } from "matrix-js-sdk/src/matrix";
|
|
||||||
|
|
||||||
import { VisibilityProvider } from "../../../../../src/stores/room-list/filters/VisibilityProvider";
|
|
||||||
import { LocalRoom, LOCAL_ROOM_ID_PREFIX } from "../../../../../src/models/LocalRoom";
|
|
||||||
import { RoomListCustomisations } from "../../../../../src/customisations/RoomList";
|
|
||||||
import { createTestClient } from "../../../../test-utils";
|
|
||||||
|
|
||||||
jest.mock("../../../../../src/customisations/RoomList", () => ({
|
|
||||||
RoomListCustomisations: {
|
|
||||||
isRoomVisible: jest.fn(),
|
|
||||||
},
|
|
||||||
}));
|
|
||||||
|
|
||||||
const createRoom = (isSpaceRoom = false): Room => {
|
|
||||||
return {
|
|
||||||
isSpaceRoom: () => isSpaceRoom,
|
|
||||||
getType: () => (isSpaceRoom ? RoomType.Space : undefined),
|
|
||||||
} as unknown as Room;
|
|
||||||
};
|
|
||||||
|
|
||||||
const createLocalRoom = (): LocalRoom => {
|
|
||||||
const room = new LocalRoom(LOCAL_ROOM_ID_PREFIX + "test", createTestClient(), "@test:example.com");
|
|
||||||
room.isSpaceRoom = () => false;
|
|
||||||
return room;
|
|
||||||
};
|
|
||||||
|
|
||||||
describe("VisibilityProvider", () => {
|
|
||||||
describe("instance", () => {
|
|
||||||
it("should return an instance", () => {
|
|
||||||
const visibilityProvider = VisibilityProvider.instance;
|
|
||||||
expect(visibilityProvider).toBeInstanceOf(VisibilityProvider);
|
|
||||||
expect(VisibilityProvider.instance).toBe(visibilityProvider);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("isRoomVisible", () => {
|
|
||||||
it("should return false without room", () => {
|
|
||||||
expect(VisibilityProvider.instance.isRoomVisible()).toBe(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should return false for a space room", () => {
|
|
||||||
const room = createRoom(true);
|
|
||||||
expect(VisibilityProvider.instance.isRoomVisible(room)).toBe(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should return false for a local room", () => {
|
|
||||||
const room = createLocalRoom();
|
|
||||||
expect(VisibilityProvider.instance.isRoomVisible(room)).toBe(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should return false if visibility customisation returns false", () => {
|
|
||||||
mocked(RoomListCustomisations.isRoomVisible!).mockReturnValue(false);
|
|
||||||
const room = createRoom();
|
|
||||||
expect(VisibilityProvider.instance.isRoomVisible(room)).toBe(false);
|
|
||||||
expect(RoomListCustomisations.isRoomVisible).toHaveBeenCalledWith(room);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should return true if visibility customisation returns true", () => {
|
|
||||||
mocked(RoomListCustomisations.isRoomVisible!).mockReturnValue(true);
|
|
||||||
const room = createRoom();
|
|
||||||
expect(VisibilityProvider.instance.isRoomVisible(room)).toBe(true);
|
|
||||||
expect(RoomListCustomisations.isRoomVisible).toHaveBeenCalledWith(room);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -10,7 +10,7 @@ import { Room } from "matrix-js-sdk/src/matrix";
|
|||||||
|
|
||||||
import RoomListActions from "../../../../src/actions/RoomListActions";
|
import RoomListActions from "../../../../src/actions/RoomListActions";
|
||||||
import defaultDispatcher from "../../../../src/dispatcher/dispatcher";
|
import defaultDispatcher from "../../../../src/dispatcher/dispatcher";
|
||||||
import { DefaultTagID, type TagID } from "../../../../src/stores/room-list/models";
|
import { DefaultTagID, type TagID } from "../../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
import RoomListStore from "../../../../src/stores/room-list/RoomListStore";
|
import RoomListStore from "../../../../src/stores/room-list/RoomListStore";
|
||||||
import { tagRoom } from "../../../../src/utils/room/tagRoom";
|
import { tagRoom } from "../../../../src/utils/room/tagRoom";
|
||||||
import { getMockClientWithEventEmitter } from "../../../test-utils";
|
import { getMockClientWithEventEmitter } from "../../../test-utils";
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import { type MessagePreview, MessagePreviewStore } from "../../../src/stores/ro
|
|||||||
import { UPDATE_EVENT } from "../../../src/stores/AsyncStore";
|
import { UPDATE_EVENT } from "../../../src/stores/AsyncStore";
|
||||||
import SettingsStore from "../../../src/settings/SettingsStore";
|
import SettingsStore from "../../../src/settings/SettingsStore";
|
||||||
import DMRoomMap from "../../../src/utils/DMRoomMap";
|
import DMRoomMap from "../../../src/utils/DMRoomMap";
|
||||||
import { DefaultTagID } from "../../../src/stores/room-list/models";
|
import { DefaultTagID } from "../../../src/stores/room-list-v3/skip-list/tag";
|
||||||
import dispatcher from "../../../src/dispatcher/dispatcher";
|
import dispatcher from "../../../src/dispatcher/dispatcher";
|
||||||
import { Action } from "../../../src/dispatcher/actions";
|
import { Action } from "../../../src/dispatcher/actions";
|
||||||
import { CallStore } from "../../../src/stores/CallStore";
|
import { CallStore } from "../../../src/stores/CallStore";
|
||||||
|
|||||||
Reference in New Issue
Block a user