From a75498143413fcec417992af7bf50c4f07b26d00 Mon Sep 17 00:00:00 2001 From: Julia Friesel <julia.friesel@gmail.com> Date: Sat, 18 Aug 2018 15:31:02 +0200 Subject: [PATCH] Start replacing navigator --- app.js | 50 ++++++++++++++++++++++++++---------------- components/calendar.js | 7 +++--- components/home.js | 1 - components/menu.js | 33 ++++++++++++++++++++++++++++ styles/index.js | 7 ++++++ 5 files changed, 75 insertions(+), 23 deletions(-) create mode 100644 components/menu.js diff --git a/app.js b/app.js index 0baccba9..58b22ae1 100644 --- a/app.js +++ b/app.js @@ -1,6 +1,8 @@ -import { createStackNavigator, createBottomTabNavigator } from 'react-navigation' +import React, { Component } from 'react' +import { View } from 'react-native' +import Header from './components/header' +import Menu from './components/menu' import Home from './components/home' - import Calendar from './components/calendar' import CycleDay from './components/cycle-day/cycle-day-overview' import SymptomView from './components/cycle-day/symptoms' @@ -8,30 +10,40 @@ import Chart from './components/chart/chart' import Settings from './components/settings' import Stats from './components/stats' -import styles, { primaryColor } from './styles' - // this is until react native fixes this bugg, see // https://github.com/facebook/react-native/issues/18868#issuecomment-382671739 import { YellowBox } from 'react-native' YellowBox.ignoreWarnings(['Warning: isMounted(...) is deprecated']) -const CycleDayStack = createStackNavigator({CycleDay, SymptomView}, {headerMode: 'none'}) +export default class App extends Component { + constructor(props) { + super(props) + this.state = { + currentPage: 'Home' + } + } -const routes = { - Home: createStackNavigator({Home, CycleDayStack}, {headerMode: 'none'}), - Calendar: createStackNavigator({Calendar, CycleDayStack}, {headerMode: 'none'}), - Chart: createStackNavigator({Chart, CycleDay}, {headerMode: 'none'}), - Settings: { screen: Settings }, - Stats: { screen: Stats} -} + navigate(pageName) { + this.setState({currentPage: pageName}) + } -const config = { - labeled: true, - shifting: false, - tabBarOptions: { - style: {backgroundColor: primaryColor }, - labelStyle: styles.menuLabel + render() { + return ( + <View> + <Header title={this.state.currentPage}/> + <CurrentPage page={this.state.currentPage} /> + <Menu navigate={this.navigate.bind(this)}/> + </View> + ) } } -export default createBottomTabNavigator(routes, config) \ No newline at end of file +class CurrentPage extends Component { + render () { + console.log('urrentpage render') + const page = { + Home, Calendar, CycleDay, SymptomView, Chart, Settings, Stats + }[this.props.page] + return React.createElement(page) + } +} \ No newline at end of file diff --git a/components/calendar.js b/components/calendar.js index dbff83c9..3159b0c1 100644 --- a/components/calendar.js +++ b/components/calendar.js @@ -1,7 +1,6 @@ import React, { Component } from 'react' import { View } from 'react-native' import { CalendarList } from 'react-native-calendars' -import Header from './header' import * as styles from '../styles' import { getOrCreateCycleDay, bleedingDaysSortedByDate } from '../db' @@ -11,9 +10,11 @@ export default class CalendarView extends Component { this.state = { bleedingDaysInCalFormat: toCalFormat(bleedingDaysSortedByDate) } + console.log(Object.keys(this.state.bleedingDaysInCalFormat)) this.setStateWithCalFormattedDays = (function (CalendarComponent) { - return function() { + return function(_, changes) { + if (Object.values(changes).every(x => x && !x.length)) return CalendarComponent.setState({ bleedingDaysInCalFormat: toCalFormat(bleedingDaysSortedByDate) }) @@ -34,9 +35,9 @@ export default class CalendarView extends Component { } render() { + console.log('cal render') return ( <View> - <Header title='Calendar' /> <View style={styles.container}> <CalendarList onDayPress={this.passDateToDayView.bind(this)} diff --git a/components/home.js b/components/home.js index 9c8d14ff..3ada0424 100644 --- a/components/home.js +++ b/components/home.js @@ -49,7 +49,6 @@ export default class Home extends Component { render() { return ( <ScrollView> - <Header title='Home'/> <Text style={styles.welcome}>{this.state.welcomeText}</Text> <View style={styles.homeButtons}> <View style={styles.homeButton}> diff --git a/components/menu.js b/components/menu.js new file mode 100644 index 00000000..ea95b1f2 --- /dev/null +++ b/components/menu.js @@ -0,0 +1,33 @@ +import React, { Component } from 'react' +import { + View, + Text +} from 'react-native' +import styles, { iconStyles } from '../styles' +import Icon from 'react-native-vector-icons/MaterialCommunityIcons' + +export default class Menu extends Component { + render() { + return ( + this.props.symptomView ? + placeActionButtons() + : + <View style={styles.menu}> + <Text + style={styles.dateHeader} + onPress={() => this.props.navigate('Calendar')} + > + {'Calendar'} + </Text> + <Text + style={styles.dateHeader} + onPress={() => this.props.navigate('Settings')} + > + {'Settings'} + </Text> + </View > + ) + } +} + +function placeActionButtons() {} \ No newline at end of file diff --git a/styles/index.js b/styles/index.js index f55ef4e7..a89d5ca3 100644 --- a/styles/index.js +++ b/styles/index.js @@ -82,6 +82,13 @@ export default StyleSheet.create({ alignItems: 'center', justifyContent: 'center' }, + menu: { + backgroundColor: primaryColor, + paddingVertical: 18, + paddingHorizontal: 15, + alignItems: 'center', + justifyContent: 'center' + }, headerCycleDay: { flexDirection: 'row', justifyContent: 'space-between' -- GitLab