Moves MenuItem component from Header to separate file, naming update

This commit is contained in:
mashazyu
2020-03-24 13:21:35 +01:00
committed by Sofiya Tepikin
parent bf4446c742
commit f0caffacdd
3 changed files with 62 additions and 51 deletions
+1 -1
View File
@@ -23,7 +23,7 @@ export default class Header extends Component {
return ( return (
<View style={styles.header}> <View style={styles.header}>
<Logo /> <Logo />
<SideMenu shouldShowMenu={shouldShowMenu} onPress={this.toggleMenu}/> <SideMenu shouldShowMenu={shouldShowMenu} toggleMenu={this.toggleMenu}/>
</View > </View >
) )
} }
+47
View File
@@ -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)
+14 -50
View File
@@ -3,52 +3,44 @@ import { Modal, StyleSheet, TouchableOpacity, View } from 'react-native'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import AppIcon from '../common/app-icon' import AppIcon from '../common/app-icon'
import AppText from '../common/app-text' import MenuItem from './menu-item'
import { connect } from 'react-redux' import { Sizes } from '../../styles/redesign'
import { navigate } from '../../slices/navigation'
import { Sizes, Typography } from '../../styles/redesign'
import settingsLabels from '../../i18n/en/settings' import settingsLabels from '../../i18n/en/settings'
const { menuItems } = settingsLabels const { menuItems } = settingsLabels
const settingsMenuItems = [ const settingsMenuItems = [
{name: menuItems.settings, component: 'SettingsMenu'}, { name: menuItems.settings, component: 'SettingsMenu' },
{name: menuItems.about, component: 'About'}, { name: menuItems.about, component: 'About' },
{name: menuItems.license, component: 'License'}, { name: menuItems.license, component: 'License' },
] ]
const SideMenu = ({ navigate, onPress, shouldShowMenu }) => { const SideMenu = ({ shouldShowMenu, toggleMenu }) => {
const navigateMenuItem = (page) => {
onPress()
navigate(page)
}
return( return(
<React.Fragment> <React.Fragment>
{!shouldShowMenu && {!shouldShowMenu &&
<TouchableOpacity onPress={onPress}> <TouchableOpacity onPress={toggleMenu}>
<AppIcon name={'dots-three-vertical'} isCTA/> <AppIcon name={'dots-three-vertical'} isCTA/>
</TouchableOpacity> </TouchableOpacity>
} }
{shouldShowMenu && {shouldShowMenu &&
<Modal <Modal
animationType='fade' animationType='fade'
onRequestClose={onPress} onRequestClose={toggleMenu}
transparent={true} transparent={true}
visible={shouldShowMenu} visible={shouldShowMenu}
> >
<View style={styles.blackBackground}></View> <View style={styles.blackBackground}></View>
<View style={styles.menu}> <View style={styles.menu}>
<TouchableOpacity onPress={onPress} style={styles.iconContainer}> <TouchableOpacity onPress={toggleMenu} style={styles.iconContainer}>
<AppIcon name={'cross'}/> <AppIcon name={'cross'} isCTA={false}/>
</TouchableOpacity> </TouchableOpacity>
{settingsMenuItems.map(item => {settingsMenuItems.map(item =>
<MenuItem <MenuItem
item={item} item={item}
key={item.name} key={item.name}
navigate={navigateMenuItem} closeMenu={toggleMenu}
/> />
)} )}
</View> </View>
@@ -59,24 +51,8 @@ const SideMenu = ({ navigate, onPress, shouldShowMenu }) => {
} }
SideMenu.propTypes = { SideMenu.propTypes = {
navigate: PropTypes.func.isRequired, shouldShowMenu: PropTypes.bool.isRequired,
onPress: PropTypes.func, toggleMenu: 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,
} }
const styles = StyleSheet.create({ const styles = StyleSheet.create({
@@ -96,19 +72,7 @@ const styles = StyleSheet.create({
padding: Sizes.base, padding: Sizes.base,
position: 'absolute', position: 'absolute',
width: '60%' width: '60%'
},
text: {
...Typography.subtitle
} }
}) })
const mapDispatchToProps = (dispatch) => { export default SideMenu
return({
navigate: (page) => dispatch(navigate(page)),
})
}
export default connect(
null,
mapDispatchToProps,
)(SideMenu)