import React from 'react'; import { Avatar } from './Avatar'; declare global { interface Window { displayNameRegex: any; } } interface Props { i18n: any; profileName: string; avatarPath: string; avatarColor: string; pubkey: string; onClose: any; onStartConversation: any; } interface State { isEnlargedImageShown: boolean; } export class UserDetailsDialog extends React.Component { private modalRef: any; constructor(props: any) { super(props); this.closeDialog = this.closeDialog.bind(this); this.onKeyUp = this.onKeyUp.bind(this); this.onClickStartConversation = this.onClickStartConversation.bind(this); window.addEventListener('keyup', this.onKeyUp); this.modalRef = React.createRef(); this.state = { isEnlargedImageShown: false }; } public componentWillMount() { document.addEventListener('mousedown', this.handleClick, false); } public componentWillUnmount() { document.removeEventListener('mousedown', this.handleClick, false); } public render() { const i18n = this.props.i18n; const cancelText = i18n('cancel'); const startConversation = i18n('startConversation'); return (
(this.modalRef = element)}>
{this.renderAvatar()}
{this.props.profileName}
{this.props.pubkey}
); } private renderAvatar() { const avatarPath = this.props.avatarPath; const color = this.props.avatarColor; const size = this.state.isEnlargedImageShown ? 300 : 80; return ( ); } private readonly handleShowEnlargedDialog = () => { this.setState({ isEnlargedImageShown: !this.state.isEnlargedImageShown }); }; private onKeyUp(event: any) { switch (event.key) { case 'Enter': this.onClickStartConversation(); break; case 'Esc': case 'Escape': this.closeDialog(); break; default: } } private closeDialog() { window.removeEventListener('keyup', this.onKeyUp); this.props.onClose(); } private onClickStartConversation() { this.props.onStartConversation(); this.closeDialog(); } private readonly handleClick = (e: any) => { if (this.modalRef.contains(e.target)) { return; } this.closeDialog(); }; }