Add navigation arrows
This commit is contained in:
@@ -17,37 +17,10 @@ import {
|
|||||||
cervixPosition as positionLabels,
|
cervixPosition as positionLabels,
|
||||||
intensity as intensityLabels
|
intensity as intensityLabels
|
||||||
} from './labels/labels'
|
} from './labels/labels'
|
||||||
import cycleDayModule from '../../lib/cycle'
|
|
||||||
import { bleedingDaysSortedByDate } from '../../db'
|
|
||||||
|
|
||||||
const getCycleDayNumber = cycleDayModule().getCycleDayNumber
|
|
||||||
|
|
||||||
export default class DayView extends Component {
|
export default class DayView extends Component {
|
||||||
constructor(props) {
|
|
||||||
super(props)
|
|
||||||
this.cycleDay = props.cycleDay
|
|
||||||
this.showView = props.showView
|
|
||||||
this.state = {
|
|
||||||
cycleDayNumber: getCycleDayNumber(this.cycleDay.date),
|
|
||||||
}
|
|
||||||
|
|
||||||
this.setStateWithCycleDayNumber = (function (DayViewComponent) {
|
|
||||||
return function () {
|
|
||||||
DayViewComponent.setState({
|
|
||||||
cycleDayNumber: getCycleDayNumber(DayViewComponent.cycleDay.date)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})(this)
|
|
||||||
|
|
||||||
bleedingDaysSortedByDate.addListener(this.setStateWithCycleDayNumber)
|
|
||||||
}
|
|
||||||
|
|
||||||
componentWillUnmount() {
|
|
||||||
bleedingDaysSortedByDate.removeListener(this.setStateWithCycleDayNumber)
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const cycleDay = this.cycleDay
|
const cycleDay = this.props.cycleDay
|
||||||
return (
|
return (
|
||||||
<View style={styles.symptomBoxesView}>
|
<View style={styles.symptomBoxesView}>
|
||||||
<SymptomBox
|
<SymptomBox
|
||||||
|
|||||||
@@ -4,66 +4,88 @@ import {
|
|||||||
Text,
|
Text,
|
||||||
ScrollView
|
ScrollView
|
||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
|
import Icon from 'react-native-vector-icons/MaterialCommunityIcons'
|
||||||
import cycleModule from '../../lib/cycle'
|
import cycleModule from '../../lib/cycle'
|
||||||
import { formatDateForViewHeader } from './labels/format'
|
import { formatDateForViewHeader } from './labels/format'
|
||||||
import styles from '../../styles'
|
import styles, { iconStyles } from '../../styles'
|
||||||
import actionButtonModule from './action-buttons'
|
import actionButtonModule from './action-buttons'
|
||||||
import symptomComponents from './symptoms'
|
import symptomComponents from './symptoms'
|
||||||
import DayView from './cycle-day-overview'
|
import DayView from './cycle-day-overview'
|
||||||
|
import { LocalDate } from 'js-joda'
|
||||||
|
import { getOrCreateCycleDay } from '../../db'
|
||||||
|
|
||||||
const getCycleDayNumber = cycleModule().getCycleDayNumber
|
const getCycleDayNumber = cycleModule().getCycleDayNumber
|
||||||
|
const symptomComponentNames = Object.keys(symptomComponents)
|
||||||
|
|
||||||
export default class Day extends Component {
|
export default class Day extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props)
|
super(props)
|
||||||
this.cycleDay = props.navigation.state.params.cycleDay
|
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
visibleComponent: 'DayView',
|
visibleComponent: 'DayView',
|
||||||
|
cycleDay: props.navigation.state.params.cycleDay
|
||||||
}
|
}
|
||||||
|
|
||||||
const showView = view => {
|
this.showView = view => {
|
||||||
this.setState({visibleComponent: view})
|
this.setState({visibleComponent: view})
|
||||||
}
|
}
|
||||||
|
this.makeActionButtons = actionButtonModule(this.showView)
|
||||||
|
}
|
||||||
|
|
||||||
const makeActionButtons = actionButtonModule(showView)
|
goToCycleDay(target) {
|
||||||
|
const localDate = LocalDate.parse(this.state.cycleDay.date)
|
||||||
|
const targetDate = target === 'before' ?
|
||||||
|
localDate.minusDays(1).toString() :
|
||||||
|
localDate.plusDays(1).toString()
|
||||||
|
this.setState({cycleDay: getOrCreateCycleDay(targetDate)})
|
||||||
|
}
|
||||||
|
|
||||||
const symptomComponentNames = Object.keys(symptomComponents)
|
render() {
|
||||||
this.cycleDayViews = symptomComponentNames.reduce((acc, curr) => {
|
const cycleDayNumber = getCycleDayNumber(this.state.cycleDay.date)
|
||||||
|
const cycleDayViews = symptomComponentNames.reduce((acc, curr) => {
|
||||||
acc[curr] = React.createElement(
|
acc[curr] = React.createElement(
|
||||||
symptomComponents[curr],
|
symptomComponents[curr],
|
||||||
{
|
{
|
||||||
cycleDay: this.cycleDay,
|
cycleDay: this.state.cycleDay,
|
||||||
makeActionButtons
|
makeActionButtons: this.makeActionButtons
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
return acc
|
return acc
|
||||||
}, {})
|
}, {})
|
||||||
|
|
||||||
// DayView needs showView instead of makeActionButtons
|
// DayView needs showView instead of makeActionButtons
|
||||||
this.cycleDayViews.DayView = React.createElement(DayView, {
|
cycleDayViews.DayView = React.createElement(DayView, {
|
||||||
cycleDay: this.cycleDay,
|
dateString: this.state.cycleDay.date,
|
||||||
showView
|
cycleDay: this.state.cycleDay,
|
||||||
|
showView: this.showView
|
||||||
})
|
})
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
const cycleDayNumber = getCycleDayNumber(this.cycleDay.date)
|
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={ styles.cycleDayDateView }>
|
<View style={ styles.cycleDayDateView }>
|
||||||
<Text style={styles.dateHeader}>
|
<Icon
|
||||||
{formatDateForViewHeader(this.cycleDay.date)}
|
name='arrow-left-drop-circle'
|
||||||
</Text>
|
{...iconStyles.navigationArrow}
|
||||||
{ cycleDayNumber &&
|
onPress={() => this.goToCycleDay('before')}
|
||||||
<Text style={styles.cycleDayNumber} >
|
/>
|
||||||
Cycle day {cycleDayNumber}
|
<View>
|
||||||
</Text> }
|
<Text style={styles.dateHeader}>
|
||||||
|
{formatDateForViewHeader(this.state.cycleDay.date)}
|
||||||
|
</Text>
|
||||||
|
{cycleDayNumber &&
|
||||||
|
<Text style={styles.cycleDayNumber} >
|
||||||
|
Cycle day {cycleDayNumber}
|
||||||
|
</Text>}
|
||||||
|
</View >
|
||||||
|
<Icon
|
||||||
|
name='arrow-right-drop-circle'
|
||||||
|
{...iconStyles.navigationArrow}
|
||||||
|
onPress={() => this.goToCycleDay('after')}
|
||||||
|
/>
|
||||||
</View >
|
</View >
|
||||||
<View>
|
<View>
|
||||||
{ this.cycleDayViews[this.state.visibleComponent] }
|
{ cycleDayViews[this.state.visibleComponent] }
|
||||||
</View >
|
</View >
|
||||||
</ScrollView >
|
</ScrollView >
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+20
-7
@@ -2,6 +2,7 @@ import { StyleSheet } from 'react-native'
|
|||||||
|
|
||||||
export const primaryColor = '#ff7e5f'
|
export const primaryColor = '#ff7e5f'
|
||||||
export const secondaryColor = '#351c4d'
|
export const secondaryColor = '#351c4d'
|
||||||
|
export const fontOnPrimaryColor = 'white'
|
||||||
|
|
||||||
export default StyleSheet.create({
|
export default StyleSheet.create({
|
||||||
container: {
|
container: {
|
||||||
@@ -17,12 +18,12 @@ export default StyleSheet.create({
|
|||||||
dateHeader: {
|
dateHeader: {
|
||||||
fontSize: 18,
|
fontSize: 18,
|
||||||
fontWeight: 'bold',
|
fontWeight: 'bold',
|
||||||
color: 'white',
|
color: fontOnPrimaryColor,
|
||||||
textAlign: 'center',
|
textAlign: 'center',
|
||||||
},
|
},
|
||||||
cycleDayNumber: {
|
cycleDayNumber: {
|
||||||
fontSize: 15,
|
fontSize: 15,
|
||||||
color: 'white',
|
color: fontOnPrimaryColor,
|
||||||
textAlign: 'center',
|
textAlign: 'center',
|
||||||
marginLeft: 15
|
marginLeft: 15
|
||||||
},
|
},
|
||||||
@@ -70,10 +71,15 @@ export default StyleSheet.create({
|
|||||||
},
|
},
|
||||||
cycleDayDateView: {
|
cycleDayDateView: {
|
||||||
backgroundColor: primaryColor,
|
backgroundColor: primaryColor,
|
||||||
padding: 10,
|
paddingVertical: 18,
|
||||||
|
paddingHorizontal: 15,
|
||||||
|
alignItems: 'center',
|
||||||
flexDirection: 'row',
|
flexDirection: 'row',
|
||||||
justifyContent: 'center',
|
justifyContent: 'space-between'
|
||||||
alignItems: 'center'
|
},
|
||||||
|
navigationArrow: {
|
||||||
|
fontSize: 60,
|
||||||
|
color: fontOnPrimaryColor
|
||||||
},
|
},
|
||||||
homeButtons: {
|
homeButtons: {
|
||||||
marginHorizontal: 15
|
marginHorizontal: 15
|
||||||
@@ -107,6 +113,13 @@ export default StyleSheet.create({
|
|||||||
},
|
},
|
||||||
menuLabel: {
|
menuLabel: {
|
||||||
fontSize: 15,
|
fontSize: 15,
|
||||||
color: 'white'
|
color: fontOnPrimaryColor
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
export const iconStyles = {
|
||||||
|
navigationArrow: {
|
||||||
|
size: 45,
|
||||||
|
color: fontOnPrimaryColor
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user