Some adjustments to AboutContactModal

This commit is contained in:
Fedor Indutny 2024-02-14 12:29:17 -08:00 committed by GitHub
parent 848ed95bda
commit 0fe797e511
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 167 additions and 7 deletions

View file

@ -5,7 +5,8 @@ import React, { useCallback, useEffect } from 'react';
import type { ConversationType } from '../../state/ducks/conversations';
import type { LocalizerType } from '../../types/Util';
import { isInSystemContacts } from '../../util/isInSystemContacts';
import { Avatar, AvatarSize } from '../Avatar';
import { shouldBlurAvatar } from '../../util/shouldBlurAvatar';
import { Avatar, AvatarBlur, AvatarSize } from '../Avatar';
import { Modal } from '../Modal';
import { UserText } from '../UserText';
import { SharedGroupNames } from '../SharedGroupNames';
@ -21,7 +22,9 @@ export type ExternalPropsType = Readonly<{
conversation: ConversationType;
isSignalConnection: boolean;
toggleSignalConnectionsModal: () => void;
toggleSafetyNumberModal: (id: string) => void;
updateSharedGroups: (id: string) => void;
unblurAvatar: (conversationId: string) => void;
}>;
export function AboutContactModal({
@ -29,7 +32,9 @@ export function AboutContactModal({
conversation,
isSignalConnection,
toggleSignalConnectionsModal,
toggleSafetyNumberModal,
updateSharedGroups,
unblurAvatar,
onClose,
}: PropsType): JSX.Element {
useEffect(() => {
@ -37,6 +42,16 @@ export function AboutContactModal({
updateSharedGroups(conversation.id);
}, [conversation.id, updateSharedGroups]);
const avatarBlur = shouldBlurAvatar(conversation)
? AvatarBlur.BlurPictureWithClickToView
: AvatarBlur.NoBlur;
const onAvatarClick = useCallback(() => {
if (avatarBlur === AvatarBlur.BlurPictureWithClickToView) {
unblurAvatar(conversation.id);
}
}, [avatarBlur, unblurAvatar, conversation.id]);
const onSignalConnectionClick = useCallback(
(ev: React.MouseEvent) => {
ev.preventDefault();
@ -45,6 +60,43 @@ export function AboutContactModal({
[toggleSignalConnectionsModal]
);
const onVerifiedClick = useCallback(
(ev: React.MouseEvent) => {
ev.preventDefault();
toggleSafetyNumberModal(conversation.id);
},
[toggleSafetyNumberModal, conversation.id]
);
let statusRow: JSX.Element | undefined;
if (conversation.isBlocked) {
statusRow = (
<div className="AboutContactModal__row">
<i className="AboutContactModal__row__icon AboutContactModal__row__icon--blocked" />
{i18n('icu:AboutContactModal__blocked', {
name: conversation.title,
})}
</div>
);
} else if (!conversation.acceptedMessageRequest) {
statusRow = (
<div className="AboutContactModal__row">
<i className="AboutContactModal__row__icon AboutContactModal__row__icon--message-request" />
{i18n('icu:AboutContactModal__message-request')}
</div>
);
} else if (!conversation.hasMessages && !conversation.profileSharing) {
statusRow = (
<div className="AboutContactModal__row">
<i className="AboutContactModal__row__icon AboutContactModal__row__icon--no-dms" />
{i18n('icu:AboutContactModal__no-dms', {
name: conversation.title,
})}
</div>
);
}
return (
<Modal
key="main"
@ -58,6 +110,8 @@ export function AboutContactModal({
<Avatar
acceptedMessageRequest={conversation.acceptedMessageRequest}
avatarPath={conversation.avatarPath}
blur={avatarBlur}
onClick={avatarBlur === AvatarBlur.NoBlur ? undefined : onAvatarClick}
badge={undefined}
color={conversation.color}
conversationType="direct"
@ -82,6 +136,19 @@ export function AboutContactModal({
<UserText text={conversation.title} />
</div>
{conversation.isVerified ? (
<div className="AboutContactModal__row">
<i className="AboutContactModal__row__icon AboutContactModal__row__icon--verified" />
<button
type="button"
className="AboutContactModal__verified"
onClick={onVerifiedClick}
>
{i18n('icu:AboutContactModal__verified')}
</button>
</div>
) : null}
{conversation.about ? (
<div className="AboutContactModal__row">
<i className="AboutContactModal__row__icon AboutContactModal__row__icon--about" />
@ -130,6 +197,8 @@ export function AboutContactModal({
/>
</div>
</div>
{statusRow}
</Modal>
);
}