45 lines
1.4 KiB
TypeScript
45 lines
1.4 KiB
TypeScript
|
|
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(),
|
||
|
|
};
|
||
|
|
};
|