You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.3 KiB
TypeScript
102 lines
2.3 KiB
TypeScript
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;
|
|
}
|
|
|
|
export class UserDetailsDialog extends React.Component<Props> {
|
|
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);
|
|
}
|
|
|
|
public render() {
|
|
const i18n = this.props.i18n;
|
|
|
|
const cancelText = i18n('cancel');
|
|
const startConversation = i18n('startConversation');
|
|
|
|
return (
|
|
<div className="content">
|
|
<div className="avatar-center">
|
|
<div className="avatar-center-inner">{this.renderAvatar()}</div>
|
|
</div>
|
|
<div className="profile-name">{this.props.profileName}</div>
|
|
<div className="message">{this.props.pubkey}</div>
|
|
|
|
<div className="buttons">
|
|
<button className="cancel" tabIndex={0} onClick={this.closeDialog}>
|
|
{cancelText}
|
|
</button>
|
|
|
|
<button
|
|
className="ok"
|
|
tabIndex={0}
|
|
onClick={this.onClickStartConversation}
|
|
>
|
|
{startConversation}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
private renderAvatar() {
|
|
const avatarPath = this.props.avatarPath;
|
|
const color = this.props.avatarColor;
|
|
|
|
return (
|
|
<Avatar
|
|
avatarPath={avatarPath}
|
|
color={color}
|
|
conversationType="direct"
|
|
i18n={this.props.i18n}
|
|
name={this.props.profileName}
|
|
phoneNumber={this.props.pubkey}
|
|
profileName={this.props.profileName}
|
|
size={80}
|
|
/>
|
|
);
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|