import React, { FC, memo, useEffect } from '../../../lib/teact/teact'; import { getDispatch, withGlobal } from '../../../lib/teact/teactn'; import { PrivacyVisibility, SettingsScreens } from '../../../types'; import useLang from '../../../hooks/useLang'; import useHistoryBack from '../../../hooks/useHistoryBack'; import ListItem from '../../ui/ListItem'; import Checkbox from '../../ui/Checkbox'; type OwnProps = { isActive?: boolean; onScreenSelect: (screen: SettingsScreens) => void; onReset: () => void; }; type StateProps = { hasPassword?: boolean; blockedCount: number; sessionsCount: number; isSensitiveEnabled?: boolean; canChangeSensitive?: boolean; visibilityPrivacyPhoneNumber?: PrivacyVisibility; visibilityPrivacyLastSeen?: PrivacyVisibility; visibilityPrivacyProfilePhoto?: PrivacyVisibility; visibilityPrivacyForwarding?: PrivacyVisibility; visibilityPrivacyGroupChats?: PrivacyVisibility; }; const SettingsPrivacy: FC = ({ isActive, onScreenSelect, onReset, hasPassword, blockedCount, sessionsCount, isSensitiveEnabled, canChangeSensitive, visibilityPrivacyPhoneNumber, visibilityPrivacyLastSeen, visibilityPrivacyProfilePhoto, visibilityPrivacyForwarding, visibilityPrivacyGroupChats, }) => { const { loadPrivacySettings, loadBlockedContacts, loadAuthorizations, loadContentSettings, updateContentSettings, } = getDispatch(); useEffect(() => { loadBlockedContacts(); loadAuthorizations(); loadPrivacySettings(); loadContentSettings(); }, [loadBlockedContacts, loadAuthorizations, loadPrivacySettings, loadContentSettings]); const lang = useLang(); useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Privacy); function getVisibilityValue(visibility?: PrivacyVisibility) { switch (visibility) { case 'everybody': return lang('P2PEverybody'); case 'contacts': return lang('P2PContacts'); case 'nobody': return lang('P2PNobody'); } return undefined; } return (
onScreenSelect(SettingsScreens.PrivacyBlockedUsers)} >
{lang('BlockedUsers')} {blockedCount > 0 && ( {lang('Users', blockedCount)} )}
onScreenSelect( hasPassword ? SettingsScreens.TwoFaEnabled : SettingsScreens.TwoFaDisabled, )} >
{lang('TwoStepVerification')} {lang(hasPassword ? 'PasswordOn' : 'PasswordOff')}
onScreenSelect(SettingsScreens.PrivacyActiveSessions)} >
{lang('SessionsTitle')} {sessionsCount > 0 && ( {sessionsCount === 1 ? '1 session' : `${sessionsCount} sessions`} )}

{lang('PrivacyTitle')}

onScreenSelect(SettingsScreens.PrivacyPhoneNumber)} >
{lang('PrivacyPhoneTitle')} {getVisibilityValue(visibilityPrivacyPhoneNumber)}
onScreenSelect(SettingsScreens.PrivacyLastSeen)} >
{lang('LastSeenTitle')} {getVisibilityValue(visibilityPrivacyLastSeen)}
onScreenSelect(SettingsScreens.PrivacyProfilePhoto)} >
{lang('PrivacyProfilePhotoTitle')} {getVisibilityValue(visibilityPrivacyProfilePhoto)}
onScreenSelect(SettingsScreens.PrivacyForwarding)} >
{lang('PrivacyForwardsTitle')} {getVisibilityValue(visibilityPrivacyForwarding)}
onScreenSelect(SettingsScreens.PrivacyGroupChats)} >
{lang('WhoCanAddMe')} {getVisibilityValue(visibilityPrivacyGroupChats)}
{canChangeSensitive && (

{lang('lng_settings_sensitive_title')}

)}
); }; export default memo(withGlobal( (global): StateProps => { const { settings: { byKey: { hasPassword, isSensitiveEnabled, canChangeSensitive }, privacy, }, blocked, activeSessions, } = global; return { hasPassword, blockedCount: blocked.totalCount, sessionsCount: activeSessions.length, isSensitiveEnabled, canChangeSensitive, visibilityPrivacyPhoneNumber: privacy.phoneNumber?.visibility, visibilityPrivacyLastSeen: privacy.lastSeen?.visibility, visibilityPrivacyProfilePhoto: privacy.profilePhoto?.visibility, visibilityPrivacyForwarding: privacy.forwards?.visibility, visibilityPrivacyGroupChats: privacy.chatInvite?.visibility, }; }, )(SettingsPrivacy));