mattermost-mobile/app/components/sidebars/main/drawer_swiper/drawer_swiper.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

96 lines
2.6 KiB
JavaScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React, {Component} from 'react';
import PropTypes from 'prop-types';
import {changeOpacity} from 'app/utils/theme';
import Swiper from 'app/components/swiper';
export default class DrawerSwiper extends Component {
static propTypes = {
children: PropTypes.node.isRequired,
drawerWidth: PropTypes.number.isRequired,
onPageSelected: PropTypes.func,
showTeams: PropTypes.bool.isRequired,
theme: PropTypes.object.isRequired,
};
static defaultProps = {
onPageSelected: () => true,
openDrawerOffset: 0,
};
swiperRef = React.createRef();
shouldComponentUpdate(nextProps) {
const {drawerWidth, showTeams, theme} = this.props;
return nextProps.drawerWidth !== drawerWidth ||
nextProps.showTeams !== showTeams ||
nextProps.theme !== theme;
}
runOnLayout = (shouldRun = true) => {
if (this.swiperRef) {
this.swiperRef.runOnLayout = shouldRun;
}
};
resetPage = (animated = false) => {
if (this.swiperRef?.current) {
this.swiperRef.current.scrollToIndex(1, animated);
}
};
scrollToStart = () => {
if (this.swiperRef?.current) {
this.swiperRef.current.scrollToStart();
}
};
scrollToInitial = () => {
if (this.swiperRef?.current) {
this.swiperRef.current.scrollToInitial();
}
}
swiperPageSelected = (index) => {
this.props.onPageSelected(index);
};
showTeamsPage = () => {
if (this.swiperRef?.current) {
this.swiperRef.current.scrollToIndex(0, true);
}
};
render() {
const {
children,
drawerWidth,
showTeams,
theme,
} = this.props;
const initialPage = React.Children.count(children) - 1;
return (
<Swiper
ref={this.swiperRef}
initialPage={initialPage}
onIndexChanged={this.swiperPageSelected}
width={drawerWidth}
style={{backgroundColor: theme.sidebarBg}}
paginationBackgroundColor={changeOpacity(theme.sidebarText, 0.1)}
activeDotColor={theme.sidebarText}
dotColor={changeOpacity(theme.sidebarText, 0.3)}
scrollEnabled={showTeams}
showsPagination={showTeams}
keyboardShouldPersistTaps={'always'}
>
{children}
</Swiper>
);
}
}