import React, { Suspense } from 'react'; import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; import ErrorPanel from '../widgets/error-panel.jsx'; import LoadSpinner from '../widgets/load-spinner.jsx'; import SideNavbar from '../widgets/side-navbar.jsx'; import TopicCommonView from './topic-common-view.jsx'; import AuthOnboardingView from './auth-onboarding-view.jsx'; import MessageCenterView from './message-center-view.jsx'; import DirectMessageView from './direct-message-view.jsx'; import MessageComposerView, {MESSAGE_COMPOSER_VIEWS} from './message-composer-view.jsx'; import ContactManagementView, {CONTACT_MANAGEMENT_VIEWS} from './contact-management-view.jsx'; import GroupManagementView, {GROUP_MANAGEMENT_VIEWS} from './group-management-view.jsx'; import ContentLibraryView, {CONTENT_LIBRARY_VIEWS} from './content-library-view.jsx'; import CallExperienceView, {CALL_EXPERIENCE_VIEWS} from './call-experience-view.jsx'; import WorkplaceCollaborationView, {WORKPLACE_COLLABORATION_VIEWS} from './workplace-collaboration-view.jsx'; import PersonalSettingsView, {PERSONAL_SETTINGS_VIEWS} from './personal-settings-view.jsx'; import SecuritySupportView, {SECURITY_SUPPORT_VIEWS} from './security-support-view.jsx'; const AccountSettingsView = React.lazy(_ => import('./account-settings-view.jsx')); import ContactsView from './contacts-view.jsx'; import AccGeneralView from './acc-general-view.jsx'; import AccNotificationsView from './acc-notifications-view.jsx'; const AccSecurityView = React.lazy(_ => import('./acc-security-view.jsx')); import AccSupportView from './acc-support-view.jsx'; import NewTopicView from './new-topic-view.jsx'; import SettingsView from './settings-view.jsx'; import ValidationView from './validation-view.jsx'; const WallpapersView = React.lazy(_ => import('./wallpapers.jsx')); // Panel titles for translation. const messages = defineMessages({ login: { id: 'sidepanel_title_login', description: 'Sidepanel title for LoginView.', defaultMessage: 'Sign In' }, register: { id: 'sidepanel_title_register', description: 'Sidepanel title for CreateAccountView.', defaultMessage: 'Create Account' }, settings: { id: 'sidepanel_title_settings', description: 'Sidepanel title for SettingsView.', defaultMessage: 'Settings' }, edit: { id: 'sidepanel_title_account_settings', description: 'Sidepanel title for AccountSettingsView.', defaultMessage: 'Account Settings' }, general: { id: 'panel_title_general', description: 'Title for TopicCommon.', defaultMessage: 'General' }, security: { id: 'panel_title_security', description: 'Title for TopicSecirity and AccSecurity.', defaultMessage: 'Security' }, crop: { id: 'panel_title_crop', description: 'Title for AvatarCropView.', defaultMessage: 'Drag to Adjust' }, notif: { id: 'sidepanel_title_acc_notifications', description: 'Sidepanel title for AccNotificationsView.', defaultMessage: 'Notifications' }, acc_general: { id: 'sidepanel_title_acc_general', description: 'Sidepanel title for AccGeneralView.', defaultMessage: 'General' }, support: { id: 'sidepanel_title_acc_support', description: 'Sidepanel title for AccSupportView.', defaultMessage: 'Support' }, newtpk: { id: 'sidepanel_title_newtpk', description: 'Sidepanel title for NewTopicView.', defaultMessage: 'Start New Chat' }, cred: { id: 'sidepanel_title_cred', description: 'Sidepanel title for ValidationView.', defaultMessage: 'Confirm Credentials' }, reset: { id: 'sidepanel_title_reset', description: 'Sidepanel title for PasswordResetView.', defaultMessage: 'Reset Password' }, archive: { id: 'sidepanel_title_archive', description: 'Sidepanel title for ContactsView-Archive.', defaultMessage: 'Archived Chats' }, blocked: { id: 'sidepanel_title_blocked', description: 'Sidepanel title for ContactsView-Blocked.', defaultMessage: 'Blocked Chats' }, wallpapers: { id: 'wallpapers', description: 'Link or title for working with wallpapers.', defaultMessage: 'Wallpapers' } }); class SidepanelView extends React.PureComponent { constructor(props) { super(props); this.handleNewTopic = this.handleNewTopic.bind(this); } handleNewTopic() { this.props.onNavigate('newtpk'); } render() { const {formatMessage} = this.props.intl; const view = this.props.state || (this.props.myUserId ? 'messages-home' : 'tenant'); const chapterOneViews = ['tenant', 'login', 'enterprise-register', 'enterprise-feedback', 'register', 'reset', 'identity-check', 'realname', 'realname-verified', 'realname-reminder', 'independent-password']; if (chapterOneViews.includes(view)) { return
; } const chapterTwoViews = ['messages-home', 'messages-offline', 'messages-menu', 'message-actions', 'system-messages']; if (chapterTwoViews.includes(view)) { const fullPage = !this.props.myUserId || view !== 'messages-home'; return
{/* This branch never rendered ErrorPanel at all -- on desktop (non-mobile), opening a real conversation lands here (view stays 'messages-home' behind the split-view topic pane), and messages-view.jsx's own ErrorPanel is only rendered on displayMobile. Every this.props.onError(...) call reachable from an open conversation on desktop (failed uploads, failed forwards, URL risk blocks, etc.) had no visible outlet at all. */}
; } const chapterThreeViews = ['chat-inbound-request', 'chat-inbound-message', 'chat-outbound-request', 'chat-status', 'chat-friend', 'chat-media', 'chat-blocked', 'chat-deleted', 'chat-standard', 'chat-attachments', 'chat-mixed', 'chat-contact-card']; if (chapterThreeViews.includes(view)) { return
; } if (MESSAGE_COMPOSER_VIEWS.includes(view)) { return
; } if (CONTACT_MANAGEMENT_VIEWS.includes(view)) { return
; } if (GROUP_MANAGEMENT_VIEWS.includes(view)) { return
; } if (CONTENT_LIBRARY_VIEWS.includes(view)) { return
; } if (CALL_EXPERIENCE_VIEWS.includes(view)) { return
; } if (WORKPLACE_COLLABORATION_VIEWS.includes(view)) { return
; } if (PERSONAL_SETTINGS_VIEWS.includes(view)) { return
; } if (SECURITY_SUPPORT_VIEWS.includes(view)) { return
; } let title, avatar, badges; if (view == 'contacts') { title = this.props.title; avatar = this.props.avatar ? this.props.avatar : true; badges = this.props.trustedBadges; } else { title = formatMessage(messages[view]); avatar = false; badges = null; } let onCancel; if (['login', 'contacts'].indexOf(view) == -1) { onCancel = this.props.onCancel; } return (
{view === 'settings' ? : view === 'edit' ?
}> : (view === 'general' || view === 'crop') ? : view === 'acc_general' ? : view === 'notif' ? : view === 'security' ? }> : view === 'support' ? : view === 'wallpapers' ? }> : (view === 'contacts' || view == 'archive' || view == 'blocked') ? : view === 'newtpk' ? : view === 'cred' ? : null} ); } }; export default injectIntl(SidepanelView);