From f0caffacdd2cd7f96ebb80fc6cdc18f70b29c7f4 Mon Sep 17 00:00:00 2001 From: mashazyu <mariya.z@gmail.com> Date: Tue, 24 Mar 2020 13:21:35 +0100 Subject: [PATCH] Moves MenuItem component from Header to separate file, naming update --- components/header/index.js | 2 +- components/header/menu-item.js | 47 +++++++++++++++++++++++++ components/header/side-menu.js | 64 ++++++++-------------------------- 3 files changed, 62 insertions(+), 51 deletions(-) create mode 100644 components/header/menu-item.js diff --git a/components/header/index.js b/components/header/index.js index 7072d2f1..d810ed69 100644 --- a/components/header/index.js +++ b/components/header/index.js @@ -23,7 +23,7 @@ export default class Header extends Component { return ( <View style={styles.header}> <Logo /> - <SideMenu shouldShowMenu={shouldShowMenu} onPress={this.toggleMenu}/> + <SideMenu shouldShowMenu={shouldShowMenu} toggleMenu={this.toggleMenu}/> </View > ) } diff --git a/components/header/menu-item.js b/components/header/menu-item.js new file mode 100644 index 00000000..d8480596 --- /dev/null +++ b/components/header/menu-item.js @@ -0,0 +1,47 @@ +import React from 'react' +import { StyleSheet, TouchableOpacity } from 'react-native' +import PropTypes from 'prop-types' + +import AppText from '../common/app-text' + +import { connect } from 'react-redux' +import { navigate } from '../../slices/navigation' + +import { Typography } from '../../styles/redesign' + +const MenuItem = ({ item, navigate, closeMenu }) => { + const { component, name } = item + const onPress = () => { + closeMenu() + navigate(component) + } + + return( + <TouchableOpacity onPress={onPress}> + <AppText style={styles.text}>{name}</AppText> + </TouchableOpacity> + ) +} + +MenuItem.propTypes = { + item: PropTypes.object.isRequired, + navigate: PropTypes.func.isRequired, + closeMenu: PropTypes.func.isRequired +} + +const styles = StyleSheet.create({ + text: { + ...Typography.subtitle + } +}) + +const mapDispatchToProps = (dispatch) => { + return({ + navigate: (page) => dispatch(navigate(page)), + }) +} + +export default connect( + null, + mapDispatchToProps, +)(MenuItem) diff --git a/components/header/side-menu.js b/components/header/side-menu.js index 0b48e3ee..3591eeeb 100644 --- a/components/header/side-menu.js +++ b/components/header/side-menu.js @@ -3,52 +3,44 @@ import { Modal, StyleSheet, TouchableOpacity, View } from 'react-native' import PropTypes from 'prop-types' import AppIcon from '../common/app-icon' -import AppText from '../common/app-text' +import MenuItem from './menu-item' -import { connect } from 'react-redux' -import { navigate } from '../../slices/navigation' - -import { Sizes, Typography } from '../../styles/redesign' +import { Sizes } from '../../styles/redesign' import settingsLabels from '../../i18n/en/settings' const { menuItems } = settingsLabels const settingsMenuItems = [ - {name: menuItems.settings, component: 'SettingsMenu'}, - {name: menuItems.about, component: 'About'}, - {name: menuItems.license, component: 'License'}, + { name: menuItems.settings, component: 'SettingsMenu' }, + { name: menuItems.about, component: 'About' }, + { name: menuItems.license, component: 'License' }, ] -const SideMenu = ({ navigate, onPress, shouldShowMenu }) => { - const navigateMenuItem = (page) => { - onPress() - navigate(page) - } - +const SideMenu = ({ shouldShowMenu, toggleMenu }) => { return( <React.Fragment> {!shouldShowMenu && - <TouchableOpacity onPress={onPress}> + <TouchableOpacity onPress={toggleMenu}> <AppIcon name={'dots-three-vertical'} isCTA/> </TouchableOpacity> } {shouldShowMenu && <Modal animationType='fade' - onRequestClose={onPress} + onRequestClose={toggleMenu} transparent={true} visible={shouldShowMenu} > <View style={styles.blackBackground}></View> <View style={styles.menu}> - <TouchableOpacity onPress={onPress} style={styles.iconContainer}> - <AppIcon name={'cross'}/> + <TouchableOpacity onPress={toggleMenu} style={styles.iconContainer}> + <AppIcon name={'cross'} isCTA={false}/> </TouchableOpacity> {settingsMenuItems.map(item => <MenuItem item={item} key={item.name} - navigate={navigateMenuItem} + closeMenu={toggleMenu} /> )} </View> @@ -59,24 +51,8 @@ const SideMenu = ({ navigate, onPress, shouldShowMenu }) => { } SideMenu.propTypes = { - navigate: PropTypes.func.isRequired, - onPress: PropTypes.func, - shouldShowMenu: PropTypes.bool.isRequired -} - -const MenuItem = ({ item, navigate }) => { - return( - <View style={styles.menuItem}> - <TouchableOpacity onPress={() => navigate(item.component)}> - <AppText style={styles.text}>{item.name}</AppText> - </TouchableOpacity> - </View> - ) -} - -MenuItem.propTypes = { - item: PropTypes.object.isRequired, - navigate: PropTypes.func.isRequired, + shouldShowMenu: PropTypes.bool.isRequired, + toggleMenu: PropTypes.func } const styles = StyleSheet.create({ @@ -96,19 +72,7 @@ const styles = StyleSheet.create({ padding: Sizes.base, position: 'absolute', width: '60%' - }, - text: { - ...Typography.subtitle } }) -const mapDispatchToProps = (dispatch) => { - return({ - navigate: (page) => dispatch(navigate(page)), - }) -} - -export default connect( - null, - mapDispatchToProps, -)(SideMenu) +export default SideMenu -- GitLab