74 lines
2.3 KiB
TypeScript
74 lines
2.3 KiB
TypeScript
![]() |
// Copyright 2021 Signal Messenger, LLC
|
||
|
// SPDX-License-Identifier: AGPL-3.0-only
|
||
|
|
||
|
import React, { memo, useEffect } from 'react';
|
||
|
import { useSelector } from 'react-redux';
|
||
|
|
||
|
import type { Props as ContactDetailProps } from '../../components/conversation/ContactDetail';
|
||
|
import { ContactDetail } from '../../components/conversation/ContactDetail';
|
||
|
import { useConversationsActions } from '../ducks/conversations';
|
||
|
import { getMessages } from '../selectors/conversations';
|
||
|
import { getIntl, getRegionCode } from '../selectors/user';
|
||
|
import { embeddedContactSelector } from '../../types/EmbeddedContact';
|
||
|
import { getAccountSelector } from '../selectors/accounts';
|
||
|
|
||
|
export type OwnProps = Pick<ContactDetailProps, 'messageId'>;
|
||
|
|
||
|
export const SmartContactDetail = memo(function SmartContactDetail({
|
||
|
messageId,
|
||
|
}: OwnProps): JSX.Element | null {
|
||
|
const i18n = useSelector(getIntl);
|
||
|
const regionCode = useSelector(getRegionCode);
|
||
|
const messageLookup = useSelector(getMessages);
|
||
|
const accountSelector = useSelector(getAccountSelector);
|
||
|
const {
|
||
|
cancelAttachmentDownload,
|
||
|
kickOffAttachmentDownload,
|
||
|
popPanelForConversation,
|
||
|
startConversation,
|
||
|
} = useConversationsActions();
|
||
|
|
||
|
const contact = messageLookup[messageId]?.contact?.[0];
|
||
|
|
||
|
useEffect(() => {
|
||
|
if (!contact) {
|
||
|
popPanelForConversation();
|
||
|
}
|
||
|
}, [contact, popPanelForConversation]);
|
||
|
|
||
|
if (!contact) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
const numbers = contact?.number;
|
||
|
const firstNumber = numbers && numbers[0] ? numbers[0].value : undefined;
|
||
|
const fixedContact = embeddedContactSelector(contact, {
|
||
|
firstNumber,
|
||
|
regionCode,
|
||
|
serviceId: accountSelector(firstNumber),
|
||
|
});
|
||
|
const signalAccount =
|
||
|
contact.firstNumber && contact.serviceId
|
||
|
? {
|
||
|
phoneNumber: contact.firstNumber,
|
||
|
serviceId: contact.serviceId,
|
||
|
}
|
||
|
: undefined;
|
||
|
|
||
|
return (
|
||
|
<ContactDetail
|
||
|
cancelAttachmentDownload={cancelAttachmentDownload}
|
||
|
contact={fixedContact}
|
||
|
hasSignalAccount={Boolean(signalAccount)}
|
||
|
i18n={i18n}
|
||
|
kickOffAttachmentDownload={kickOffAttachmentDownload}
|
||
|
messageId={messageId}
|
||
|
onSendMessage={() => {
|
||
|
if (signalAccount) {
|
||
|
startConversation(signalAccount.phoneNumber, signalAccount.serviceId);
|
||
|
}
|
||
|
}}
|
||
|
/>
|
||
|
);
|
||
|
});
|