/* * https://github.com/morethanwords/tweb * Copyright (C) 2019-2021 Eduard Kuzmenko * https://github.com/morethanwords/tweb/blob/master/LICENSE */ import replaceContent from '../../helpers/dom/replaceContent'; import setInnerHTML from '../../helpers/dom/setInnerHTML'; import {GroupCallParticipant} from '../../layer'; import {i18n} from '../../lib/langPack'; import {GROUP_CALL_PARTICIPANT_MUTED_STATE} from '.'; import {GroupCallParticipantVideoType} from './participantVideo'; import wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText'; const className = 'group-call-participant-status'; export default class GroupCallParticipantStatusElement { public container: HTMLElement; constructor(private withIcons: GroupCallParticipantVideoType[]) { this.container = document.createElement('div'); this.container.classList.add(className + '-container'); } public setState(state: GROUP_CALL_PARTICIPANT_MUTED_STATE, participant: GroupCallParticipant) { const states = GROUP_CALL_PARTICIPANT_MUTED_STATE; const icons = this.withIcons.filter((type) => !!participant[type]).map((type) => { const iconClassName = `tgico-${type === 'presentation' ? 'listscreenshare' : 'videocamera_filled'}`; const i = document.createElement('i'); i.classList.add(className + '-icon', className + '-icon-' + type, iconClassName); return i; }); let element2: HTMLElement, actionClassName: string; if(state === states.MUTED_FOR_ME) { element2 = i18n('VoiceChat.Status.MutedForYou'); actionClassName = 'is-muted'; } else if(state === states.UNMUTED) { element2 = i18n('VoiceChat.Status.Speaking'); actionClassName = 'is-speaking'; } else if(state === states.HAND) { element2 = i18n('VoiceChat.Status.WantsSpeak'); actionClassName = 'is-waiting'; } else if(participant.about && !icons.length) { setInnerHTML(this.container, wrapEmojiText(participant.about)); return; } else { element2 = i18n('VoiceChat.Status.Listening'); actionClassName = 'is-listening'; } const span = document.createElement('span'); span.classList.add(className, actionClassName); span.append(...icons, element2); replaceContent(this.container, span); } }