From 2a1c7fce7c5c14948a4c93a76089d951c81703ca Mon Sep 17 00:00:00 2001 From: Julia Friesel Date: Thu, 14 Jun 2018 11:11:23 +0200 Subject: [PATCH] Make bleeding view into a child component --- app.js | 9 ++------- bleeding.js | 24 +++++++----------------- calendar.js | 2 +- day-view.js | 25 +++++++++---------------- day.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 69 insertions(+), 41 deletions(-) create mode 100644 day.js diff --git a/app.js b/app.js index 3a310a0..423ab23 100644 --- a/app.js +++ b/app.js @@ -1,10 +1,8 @@ import { createStackNavigator } from 'react-navigation' import Home from './home' -import Temperature from './temperature' import Calendar from './calendar' -import DayView from './day-view' -import Bleeding from './bleeding' +import Day from './day' // this is until react native fixes this bug, see https://github.com/facebook/react-native/issues/18868#issuecomment-382671739 import { YellowBox } from 'react-native' @@ -12,9 +10,6 @@ YellowBox.ignoreWarnings(['Warning: isMounted(...) is deprecated']) export default createStackNavigator({ home: { screen: Home }, - - temperature: { screen: Temperature }, calendar: { screen: Calendar }, - dayView: { screen: DayView }, - bleeding: { screen: Bleeding } + day: { screen: Day } }) diff --git a/bleeding.js b/bleeding.js index 31dc8c6..7fb32ab 100644 --- a/bleeding.js +++ b/bleeding.js @@ -8,16 +8,13 @@ import { import RadioForm from 'react-native-simple-radio-button' import styles from './styles' import { saveBleeding } from './db' -import { formatDateForViewHeader } from './format' import { bleeding as labels } from './labels' -import cycleDayModule from './get-cycle-day-number' - -const getCycleDayNumber = cycleDayModule() export default class Bleeding extends Component { constructor(props) { super(props) - this.cycleDay = props.navigation.state.params.cycleDay + this.cycleDay = props.cycleDay + this.bringIntoView = props.bringIntoView let bleedingValue = this.cycleDay.bleeding && this.cycleDay.bleeding.value if (! (typeof bleedingValue === 'number') ){ bleedingValue = -1 @@ -28,10 +25,7 @@ export default class Bleeding extends Component { } } - // TODO display cycle day render() { - const navigate = this.props.navigation.navigate - const day = this.cycleDay const bleedingRadioProps = [ {label: labels[0], value: 0 }, {label: labels[1], value: 1 }, @@ -40,8 +34,6 @@ export default class Bleeding extends Component { ] return ( - {formatDateForViewHeader(day.date)} - Cycle day {getCycleDayNumber(day.date)} Bleeding diff --git a/day.js b/day.js new file mode 100644 index 0000000..875ba94 --- /dev/null +++ b/day.js @@ -0,0 +1,50 @@ +import React, { Component } from 'react' +import { + View, + Text +} from 'react-native' +import cycleDayModule from './get-cycle-day-number' +import { bleedingDaysSortedByDate } from './db' +import DayView from './day-view' +import BleedingEditView from './bleeding' +import TemperatureEditView from './temperature' +import { formatDateForViewHeader } from './format' +import styles from './styles' + +const getCycleDayNumber = cycleDayModule() + +export default class Day extends Component { + constructor(props) { + super(props) + this.cycleDay = props.navigation.state.params.cycleDay + this.cycleDayNumber = getCycleDayNumber(this.cycleDay.date) + + this.state = { + visibleComponent: 'dayView', + } + + this.bringIntoView = view => { + this.setState({visibleComponent: view}) + } + } + + componentWillUnmount() { + bleedingDaysSortedByDate.removeAllListeners() + } + + render() { + return ( + + {formatDateForViewHeader(this.cycleDay.date)} + Cycle day {getCycleDayNumber(this.cycleDay.date)} + { + { dayView: , + bleedingEditView: , + temperatureEditView: + }[this.state.visibleComponent] + } + + + ) + } +} \ No newline at end of file