import type { FC } from '../../lib/teact/teact'; import React, { memo, useEffect } from '../../lib/teact/teact'; import { getActions, withGlobal } from '../../global'; import type { ApiContact, ApiError, ApiInviteInfo, ApiPhoto, } from '../../api/types'; import type { MessageList } from '../../global/types'; import { selectCurrentMessageList, selectTabState } from '../../global/selectors'; import getReadableErrorText from '../../util/getReadableErrorText'; import { pick } from '../../util/iteratees'; import renderText from '../common/helpers/renderText'; import useFlag from '../../hooks/useFlag'; import useOldLang from '../../hooks/useOldLang'; import Avatar from '../common/Avatar'; import Button from '../ui/Button'; import Modal from '../ui/Modal'; type StateProps = { currentMessageList?: MessageList; dialogs: (ApiError | ApiInviteInfo | ApiContact)[]; }; const Dialogs: FC = ({ dialogs, currentMessageList }) => { const { dismissDialog, acceptInviteConfirmation, sendMessage, showNotification, } = getActions(); const [isModalOpen, openModal, closeModal] = useFlag(); const lang = useOldLang(); useEffect(() => { if (dialogs.length > 0) { openModal(); } }, [dialogs, openModal]); if (!dialogs.length) { return undefined; } function renderInviteHeader(title: string, photo?: ApiPhoto) { return (
{photo && }
{renderText(title)}
); } const renderInvite = (invite: ApiInviteInfo) => { const { hash, title, about, participantsCount, isChannel, photo, isRequestNeeded, } = invite; const handleJoinClick = () => { acceptInviteConfirmation({ hash, }); if (isRequestNeeded) { showNotification({ message: isChannel ? lang('RequestToJoinChannelSentDescription') : lang('RequestToJoinGroupSentDescription'), }); } closeModal(); }; const participantsText = isChannel ? lang('Subscribers', participantsCount, 'i') : lang('Members', participantsCount, 'i'); const joinText = isChannel ? lang('ChannelJoin') : lang('JoinGroup'); const requestToJoinText = isChannel ? lang('MemberRequests.RequestToJoinChannel') : lang('MemberRequests.RequestToJoinGroup'); return ( {participantsCount !== undefined &&

{participantsText}

} {about &&

{renderText(about, ['br'])}

} {isRequestNeeded && (

{isChannel ? lang('MemberRequests.RequestToJoinDescriptionChannel') : lang('MemberRequests.RequestToJoinDescriptionGroup')}

)}
); }; const renderContactRequest = (contactRequest: ApiContact) => { const handleConfirm = () => { if (!currentMessageList) { return; } sendMessage({ contact: pick(contactRequest, ['firstName', 'lastName', 'phoneNumber']), messageList: currentMessageList, }); closeModal(); }; return ( {lang('AreYouSureShareMyContactInfoBot')}
); }; const renderError = (error: ApiError) => { return ( {error.hasErrorKey ? getReadableErrorText(error) : renderText(error.message!, ['simple_markdown', 'emoji', 'br'])}
); }; const renderDialog = (dialog: ApiError | ApiInviteInfo | ApiContact) => { if ('hash' in dialog) { return renderInvite(dialog); } if ('phoneNumber' in dialog) { return renderContactRequest(dialog); } return renderError(dialog); }; return Boolean(dialogs.length) && renderDialog(dialogs[dialogs.length - 1]); }; function getErrorHeader(error: ApiError) { if (error.isSlowMode) { return 'Slowmode enabled'; } if (!error.hasErrorKey) { return 'Telegram'; } return 'Something went wrong'; } export default memo(withGlobal( (global): StateProps => { return { dialogs: selectTabState(global).dialogs, currentMessageList: selectCurrentMessageList(global), }; }, )(Dialogs));