19 lines
867 B
TypeScript
19 lines
867 B
TypeScript
import { JoinRule, Room } from 'matrix-js-sdk';
|
|||
|
|
import { StateEvent } from '../../types/matrix/room';
|
||
|
|
import { getStateEvents } from './room';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Whether a call notification in this room may ring — and, by the same rule,
|
||
|
|
* whether an unanswered one may show as "Missed call" (Gitea #162 follow-up).
|
||
|
|
* Only DMs and invite-only groups outside any space ring, i.e. rooms where the
|
||
|
|
* call button is shown. Persistent voice rooms, space channels, restricted and
|
||
|
|
* public rooms never do: joining a voice channel alone is normal and isn't a
|
||
|
|
* "call" anyone missed.
|
||
|
|
*/
|
||
|
|
export const isRingableRoom = (room: Room, isDirect: boolean): boolean => {
|
||
|
|
if (room.isCallRoom()) return false;
|
||
|
|
if (isDirect) return true;
|
||
|
|
const isSpaceChild = getStateEvents(room, StateEvent.SpaceParent).length > 0;
|
||
|
|
return !isSpaceChild && room.getJoinRule() === JoinRule.Invite;
|
||
|
|
};
|