From 4d6f0db30ad64a438739d7a3ea501e07d08c2a3e Mon Sep 17 00:00:00 2001
From: mashazyu <mariya.z@gmail.com>
Date: Tue, 24 Mar 2020 12:26:15 +0100
Subject: [PATCH] Moves Segment stiles to local file, separates MenuItem
 component.

---
 components/common/segment.js         |  9 ++--
 components/settings/menu-item.js     | 57 ++++++++++++++++++++
 components/settings/settings-menu.js | 77 +++-------------------------
 styles/containers.js                 |  9 ----
 4 files changed, 71 insertions(+), 81 deletions(-)
 create mode 100644 components/settings/menu-item.js

diff --git a/components/common/segment.js b/components/common/segment.js
index 5037c5b3..a0ad843d 100644
--- a/components/common/segment.js
+++ b/components/common/segment.js
@@ -4,7 +4,7 @@ import { StyleSheet, View } from 'react-native'
 
 import AppText from './app-text'
 
-import { Containers, Spacing, Typography } from '../../styles/redesign'
+import { Colors, Spacing, Typography } from '../../styles/redesign'
 
 const Segment = ({ children, last, title }) => {
   const containerStyle = last ? styles.containerLast : styles.container
@@ -30,8 +30,11 @@ const segmentContainer = {
 
 const styles = StyleSheet.create({
   container: {
-    ...segmentContainer,
-    ...Containers.bottomBorder
+    borderStyle: 'solid',
+    borderBottomWidth: 2,
+    borderBottomColor: Colors.grey,
+    paddingBottom: Spacing.base,
+    ...segmentContainer
   },
   containerLast: {
     ...segmentContainer
diff --git a/components/settings/menu-item.js b/components/settings/menu-item.js
new file mode 100644
index 00000000..b9336a19
--- /dev/null
+++ b/components/settings/menu-item.js
@@ -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)
\ No newline at end of file
diff --git a/components/settings/settings-menu.js b/components/settings/settings-menu.js
index 0305aade..4436c155 100644
--- a/components/settings/settings-menu.js
+++ b/components/settings/settings-menu.js
@@ -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)
\ No newline at end of file
+export default SettingsMenu
\ No newline at end of file
diff --git a/styles/containers.js b/styles/containers.js
index 37af3276..257c7b49 100644
--- a/styles/containers.js
+++ b/styles/containers.js
@@ -1,13 +1,4 @@
-import Colors from './colors'
-import Spacing from './spacing'
-
 export default {
-  bottomBorder: {
-    borderStyle: 'solid',
-    borderBottomWidth: 2,
-    borderBottomColor: Colors.grey,
-    paddingBottom: Spacing.base
-  },
   centerItems: {
     alignItems: 'center',
     flex: 1,
-- 
GitLab