Newer
Older
import { View, BackHandler } from 'react-native'
import { connect } from 'react-redux'
import { getDate } from '../slices/date'
import Header from './header'
import Menu from './menu'
import Home from './home'
import Calendar from './calendar'
import CycleDay from './cycle-day/cycle-day-overview'
import symptomViews from './cycle-day/symptoms'
import Chart from './chart/chart'
import {headerTitles, menuTitles} from '../i18n/en/labels'
import setupNotifications from '../lib/notifications'
const HOME_PAGE = 'Home'
const CYCLE_DAY_PAGE = 'CycleDay'
const SETTINGS_MENU_PAGE = 'SettingsMenu'
class App extends Component {
constructor(props) {
super(props)
this.state = {
currentPage: HOME_PAGE,
cycleDay: {},
this.backHandler = BackHandler.addEventListener('hardwareBackPress', this.handleBackButtonPress)
setupNotifications(this.navigate)
}
componentWillUnmount() {
this.backHandler.remove()
navigate = (pageName, cycleDay) => {
// for the back button to work properly, we want to
// remember two origins: which menu item we came from
// and from where we navigated to the symptom view (day
// view or home page)
if (this.isMenuItem()) {
this.menuOrigin = currentPage
this.originForSymptomView = currentPage
this.setState({ currentPage: pageName, cycleDay })
const { currentPage } = this.state
if (currentPage === HOME_PAGE) {
closeDb()
return false
}
this.navigate(this.originForSymptomView)
} else if (this.isSettingsView()) {
this.navigate(SETTINGS_MENU_PAGE)
} else if (currentPage === CYCLE_DAY_PAGE) {
this.navigate(this.menuOrigin)
isMenuItem() {
return Object.keys(menuTitles).includes(this.state.currentPage)
}
isSymptomView() {
return Object.keys(symptomViews).includes(this.state.currentPage)
}
isSettingsView() {
return Object.keys(settingsViews).includes(this.state.currentPage)
}
return this.isMenuItem(currentPage) || currentPage === SETTINGS_MENU_PAGE
const { currentPage, cycleDay } = this.state
const pages = {
Home,
Calendar,
CycleDay,
Chart,
SettingsMenu,
...settingsViews,
Stats,
...symptomViews
}
const Page = pages[currentPage]
const title = headerTitles[currentPage]
const hasDefaultHeader =
!this.isSymptomView() &&
currentPage !== CYCLE_DAY_PAGE
const isSettingsSubView = this.isSettingsView()
<View style={{ flex: 1 }}>
{ hasDefaultHeader &&
handleBack={isSettingsSubView ? this.handleBackButtonPress : null}
<Page
navigate={this.navigate}
cycleDay={cycleDay}
date={this.props.date}
handleBackButtonPress={this.handleBackButtonPress}
/>
<Menu navigate={this.navigate} currentPage={currentPage} />