Introduce Membership type
This commit is contained in:
parent
3c6fd58628
commit
da99bad7b9
115 changed files with 582 additions and 526 deletions
|
@ -1454,7 +1454,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() === "join") {
|
||||
if (room && room.getMyMembership() === Membership.Join) {
|
||||
try {
|
||||
await room.loadMembersIfNeeded();
|
||||
if (!this.unmounted) {
|
||||
|
@ -1588,7 +1588,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
|||
if (room && this.context.client) {
|
||||
const me = this.context.client.getSafeUserId();
|
||||
const canReact =
|
||||
room.getMyMembership() === "join" && room.currentState.maySendEvent(EventType.Reaction, me);
|
||||
room.getMyMembership() === Membership.Join && room.currentState.maySendEvent(EventType.Reaction, me);
|
||||
const canSendMessages = room.maySendMessage();
|
||||
const canSelfRedact = room.currentState.maySendEvent(EventType.RoomRedaction, me);
|
||||
|
||||
|
@ -1622,7 +1622,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
|||
|
||||
private updateDMState(): void {
|
||||
const room = this.state.room;
|
||||
if (room?.getMyMembership() !== "join") {
|
||||
if (room.getMyMembership() != Membership.Join) {
|
||||
return;
|
||||
}
|
||||
const dmInviter = room.getDMInviter();
|
||||
|
@ -1662,7 +1662,8 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
|||
action: Action.JoinRoom,
|
||||
roomId,
|
||||
opts: { inviteSignUrl: signUrl },
|
||||
metricsTrigger: this.state.room?.getMyMembership() === "invite" ? "Invite" : "RoomPreview",
|
||||
metricsTrigger:
|
||||
this.state.room?.getMyMembership() === Membership.Invite ? "Invite" : "RoomPreview",
|
||||
canAskToJoin: this.state.canAskToJoin,
|
||||
});
|
||||
}
|
||||
|
@ -2183,7 +2184,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 === "join")
|
||||
!(SettingsStore.getValue("feature_video_rooms") && myMembership === Membership.Join)
|
||||
) {
|
||||
return (
|
||||
<ErrorBoundary>
|
||||
|
@ -2200,7 +2201,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
|||
}
|
||||
|
||||
// SpaceRoomView handles invites itself
|
||||
if (myMembership === "invite" && !this.state.room.isSpaceRoom()) {
|
||||
if (myMembership === Membership.Invite && !this.state.room.isSpaceRoom()) {
|
||||
if (this.state.joining || this.state.rejecting) {
|
||||
return (
|
||||
<ErrorBoundary>
|
||||
|
@ -2247,16 +2248,16 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
|||
}
|
||||
}
|
||||
|
||||
if (this.state.canAskToJoin && ["knock", "leave"].includes(myMembership)) {
|
||||
if (this.state.canAskToJoin && [Membership.Knock, Membership.Leave].includes(myMembership)) {
|
||||
return (
|
||||
<div className="mx_RoomView" data-room-header={roomHeaderType}>
|
||||
<ErrorBoundary>
|
||||
<RoomPreviewBar
|
||||
onJoinClick={this.onJoinButtonClicked}
|
||||
room={this.state.room}
|
||||
canAskToJoinAndMembershipIsLeave={myMembership === "leave"}
|
||||
canAskToJoinAndMembershipIsLeave={myMembership === Membership.Leave}
|
||||
promptAskToJoin={this.state.promptAskToJoin}
|
||||
knocked={myMembership === "knock"}
|
||||
knocked={myMembership === Membership.Knock}
|
||||
onSubmitAskToJoin={this.onSubmitAskToJoin}
|
||||
onCancelAskToJoin={this.onCancelAskToJoin}
|
||||
onForgetClick={this.onForgetClick}
|
||||
|
@ -2288,7 +2289,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
|||
statusBar = (
|
||||
<RoomStatusBar
|
||||
room={this.state.room}
|
||||
isPeeking={myMembership !== "join"}
|
||||
isPeeking={myMembership !== Membership.Join}
|
||||
onInviteClick={this.onInviteClick}
|
||||
onVisible={this.onStatusBarVisible}
|
||||
onHidden={this.onStatusBarHidden}
|
||||
|
@ -2332,7 +2333,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
|||
);
|
||||
} else if (showRoomUpgradeBar) {
|
||||
aux = <RoomUpgradeWarningBar room={this.state.room} />;
|
||||
} else if (myMembership !== "join") {
|
||||
} else if (myMembership !== Membership.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;
|
||||
|
@ -2406,7 +2407,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
|||
let messageComposer;
|
||||
const showComposer =
|
||||
// joined and not showing search results
|
||||
myMembership === "join" && !this.state.search;
|
||||
myMembership === Membership.Join && !this.state.search;
|
||||
if (showComposer) {
|
||||
messageComposer = (
|
||||
<MessageComposer
|
||||
|
@ -2603,7 +2604,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() && (["leave", "ban"].includes(myMembership) || myMember?.isKicked());
|
||||
!this.context.client.isGuest() &&
|
||||
([Membership.Leave, Membership.Ban].includes(myMembership) || myMember?.isKicked());
|
||||
|
||||
return (
|
||||
<RoomContext.Provider value={this.state}>
|
||||
|
@ -2640,7 +2642,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
|||
room={this.state.room}
|
||||
searchInfo={this.state.search}
|
||||
oobData={this.props.oobData}
|
||||
inRoom={myMembership === "join"}
|
||||
inRoom={myMembership === Membership.Join}
|
||||
onSearchClick={onSearchClick}
|
||||
onInviteClick={onInviteClick}
|
||||
onForgetClick={showForgetButton ? onForgetClick : null}
|
||||
|
|
|
@ -112,7 +112,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() === "join" ? cliRoom : undefined;
|
||||
return cliRoom?.getMyMembership() === Membership.Join ? cliRoom : undefined;
|
||||
});
|
||||
const joinedRoomName = useTypedEventEmitterState(joinedRoom, RoomEvent.Name, (room) => room?.name);
|
||||
const name =
|
||||
|
@ -828,7 +828,7 @@ const SpaceHierarchy: React.FC<IProps> = ({ space, initialText = "", showRoom, a
|
|||
content = <Spinner />;
|
||||
} else {
|
||||
const hasPermissions =
|
||||
space?.getMyMembership() === "join" &&
|
||||
space?.getMyMembership() === Membership.Join &&
|
||||
space.currentState.maySendStateEvent(EventType.SpaceChild, cli.getSafeUserId());
|
||||
|
||||
const root = hierarchy.roomMap.get(space.roomId);
|
||||
|
@ -846,7 +846,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() !== "join") {
|
||||
if (cli.getRoom(parent)?.getMyMembership() !== Membership.Join) {
|
||||
await joinRoom(cli, hierarchy, parent);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -237,7 +237,7 @@ const SpaceLanding: React.FC<{ space: Room }> = ({ space }) => {
|
|||
}
|
||||
|
||||
const hasAddRoomPermissions =
|
||||
myMembership === "join" && space.currentState.maySendStateEvent(EventType.SpaceChild, userId);
|
||||
myMembership === Membership.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 === "join") {
|
||||
if (this.state.myMembership === Membership.Join) {
|
||||
return <SpaceLanding space={this.props.space} />;
|
||||
} else {
|
||||
return (
|
||||
|
|
|
@ -1824,7 +1824,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 = "leave";
|
||||
let userMembership = Membership.Leave;
|
||||
for (; i >= 0; i--) {
|
||||
const timeline = this.props.timelineSet.getTimelineForEvent(events[i].getId()!);
|
||||
if (!timeline) {
|
||||
|
@ -1837,14 +1837,15 @@ class TimelinePanel extends React.Component<IProps, IState> {
|
|||
continue;
|
||||
}
|
||||
|
||||
userMembership = timeline.getState(EventTimeline.FORWARDS)?.getMember(userId)?.membership ?? "leave";
|
||||
userMembership =
|
||||
timeline.getState(EventTimeline.FORWARDS)?.getMember(userId)?.membership ?? Membership.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 || "leave";
|
||||
userMembership = event.getPrevContent().membership || Membership.Leave;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1855,8 +1856,11 @@ 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 || "leave";
|
||||
} else if (userMembership === "leave" && (event.isDecryptionFailure() || event.isBeingDecrypted())) {
|
||||
userMembership = event.getPrevContent().membership || Membership.Leave;
|
||||
} else if (
|
||||
userMembership === Membership.Leave &&
|
||||
(event.isDecryptionFailure() || event.isBeingDecrypted())
|
||||
) {
|
||||
// reached an undecryptable message when the user wasn't in the room -- don't try to load any more
|
||||
// Note: for now, we assume that events that are being decrypted are
|
||||
// not decryptable - we will be called once more when it is decrypted.
|
||||
|
|
|
@ -48,7 +48,7 @@ export class CreationGrouper extends BaseGrouper {
|
|||
const eventType = event.getType();
|
||||
if (
|
||||
eventType === EventType.RoomMember &&
|
||||
(event.getStateKey() !== createEvent.getSender() || event.getContent()["membership"] !== "join")
|
||||
(event.getStateKey() !== createEvent.getSender() || event.getContent()["membership"] !== Membership.Join)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -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() === "join") {
|
||||
if (room.getMyMembership() === Membership.Join) {
|
||||
const isFavorite = roomTags.includes(DefaultTagID.Favourite);
|
||||
favouriteOption = (
|
||||
<IconizedContextMenuCheckbox
|
||||
|
|
|
@ -140,7 +140,7 @@ 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() === Membership.Join) ?? [],
|
||||
[cli, msc3946ProcessDynamicPredecessor],
|
||||
);
|
||||
|
||||
|
|
|
@ -267,7 +267,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() === Membership.Join && !room.isSpaceRoom()),
|
||||
),
|
||||
[cli, msc3946DynamicRoomPredecessors],
|
||||
);
|
||||
|
|
|
@ -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("invite").forEach((m) => excludedIds.add(m.userId));
|
||||
room.getMembersWithMembership("join").forEach((m) => excludedIds.add(m.userId));
|
||||
room.getMembersWithMembership(Membership.Invite).forEach((m) => excludedIds.add(m.userId));
|
||||
room.getMembersWithMembership(Membership.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(Membership.Ban).forEach((m) => excludedIds.add(m.userId));
|
||||
if (isFederated === false) {
|
||||
// exclude users from external servers
|
||||
const homeserver = props.roomId.split(":")[1];
|
||||
|
|
|
@ -102,7 +102,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() !== Membership.Join || !room.isSpaceRoom()) {
|
||||
return room;
|
||||
}
|
||||
}),
|
||||
|
|
|
@ -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 !== "join") return; // only count joined users
|
||||
if (ev.getContent().membership !== Membership.Join) return; // only count joined users
|
||||
const server = ev.getSender()!.split(":")[1];
|
||||
servers[server] = (servers[server] ?? 0) + 1;
|
||||
});
|
||||
|
|
|
@ -244,7 +244,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() === Membership.Join || room.getMyMembership() == Membership.Invite;
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -675,7 +675,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() === Membership.Join ||
|
||||
(result.publicRoom.world_readable && !canAskToJoin(joinRule)) ||
|
||||
cli.isGuest();
|
||||
|
||||
|
|
|
@ -219,7 +219,10 @@ export default class AppTile extends React.Component<IProps, IState> {
|
|||
}
|
||||
|
||||
private onMyMembership = (room: Room, membership: string): void => {
|
||||
if ((membership === "leave" || membership === "ban") && room.roomId === this.props.room?.roomId) {
|
||||
if (
|
||||
(membership === Membership.Leave || membership === Membership.Ban) &&
|
||||
room.roomId === this.props.room?.roomId
|
||||
) {
|
||||
this.onUserLeftRoom();
|
||||
}
|
||||
};
|
||||
|
|
|
@ -416,12 +416,12 @@ export default class EventListSummary extends React.Component<
|
|||
|
||||
case EventType.RoomMember:
|
||||
switch (e.mxEvent.getContent().membership) {
|
||||
case "invite":
|
||||
case Membership.Invite:
|
||||
return TransitionType.Invited;
|
||||
case "ban":
|
||||
case Membership.Ban:
|
||||
return TransitionType.Banned;
|
||||
case "join":
|
||||
if (e.mxEvent.getPrevContent().membership === "join") {
|
||||
case Membership.Join:
|
||||
if (e.mxEvent.getPrevContent().membership === Membership.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 "leave":
|
||||
case Membership.Leave:
|
||||
if (e.mxEvent.getSender() === e.mxEvent.getStateKey()) {
|
||||
if (e.mxEvent.getPrevContent().membership === "invite") {
|
||||
if (e.mxEvent.getPrevContent().membership === Membership.Invite) {
|
||||
return TransitionType.InviteReject;
|
||||
}
|
||||
return TransitionType.Left;
|
||||
}
|
||||
switch (e.mxEvent.getPrevContent().membership) {
|
||||
case "invite":
|
||||
case Membership.Invite:
|
||||
return TransitionType.InviteWithdrawal;
|
||||
case "ban":
|
||||
case Membership.Ban:
|
||||
return TransitionType.Unbanned;
|
||||
// sender is not target and made the target leave, if not from invite/ban then this is a kick
|
||||
default:
|
||||
|
|
|
@ -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() === "join";
|
||||
const isJoined = room.getMyMembership() === Membership.Join;
|
||||
let members = useRoomMembers(room);
|
||||
const count = members.length;
|
||||
|
||||
|
|
|
@ -217,7 +217,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 === "join";
|
||||
const showComposer = myMembership === Membership.Join;
|
||||
|
||||
return (
|
||||
<RoomContext.Provider
|
||||
|
|
|
@ -473,7 +473,7 @@ export const UserOptionsSection: React.FC<{
|
|||
if (
|
||||
member instanceof RoomMember &&
|
||||
canInvite &&
|
||||
(member?.membership ?? "leave") === "leave" &&
|
||||
(member?.membership ?? Membership.Leave) === Membership.Leave &&
|
||||
shouldShowComponent(UIComponent.InviteUsers)
|
||||
) {
|
||||
const roomId = member && member.roomId ? member.roomId : SdkContextClass.instance.roomViewStore.getRoomId();
|
||||
|
@ -638,7 +638,7 @@ export const RoomKickButton = ({
|
|||
const cli = useContext(MatrixClientContext);
|
||||
|
||||
// check if user can be kicked/disinvited
|
||||
if (member.membership !== "invite" && member.membership !== "join") return <></>;
|
||||
if (member.membership !== Membership.Invite && member.membership !== Membership.Join) return <></>;
|
||||
|
||||
const onKick = async (): Promise<void> => {
|
||||
if (isUpdating) return; // only allow one operation at a time
|
||||
|
@ -647,17 +647,17 @@ export const RoomKickButton = ({
|
|||
const commonProps = {
|
||||
member,
|
||||
action: room.isSpaceRoom()
|
||||
? member.membership === "invite"
|
||||
? member.membership === Membership.Invite
|
||||
? _t("user_info|disinvite_button_space")
|
||||
: _t("user_info|kick_button_space")
|
||||
: member.membership === "invite"
|
||||
: member.membership === Membership.Invite
|
||||
? _t("user_info|disinvite_button_room")
|
||||
: _t("user_info|kick_button_room"),
|
||||
title:
|
||||
member.membership === "invite"
|
||||
member.membership === Membership.Invite
|
||||
? _t("user_info|disinvite_button_room_name", { roomName: room.name })
|
||||
: _t("user_info|kick_button_room_name", { roomName: room.name }),
|
||||
askReason: member.membership === "join",
|
||||
askReason: member.membership === Membership.Join,
|
||||
danger: true,
|
||||
};
|
||||
|
||||
|
@ -718,10 +718,10 @@ export const RoomKickButton = ({
|
|||
};
|
||||
|
||||
const kickLabel = room.isSpaceRoom()
|
||||
? member.membership === "invite"
|
||||
? member.membership === Membership.Invite
|
||||
? _t("user_info|disinvite_button_space")
|
||||
: _t("user_info|kick_button_space")
|
||||
: member.membership === "invite"
|
||||
: member.membership === Membership.Invite
|
||||
? _t("user_info|disinvite_button_room")
|
||||
: _t("user_info|kick_button_room");
|
||||
|
||||
|
@ -771,7 +771,7 @@ export const BanToggleButton = ({
|
|||
}: Omit<IBaseRoomProps, "powerLevels">): JSX.Element => {
|
||||
const cli = useContext(MatrixClientContext);
|
||||
|
||||
const isBanned = member.membership === "ban";
|
||||
const isBanned = member.membership === Membership.Ban;
|
||||
const onBanOrUnban = async (): Promise<void> => {
|
||||
if (isUpdating) return; // only allow one operation at a time
|
||||
startUpdating();
|
||||
|
@ -808,9 +808,9 @@ export const BanToggleButton = ({
|
|||
return (
|
||||
!!myMember &&
|
||||
!!theirMember &&
|
||||
theirMember.membership === "ban" &&
|
||||
theirMember.membership === Membership.Ban &&
|
||||
myMember.powerLevel > theirMember.powerLevel &&
|
||||
child.currentState.hasSufficientPowerLevelFor("ban", myMember.powerLevel)
|
||||
child.currentState.hasSufficientPowerLevelFor(Membership.Ban, myMember.powerLevel)
|
||||
);
|
||||
}
|
||||
: (child: Room) => {
|
||||
|
@ -820,9 +820,9 @@ export const BanToggleButton = ({
|
|||
return (
|
||||
!!myMember &&
|
||||
!!theirMember &&
|
||||
theirMember.membership !== "ban" &&
|
||||
theirMember.membership !== Membership.Ban &&
|
||||
myMember.powerLevel > theirMember.powerLevel &&
|
||||
child.currentState.hasSufficientPowerLevelFor("ban", myMember.powerLevel)
|
||||
child.currentState.hasSufficientPowerLevelFor(Membership.Ban, myMember.powerLevel)
|
||||
);
|
||||
},
|
||||
allLabel: isBanned ? _t("user_info|unban_space_everything") : _t("user_info|ban_space_everything"),
|
||||
|
@ -903,7 +903,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 !== "join") return null;
|
||||
if (member.membership !== Membership.Join) return null;
|
||||
|
||||
const muted = isMuted(member, powerLevels);
|
||||
const onMuteToggle = async (): Promise<void> => {
|
||||
|
|
|
@ -171,7 +171,7 @@ 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 === "join" && oldMembership !== "join") {
|
||||
if (room.roomId === this.props.roomId && membership === Membership.Join && oldMembership !== Membership.Join) {
|
||||
// we just joined the room, load the member list
|
||||
this.updateListNow(true);
|
||||
}
|
||||
|
@ -363,7 +363,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() === "join" && shouldShowComponent(UIComponent.InviteUsers)) {
|
||||
if (room?.getMyMembership() === Membership.Join && shouldShowComponent(UIComponent.InviteUsers)) {
|
||||
const inviteButtonText = room.isSpaceRoom() ? _t("space|invite_this_space") : _t("room|invite_this_room");
|
||||
|
||||
const button = (
|
||||
|
|
|
@ -112,7 +112,7 @@ const NewRoomIntro: React.FC = () => {
|
|||
</React.Fragment>
|
||||
);
|
||||
} else {
|
||||
const inRoom = room && room.getMyMembership() === "join";
|
||||
const inRoom = room && room.getMyMembership() === Membership.Join;
|
||||
const topic = room.currentState.getStateEvents(EventType.RoomTopic, "")?.getContent()?.topic;
|
||||
const canAddTopic = inRoom && room.currentState.maySendStateEvent(EventType.RoomTopic, cli.getSafeUserId());
|
||||
|
||||
|
|
|
@ -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() !== "invite") return null;
|
||||
if (room.getMyMembership() !== Membership.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 === "invite" && summary) {
|
||||
if (membership === Membership.Invite && summary) {
|
||||
// Don't trust local state and instead use the summary API
|
||||
members = (
|
||||
<span className="mx_RoomInfoLine_members">
|
||||
|
|
|
@ -35,7 +35,7 @@ export const RoomKnocksBar: VFC<{ room: Room }> = ({ room }) => {
|
|||
const knockMembers = useTypedEventEmitterState(
|
||||
room,
|
||||
RoomStateEvent.Update,
|
||||
useCallback(() => room.getMembersWithMembership("knock"), [room]),
|
||||
useCallback(() => room.getMembersWithMembership(Membership.Knock), [room]),
|
||||
);
|
||||
const knockMembersCount = knockMembers.length;
|
||||
|
||||
|
|
|
@ -192,13 +192,13 @@ export default class RoomPreviewBar extends React.Component<IProps, IState> {
|
|||
if (myMember) {
|
||||
const previousMembership = myMember.events.member?.getPrevContent().membership;
|
||||
if (myMember.isKicked()) {
|
||||
if (previousMembership === "knock") {
|
||||
if (previousMembership === Membership.Knock) {
|
||||
return MessageCase.RequestDenied;
|
||||
} else if (this.props.promptAskToJoin) {
|
||||
return MessageCase.PromptAskToJoin;
|
||||
}
|
||||
return MessageCase.Kicked;
|
||||
} else if (myMember.membership === "ban") {
|
||||
} else if (myMember.membership === Membership.Ban) {
|
||||
return MessageCase.Banned;
|
||||
}
|
||||
}
|
||||
|
@ -284,7 +284,7 @@ export default class RoomPreviewBar extends React.Component<IProps, IState> {
|
|||
return false;
|
||||
}
|
||||
const memberContent = myMember.events.member?.getContent();
|
||||
return memberContent?.membership === "invite" && memberContent.is_direct;
|
||||
return memberContent?.membership === Membership.Invite && memberContent.is_direct;
|
||||
}
|
||||
|
||||
private makeScreenAfterLogin(): { screen: string; params: Record<string, any> } {
|
||||
|
|
|
@ -73,7 +73,7 @@ const RoomPreviewCard: FC<IProps> = ({ room, onJoinButtonClicked, onRejectButton
|
|||
|
||||
let inviterSection: JSX.Element | null = null;
|
||||
let joinButtons: JSX.Element;
|
||||
if (myMembership === "join") {
|
||||
if (myMembership === Membership.Join) {
|
||||
joinButtons = (
|
||||
<AccessibleButton
|
||||
kind="danger_outline"
|
||||
|
@ -87,7 +87,7 @@ const RoomPreviewCard: FC<IProps> = ({ room, onJoinButtonClicked, onRejectButton
|
|||
{_t("action|leave")}
|
||||
</AccessibleButton>
|
||||
);
|
||||
} else if (myMembership === "invite") {
|
||||
} else if (myMembership === Membership.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 === "join"
|
||||
myMembership === Membership.Join
|
||||
? _t("room|view_failed_enable_video_rooms")
|
||||
: _t("room|join_failed_enable_video_rooms");
|
||||
|
||||
|
|
|
@ -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() !== "knock" &&
|
||||
this.props.room.getMyMembership() !== Membership.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() === "knock" || isKnockDenied(this.props.room)),
|
||||
(this.props.room.getMyMembership() === Membership.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,
|
||||
|
|
|
@ -73,7 +73,7 @@ export default class GeneralRoomSettingsTab extends React.Component<IProps, ISta
|
|||
) : null;
|
||||
|
||||
let leaveSection;
|
||||
if (room.getMyMembership() === "join") {
|
||||
if (room.getMyMembership() === Membership.Join) {
|
||||
leaveSection = (
|
||||
<SettingsSubsection heading={_t("action|leave_room")}>
|
||||
<AccessibleButton kind="danger" onClick={this.onLeaveClick}>
|
||||
|
|
|
@ -145,7 +145,7 @@ export const PeopleRoomSettingsTab: VFC<{ room: Room }> = ({ room }) => {
|
|||
const knockMembers = useTypedEventEmitterState(
|
||||
room,
|
||||
RoomStateEvent.Update,
|
||||
useCallback(() => room.getMembersWithMembership("knock"), [room]),
|
||||
useCallback(() => room.getMembersWithMembership(Membership.Knock), [room]),
|
||||
);
|
||||
|
||||
return (
|
||||
|
|
|
@ -413,7 +413,7 @@ export default class RolesRoomSettingsTab extends React.Component<IProps> {
|
|||
}
|
||||
}
|
||||
|
||||
const banned = room.getMembersWithMembership("ban");
|
||||
const banned = room.getMembersWithMembership(Membership.Ban);
|
||||
let bannedUsersSection: JSX.Element | undefined;
|
||||
if (banned?.length) {
|
||||
const canBanUsers = currentUserLevel >= banLevel;
|
||||
|
|
|
@ -121,12 +121,12 @@ export default class SecurityUserSettingsTab extends React.Component<IProps, ISt
|
|||
MatrixClientPeg.safeGet().removeListener(RoomEvent.MyMembership, this.onMyMembership);
|
||||
}
|
||||
|
||||
private onMyMembership = (room: Room, membership: string): void => {
|
||||
private onMyMembership = (room: Room, membership: Membership): void => {
|
||||
if (room.isSpaceRoom()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (membership === "invite") {
|
||||
if (membership === Membership.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()!, "invite");
|
||||
return r.hasMembershipState(MatrixClientPeg.safeGet().getUserId()!, Membership.Invite);
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
@ -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() === "invite") {
|
||||
if (space?.getMyMembership() === Membership.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() === "invite";
|
||||
const isInvite = space.getMyMembership() === Membership.Invite;
|
||||
|
||||
const notificationState = isInvite
|
||||
? StaticNotificationState.forSymbol("!", NotificationLevel.Highlight)
|
||||
|
@ -378,7 +378,9 @@ export class SpaceItem extends React.PureComponent<IItemProps, IItemState> {
|
|||
isNarrow={isPanelCollapsed}
|
||||
size={isNested ? "24px" : "32px"}
|
||||
onKeyDown={this.onKeyDown}
|
||||
ContextMenuComponent={this.props.space.getMyMembership() === "join" ? SpaceContextMenu : undefined}
|
||||
ContextMenuComponent={
|
||||
this.props.space.getMyMembership() === Membership.Join ? SpaceContextMenu : undefined
|
||||
}
|
||||
>
|
||||
{toggleCollapseButton}
|
||||
</SpaceButton>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue