Merge pull request #12336 from matrix-org/andybalaam/stas-demydiuk-membership-type3

Introduce Membership type (take 2)
This commit is contained in:
David Baker 2024-03-22 15:36:39 +00:00 committed by GitHub
commit 8f22550f19
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
113 changed files with 711 additions and 517 deletions

View file

@ -17,6 +17,7 @@ limitations under the License.
import React, { ReactElement, ReactNode, useContext, useMemo, useRef, useState } from "react";
import classNames from "classnames";
import { Room, EventType } from "matrix-js-sdk/src/matrix";
import { KnownMembership } from "matrix-js-sdk/src/types";
import { sleep } from "matrix-js-sdk/src/utils";
import { logger } from "matrix-js-sdk/src/logger";
@ -140,7 +141,9 @@ export const AddExistingToSpace: React.FC<IAddExistingToSpaceProps> = ({
const msc3946ProcessDynamicPredecessor = useSettingValue<boolean>("feature_dynamic_room_predecessors");
const visibleRooms = useMemo(
() =>
cli?.getVisibleRooms(msc3946ProcessDynamicPredecessor).filter((r) => r.getMyMembership() === "join") ?? [],
cli
?.getVisibleRooms(msc3946ProcessDynamicPredecessor)
.filter((r) => r.getMyMembership() === KnownMembership.Join) ?? [],
[cli, msc3946ProcessDynamicPredecessor],
);

View file

@ -29,6 +29,7 @@ import {
M_TIMESTAMP,
M_BEACON,
} from "matrix-js-sdk/src/matrix";
import { KnownMembership } from "matrix-js-sdk/src/types";
import { _t } from "../../../languageHandler";
import dis from "../../../dispatcher/dispatcher";
@ -267,7 +268,7 @@ const ForwardDialog: React.FC<IProps> = ({ matrixClient: cli, event, permalinkCr
sortRooms(
cli
.getVisibleRooms(msc3946DynamicRoomPredecessors)
.filter((room) => room.getMyMembership() === "join" && !room.isSpaceRoom()),
.filter((room) => room.getMyMembership() === KnownMembership.Join && !room.isSpaceRoom()),
),
[cli, msc3946DynamicRoomPredecessors],
);

View file

@ -17,6 +17,7 @@ limitations under the License.
import React, { createRef, ReactNode, SyntheticEvent } from "react";
import classNames from "classnames";
import { RoomMember, Room, MatrixError, EventType } from "matrix-js-sdk/src/matrix";
import { KnownMembership } from "matrix-js-sdk/src/types";
import { MatrixCall } from "matrix-js-sdk/src/webrtc/call";
import { logger } from "matrix-js-sdk/src/logger";
import { uniqBy } from "lodash";
@ -372,10 +373,10 @@ export default class InviteDialog extends React.PureComponent<Props, IInviteDial
const room = MatrixClientPeg.safeGet().getRoom(props.roomId);
const isFederated = room?.currentState.getStateEvents(EventType.RoomCreate, "")?.getContent()["m.federate"];
if (!room) throw new Error("Room ID given to InviteDialog does not look like a room");
room.getMembersWithMembership("invite").forEach((m) => excludedIds.add(m.userId));
room.getMembersWithMembership("join").forEach((m) => excludedIds.add(m.userId));
room.getMembersWithMembership(KnownMembership.Invite).forEach((m) => excludedIds.add(m.userId));
room.getMembersWithMembership(KnownMembership.Join).forEach((m) => excludedIds.add(m.userId));
// add banned users, so we don't try to invite them
room.getMembersWithMembership("ban").forEach((m) => excludedIds.add(m.userId));
room.getMembersWithMembership(KnownMembership.Ban).forEach((m) => excludedIds.add(m.userId));
if (isFederated === false) {
// exclude users from external servers
const homeserver = props.roomId.split(":")[1];

View file

@ -16,6 +16,7 @@ limitations under the License.
import React, { useMemo, useState } from "react";
import { Room } from "matrix-js-sdk/src/matrix";
import { KnownMembership } from "matrix-js-sdk/src/types";
import { _t } from "../../../languageHandler";
import BaseDialog from "./BaseDialog";
@ -102,7 +103,7 @@ const ManageRestrictedJoinRuleDialog: React.FC<IProps> = ({ room, selected = [],
if (!room) {
return { roomId, name: roomId } as Room;
}
if (room.getMyMembership() !== "join" || !room.isSpaceRoom()) {
if (room.getMyMembership() !== KnownMembership.Join || !room.isSpaceRoom()) {
return room;
}
}),

View file

@ -17,6 +17,7 @@ limitations under the License.
import React, { useContext, useMemo } from "react";
import { EventType } from "matrix-js-sdk/src/matrix";
import { KnownMembership } from "matrix-js-sdk/src/types";
import BaseTool, { DevtoolsContext, IDevtoolsProps } from "./BaseTool";
import { _t } from "../../../../languageHandler";
@ -27,7 +28,7 @@ const ServersInRoom: React.FC<IDevtoolsProps> = ({ onBack }) => {
const servers = useMemo<Record<string, number>>(() => {
const servers: Record<string, number> = {};
context.room.currentState.getStateEvents(EventType.RoomMember).forEach((ev) => {
if (ev.getContent().membership !== "join") return; // only count joined users
if (ev.getContent().membership !== KnownMembership.Join) return; // only count joined users
const server = ev.getSender()!.split(":")[1];
servers[server] = (servers[server] ?? 0) + 1;
});

View file

@ -26,6 +26,7 @@ import {
HierarchyRoom,
JoinRule,
} from "matrix-js-sdk/src/matrix";
import { KnownMembership } from "matrix-js-sdk/src/types";
import { normalize } from "matrix-js-sdk/src/utils";
import React, { ChangeEvent, RefObject, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
import sanitizeHtml from "sanitize-html";
@ -244,7 +245,7 @@ const findVisibleRooms = (cli: MatrixClient, msc3946ProcessDynamicPredecessor: b
if (isLocalRoom(room)) return false;
// TODO we may want to put invites in their own list
return room.getMyMembership() === "join" || room.getMyMembership() == "invite";
return room.getMyMembership() === KnownMembership.Join || room.getMyMembership() == KnownMembership.Invite;
});
};
@ -675,7 +676,7 @@ const SpotlightDialog: React.FC<IProps> = ({ initialText = "", initialFilter = n
// world readable, a modal will appear asking you to register first. If
// it is readable, the preview appears as normal.
const showViewButton =
clientRoom?.getMyMembership() === "join" ||
clientRoom?.getMyMembership() === KnownMembership.Join ||
(result.publicRoom.world_readable && !canAskToJoin(joinRule)) ||
cli.isGuest();