// Copyright 2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import React, { useRef, useEffect } from 'react'; import type { LocalizerType } from '../types/Util'; import { AvatarColors } from '../types/Colors'; import { Avatar, AvatarSize } from './Avatar'; import { Intl } from './Intl'; import { ContactName } from './conversation/ContactName'; import type { ConversationType } from '../state/ducks/conversations'; type Props = { conversation: Pick< ConversationType, | 'acceptedMessageRequest' | 'avatarPath' | 'color' | 'isMe' | 'name' | 'phoneNumber' | 'profileName' | 'sharedGroupNames' | 'title' | 'unblurredAvatarPath' >; i18n: LocalizerType; close: () => void; }; const AUTO_CLOSE_MS = 10000; export function CallNeedPermissionScreen({ conversation, i18n, close, }: Props): JSX.Element { const title = conversation.title || i18n('icu:unknownContact'); const autoCloseAtRef = useRef<number>(Date.now() + AUTO_CLOSE_MS); useEffect(() => { const timeout = setTimeout(close, autoCloseAtRef.current - Date.now()); return clearTimeout.bind(null, timeout); }, [autoCloseAtRef, close]); return ( <div className="module-call-need-permission-screen"> <Avatar acceptedMessageRequest={conversation.acceptedMessageRequest} avatarPath={conversation.avatarPath} badge={undefined} color={conversation.color || AvatarColors[0]} noteToSelf={false} conversationType="direct" i18n={i18n} isMe={conversation.isMe} phoneNumber={conversation.phoneNumber} profileName={conversation.profileName} title={conversation.title} sharedGroupNames={conversation.sharedGroupNames} size={AvatarSize.EIGHTY} /> <p className="module-call-need-permission-screen__text"> <Intl i18n={i18n} id="icu:callNeedPermission" components={{ title: <ContactName title={title} />, }} /> </p> <button type="button" className="module-call-need-permission-screen__button" onClick={() => { close(); }} > {i18n('icu:close')} </button> </div> ); }