Moves Segment stiles to local file, separates MenuItem component.

This commit is contained in:
mashazyu
2020-03-24 12:26:15 +01:00
committed by Sofiya Tepikin
parent ce92b0af33
commit 4d6f0db30a
4 changed files with 71 additions and 81 deletions
+57
View File
@@ -0,0 +1,57 @@
import React from 'react'
import PropTypes from 'prop-types'
import { StyleSheet, TouchableOpacity, View } from 'react-native'
import AppIcon from '../common/app-icon'
import AppText from '../common/app-text'
import Segment from '../common/segment'
import { connect } from 'react-redux'
import { navigate } from '../../slices/navigation'
import { Colors, Containers, Sizes } from '../../styles/redesign'
const MenuItem = ({ item, last, navigate }) => {
return (
<Segment last={last}>
<TouchableOpacity
style={styles.container}
key={item.name}
onPress={() => navigate(item.component)}
>
<View>
<AppText style={styles.title}>{item.name}</AppText>
{item.text.length > 0 && <AppText>{item.text}</AppText>}
</View>
<AppIcon name={'chevron-right'} isCTA/>
</TouchableOpacity>
</Segment>
)
}
MenuItem.propTypes = {
item: PropTypes.object.isRequired,
last: PropTypes.bool.isRequired,
navigate: PropTypes.func.isRequired
}
const styles = StyleSheet.create({
container: {
...Containers.rowContainer
},
title: {
color: Colors.purple,
fontSize: Sizes.subtitle
}
})
const mapDispatchToProps = (dispatch) => {
return({
navigate: (page) => dispatch(navigate(page)),
})
}
export default connect(
null,
mapDispatchToProps
)(MenuItem)
+8 -69
View File
@@ -1,15 +1,8 @@
import React from 'react'
import PropTypes from 'prop-types'
import { StyleSheet, TouchableOpacity, View } from 'react-native'
import AppIcon from '../common/app-icon'
import AppPage from '../common/app-page'
import AppText from '../common/app-text'
import MenuItem from './menu-item'
import { connect } from 'react-redux'
import { navigate } from '../../slices/navigation'
import { Colors, Containers, Sizes, Spacing } from '../../styles/redesign'
import settingsLabels from '../../i18n/en/settings'
const { menuItems } = settingsLabels
@@ -20,71 +13,17 @@ const menu = [
{ ...menuItems.password, component: 'Password'}
]
const SettingsMenu = ({ navigate }) => {
const SettingsMenu = () => {
return (
<AppPage title={settingsLabels.title}>
{menu.map((menuItem, i) =>
<MenuItem item={menuItem} i={i} navigate={navigate} key={i}/>
{menu.map((menuItem, i) => {
const last = (menu.length === i + 1)
return <MenuItem item={menuItem} key={i} last={last}/>
}
)}
</AppPage>
)
}
SettingsMenu.propTypes = {
navigate: PropTypes.func.isRequired
}
const MenuItem = ({ i, item, navigate }) => {
const isLast = (menu.length === i + 1)
const containerStyle = isLast ? styles.containerLast : styles.container
return (
<TouchableOpacity
style={containerStyle}
key={item.name}
onPress={() => navigate(item.component)}
>
<View>
<AppText style={styles.title}>{item.name}</AppText>
{item.text.length > 0 && <AppText>{item.text}</AppText>}
</View>
<AppIcon name={'chevron-right'} isCTA/>
</TouchableOpacity>
)
}
MenuItem.propTypes = {
i: PropTypes.number.isRequired,
item: PropTypes.object.isRequired,
navigate: PropTypes.func.isRequired
}
const menuItemContainer = {
margin: Spacing.base,
...Containers.rowContainer
}
const styles = StyleSheet.create({
container: {
...menuItemContainer,
...Containers.bottomBorder
},
containerLast: {
...menuItemContainer
},
title: {
color: Colors.purple,
fontSize: Sizes.subtitle
},
})
const mapDispatchToProps = (dispatch) => {
return({
navigate: (page) => dispatch(navigate(page)),
})
}
export default connect(
null,
mapDispatchToProps
)(SettingsMenu)
export default SettingsMenu