[MM-24061] Bring back channel sidebar hamburger icon for tablets (#4244)

* MM-24061 Bring back channel sidebar hamburger icon for tablets

* Remove channel sidebar icon for iPads

iPads run with a "persistent" sidebar already.

* Better conditional logic from PR review + tests

* Test tidying from PR review
This commit is contained in:
Amit Uttam 2020-05-06 22:19:31 -03:00 committed by GitHub
parent 1a605891fe
commit 67fa7aeb53
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 86 additions and 7 deletions

View file

@ -70,6 +70,14 @@ export default class ChannelNavBar extends PureComponent {
}
};
drawerButtonVisible = () => {
if (Platform.OS === 'android') {
return true;
}
return (!DeviceTypes.IS_TABLET || this.state.isSplitView || !this.state.permanentSidebar);
};
render() {
const {isLandscape, onPress, theme} = this.props;
const {openMainSidebar, openSettingsSidebar} = this.props;
@ -99,16 +107,11 @@ export default class ChannelNavBar extends PureComponent {
break;
}
let drawerButtonVisible = false;
if (!DeviceTypes.IS_TABLET || this.state.isSplitView || !this.state.permanentSidebar) {
drawerButtonVisible = true;
}
return (
<View style={[style.header, padding(isLandscape), {height}]}>
<ChannelDrawerButton
openSidebar={openMainSidebar}
visible={drawerButtonVisible}
visible={this.drawerButtonVisible()}
/>
<ChannelTitle
onPress={onPress}

View file

@ -2,15 +2,19 @@
// See LICENSE.txt for license information.
import React from 'react';
import {Platform} from 'react-native';
import {shallow} from 'enzyme';
import Preferences from '@mm-redux/constants/preferences';
import {DeviceTypes} from 'app/constants';
import {DeviceTypes} from '@constants';
import ChannelNavBar from './channel_nav_bar';
jest.mock('react-intl');
jest.mock('app/mattermost_managed', () => ({
isRunningInSplitView: jest.fn().mockResolvedValue(false),
}));
describe('ChannelNavBar', () => {
const baseProps = {
@ -49,4 +53,76 @@ describe('ChannelNavBar', () => {
expect(wrapper.state('permanentSidebar')).toBeDefined();
});
test('drawerButtonVisible appears for android tablets', () => {
const wrapper = shallow(
<ChannelNavBar {...baseProps}/>,
);
DeviceTypes.IS_TABLET = true;
Platform.OS = 'android';
expect(wrapper.instance().drawerButtonVisible()).toBe(true);
});
test('drawerButtonVisible appears for android phones', () => {
const wrapper = shallow(
<ChannelNavBar {...baseProps}/>,
);
DeviceTypes.IS_TABLET = false;
Platform.OS = 'android';
expect(wrapper.instance().drawerButtonVisible()).toBe(true);
});
test('drawerButtonVisible appears for iOS phones', () => {
const wrapper = shallow(
<ChannelNavBar {...baseProps}/>,
);
DeviceTypes.IS_TABLET = false;
Platform.OS = 'ios';
expect(wrapper.instance().drawerButtonVisible()).toBe(true);
});
test('drawerButtonVisible appears for iOS tablets with PermanentSidebar at default false, and not in splitview', () => {
const wrapper = shallow(
<ChannelNavBar {...baseProps}/>,
);
wrapper.setState({permanentSidebar: false, isSplitView: false});
DeviceTypes.IS_TABLET = true;
Platform.OS = 'ios';
expect(wrapper.instance().drawerButtonVisible()).toBe(true);
});
test('drawerButtonVisible does not appear for iOS tablets with permanentSidebar enabled', () => {
const wrapper = shallow(
<ChannelNavBar {...baseProps}/>,
);
wrapper.setState({permanentSidebar: true});
DeviceTypes.IS_TABLET = true;
Platform.OS = 'ios';
expect(wrapper.instance().drawerButtonVisible()).toBe(false);
});
test('drawerButtonVisible appears for iOS tablets with splitview enabled', () => {
const wrapper = shallow(
<ChannelNavBar {...baseProps}/>,
);
wrapper.setState({isSplitView: true});
DeviceTypes.IS_TABLET = true;
Platform.OS = 'ios';
expect(wrapper.instance().drawerButtonVisible()).toBe(true);
});
});