diff --git a/components/app.js b/components/app.js index 53aa680..256c18f 100644 --- a/components/app.js +++ b/components/app.js @@ -10,7 +10,7 @@ import { getNavigation, navigate } from '../slices/navigation' import Header from './header' import Menu from './menu' -import { pagesList, isSymptomView, isSettingsView } from './pages' +import { viewsList, isSymptomView, isSettingsView, pages } from './pages' import { headerTitles } from '../i18n/en/labels' import setupNotifications from '../lib/notifications' @@ -46,20 +46,24 @@ class App extends Component { } handleBackButtonPress = () => { - const { current, prev } = this.props.navigation - if (current === 'Home') { + const { currentPage } = this.props.navigation + + if (currentPage === 'Home') { closeDb() return false } - this.props.navigate(prev) + + const page = pages.find(item => item.component === currentPage) + this.props.navigate(page.parent) + return true } render() { const { cycleDay } = this.state - const currentPage = this.props.navigation.current + const { currentPage } = this.props.navigation - const Page = pagesList[currentPage] + const Page = viewsList[currentPage] const title = headerTitles[currentPage] const isSymptomEditView = isSymptomView(currentPage) diff --git a/components/menu/index.js b/components/menu/index.js index 75dd335..969082e 100644 --- a/components/menu/index.js +++ b/components/menu/index.js @@ -7,20 +7,21 @@ import MenuItem from './menu-item' import { connect } from 'react-redux' import { getNavigation, navigate } from '../../slices/navigation' -import { menuItems } from './menu-config' +import { pages } from '../pages' import styles from '../../styles' -const Menu = ({ navigation, navigate }) => { +const Menu = ({ navigate, navigation }) => { + const menuItems = pages.filter(page => page.isInMenu) return ( - { menuItems.map(({ icon, labelKey, component, children }) => { - const isActive = (component === navigation.current) || - (children && children.indexOf(navigation.current) !== -1) + { menuItems.map(({ icon, label, component, children }) => { + const isActive = (component === navigation.currentPage) || + (children && children.indexOf(navigation.currentPage) !== -1) return ( navigate(component)} diff --git a/components/menu/menu-config.js b/components/menu/menu-config.js deleted file mode 100644 index e02dfd8..0000000 --- a/components/menu/menu-config.js +++ /dev/null @@ -1,30 +0,0 @@ -import settingsViews from '../settings' - -export const menuItems = [ - { - labelKey: 'Home', - icon: 'home', - component: 'Home', - }, - { - labelKey: 'Calendar', - icon: 'calendar-range', - component: 'Calendar', - }, - { - labelKey: 'Chart', - icon: 'chart-line', - component: 'Chart', - }, - { - labelKey: 'Stats', - icon: 'chart-pie', - component: 'Stats', - }, - { - labelKey: 'Settings', - icon: 'settings', - component: 'SettingsMenu', - children: Object.keys(settingsViews), - } -] \ No newline at end of file diff --git a/components/menu/menu-item.js b/components/menu/menu-item.js index 083dd23..cf59c0e 100644 --- a/components/menu/menu-item.js +++ b/components/menu/menu-item.js @@ -11,7 +11,7 @@ const menuTitlesLowerCase = Object.keys(menuTitles).reduce((acc, curr) => { return acc }, {}) -const MenuItem = ({ icon, labelKey, active, onPress }) => { +const MenuItem = ({ icon, label, active, onPress }) => { const styleActive = active ? { color: secondaryColor } : null return ( { > - {menuTitlesLowerCase[labelKey]} + {menuTitlesLowerCase[label]} ) diff --git a/components/pages.js b/components/pages.js index 533f77b..3558ea8 100644 --- a/components/pages.js +++ b/components/pages.js @@ -7,7 +7,10 @@ import SettingsMenu from './settings/settings-menu' import settingsViews from './settings' import Stats from './stats' -export const pagesList = { +import settingsLabels from '../i18n/en/settings' +const labels = settingsLabels.menuTitles + +export const viewsList = { Home, Calendar, CycleDay, @@ -22,4 +25,81 @@ export const isSymptomView = (page) => Object.keys(symptomViews).includes(page) export const isSettingsView = - (page) => Object.keys(settingsViews).includes(page) \ No newline at end of file + (page) => Object.keys(settingsViews).includes(page) + +const symptomsPages = Object.keys(symptomViews).map(symptomView => ({ + component: symptomView, parent: 'CycleDay', +})) + +export const pages = [ + { + component: 'Home', + icon: 'home', + isInMenu: true, + label: 'Home', + }, + { + component: 'Calendar', + icon: 'calendar-range', + isInMenu: true, + label: 'Calendar', + parent: 'Home', + }, + { + component: 'Chart', + icon: 'chart-line', + isInMenu: true, + label: 'Chart', + parent: 'Home', + }, + { + component: 'Stats', + icon: 'chart-pie', + isInMenu: true, + label: 'Stats', + parent: 'Home', + }, + { + children: Object.keys(settingsViews), + component: 'SettingsMenu', + icon: 'settings', + isInMenu: true, + label: 'Settings', + parent: 'Home', + }, + { + component: 'Reminders', + label: labels.reminders, + parent: 'SettingsMenu', + }, + { + component: 'NfpSettings', + label: labels.nfpSettings, + parent: 'SettingsMenu', + }, + { + component: 'DataManagement', + label: labels.dataManagement, + parent: 'SettingsMenu', + }, + { + component: 'Password', + label: labels.password, + parent: 'SettingsMenu', + }, + { + component: 'About', + label: labels.about, + parent: 'SettingsMenu', + }, + { + component: 'License', + label: labels.license, + parent: 'SettingsMenu', + }, + { + component: 'CycleDay', + parent: 'Home', + }, + ...symptomsPages +] \ No newline at end of file diff --git a/slices/navigation.js b/slices/navigation.js index 5de20f1..bd53dd3 100644 --- a/slices/navigation.js +++ b/slices/navigation.js @@ -3,14 +3,12 @@ import { createSlice } from 'redux-starter-kit' const navigationSlice = createSlice({ slice: 'navigation', initialState: { - current: 'Home', - prev: null, + currentPage: 'Home', }, reducers: { navigate: (state, action) => { return { - current: action.payload, - prev: state.current + currentPage: action.payload, } } }