mattermost-mobile/app/components/sidebars/main/main_sidebar.android.js
Elias Nahum 334a07aabe
Performance improvements (#3911)
* Improve sidebar performance on first load

* Initial work for switch channel

* Revert android changes

* Split Sidebar per Platform

* Fix waitForHydration executing the callback more than once

* Fix custom emoji not showing on Android

* Finalize Channel Switch

* Enable Android Ram Bundles

* Select the right team for lastChannelForTeam

* Channel loading post indicator

* Fix main sidebar base intl provider

* Update mm-redux

* No need to request configAndLicense on launch

* Load channel member roles

* Rename closeChannelDrawer to closeMainSidebar

* do not throw errors when console is called while running tests

* constant for LOADING_POSTS_HEIGHT

* Remove show more if a long post is edited and no longer long

* Update mm-redux#batch-actions branch

* Code review

* Clear notifications if channel was switched

* Import Platform

Co-authored-by: Miguel Alatzar <migbot@users.noreply.github.com>
2020-02-17 21:18:09 -07:00

93 lines
2.5 KiB
JavaScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React from 'react';
import {Dimensions, Keyboard} from 'react-native';
import {IntlProvider} from 'react-intl';
import EventEmitter from 'mattermost-redux/utils/event_emitter';
import {closeMainSideMenu, enableMainSideMenu} from 'app/actions/navigation';
import {NavigationTypes} from 'app/constants';
import {getTranslations} from 'app/i18n';
import MainSidebarBase from './main_sidebar_base';
export default class MainSidebarAndroid extends MainSidebarBase {
constructor(props) {
super(props);
this.state = {
deviceWidth: Dimensions.get('window').width,
opened: false,
searching: false,
};
}
componentDidMount() {
super.componentDidMount();
EventEmitter.on(NavigationTypes.MAIN_SIDEBAR_DID_CLOSE, this.handleSidebarDidClose);
EventEmitter.on(NavigationTypes.MAIN_SIDEBAR_DID_OPEN, this.handleSidebarDidOpen);
}
componentWillUnmount() {
super.componentWillUnmount();
EventEmitter.off(NavigationTypes.MAIN_SIDEBAR_DID_CLOSE, this.handleSidebarDidClose);
EventEmitter.off(NavigationTypes.MAIN_SIDEBAR_DID_OPEN, this.handleSidebarDidOpen);
}
closeMainSidebar = () => {
closeMainSideMenu();
};
handleDimensions = ({window}) => {
if (this.mounted) {
this.setState({deviceWidth: window.width});
}
};
handleSidebarDidClose = () => {
this.setState({searching: false, opened: false}, () => {
enableMainSideMenu(true, false);
this.resetDrawer(true);
Keyboard.dismiss();
});
};
handleSidebarDidOpen = () => {
this.setState({opened: true});
}
onPageSelected = (index) => {
this.swiperIndex = index;
if (this.state.opened) {
enableMainSideMenu(index !== 0, true);
}
};
setProviderRef = (ref) => {
this.providerRef = ref;
}
render() {
const locale = this.props.locale;
if (!locale) {
return null;
}
return (
<IntlProvider
key={locale}
locale={locale}
ref={this.setProviderRef}
messages={getTranslations(locale)}
>
{this.renderNavigationView(this.state.deviceWidth)}
</IntlProvider>
);
}
}