import { MatrixEvent } from 'matrix-js-sdk';
import { IMemberContent, Membership } from '../../types/matrix/room';
import { getMxIdLocalPart } from '../utils/matrix';
+import { isMembershipChanged } from '../utils/room';
export type ParsedResult = {
icon: IconSrc;
const senderName = getMxIdLocalPart(senderId);
const userName = content.displayname || getMxIdLocalPart(userId);
- if (content.membership !== prevContent.membership) {
+ if (isMembershipChanged(mEvent)) {
if (content.membership === Membership.Invite) {
if (prevContent.membership === Membership.Knock) {
return {
import { settingsAtom } from '../state/settings';
import { useSetting } from '../state/hooks/settings';
import { MessageEvent, StateEvent } from '../../types/matrix/room';
+import { isMembershipChanged } from '../utils/room';
export const useRoomLatestRenderedEvent = (room: Room) => {
const [hideMembershipEvents] = useSetting(settingsAtom, 'hideMembershipEvents');
if (!evt) continue;
if (evt.isRelation()) continue;
if (evt.getType() === StateEvent.RoomMember) {
- const membershipChanged = evt.getContent().membership !== evt.getPrevContent().membership;
+ const membershipChanged = isMembershipChanged(evt);
if (membershipChanged && hideMembershipEvents) continue;
if (!membershipChanged && hideNickAvatarEvents) continue;
return evt;
decryptAllTimelineEvent,
getMemberDisplayName,
getReactionContent,
+ isMembershipChanged,
} from '../../utils/room';
import { useSetting } from '../../state/hooks/settings';
import { settingsAtom } from '../../state/settings';
);
},
renderRoomMember: (mEventId, mEvent, item) => {
- const membershipChanged =
- mEvent.getContent().membership !== mEvent.getPrevContent().membership;
+ const membershipChanged = isMembershipChanged(mEvent);
if (membershipChanged && hideMembershipEvents) return null;
if (!membershipChanged && hideNickAvatarEvents) return null;
return member?.getMxcAvatarUrl();
};
+export const isMembershipChanged = (mEvent: MatrixEvent): boolean =>
+ mEvent.getContent().membership !== mEvent.getPrevContent().membership ||
+ mEvent.getContent().reason !== mEvent.getPrevContent().reason;
+
export const decryptAllTimelineEvent = async (mx: MatrixClient, timeline: EventTimeline) => {
const crypto = mx.getCrypto();
if (!crypto) return;