Adapt Membership usage for the change to an enum KnownMembership

This commit is contained in:
Andy Balaam 2024-03-12 14:52:54 +00:00
parent da99bad7b9
commit 34559d2a89
115 changed files with 764 additions and 593 deletions

View file

@ -291,7 +291,7 @@ Response:
*/
import { IContent, MatrixEvent, IEvent } from "matrix-js-sdk/src/matrix";
import { IContent, MatrixEvent, IEvent, KnownMembership } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { MatrixClientPeg } from "./MatrixClientPeg";
@ -357,7 +357,10 @@ function inviteUser(event: MessageEvent<any>, roomId: string, userId: string): v
if (room) {
// if they are already invited or joined we can resolve immediately.
const member = room.getMember(userId);
if (member && [Membership.Join, Membership.Invite].includes(member.membership)) {
if (
member &&
([KnownMembership.Join, KnownMembership.Invite] as Array<string | undefined>).includes(member.membership)
) {
sendResponse(event, {
success: true,
});
@ -669,7 +672,7 @@ function canSendEvent(event: MessageEvent<any>, roomId: string): void {
sendError(event, _t("scalar|error_room_unknown"));
return;
}
if (room.getMyMembership() !== Membership.Join) {
if (room.getMyMembership() !== KnownMembership.Join) {
sendError(event, _t("scalar|error_membership"));
return;
}

View file

@ -18,7 +18,14 @@ limitations under the License.
*/
import * as React from "react";
import { User, IContent, Direction, ContentHelpers, MRoomTopicEventContent } from "matrix-js-sdk/src/matrix";
import {
User,
IContent,
Direction,
ContentHelpers,
MRoomTopicEventContent,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import dis from "./dispatcher/dispatcher";
@ -241,7 +248,7 @@ export const Commands = [
if (args) {
const ev = cli.getRoom(roomId)?.currentState.getStateEvents("m.room.member", cli.getSafeUserId());
const content = {
...(ev ? ev.getContent() : { membership: Membership.Join }),
...(ev ? ev.getContent() : { membership: KnownMembership.Join }),
displayname: args,
};
return success(cli.sendStateEvent(roomId, "m.room.member", content, cli.getSafeUserId()));
@ -291,7 +298,7 @@ export const Commands = [
if (!url) return;
const ev = room?.currentState.getStateEvents("m.room.member", userId);
const content = {
...(ev ? ev.getContent() : { membership: Membership.Join }),
...(ev ? ev.getContent() : { membership: KnownMembership.Join }),
avatar_url: url,
};
return cli.sendStateEvent(roomId, "m.room.member", content, userId);

View file

@ -25,6 +25,7 @@ import {
MsgType,
M_POLL_START,
M_POLL_END,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { removeDirectionOverrideChars } from "matrix-js-sdk/src/utils";
@ -122,7 +123,7 @@ function textForMemberEvent(
const reason = content.reason;
switch (content.membership) {
case Membership.Invite: {
case KnownMembership.Invite: {
const threePidContent = content.third_party_invite;
if (threePidContent) {
if (threePidContent.display_name) {
@ -138,13 +139,13 @@ function textForMemberEvent(
return () => _t("timeline|m.room.member|invite", { senderName, targetName });
}
}
case Membership.Ban:
case KnownMembership.Ban:
return () =>
reason
? _t("timeline|m.room.member|ban_reason", { senderName, targetName, reason })
: _t("timeline|m.room.member|ban", { senderName, targetName });
case Membership.Join:
if (prevContent && prevContent.membership === Membership.Join) {
case KnownMembership.Join:
if (prevContent && prevContent.membership === KnownMembership.Join) {
const modDisplayname = getModification(prevContent.displayname, content.displayname);
const modAvatarUrl = getModification(prevContent.avatar_url, content.avatar_url);
@ -194,9 +195,9 @@ function textForMemberEvent(
if (!ev.target) logger.warn("Join message has no target! -- " + ev.getContent().state_key);
return () => _t("timeline|m.room.member|join", { targetName });
}
case Membership.Leave:
case KnownMembership.Leave:
if (ev.getSender() === ev.getStateKey()) {
if (prevContent.membership === Membership.Invite) {
if (prevContent.membership === KnownMembership.Invite) {
return () => _t("timeline|m.room.member|reject_invite", { targetName });
} else {
return () =>
@ -204,9 +205,9 @@ function textForMemberEvent(
? _t("timeline|m.room.member|left_reason", { targetName, reason })
: _t("timeline|m.room.member|left", { targetName });
}
} else if (prevContent.membership === Membership.Ban) {
} else if (prevContent.membership === KnownMembership.Ban) {
return () => _t("timeline|m.room.member|unban", { senderName, targetName });
} else if (prevContent.membership === Membership.Invite) {
} else if (prevContent.membership === KnownMembership.Invite) {
return () =>
reason
? _t("timeline|m.room.member|withdrew_invite_reason", {
@ -215,7 +216,7 @@ function textForMemberEvent(
reason,
})
: _t("timeline|m.room.member|withdrew_invite", { senderName, targetName });
} else if (prevContent.membership === Membership.Join) {
} else if (prevContent.membership === KnownMembership.Join) {
return () =>
reason
? _t("timeline|m.room.member|kick_reason", {

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { Room, EventType } from "matrix-js-sdk/src/matrix";
import { Room, EventType, KnownMembership } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { ensureVirtualRoomExists } from "./createRoom";
@ -95,7 +95,7 @@ export default class VoipUserMapper {
if (!virtualRoomEvent || !virtualRoomEvent.getContent()) return null;
const nativeRoomID = virtualRoomEvent.getContent()["native_room"];
const nativeRoom = cli.getRoom(nativeRoomID);
if (!nativeRoom || nativeRoom.getMyMembership() !== Membership.Join) return null;
if (!nativeRoom || nativeRoom.getMyMembership() !== KnownMembership.Join) return null;
return nativeRoomID;
}

View file

@ -27,6 +27,7 @@ import {
RoomState,
RoomStateEvent,
IRoomTimelineData,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { MatrixClientPeg } from "../MatrixClientPeg";
@ -159,7 +160,7 @@ export default class UserProvider extends AutocompleteProvider {
const currentUserId = MatrixClientPeg.safeGet().credentials.userId;
this.users = this.room.getJoinedMembers().filter(({ userId }) => userId !== currentUserId);
this.users = this.users.concat(this.room.getMembersWithMembership(Membership.Invite));
this.users = this.users.concat(this.room.getMembersWithMembership(KnownMembership.Invite));
this.users = sortBy(this.users, (member) => 1e20 - lastSpoken[member.userId] || 1e20);

View file

@ -37,6 +37,7 @@ import {
MatrixError,
ISearchResults,
THREAD_RELATION_TYPE,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { CallState, MatrixCall } from "matrix-js-sdk/src/webrtc/call";
@ -1454,7 +1455,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
private async loadMembersIfJoined(room: Room): Promise<void> {
// lazy load members if enabled
if (this.context.client?.hasLazyLoadMembersEnabled()) {
if (room && room.getMyMembership() === Membership.Join) {
if (room && room.getMyMembership() === KnownMembership.Join) {
try {
await room.loadMembersIfNeeded();
if (!this.unmounted) {
@ -1588,7 +1589,8 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
if (room && this.context.client) {
const me = this.context.client.getSafeUserId();
const canReact =
room.getMyMembership() === Membership.Join && room.currentState.maySendEvent(EventType.Reaction, me);
room.getMyMembership() === KnownMembership.Join &&
room.currentState.maySendEvent(EventType.Reaction, me);
const canSendMessages = room.maySendMessage();
const canSelfRedact = room.currentState.maySendEvent(EventType.RoomRedaction, me);
@ -1622,10 +1624,10 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
private updateDMState(): void {
const room = this.state.room;
if (room.getMyMembership() != Membership.Join) {
if (room?.getMyMembership() != KnownMembership.Join) {
return;
}
const dmInviter = room.getDMInviter();
const dmInviter = room?.getDMInviter();
if (dmInviter) {
Rooms.setDMRoom(room.client, room.roomId, dmInviter);
}
@ -1663,7 +1665,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
roomId,
opts: { inviteSignUrl: signUrl },
metricsTrigger:
this.state.room?.getMyMembership() === Membership.Invite ? "Invite" : "RoomPreview",
this.state.room?.getMyMembership() === KnownMembership.Invite ? "Invite" : "RoomPreview",
canAskToJoin: this.state.canAskToJoin,
});
}
@ -2184,7 +2186,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
const myMembership = this.state.room.getMyMembership();
if (
isVideoRoom(this.state.room) &&
!(SettingsStore.getValue("feature_video_rooms") && myMembership === Membership.Join)
!(SettingsStore.getValue("feature_video_rooms") && myMembership === KnownMembership.Join)
) {
return (
<ErrorBoundary>
@ -2201,7 +2203,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
}
// SpaceRoomView handles invites itself
if (myMembership === Membership.Invite && !this.state.room.isSpaceRoom()) {
if (myMembership === KnownMembership.Invite && !this.state.room.isSpaceRoom()) {
if (this.state.joining || this.state.rejecting) {
return (
<ErrorBoundary>
@ -2248,16 +2250,19 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
}
}
if (this.state.canAskToJoin && [Membership.Knock, Membership.Leave].includes(myMembership)) {
if (
this.state.canAskToJoin &&
([KnownMembership.Knock, KnownMembership.Leave] as Array<string>).includes(myMembership)
) {
return (
<div className="mx_RoomView" data-room-header={roomHeaderType}>
<ErrorBoundary>
<RoomPreviewBar
onJoinClick={this.onJoinButtonClicked}
room={this.state.room}
canAskToJoinAndMembershipIsLeave={myMembership === Membership.Leave}
canAskToJoinAndMembershipIsLeave={myMembership === KnownMembership.Leave}
promptAskToJoin={this.state.promptAskToJoin}
knocked={myMembership === Membership.Knock}
knocked={myMembership === KnownMembership.Knock}
onSubmitAskToJoin={this.onSubmitAskToJoin}
onCancelAskToJoin={this.onCancelAskToJoin}
onForgetClick={this.onForgetClick}
@ -2289,7 +2294,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
statusBar = (
<RoomStatusBar
room={this.state.room}
isPeeking={myMembership !== Membership.Join}
isPeeking={myMembership !== KnownMembership.Join}
onInviteClick={this.onInviteClick}
onVisible={this.onStatusBarVisible}
onHidden={this.onStatusBarHidden}
@ -2333,7 +2338,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
);
} else if (showRoomUpgradeBar) {
aux = <RoomUpgradeWarningBar room={this.state.room} />;
} else if (myMembership !== Membership.Join) {
} else if (myMembership !== KnownMembership.Join) {
// We do have a room object for this room, but we're not currently in it.
// We may have a 3rd party invite to it.
let inviterName: string | undefined;
@ -2407,7 +2412,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
let messageComposer;
const showComposer =
// joined and not showing search results
myMembership === Membership.Join && !this.state.search;
myMembership === KnownMembership.Join && !this.state.search;
if (showComposer) {
messageComposer = (
<MessageComposer
@ -2605,7 +2610,8 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
const myMember = this.state.room!.getMember(this.context.client!.getSafeUserId());
const showForgetButton =
!this.context.client.isGuest() &&
([Membership.Leave, Membership.Ban].includes(myMembership) || myMember?.isKicked());
(([KnownMembership.Leave, KnownMembership.Ban] as Array<string>).includes(myMembership) ||
myMember?.isKicked());
return (
<RoomContext.Provider value={this.state}>
@ -2642,7 +2648,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
room={this.state.room}
searchInfo={this.state.search}
oobData={this.props.oobData}
inRoom={myMembership === Membership.Join}
inRoom={myMembership === KnownMembership.Join}
onSearchClick={onSearchClick}
onInviteClick={onInviteClick}
onForgetClick={showForgetButton ? onForgetClick : null}

View file

@ -41,6 +41,7 @@ import {
HistoryVisibility,
HierarchyRelation,
HierarchyRoom,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { RoomHierarchy } from "matrix-js-sdk/src/room-hierarchy";
import classNames from "classnames";
@ -112,7 +113,7 @@ const Tile: React.FC<ITileProps> = ({
const cli = useContext(MatrixClientContext);
const joinedRoom = useTypedEventEmitterState(cli, ClientEvent.Room, () => {
const cliRoom = cli?.getRoom(room.room_id);
return cliRoom?.getMyMembership() === Membership.Join ? cliRoom : undefined;
return cliRoom?.getMyMembership() === KnownMembership.Join ? cliRoom : undefined;
});
const joinedRoomName = useTypedEventEmitterState(joinedRoom, RoomEvent.Name, (room) => room?.name);
const name =
@ -828,7 +829,7 @@ const SpaceHierarchy: React.FC<IProps> = ({ space, initialText = "", showRoom, a
content = <Spinner />;
} else {
const hasPermissions =
space?.getMyMembership() === Membership.Join &&
space?.getMyMembership() === KnownMembership.Join &&
space.currentState.maySendStateEvent(EventType.SpaceChild, cli.getSafeUserId());
const root = hierarchy.roomMap.get(space.roomId);
@ -846,7 +847,7 @@ const SpaceHierarchy: React.FC<IProps> = ({ space, initialText = "", showRoom, a
onViewRoomClick={(roomId, roomType) => showRoom(cli, hierarchy, roomId, roomType)}
onJoinRoomClick={async (roomId, parents) => {
for (const parent of parents) {
if (cli.getRoom(parent)?.getMyMembership() !== Membership.Join) {
if (cli.getRoom(parent)?.getMyMembership() !== KnownMembership.Join) {
await joinRoom(cli, hierarchy, parent);
}
}

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { EventType, RoomType, JoinRule, Preset, Room, RoomEvent } from "matrix-js-sdk/src/matrix";
import { EventType, RoomType, JoinRule, Preset, Room, RoomEvent, KnownMembership } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import React, { useCallback, useContext, useRef, useState } from "react";
@ -237,7 +237,7 @@ const SpaceLanding: React.FC<{ space: Room }> = ({ space }) => {
}
const hasAddRoomPermissions =
myMembership === Membership.Join && space.currentState.maySendStateEvent(EventType.SpaceChild, userId);
myMembership === KnownMembership.Join && space.currentState.maySendStateEvent(EventType.SpaceChild, userId);
let addRoomButton;
if (hasAddRoomPermissions) {
@ -678,7 +678,7 @@ export default class SpaceRoomView extends React.PureComponent<IProps, IState> {
private renderBody(): JSX.Element {
switch (this.state.phase) {
case Phase.Landing:
if (this.state.myMembership === Membership.Join) {
if (this.state.myMembership === KnownMembership.Join) {
return <SpaceLanding space={this.props.space} />;
} else {
return (

View file

@ -38,6 +38,8 @@ import {
Thread,
ThreadEvent,
ReceiptType,
KnownMembership,
Membership,
} from "matrix-js-sdk/src/matrix";
import { debounce, findLastIndex, throttle } from "lodash";
import { logger } from "matrix-js-sdk/src/logger";
@ -1824,7 +1826,7 @@ class TimelinePanel extends React.Component<IProps, IState> {
// that the event belongs to, and traversing the timeline looking for
// that event, while keeping track of the user's membership
let i = events.length - 1;
let userMembership = Membership.Leave;
let userMembership: Membership = KnownMembership.Leave;
for (; i >= 0; i--) {
const timeline = this.props.timelineSet.getTimelineForEvent(events[i].getId()!);
if (!timeline) {
@ -1838,14 +1840,14 @@ class TimelinePanel extends React.Component<IProps, IState> {
}
userMembership =
timeline.getState(EventTimeline.FORWARDS)?.getMember(userId)?.membership ?? Membership.Leave;
timeline.getState(EventTimeline.FORWARDS)?.getMember(userId)?.membership ?? KnownMembership.Leave;
const timelineEvents = timeline.getEvents();
for (let j = timelineEvents.length - 1; j >= 0; j--) {
const event = timelineEvents[j];
if (event.getId() === events[i].getId()) {
break;
} else if (event.getStateKey() === userId && event.getType() === EventType.RoomMember) {
userMembership = event.getPrevContent().membership || Membership.Leave;
userMembership = event.getPrevContent().membership || KnownMembership.Leave;
}
}
break;
@ -1856,9 +1858,9 @@ class TimelinePanel extends React.Component<IProps, IState> {
for (; i >= 0; i--) {
const event = events[i];
if (event.getStateKey() === userId && event.getType() === EventType.RoomMember) {
userMembership = event.getPrevContent().membership || Membership.Leave;
userMembership = event.getPrevContent().membership || KnownMembership.Leave;
} else if (
userMembership === Membership.Leave &&
userMembership === KnownMembership.Leave &&
(event.isDecryptionFailure() || event.isBeingDecrypted())
) {
// reached an undecryptable message when the user wasn't in the room -- don't try to load any more

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import React, { ReactNode } from "react";
import { EventType, M_BEACON_INFO, MatrixEvent } from "matrix-js-sdk/src/matrix";
import { EventType, KnownMembership, M_BEACON_INFO, MatrixEvent } from "matrix-js-sdk/src/matrix";
import { BaseGrouper } from "./BaseGrouper";
import MessagePanel, { WrappedEvent } from "../MessagePanel";
@ -48,7 +48,8 @@ export class CreationGrouper extends BaseGrouper {
const eventType = event.getType();
if (
eventType === EventType.RoomMember &&
(event.getStateKey() !== createEvent.getSender() || event.getContent()["membership"] !== Membership.Join)
(event.getStateKey() !== createEvent.getSender() ||
event.getContent()["membership"] !== KnownMembership.Join)
) {
return false;
}

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import React, { useContext } from "react";
import { Room } from "matrix-js-sdk/src/matrix";
import { KnownMembership, Room } from "matrix-js-sdk/src/matrix";
import { IProps as IContextMenuProps } from "../../structures/ContextMenu";
import IconizedContextMenu, {
@ -144,7 +144,7 @@ const RoomContextMenu: React.FC<IProps> = ({ room, onFinished, ...props }) => {
let favouriteOption: JSX.Element | undefined;
let lowPriorityOption: JSX.Element | undefined;
let notificationOption: JSX.Element | undefined;
if (room.getMyMembership() === Membership.Join) {
if (room.getMyMembership() === KnownMembership.Join) {
const isFavorite = roomTags.includes(DefaultTagID.Favourite);
favouriteOption = (
<IconizedContextMenuCheckbox

View file

@ -16,7 +16,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 { Room, EventType, KnownMembership } from "matrix-js-sdk/src/matrix";
import { sleep } from "matrix-js-sdk/src/utils";
import { logger } from "matrix-js-sdk/src/logger";
@ -140,7 +140,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() === Membership.Join) ?? [],
cli
?.getVisibleRooms(msc3946ProcessDynamicPredecessor)
.filter((r) => r.getMyMembership() === KnownMembership.Join) ?? [],
[cli, msc3946ProcessDynamicPredecessor],
);

View file

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

View file

@ -16,7 +16,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 { RoomMember, Room, MatrixError, EventType, KnownMembership } from "matrix-js-sdk/src/matrix";
import { MatrixCall } from "matrix-js-sdk/src/webrtc/call";
import { logger } from "matrix-js-sdk/src/logger";
import { uniqBy } from "lodash";
@ -372,10 +372,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(Membership.Invite).forEach((m) => excludedIds.add(m.userId));
room.getMembersWithMembership(Membership.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(Membership.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

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

View file

@ -16,7 +16,7 @@ limitations under the License.
*/
import React, { useContext, useMemo } from "react";
import { EventType } from "matrix-js-sdk/src/matrix";
import { EventType, KnownMembership } from "matrix-js-sdk/src/matrix";
import BaseTool, { DevtoolsContext, IDevtoolsProps } from "./BaseTool";
import { _t } from "../../../../languageHandler";
@ -27,7 +27,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 !== 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

@ -25,6 +25,7 @@ import {
Room,
HierarchyRoom,
JoinRule,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { normalize } from "matrix-js-sdk/src/utils";
import React, { ChangeEvent, RefObject, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
@ -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() === Membership.Join || room.getMyMembership() == Membership.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() === Membership.Join ||
clientRoom?.getMyMembership() === KnownMembership.Join ||
(result.publicRoom.world_readable && !canAskToJoin(joinRule)) ||
cli.isGuest();

View file

@ -20,7 +20,7 @@ limitations under the License.
import React, { ContextType, createRef, CSSProperties, MutableRefObject, ReactNode } from "react";
import classNames from "classnames";
import { IWidget, MatrixCapabilities } from "matrix-widget-api";
import { Room, RoomEvent } from "matrix-js-sdk/src/matrix";
import { KnownMembership, Room, RoomEvent } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { ApprovalOpts, WidgetLifecycle } from "@matrix-org/react-sdk-module-api/lib/lifecycles/WidgetLifecycle";
@ -220,7 +220,7 @@ export default class AppTile extends React.Component<IProps, IState> {
private onMyMembership = (room: Room, membership: string): void => {
if (
(membership === Membership.Leave || membership === Membership.Ban) &&
(membership === KnownMembership.Leave || membership === KnownMembership.Ban) &&
room.roomId === this.props.room?.roomId
) {
this.onUserLeftRoom();

View file

@ -17,7 +17,7 @@ limitations under the License.
*/
import React, { ComponentProps, ReactNode } from "react";
import { MatrixEvent, RoomMember, EventType } from "matrix-js-sdk/src/matrix";
import { MatrixEvent, RoomMember, EventType, KnownMembership } from "matrix-js-sdk/src/matrix";
import { _t } from "../../../languageHandler";
import { formatList } from "../../../utils/FormattingUtils";
@ -416,12 +416,12 @@ export default class EventListSummary extends React.Component<
case EventType.RoomMember:
switch (e.mxEvent.getContent().membership) {
case Membership.Invite:
case KnownMembership.Invite:
return TransitionType.Invited;
case Membership.Ban:
case KnownMembership.Ban:
return TransitionType.Banned;
case Membership.Join:
if (e.mxEvent.getPrevContent().membership === Membership.Join) {
case KnownMembership.Join:
if (e.mxEvent.getPrevContent().membership === KnownMembership.Join) {
if (e.mxEvent.getContent().displayname !== e.mxEvent.getPrevContent().displayname) {
return TransitionType.ChangedName;
} else if (e.mxEvent.getContent().avatar_url !== e.mxEvent.getPrevContent().avatar_url) {
@ -431,17 +431,17 @@ export default class EventListSummary extends React.Component<
} else {
return TransitionType.Joined;
}
case Membership.Leave:
case KnownMembership.Leave:
if (e.mxEvent.getSender() === e.mxEvent.getStateKey()) {
if (e.mxEvent.getPrevContent().membership === Membership.Invite) {
if (e.mxEvent.getPrevContent().membership === KnownMembership.Invite) {
return TransitionType.InviteReject;
}
return TransitionType.Left;
}
switch (e.mxEvent.getPrevContent().membership) {
case Membership.Invite:
case KnownMembership.Invite:
return TransitionType.InviteWithdrawal;
case Membership.Ban:
case KnownMembership.Ban:
return TransitionType.Unbanned;
// sender is not target and made the target leave, if not from invite/ban then this is a kick
default:

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import React, { FC, HTMLAttributes, useContext } from "react";
import { Room, RoomMember } from "matrix-js-sdk/src/matrix";
import { KnownMembership, Room, RoomMember } from "matrix-js-sdk/src/matrix";
import { sortBy } from "lodash";
import { _t } from "../../../languageHandler";
@ -38,7 +38,7 @@ interface IProps extends HTMLAttributes<HTMLSpanElement> {
const RoomFacePile: FC<IProps> = ({ room, onlyKnownUsers = true, numShown = DEFAULT_NUM_FACES, ...props }) => {
const cli = useContext(MatrixClientContext);
const isJoined = room.getMyMembership() === Membership.Join;
const isJoined = room.getMyMembership() === KnownMembership.Join;
let members = useRoomMembers(room);
const count = members.length;

View file

@ -22,6 +22,7 @@ import {
Room,
EventTimelineSet,
Thread,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import BaseCard from "./BaseCard";
@ -217,7 +218,7 @@ export default class TimelineCard extends React.Component<IProps, IState> {
const isUploading = ContentMessages.sharedInstance().getCurrentUploads(this.props.composerRelation).length > 0;
const myMembership = this.props.room.getMyMembership();
const showComposer = myMembership === Membership.Join;
const showComposer = myMembership === KnownMembership.Join;
return (
<RoomContext.Provider

View file

@ -29,6 +29,7 @@ import {
User,
Device,
EventType,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { UserVerificationStatus, VerificationRequest } from "matrix-js-sdk/src/crypto-api";
import { logger } from "matrix-js-sdk/src/logger";
@ -473,7 +474,7 @@ export const UserOptionsSection: React.FC<{
if (
member instanceof RoomMember &&
canInvite &&
(member?.membership ?? Membership.Leave) === Membership.Leave &&
(member?.membership ?? KnownMembership.Leave) === KnownMembership.Leave &&
shouldShowComponent(UIComponent.InviteUsers)
) {
const roomId = member && member.roomId ? member.roomId : SdkContextClass.instance.roomViewStore.getRoomId();
@ -638,7 +639,7 @@ export const RoomKickButton = ({
const cli = useContext(MatrixClientContext);
// check if user can be kicked/disinvited
if (member.membership !== Membership.Invite && member.membership !== Membership.Join) return <></>;
if (member.membership !== KnownMembership.Invite && member.membership !== KnownMembership.Join) return <></>;
const onKick = async (): Promise<void> => {
if (isUpdating) return; // only allow one operation at a time
@ -647,17 +648,17 @@ export const RoomKickButton = ({
const commonProps = {
member,
action: room.isSpaceRoom()
? member.membership === Membership.Invite
? member.membership === KnownMembership.Invite
? _t("user_info|disinvite_button_space")
: _t("user_info|kick_button_space")
: member.membership === Membership.Invite
: member.membership === KnownMembership.Invite
? _t("user_info|disinvite_button_room")
: _t("user_info|kick_button_room"),
title:
member.membership === Membership.Invite
member.membership === KnownMembership.Invite
? _t("user_info|disinvite_button_room_name", { roomName: room.name })
: _t("user_info|kick_button_room_name", { roomName: room.name }),
askReason: member.membership === Membership.Join,
askReason: member.membership === KnownMembership.Join,
danger: true,
};
@ -718,10 +719,10 @@ export const RoomKickButton = ({
};
const kickLabel = room.isSpaceRoom()
? member.membership === Membership.Invite
? member.membership === KnownMembership.Invite
? _t("user_info|disinvite_button_space")
: _t("user_info|kick_button_space")
: member.membership === Membership.Invite
: member.membership === KnownMembership.Invite
? _t("user_info|disinvite_button_room")
: _t("user_info|kick_button_room");
@ -771,7 +772,7 @@ export const BanToggleButton = ({
}: Omit<IBaseRoomProps, "powerLevels">): JSX.Element => {
const cli = useContext(MatrixClientContext);
const isBanned = member.membership === Membership.Ban;
const isBanned = member.membership === KnownMembership.Ban;
const onBanOrUnban = async (): Promise<void> => {
if (isUpdating) return; // only allow one operation at a time
startUpdating();
@ -808,9 +809,9 @@ export const BanToggleButton = ({
return (
!!myMember &&
!!theirMember &&
theirMember.membership === Membership.Ban &&
theirMember.membership === KnownMembership.Ban &&
myMember.powerLevel > theirMember.powerLevel &&
child.currentState.hasSufficientPowerLevelFor(Membership.Ban, myMember.powerLevel)
child.currentState.hasSufficientPowerLevelFor("ban", myMember.powerLevel)
);
}
: (child: Room) => {
@ -820,9 +821,9 @@ export const BanToggleButton = ({
return (
!!myMember &&
!!theirMember &&
theirMember.membership !== Membership.Ban &&
theirMember.membership !== KnownMembership.Ban &&
myMember.powerLevel > theirMember.powerLevel &&
child.currentState.hasSufficientPowerLevelFor(Membership.Ban, myMember.powerLevel)
child.currentState.hasSufficientPowerLevelFor("ban", myMember.powerLevel)
);
},
allLabel: isBanned ? _t("user_info|unban_space_everything") : _t("user_info|ban_space_everything"),
@ -903,7 +904,7 @@ const MuteToggleButton: React.FC<IBaseRoomProps> = ({
const cli = useContext(MatrixClientContext);
// Don't show the mute/unmute option if the user is not in the room
if (member.membership !== Membership.Join) return null;
if (member.membership !== KnownMembership.Join) return null;
const muted = isMuted(member, powerLevels);
const onMuteToggle = async (): Promise<void> => {

View file

@ -30,6 +30,7 @@ import {
UserEvent,
EventType,
ClientEvent,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { throttle } from "lodash";
import { Button, Tooltip } from "@vector-im/compound-web";
@ -171,7 +172,11 @@ export default class MemberList extends React.Component<IProps, IState> {
};
private onMyMembership = (room: Room, membership: string, oldMembership?: string): void => {
if (room.roomId === this.props.roomId && membership === Membership.Join && oldMembership !== Membership.Join) {
if (
room.roomId === this.props.roomId &&
membership === KnownMembership.Join &&
oldMembership !== KnownMembership.Join
) {
// we just joined the room, load the member list
this.updateListNow(true);
}
@ -363,7 +368,7 @@ export default class MemberList extends React.Component<IProps, IState> {
const room = cli.getRoom(this.props.roomId);
let inviteButton: JSX.Element | undefined;
if (room?.getMyMembership() === Membership.Join && shouldShowComponent(UIComponent.InviteUsers)) {
if (room?.getMyMembership() === KnownMembership.Join && shouldShowComponent(UIComponent.InviteUsers)) {
const inviteButtonText = room.isSpaceRoom() ? _t("space|invite_this_space") : _t("room|invite_this_room");
const button = (

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import React, { useContext } from "react";
import { EventType, Room, User, MatrixClient } from "matrix-js-sdk/src/matrix";
import { EventType, Room, User, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix";
import MatrixClientContext from "../../../contexts/MatrixClientContext";
import RoomContext from "../../../contexts/RoomContext";
@ -112,7 +112,7 @@ const NewRoomIntro: React.FC = () => {
</React.Fragment>
);
} else {
const inRoom = room && room.getMyMembership() === Membership.Join;
const inRoom = room && room.getMyMembership() === KnownMembership.Join;
const topic = room.currentState.getStateEvents(EventType.RoomTopic, "")?.getContent()?.topic;
const canAddTopic = inRoom && room.currentState.maySendStateEvent(EventType.RoomTopic, cli.getSafeUserId());

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import React, { FC } from "react";
import { Room, JoinRule, MatrixClient } from "matrix-js-sdk/src/matrix";
import { Room, JoinRule, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix";
import { _t } from "../../../languageHandler";
import RightPanelStore from "../../../stores/right-panel/RightPanelStore";
@ -33,7 +33,7 @@ interface IProps {
const RoomInfoLine: FC<IProps> = ({ room }) => {
// summary will begin as undefined whilst loading and go null if it fails to load or we are not invited.
const summary = useAsyncMemo(async (): Promise<Awaited<ReturnType<MatrixClient["getRoomSummary"]>> | null> => {
if (room.getMyMembership() !== Membership.Invite) return null;
if (room.getMyMembership() !== KnownMembership.Invite) return null;
try {
return await room.client.getRoomSummary(room.roomId);
} catch (e) {
@ -61,7 +61,7 @@ const RoomInfoLine: FC<IProps> = ({ room }) => {
}
let members: JSX.Element | undefined;
if (membership === Membership.Invite && summary) {
if (membership === KnownMembership.Invite && summary) {
// Don't trust local state and instead use the summary API
members = (
<span className="mx_RoomInfoLine_members">

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { EventTimeline, JoinRule, MatrixError, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix";
import { EventTimeline, JoinRule, KnownMembership, MatrixError, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix";
import React, { ReactElement, ReactNode, useCallback, useState, VFC } from "react";
import { Icon as CheckIcon } from "../../../../res/img/feather-customised/check.svg";
@ -35,7 +35,7 @@ export const RoomKnocksBar: VFC<{ room: Room }> = ({ room }) => {
const knockMembers = useTypedEventEmitterState(
room,
RoomStateEvent.Update,
useCallback(() => room.getMembersWithMembership(Membership.Knock), [room]),
useCallback(() => room.getMembersWithMembership(KnownMembership.Knock), [room]),
);
const knockMembersCount = knockMembers.length;

View file

@ -23,6 +23,7 @@ import {
IJoinRuleEventContent,
JoinRule,
MatrixError,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import classNames from "classnames";
import { RoomPreviewOpts, RoomViewLifecycle } from "@matrix-org/react-sdk-module-api/lib/lifecycles/RoomViewLifecycle";
@ -192,13 +193,13 @@ export default class RoomPreviewBar extends React.Component<IProps, IState> {
if (myMember) {
const previousMembership = myMember.events.member?.getPrevContent().membership;
if (myMember.isKicked()) {
if (previousMembership === Membership.Knock) {
if (previousMembership === KnownMembership.Knock) {
return MessageCase.RequestDenied;
} else if (this.props.promptAskToJoin) {
return MessageCase.PromptAskToJoin;
}
return MessageCase.Kicked;
} else if (myMember.membership === Membership.Ban) {
} else if (myMember.membership === KnownMembership.Ban) {
return MessageCase.Banned;
}
}
@ -284,7 +285,7 @@ export default class RoomPreviewBar extends React.Component<IProps, IState> {
return false;
}
const memberContent = myMember.events.member?.getContent();
return memberContent?.membership === Membership.Invite && memberContent.is_direct;
return memberContent?.membership === KnownMembership.Invite && memberContent.is_direct;
}
private makeScreenAfterLogin(): { screen: string; params: Record<string, any> } {

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import React, { FC, useContext, useState } from "react";
import { Room, JoinRule } from "matrix-js-sdk/src/matrix";
import { Room, JoinRule, KnownMembership } from "matrix-js-sdk/src/matrix";
import { _t } from "../../../languageHandler";
import defaultDispatcher from "../../../dispatcher/dispatcher";
@ -73,7 +73,7 @@ const RoomPreviewCard: FC<IProps> = ({ room, onJoinButtonClicked, onRejectButton
let inviterSection: JSX.Element | null = null;
let joinButtons: JSX.Element;
if (myMembership === Membership.Join) {
if (myMembership === KnownMembership.Join) {
joinButtons = (
<AccessibleButton
kind="danger_outline"
@ -87,7 +87,7 @@ const RoomPreviewCard: FC<IProps> = ({ room, onJoinButtonClicked, onRejectButton
{_t("action|leave")}
</AccessibleButton>
);
} else if (myMembership === Membership.Invite) {
} else if (myMembership === KnownMembership.Invite) {
const inviteSender = room.getMember(cli.getUserId()!)?.events.member?.getSender();
if (inviteSender) {
@ -178,7 +178,7 @@ const RoomPreviewCard: FC<IProps> = ({ room, onJoinButtonClicked, onRejectButton
});
} else if (isVideoRoom && !videoRoomsEnabled) {
notice =
myMembership === Membership.Join
myMembership === KnownMembership.Join
? _t("room|view_failed_enable_video_rooms")
: _t("room|join_failed_enable_video_rooms");

View file

@ -16,7 +16,7 @@ limitations under the License.
*/
import React, { createRef } from "react";
import { Room, RoomEvent } from "matrix-js-sdk/src/matrix";
import { KnownMembership, Room, RoomEvent } from "matrix-js-sdk/src/matrix";
import classNames from "classnames";
import type { Call } from "../../../models/Call";
@ -124,7 +124,7 @@ export class RoomTile extends React.PureComponent<ClassProps, State> {
private get showContextMenu(): boolean {
return (
this.props.tag !== DefaultTagID.Invite &&
this.props.room.getMyMembership() !== Membership.Knock &&
this.props.room.getMyMembership() !== KnownMembership.Knock &&
!isKnockDenied(this.props.room) &&
shouldShowComponent(UIComponent.RoomOptionsMenu)
);
@ -387,7 +387,7 @@ export class RoomTile extends React.PureComponent<ClassProps, State> {
mx_RoomTile: true,
mx_RoomTile_sticky:
SettingsStore.getValue("feature_ask_to_join") &&
(this.props.room.getMyMembership() === Membership.Knock || isKnockDenied(this.props.room)),
(this.props.room.getMyMembership() === KnownMembership.Knock || isKnockDenied(this.props.room)),
mx_RoomTile_selected: this.state.selected,
mx_RoomTile_hasMenuOpen: !!(this.state.generalMenuPosition || this.state.notificationsMenuPosition),
mx_RoomTile_minimized: this.props.isMinimized,

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import React, { ContextType } from "react";
import { Room } from "matrix-js-sdk/src/matrix";
import { KnownMembership, Room } from "matrix-js-sdk/src/matrix";
import { _t } from "../../../../../languageHandler";
import RoomProfileSettings from "../../../room_settings/RoomProfileSettings";
@ -73,7 +73,7 @@ export default class GeneralRoomSettingsTab extends React.Component<IProps, ISta
) : null;
let leaveSection;
if (room.getMyMembership() === Membership.Join) {
if (room.getMyMembership() === KnownMembership.Join) {
leaveSection = (
<SettingsSubsection heading={_t("action|leave_room")}>
<AccessibleButton kind="danger" onClick={this.onLeaveClick}>

View file

@ -14,7 +14,14 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { EventTimeline, MatrixError, Room, RoomMember, RoomStateEvent } from "matrix-js-sdk/src/matrix";
import {
EventTimeline,
KnownMembership,
MatrixError,
Room,
RoomMember,
RoomStateEvent,
} from "matrix-js-sdk/src/matrix";
import React, { useCallback, useState, VFC } from "react";
import { Icon as CheckIcon } from "../../../../../../res/img/feather-customised/check.svg";
@ -145,7 +152,7 @@ export const PeopleRoomSettingsTab: VFC<{ room: Room }> = ({ room }) => {
const knockMembers = useTypedEventEmitterState(
room,
RoomStateEvent.Update,
useCallback(() => room.getMembersWithMembership(Membership.Knock), [room]),
useCallback(() => room.getMembersWithMembership(KnownMembership.Knock), [room]),
);
return (

View file

@ -15,7 +15,15 @@ limitations under the License.
*/
import React from "react";
import { EventType, RoomMember, RoomState, RoomStateEvent, Room, IContent } from "matrix-js-sdk/src/matrix";
import {
EventType,
RoomMember,
RoomState,
RoomStateEvent,
Room,
IContent,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { throttle, get } from "lodash";
import { compare } from "matrix-js-sdk/src/utils";
@ -413,7 +421,7 @@ export default class RolesRoomSettingsTab extends React.Component<IProps> {
}
}
const banned = room.getMembersWithMembership(Membership.Ban);
const banned = room.getMembersWithMembership(KnownMembership.Ban);
let bannedUsersSection: JSX.Element | undefined;
if (banned?.length) {
const canBanUsers = currentUserLevel >= banLevel;

View file

@ -16,7 +16,7 @@ limitations under the License.
import React, { ReactNode } from "react";
import { sleep } from "matrix-js-sdk/src/utils";
import { Room, RoomEvent } from "matrix-js-sdk/src/matrix";
import { KnownMembership, Room, RoomEvent } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { _t } from "../../../../../languageHandler";
@ -37,7 +37,7 @@ import InlineSpinner from "../../../elements/InlineSpinner";
import { PosthogAnalytics } from "../../../../../PosthogAnalytics";
import { showDialog as showAnalyticsLearnMoreDialog } from "../../../dialogs/AnalyticsLearnMoreDialog";
import { privateShouldBeEncrypted } from "../../../../../utils/rooms";
import type { IServerVersions } from "matrix-js-sdk/src/matrix";
import type { IServerVersions, Membership } from "matrix-js-sdk/src/matrix";
import SettingsTab from "../SettingsTab";
import { SettingsSection } from "../../shared/SettingsSection";
import SettingsSubsection, { SettingsSubsectionText } from "../../shared/SettingsSubsection";
@ -126,7 +126,7 @@ export default class SecurityUserSettingsTab extends React.Component<IProps, ISt
return;
}
if (membership === Membership.Invite) {
if (membership === KnownMembership.Invite) {
this.addInvitedRoom(room);
} else if (this.state.invitedRoomIds.has(room.roomId)) {
// The user isn't invited anymore
@ -167,7 +167,7 @@ export default class SecurityUserSettingsTab extends React.Component<IProps, ISt
return MatrixClientPeg.safeGet()
.getRooms()
.filter((r) => {
return r.hasMembershipState(MatrixClientPeg.safeGet().getUserId()!, Membership.Invite);
return r.hasMembershipState(MatrixClientPeg.safeGet().getUserId()!, KnownMembership.Invite);
});
};

View file

@ -24,7 +24,7 @@ import React, {
RefObject,
} from "react";
import classNames from "classnames";
import { Room, RoomEvent } from "matrix-js-sdk/src/matrix";
import { KnownMembership, Room, RoomEvent } from "matrix-js-sdk/src/matrix";
import { DraggableProvidedDragHandleProps } from "react-beautiful-dnd";
import RoomAvatar from "../avatars/RoomAvatar";
@ -99,7 +99,7 @@ export const SpaceButton = <T extends keyof JSX.IntrinsicElements>({
let notifBadge;
if (spaceKey && notificationState) {
let ariaLabel = _t("a11y_jump_first_unread_room");
if (space?.getMyMembership() === Membership.Invite) {
if (space?.getMyMembership() === KnownMembership.Invite) {
ariaLabel = _t("a11y|jump_first_invite");
}
@ -325,7 +325,7 @@ export class SpaceItem extends React.PureComponent<IItemProps, IItemState> {
hasSubSpaces: this.state.childSpaces?.length,
});
const isInvite = space.getMyMembership() === Membership.Invite;
const isInvite = space.getMyMembership() === KnownMembership.Invite;
const notificationState = isInvite
? StaticNotificationState.forSymbol("!", NotificationLevel.Highlight)
@ -379,7 +379,7 @@ export class SpaceItem extends React.PureComponent<IItemProps, IItemState> {
size={isNested ? "24px" : "32px"}
onKeyDown={this.onKeyDown}
ContextMenuComponent={
this.props.space.getMyMembership() === Membership.Join ? SpaceContextMenu : undefined
this.props.space.getMyMembership() === KnownMembership.Join ? SpaceContextMenu : undefined
}
>
{toggleCollapseButton}

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import { useMemo, useState } from "react";
import { Room, RoomEvent, RoomMember, RoomStateEvent } from "matrix-js-sdk/src/matrix";
import { Membership, Room, RoomEvent, RoomMember, RoomStateEvent } from "matrix-js-sdk/src/matrix";
import { throttle } from "lodash";
import { useTypedEventEmitter } from "./useEventEmitter";

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import { useCallback, useEffect, useMemo, useState } from "react";
import { Room, RoomType, HierarchyRoom } from "matrix-js-sdk/src/matrix";
import { Room, RoomType, HierarchyRoom, KnownMembership } from "matrix-js-sdk/src/matrix";
import { RoomHierarchy } from "matrix-js-sdk/src/room-hierarchy";
import { normalize } from "matrix-js-sdk/src/utils";
@ -57,7 +57,7 @@ export const useSpaceResults = (space: Room | undefined, query: string): [Hierar
return rooms?.filter((r) => {
return (
r.room_type !== RoomType.Space &&
cli.getRoom(r.room_id)?.getMyMembership() !== Membership.Join &&
cli.getRoom(r.room_id)?.getMyMembership() !== KnownMembership.Join &&
(normalize(r.name || "").includes(normalizedQuery) || (r.canonical_alias || "").includes(lcQuery))
);
});

View file

@ -37,6 +37,7 @@ import {
SyncState,
TimelineIndex,
TimelineWindow,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { sleep } from "matrix-js-sdk/src/utils";
import { logger } from "matrix-js-sdk/src/logger";
@ -533,7 +534,7 @@ export default class EventIndex extends EventEmitter {
const profiles: Record<string, IMatrixProfile> = {};
stateEvents.forEach((ev) => {
if (ev.getContent().membership === Membership.Join) {
if (ev.getContent().membership === KnownMembership.Join) {
profiles[ev.getSender()!] = {
displayname: ev.getContent().displayname,
avatar_url: ev.getContent().avatar_url,
@ -754,7 +755,7 @@ export default class EventIndex extends EventEmitter {
// This is sets the avatar URL.
const memberEvent = eventMapper({
content: {
membership: Membership.Join,
membership: KnownMembership.Join,
avatar_url: e.profile.avatar_url,
displayname: e.profile.displayname,
},

View file

@ -23,6 +23,8 @@ import {
IMyDevice,
Room,
RoomMember,
Membership,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { randomString } from "matrix-js-sdk/src/randomstring";
@ -308,7 +310,7 @@ export abstract class Call extends TypedEventEmitter<CallEvent, CallEventHandler
}
private onMyMembership = async (_room: Room, membership: Membership): Promise<void> => {
if (membership !== Membership.Join) this.setDisconnected();
if (membership !== KnownMembership.Join) this.setDisconnected();
};
private onStopMessaging = (uid: string): void => {
@ -386,7 +388,7 @@ export class JitsiCall extends Call {
devices = devices.filter((d) => d !== this.client.getDeviceId());
}
// Must have a connected device and still be joined to the room
if (devices.length > 0 && member?.membership === Membership.Join) {
if (devices.length > 0 && member?.membership === KnownMembership.Join) {
participants.set(member, new Set(devices));
if (expiresAt < allExpireAt) allExpireAt = expiresAt;
}
@ -416,7 +418,7 @@ export class JitsiCall extends Call {
* returns null, the update is skipped.
*/
private async updateDevices(fn: (devices: string[]) => string[] | null): Promise<void> {
if (this.room.getMyMembership() !== Membership.Join) return;
if (this.room.getMyMembership() !== KnownMembership.Join) return;
const event = this.room.currentState.getStateEvents(JitsiCall.MEMBER_EVENT_TYPE, this.client.getUserId()!);
const content = event?.getContent<JitsiCallMemberContent>();

View file

@ -14,7 +14,7 @@
limitations under the License.
*/
import { MatrixEvent, EventType, RelationType } from "matrix-js-sdk/src/matrix";
import { MatrixEvent, EventType, RelationType, KnownMembership } from "matrix-js-sdk/src/matrix";
import SettingsStore from "./settings/SettingsStore";
import { IRoomState } from "./components/structures/RoomView";
@ -39,10 +39,11 @@ function memberEventDiff(ev: MatrixEvent): IDiff {
const prevContent = ev.getPrevContent();
const isMembershipChanged = content.membership !== prevContent.membership;
diff.isJoin = isMembershipChanged && content.membership === Membership.Join;
diff.isPart = isMembershipChanged && content.membership === Membership.Leave && ev.getStateKey() === ev.getSender();
diff.isJoin = isMembershipChanged && content.membership === KnownMembership.Join;
diff.isPart =
isMembershipChanged && content.membership === KnownMembership.Leave && ev.getStateKey() === ev.getSender();
const isJoinToJoin = !isMembershipChanged && content.membership === Membership.Join;
const isJoinToJoin = !isMembershipChanged && content.membership === KnownMembership.Join;
diff.isDisplaynameChange = isJoinToJoin && content.displayname !== prevContent.displayname;
diff.isAvatarChange = isJoinToJoin && content.avatar_url !== prevContent.avatar_url;
return diff;

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { Room, RoomEvent, ClientEvent } from "matrix-js-sdk/src/matrix";
import { Room, RoomEvent, ClientEvent, KnownMembership } from "matrix-js-sdk/src/matrix";
import { isNullOrUndefined } from "matrix-js-sdk/src/utils";
import SettingsStore from "../settings/SettingsStore";
@ -91,7 +91,7 @@ export class BreadcrumbsStore extends AsyncStoreWithClient<IState> {
// The tests might not result in a valid room object.
const room = this.matrixClient.getRoom(payload.room_id);
const membership = room?.getMyMembership();
if (room && membership === Membership.Join) await this.appendRoom(room);
if (room && membership === KnownMembership.Join) await this.appendRoom(room);
}
} else if (payload.action === Action.JoinRoom) {
const room = this.matrixClient.getRoom(payload.roomId);

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { Room, RoomMember } from "matrix-js-sdk/src/matrix";
import { KnownMembership, Room, RoomMember } from "matrix-js-sdk/src/matrix";
import SettingsStore from "../settings/SettingsStore";
import { SdkContextClass } from "../contexts/SDKContext";
@ -90,7 +90,7 @@ export class MemberListStore {
// pull straight from the server. Don't use a since token as we don't have earlier deltas
// accumulated.
room.currentState.markOutOfBandMembersStarted();
const response = await this.stores.client!.members(roomId, undefined, Membership.Leave);
const response = await this.stores.client!.members(roomId, undefined, KnownMembership.Leave);
const memberEvents = response.chunk.map(this.stores.client!.getEventMapper());
room.currentState.setOutOfBandMembers(memberEvents);
} else {
@ -167,7 +167,7 @@ export class MemberListStore {
invited: [],
};
members.forEach((m) => {
if (m.membership !== Membership.Join && m.membership !== Membership.Invite) {
if (m.membership !== KnownMembership.Join && m.membership !== KnownMembership.Invite) {
return; // bail early for left/banned users
}
if (query) {
@ -179,10 +179,10 @@ export class MemberListStore {
}
}
switch (m.membership) {
case Membership.Join:
case KnownMembership.Join:
result.joined.push(m);
break;
case Membership.Invite:
case KnownMembership.Invite:
result.invited.push(m);
break;
}

View file

@ -27,6 +27,7 @@ import {
ContentHelpers,
MBeaconInfoEventContent,
M_BEACON,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
@ -313,7 +314,7 @@ export class OwnBeaconStore extends AsyncStoreWithClient<OwnBeaconStoreState> {
// in PSF-797
// stop watching beacons in rooms where user is no longer a member
if (member.membership === Membership.Leave || member.membership === Membership.Ban) {
if (member.membership === KnownMembership.Leave || member.membership === KnownMembership.Ban) {
this.beaconsByRoomId.get(roomState.roomId)?.forEach(this.removeBeacon);
this.beaconsByRoomId.delete(roomState.roomId);
}

View file

@ -18,7 +18,7 @@ limitations under the License.
import React, { ReactNode } from "react";
import * as utils from "matrix-js-sdk/src/utils";
import { MatrixError, JoinRule, Room, MatrixEvent } from "matrix-js-sdk/src/matrix";
import { MatrixError, JoinRule, Room, MatrixEvent, KnownMembership } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { ViewRoom as ViewRoomEvent } from "@matrix-org/analytics-events/types/typescript/ViewRoom";
import { JoinedRoom as JoinedRoomEvent } from "@matrix-org/analytics-events/types/typescript/JoinedRoom";
@ -607,7 +607,7 @@ export class RoomViewStore extends EventEmitter {
private getInvitingUserId(roomId: string): string | undefined {
const cli = MatrixClientPeg.safeGet();
const room = cli.getRoom(roomId);
if (room?.getMyMembership() === Membership.Invite) {
if (room?.getMyMembership() === KnownMembership.Invite) {
const myMember = room.getMember(cli.getSafeUserId());
const inviteEvent = myMember ? myMember.events.member : null;
return inviteEvent?.getSender();

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { MatrixEventEvent, RoomEvent, ClientEvent } from "matrix-js-sdk/src/matrix";
import { MatrixEventEvent, RoomEvent, ClientEvent, KnownMembership } from "matrix-js-sdk/src/matrix";
import type { Room, MatrixEvent } from "matrix-js-sdk/src/matrix";
import type { IDestroyable } from "../../utils/IDestroyable";
@ -97,7 +97,7 @@ export class RoomNotificationState extends NotificationState implements IDestroy
const muted =
RoomNotifs.getRoomNotifsState(this.room.client, this.room.roomId) === RoomNotifs.RoomNotifState.Mute;
const knocked =
SettingsStore.getValue("feature_ask_to_join") && this.room.getMyMembership() === Membership.Knock;
SettingsStore.getValue("feature_ask_to_join") && this.room.getMyMembership() === KnownMembership.Knock;
this._level = level;
this._symbol = symbol;
this._count = count;

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { MatrixClient, Room, RoomState, EventType } from "matrix-js-sdk/src/matrix";
import { MatrixClient, Room, RoomState, EventType, KnownMembership } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import SettingsStore from "../../settings/SettingsStore";
@ -350,7 +350,7 @@ export class RoomListStoreClass extends AsyncStoreWithClient<IState> implements
}
private async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise<any> {
if (cause === RoomUpdateCause.NewRoom && room.getMyMembership() === Membership.Invite) {
if (cause === RoomUpdateCause.NewRoom && room.getMyMembership() === KnownMembership.Invite) {
// Let the visibility provider know that there is a new invited room. It would be nice
// if this could just be an event that things listen for but the point of this is that
// we delay doing anything about this room until the VoipUserMapper had had a chance

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { Room } from "matrix-js-sdk/src/matrix";
import { KnownMembership, Room } from "matrix-js-sdk/src/matrix";
import { isNullOrUndefined } from "matrix-js-sdk/src/utils";
import { EventEmitter } from "events";
import { logger } from "matrix-js-sdk/src/logger";
@ -172,7 +172,7 @@ export class Algorithm extends EventEmitter {
}
private doUpdateStickyRoom(val: Room | null): void {
if (val?.isSpaceRoom() && val.getMyMembership() !== Membership.Invite) {
if (val?.isSpaceRoom() && val.getMyMembership() !== KnownMembership.Invite) {
// no-op sticky rooms for spaces - they're effectively virtual rooms
val = null;
}

View file

@ -25,6 +25,7 @@ import {
MatrixEvent,
ClientEvent,
ISendEventResponse,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
@ -255,8 +256,8 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
// else view space home or home depending on what is being clicked on
if (
roomId &&
cliSpace?.getMyMembership() !== Membership.Invite &&
this.matrixClient.getRoom(roomId)?.getMyMembership() === Membership.Join &&
cliSpace?.getMyMembership() !== KnownMembership.Invite &&
this.matrixClient.getRoom(roomId)?.getMyMembership() === KnownMembership.Join &&
this.isRoomInSpace(space, roomId)
) {
defaultDispatcher.dispatch<ViewRoomPayload>({
@ -325,7 +326,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
.filter((roomInfo) => {
return (
roomInfo.room_type !== RoomType.Space &&
this.matrixClient.getRoom(roomInfo.room_id)?.getMyMembership() !== Membership.Join
this.matrixClient?.getRoom(roomInfo.room_id)?.getMyMembership() !== KnownMembership.Join
);
})
.map((roomInfo) => ({
@ -368,7 +369,10 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
return history[history.length - 1];
})
.filter((room) => {
return room?.getMyMembership() === Membership.Join || room?.getMyMembership() === Membership.Invite;
return (
room?.getMyMembership() === KnownMembership.Join ||
room?.getMyMembership() === KnownMembership.Invite
);
}) || []
);
}
@ -379,7 +383,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
public getChildSpaces(spaceId: string): Room[] {
// don't show invited subspaces as they surface at the top level for better visibility
return this.getChildren(spaceId).filter((r) => r.isSpaceRoom() && r.getMyMembership() === Membership.Join);
return this.getChildren(spaceId).filter((r) => r.isSpaceRoom() && r.getMyMembership() === KnownMembership.Join);
}
public getParents(roomId: string, canonicalOnly = false): Room[] {
@ -593,7 +597,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
private rebuildParentMap = (): void => {
if (!this.matrixClient) return;
const joinedSpaces = this.matrixClient.getVisibleRooms(this._msc3946ProcessDynamicPredecessor).filter((r) => {
return r.isSpaceRoom() && r.getMyMembership() === Membership.Join;
return r.isSpaceRoom() && r.getMyMembership() === KnownMembership.Join;
});
this.parentMap = new EnhancedMap<string, Set<string>>();
@ -717,12 +721,12 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
return (
!this.parentMap.get(room.roomId)?.size || // put all orphaned rooms in the Home Space
!!DMRoomMap.shared().getUserIdForRoomId(room.roomId) || // put all DMs in the Home Space
room.getMyMembership() === Membership.Invite
room.getMyMembership() === KnownMembership.Invite
); // put all invites in the Home Space
};
private static isInSpace(member: RoomMember): boolean {
return member.membership === Membership.Join || member.membership === Membership.Invite;
private static isInSpace(member?: RoomMember | null): boolean {
return member?.membership === KnownMembership.Join || member?.membership === KnownMembership.Invite;
}
// Method for resolving the impact of a single user's membership change in the given Space and its hierarchy
@ -766,7 +770,8 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
const hiddenChildren = new EnhancedMap<string, Set<string>>();
visibleRooms.forEach((room) => {
if (![Membership.Join, Membership.Invite].includes(room.getMyMembership())) return;
if (!([KnownMembership.Join, KnownMembership.Invite] as Array<string>).includes(room.getMyMembership()))
return;
this.getParents(room.roomId).forEach((parent) => {
hiddenChildren.getOrCreate(parent.roomId, new Set()).add(room.roomId);
});
@ -796,7 +801,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
space
?.getMembers()
.filter((m) => {
return m.membership === Membership.Join || m.membership === Membership.Invite;
return m.membership === KnownMembership.Join || m.membership === KnownMembership.Invite;
})
.map((m) => m.userId),
);
@ -924,7 +929,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
if (!room.isSpaceRoom()) {
this.onRoomsUpdate();
if (membership === Membership.Join) {
if (membership === KnownMembership.Join) {
// the user just joined a room, remove it from the suggested list if it was there
const numSuggestedRooms = this._suggestedRooms.length;
this._suggestedRooms = this._suggestedRooms.filter((r) => r.room_id !== room.roomId);
@ -936,7 +941,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
// if the room currently being viewed was just joined then switch to its related space
if (
newMembership === Membership.Join &&
newMembership === KnownMembership.Join &&
room.roomId === SdkContextClass.instance.roomViewStore.getRoomId()
) {
this.switchSpaceIfNeeded(room.roomId);
@ -946,13 +951,13 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
}
// Space
if (membership === Membership.Invite) {
if (membership === KnownMembership.Invite) {
const len = this._invitedSpaces.size;
this._invitedSpaces.add(room);
if (len !== this._invitedSpaces.size) {
this.emit(UPDATE_INVITED_SPACES, this.invitedSpaces);
}
} else if (oldMembership === Membership.Invite && membership !== Membership.Join) {
} else if (oldMembership === KnownMembership.Invite && membership !== KnownMembership.Join) {
if (this._invitedSpaces.delete(room)) {
this.emit(UPDATE_INVITED_SPACES, this.invitedSpaces);
}
@ -965,10 +970,10 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
this.emit(room.roomId);
}
if (membership === Membership.Join && room.roomId === SdkContextClass.instance.roomViewStore.getRoomId()) {
if (membership === KnownMembership.Join && room.roomId === SdkContextClass.instance.roomViewStore.getRoomId()) {
// if the user was looking at the space and then joined: select that space
this.setActiveSpace(room.roomId, false);
} else if (membership === Membership.Leave && room.roomId === this.activeSpace) {
} else if (membership === KnownMembership.Leave && room.roomId === this.activeSpace) {
// user's active space has gone away, go back to home
this.goToFirstSpace(true);
}
@ -1003,7 +1008,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
if (
room.roomId === this.activeSpace && // current space
target?.getMyMembership() !== Membership.Join && // target not joined
target?.getMyMembership() !== KnownMembership.Join && // target not joined
ev.getPrevContent().suggested !== ev.getContent().suggested // suggested flag changed
) {
this.loadSuggestedRooms(room);

View file

@ -14,7 +14,14 @@
* limitations under the License.
*/
import { Room, MatrixEvent, MatrixEventEvent, MatrixClient, ClientEvent } from "matrix-js-sdk/src/matrix";
import {
Room,
MatrixEvent,
MatrixEventEvent,
MatrixClient,
ClientEvent,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import {
ClientWidgetApi,
IModalWidgetOpenRequest,
@ -550,7 +557,7 @@ export class StopGapWidget extends EventEmitter {
const evId = ev.getId();
if (evRoomId && evId) {
const room = this.client.getRoom(evRoomId);
if (room && room.getMyMembership() === Membership.Join && !isRelationToUnknown) {
if (room && room.getMyMembership() === KnownMembership.Join && !isRelationToUnknown) {
this.readUpToMap[evRoomId] = evId;
}
}

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import { uniq } from "lodash";
import { Room, MatrixEvent, EventType, ClientEvent, MatrixClient } from "matrix-js-sdk/src/matrix";
import { Room, MatrixEvent, EventType, ClientEvent, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { Optional } from "matrix-events-sdk";
@ -172,7 +172,7 @@ export default class DMRoomMap {
const joinedRooms = commonRooms
.map((r) => this.matrixClient.getRoom(r))
.filter((r) => r && r.getMyMembership() === Membership.Join);
.filter((r) => r && r.getMyMembership() === KnownMembership.Join);
return joinedRooms[0];
}

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { MatrixError, MatrixClient, EventType, HistoryVisibility } from "matrix-js-sdk/src/matrix";
import { MatrixError, MatrixClient, EventType, HistoryVisibility, KnownMembership } from "matrix-js-sdk/src/matrix";
import { defer, IDeferred } from "matrix-js-sdk/src/utils";
import { logger } from "matrix-js-sdk/src/logger";
@ -159,17 +159,17 @@ export default class MultiInviter {
if (!room) throw new Error("Room not found");
const member = room.getMember(addr);
if (member?.membership === Membership.Join) {
if (member?.membership === KnownMembership.Join) {
throw new MatrixError({
errcode: USER_ALREADY_JOINED,
error: "Member already joined",
});
} else if (member?.membership === Membership.Invite) {
} else if (member?.membership === KnownMembership.Invite) {
throw new MatrixError({
errcode: USER_ALREADY_INVITED,
error: "Member already invited",
});
} else if (member?.membership === Membership.Ban) {
} else if (member?.membership === KnownMembership.Ban) {
let proceed = false;
// Check if we can unban the invitee.
// See https://spec.matrix.org/v1.7/rooms/v10/#authorization-rules, particularly 4.5.3 and 4.5.4.
@ -177,8 +177,8 @@ export default class MultiInviter {
if (
!!ourMember &&
member.powerLevel < ourMember.powerLevel &&
room.currentState.hasSufficientPowerLevelFor(Membership.Ban, ourMember.powerLevel) &&
room.currentState.hasSufficientPowerLevelFor(Membership.Kick, ourMember.powerLevel)
room.currentState.hasSufficientPowerLevelFor("ban", ourMember.powerLevel) &&
room.currentState.hasSufficientPowerLevelFor("kick", ourMember.powerLevel)
) {
const { finished } = Modal.createDialog(ConfirmUserActionDialog, {
member,

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { Room, EventType, ClientEvent, MatrixClient } from "matrix-js-sdk/src/matrix";
import { Room, EventType, ClientEvent, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { inviteUsersToRoom } from "../RoomInvite";
@ -68,8 +68,8 @@ export async function upgradeRoom(
let toInvite: string[] = [];
if (inviteUsers) {
toInvite = [
...room.getMembersWithMembership(Membership.Join),
...room.getMembersWithMembership(Membership.Invite),
...room.getMembersWithMembership(KnownMembership.Join),
...room.getMembersWithMembership(KnownMembership.Invite),
]
.map((m) => m.userId)
.filter((m) => m !== cli.getUserId());

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import { groupBy, mapValues, maxBy, minBy, sumBy, takeRight } from "lodash";
import { MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix";
import { KnownMembership, MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix";
import { Member } from "./direct-messages";
import DMRoomMap from "./DMRoomMap";
@ -52,7 +52,7 @@ function joinedRooms(cli: MatrixClient): Room[] {
return (
cli
.getRooms()
.filter((r) => r.getMyMembership() === Membership.Join)
.filter((r) => r.getMyMembership() === KnownMembership.Join)
// Skip low priority rooms and DMs
.filter((r) => !DMRoomMap.shared().getUserIdForRoomId(r.roomId))
.filter((r) => !Object.keys(r.tags).includes("m.lowpriority"))

View file

@ -17,7 +17,14 @@ limitations under the License.
import { base32 } from "rfc4648";
import { IWidget, IWidgetData } from "matrix-widget-api";
import { Room, ClientEvent, MatrixClient, RoomStateEvent, MatrixEvent } from "matrix-js-sdk/src/matrix";
import {
Room,
ClientEvent,
MatrixClient,
RoomStateEvent,
MatrixEvent,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { CallType } from "matrix-js-sdk/src/webrtc/call";
import { randomString, randomLowercaseString, randomUppercaseString } from "matrix-js-sdk/src/randomstring";
@ -83,7 +90,7 @@ export default class WidgetUtils {
return false;
}
if (room.getMyMembership() !== Membership.Join) {
if (room.getMyMembership() !== KnownMembership.Join) {
logger.warn(`User ${me} is not in room ${roomId}`);
return false;
}

View file

@ -15,7 +15,13 @@ limitations under the License.
*/
import { MEGOLM_ALGORITHM } from "matrix-js-sdk/src/crypto/olmlib";
import { EventType, KNOWN_SAFE_ROOM_VERSION, MatrixClient, MatrixEvent } from "matrix-js-sdk/src/matrix";
import {
EventType,
KNOWN_SAFE_ROOM_VERSION,
KnownMembership,
MatrixClient,
MatrixEvent,
} from "matrix-js-sdk/src/matrix";
import { LocalRoom, LOCAL_ROOM_ID_PREFIX } from "../../../src/models/LocalRoom";
import { determineCreateRoomEncryptionOption, Member } from "../../../src/utils/direct-messages";
@ -76,7 +82,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[])
type: EventType.RoomMember,
content: {
displayname: userId,
membership: MembershipJoin,
membership: KnownMembership.Join,
},
state_key: userId,
user_id: userId,
@ -93,7 +99,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[])
content: {
displayname: target.name,
avatar_url: target.getMxcAvatarUrl() ?? undefined,
membership: Membership.Invite,
membership: KnownMembership.Invite,
isDirect: true,
},
state_key: target.userId,
@ -108,7 +114,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[])
content: {
displayname: target.name,
avatar_url: target.getMxcAvatarUrl() ?? undefined,
membership: Membership.Join,
membership: KnownMembership.Join,
},
state_key: target.userId,
sender: target.userId,
@ -118,7 +124,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[])
});
localRoom.targets = targets;
localRoom.updateMyMembership(Membership.Join);
localRoom.updateMyMembership(KnownMembership.Join);
localRoom.addLiveEvents(events);
localRoom.currentState.setStateEvents(events);
localRoom.name = localRoom.getDefaultRoomName(client.getUserId()!);

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { MatrixClient, Room } from "matrix-js-sdk/src/matrix";
import { KnownMembership, MatrixClient, Room } from "matrix-js-sdk/src/matrix";
import DMRoomMap from "../DMRoomMap";
import { isLocalRoom } from "../localRoom/isLocalRoom";
@ -42,7 +42,7 @@ function extractSuitableRoom(rooms: Room[], userId: string, findRoomWithThirdpar
// a DM is a room of two people that contains those two people exactly. This does mean
// that bots, assistants, etc will ruin a room's DM-ness, though this is a problem for
// canonical DMs to solve.
if (r && r.getMyMembership() === Membership.Join) {
if (r && r.getMyMembership() === KnownMembership.Join) {
if (isLocalRoom(r)) return false;
const functionalUsers = getFunctionalMembers(r);

View file

@ -14,7 +14,16 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { Room, RoomMember, RoomState, RoomStateEvent, MatrixEvent, MatrixClient } from "matrix-js-sdk/src/matrix";
import {
Room,
RoomMember,
RoomState,
RoomStateEvent,
MatrixEvent,
MatrixClient,
Membership,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { MatrixClientPeg } from "../MatrixClientPeg";
import SettingsStore from "../settings/SettingsStore";
@ -66,11 +75,11 @@ export function splitRoomsByMembership(rooms: Room[]): MembershipSplit {
}
export function getEffectiveMembership(membership: Membership): EffectiveMembership {
if (membership === Membership.Invite) {
if (membership === KnownMembership.Invite) {
return EffectiveMembership.Invite;
} else if (
membership === Membership.Join ||
(SettingsStore.getValue("feature_ask_to_join") && membership === Membership.Knock)
membership === KnownMembership.Join ||
(SettingsStore.getValue("feature_ask_to_join") && membership === KnownMembership.Knock)
) {
return EffectiveMembership.Join;
} else {
@ -84,7 +93,7 @@ export function isKnockDenied(room: Room): boolean | undefined {
const member = memberId ? room.getMember(memberId) : null;
const previousMembership = member?.events.member?.getPrevContent().membership;
return member?.isKicked() && previousMembership === Membership.Knock;
return member?.isKicked() && previousMembership === KnownMembership.Knock;
}
export function getEffectiveMembershipTag(room: Room, membership?: string): EffectiveMembership {

View file

@ -16,7 +16,7 @@ limitations under the License.
import isIp from "is-ip";
import * as utils from "matrix-js-sdk/src/utils";
import { Room, MatrixClient, RoomStateEvent, EventType } from "matrix-js-sdk/src/matrix";
import { Room, MatrixClient, RoomStateEvent, EventType, KnownMembership } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import MatrixToPermalinkConstructor, {
@ -178,7 +178,7 @@ export class RoomPermalinkCreator {
const entries = Object.entries(users);
const allowedEntries = entries.filter(([userId]) => {
const member = this.room?.getMember(userId);
if (!member || member.membership !== Membership.Join) {
if (!member || member.membership !== KnownMembership.Join) {
return false;
}
const serverName = getServerName(userId);

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { JoinRule, Room } from "matrix-js-sdk/src/matrix";
import { JoinRule, KnownMembership, Room } from "matrix-js-sdk/src/matrix";
import { shouldShowComponent } from "../../customisations/helpers/UIComponents";
import { UIComponent } from "../../settings/UIFeature";
@ -29,5 +29,5 @@ export function canInviteTo(room: Room): boolean {
const canInvite =
!!room.canInvite(client.getSafeUserId()) || !!(room.isSpaceRoom() && room.getJoinRule() === JoinRule.Public);
return canInvite && room.getMyMembership() === Membership.Join && shouldShowComponent(UIComponent.InviteUsers);
return canInvite && room.getMyMembership() === KnownMembership.Join && shouldShowComponent(UIComponent.InviteUsers);
}

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import React from "react";
import { Room, ICreateRoomStateEvent, RoomType, EventType, JoinRule } from "matrix-js-sdk/src/matrix";
import { Room, ICreateRoomStateEvent, RoomType, EventType, JoinRule, KnownMembership } from "matrix-js-sdk/src/matrix";
import { calculateRoomVia } from "./permalinks/Permalinks";
import Modal from "../Modal";
@ -40,7 +40,7 @@ import { SdkContextClass } from "../contexts/SDKContext";
export const shouldShowSpaceSettings = (space: Room): boolean => {
const userId = space.client.getUserId()!;
return (
space.getMyMembership() === Membership.Join &&
space.getMyMembership() === KnownMembership.Join &&
(space.currentState.maySendStateEvent(EventType.RoomAvatar, userId) ||
space.currentState.maySendStateEvent(EventType.RoomName, userId) ||
space.currentState.maySendStateEvent(EventType.RoomTopic, userId) ||
@ -85,7 +85,7 @@ export const showCreateNewRoom = async (space: Room, type?: RoomType): Promise<b
};
export const shouldShowSpaceInvite = (space: Room): boolean =>
((space?.getMyMembership() === Membership.Join && space.canInvite(space.client.getUserId()!)) ||
((space?.getMyMembership() === KnownMembership.Join && space.canInvite(space.client.getUserId()!)) ||
space.getJoinRule() === JoinRule.Public) &&
shouldShowComponent(UIComponent.InviteUsers);