Show knock rooms in the list (#11573)

* Show knock rooms in the list

Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net>

* Pass userId to IndexedDBStore

Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net>

* Revert "Pass userId to IndexedDBStore"

Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net>

* Code review changes

Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net>

---------

Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net>
Co-authored-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net>
This commit is contained in:
maheichyk 2023-09-19 14:24:35 +03:00 committed by GitHub
parent f9f2e79fd9
commit 86e86ba49f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 187 additions and 24 deletions

View file

@ -16,6 +16,9 @@ limitations under the License.
import { Room, RoomMember, RoomState, RoomStateEvent, MatrixEvent, MatrixClient } from "matrix-js-sdk/src/matrix";
import { MatrixClientPeg } from "../MatrixClientPeg";
import SettingsStore from "../settings/SettingsStore";
/**
* Approximation of a membership status for a given room.
*/
@ -55,7 +58,7 @@ export function splitRoomsByMembership(rooms: Room[]): MembershipSplit {
const membership = room.getMyMembership();
// Filter out falsey relationship as this will be peeked rooms
if (!!membership) {
split[getEffectiveMembership(membership)].push(room);
split[getEffectiveMembershipTag(room)].push(room);
}
}
@ -65,8 +68,7 @@ export function splitRoomsByMembership(rooms: Room[]): MembershipSplit {
export function getEffectiveMembership(membership: string): EffectiveMembership {
if (membership === "invite") {
return EffectiveMembership.Invite;
} else if (membership === "join") {
// TODO: Include knocks? Update docs as needed in the enum. https://github.com/vector-im/element-web/issues/14237
} else if (membership === "join" || (SettingsStore.getValue("feature_ask_to_join") && membership === "knock")) {
return EffectiveMembership.Join;
} else {
// Probably a leave, kick, or ban
@ -74,6 +76,20 @@ export function getEffectiveMembership(membership: string): EffectiveMembership
}
}
export function isKnockDenied(room: Room): boolean | undefined {
const memberId = MatrixClientPeg.get()?.getSafeUserId();
const member = memberId ? room.getMember(memberId) : null;
const previousMembership = member?.events.member?.getPrevContent().membership;
return member?.isKicked() && previousMembership === "knock";
}
export function getEffectiveMembershipTag(room: Room, membership?: string): EffectiveMembership {
return isKnockDenied(room)
? EffectiveMembership.Join
: getEffectiveMembership(membership ?? room.getMyMembership());
}
export function isJoinedOrNearlyJoined(membership: string): boolean {
const effective = getEffectiveMembership(membership);
return effective === EffectiveMembership.Join || effective === EffectiveMembership.Invite;