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 getReadableErrorText from '../../util/getReadableErrorText'; import { pick } from '../../util/iteratees'; import renderText from '../common/helpers/renderText'; import useLang from '../../hooks/useLang'; import useFlag from '../../hooks/useFlag'; import Modal from '../ui/Modal'; import Button from '../ui/Button'; import Avatar from '../common/Avatar'; import './Dialogs.scss'; type StateProps = { dialogs: (ApiError | ApiInviteInfo)[]; }; const Dialogs: FC = ({ dialogs }) => { const { dismissDialog, acceptInviteConfirmation, sendMessage, showNotification, } = getActions(); const [isModalOpen, openModal, closeModal] = useFlag(); const lang = useLang(); 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, }); 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 = () => { sendMessage({ contact: pick(contactRequest, ['firstName', 'lastName', 'phoneNumber']), }); closeModal(); }; return ( {lang('AreYouSureShareMyContactInfoBot')}
); }; const renderError = (error: ApiError) => { return ( {error.hasErrorKey ? getReadableErrorText(error) : renderText(error.message!, ['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 => pick(global, ['dialogs']), )(Dialogs));