Files
cinny/src/app/hooks/useLocalRoomSummary.ts
T

45 lines
1.4 KiB
TypeScript
Raw Normal View History

import { GuestAccess, HistoryVisibility, JoinRule, Room } from 'matrix-js-sdk';
import { getStateEvent } from '../utils/room';
import { StateEvent } from '../../types/matrix/room';
export type LocalRoomSummary = {
roomId: string;
name: string;
topic?: string;
avatarUrl?: string;
canonicalAlias?: string;
worldReadable?: boolean;
guestCanJoin?: boolean;
memberCount?: number;
roomType?: string;
joinRule?: JoinRule;
};
export const useLocalRoomSummary = (room: Room): LocalRoomSummary => {
const topicEvent = getStateEvent(room, StateEvent.RoomTopic);
const topicContent = topicEvent?.getContent();
const topic =
topicContent && typeof topicContent.topic === 'string' ? topicContent.topic : undefined;
const historyEvent = getStateEvent(room, StateEvent.RoomHistoryVisibility);
const historyContent = historyEvent?.getContent();
const worldReadable =
historyContent && typeof historyContent.history_visibility === 'string'
? historyContent.history_visibility === HistoryVisibility.WorldReadable
: undefined;
const guestCanJoin = room.getGuestAccess() === GuestAccess.CanJoin;
return {
roomId: room.roomId,
name: room.name,
topic,
avatarUrl: room.getMxcAvatarUrl() ?? undefined,
canonicalAlias: room.getCanonicalAlias() ?? undefined,
worldReadable,
guestCanJoin,
memberCount: room.getJoinedMemberCount(),
roomType: room.getType(),
joinRule: room.getJoinRule(),
};
};