import React, { FC, memo, useCallback, } from '../../../lib/teact/teact'; import { getActions, withGlobal } from '../../../global'; import { ApiChat, ApiCountryCode, ApiUser } from '../../../api/types'; import { SettingsScreens } from '../../../types'; import { CHAT_HEIGHT_PX } from '../../../config'; import { formatPhoneNumberWithCode } from '../../../util/phoneNumber'; import { getChatTitle, getUserFullName, isUserId, } from '../../../global/helpers'; import renderText from '../../common/helpers/renderText'; import buildClassName from '../../../util/buildClassName'; import useLang from '../../../hooks/useLang'; import useHistoryBack from '../../../hooks/useHistoryBack'; import useFlag from '../../../hooks/useFlag'; import ListItem from '../../ui/ListItem'; import FloatingActionButton from '../../ui/FloatingActionButton'; import Avatar from '../../common/Avatar'; import Loading from '../../ui/Loading'; import BlockUserModal from './BlockUserModal'; type OwnProps = { isActive?: boolean; onScreenSelect: (screen: SettingsScreens) => void; onReset: () => void; }; type StateProps = { chatsByIds: Record; usersByIds: Record; blockedIds: string[]; phoneCodeList: ApiCountryCode[]; }; const SettingsPrivacyBlockedUsers: FC = ({ isActive, onScreenSelect, onReset, chatsByIds, usersByIds, blockedIds, phoneCodeList, }) => { const { unblockContact } = getActions(); const lang = useLang(); const [isBlockUserModalOpen, openBlockUserModal, closeBlockUserModal] = useFlag(); const handleUnblockClick = useCallback((contactId: string) => { unblockContact({ contactId }); }, [unblockContact]); useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.PrivacyBlockedUsers); function renderContact(contactId: string, i: number, viewportOffset: number) { const isPrivate = isUserId(contactId); const user = isPrivate ? usersByIds[contactId] : undefined; const chat = !isPrivate ? chatsByIds[contactId] : undefined; const className = buildClassName( 'Chat chat-item-clickable blocked-list-item small-icon', isPrivate ? 'private' : 'group', ); return ( { handleUnblockClick(contactId); }, }]} style={`top: ${(viewportOffset + i) * CHAT_HEIGHT_PX}px;`} >

{renderText((isPrivate ? getUserFullName(user) : getChatTitle(lang, chat!)) || '')}

{user?.phoneNumber && (
{formatPhoneNumberWithCode(phoneCodeList, user.phoneNumber)}
)} {user && !user.phoneNumber && user.username && (
@{user.username}
)}
); } return (

{lang('BlockedUsersInfo')}

{blockedIds?.length ? (
{blockedIds!.map((contactId, i) => renderContact(contactId, i, 0))}
) : blockedIds && !blockedIds.length ? (
{lang('NoBlocked')}
) : ( )}
); }; export default memo(withGlobal( (global): StateProps => { const { chats: { byId: chatsByIds, }, users: { byId: usersByIds, }, blocked: { ids, }, countryList: { phoneCodes: phoneCodeList, }, } = global; return { chatsByIds, usersByIds, blockedIds: ids, phoneCodeList, }; }, )(SettingsPrivacyBlockedUsers));