Skip to content
Snippets Groups Projects
Commit 701f1bc5 authored by tina's avatar tina
Browse files

Merge branch '180-make-bleeding-prediction-into-red-circle-instead-of-grey' into 'master'

shows predicted bleeding with red circles, also sets up today formatting

Closes #180 and #179

See merge request bloodyhealth/drip!75
parents ae18e19f b01fdbb4
No related branches found
No related tags found
No related merge requests found
import React, { Component } from 'react'
import { CalendarList } from 'react-native-calendars'
import {LocalDate} from 'js-joda'
import { getOrCreateCycleDay, bleedingDaysSortedByDate } from '../db'
import cycleModule from '../lib/cycle'
import {shadesOfRed, shadesOfGrey} from '../styles/index'
import {shadesOfRed} from '../styles/index'
import styles from '../styles/index'
export default class CalendarView extends Component {
constructor(props) {
......@@ -10,7 +12,8 @@ export default class CalendarView extends Component {
const predictedMenses = cycleModule().getPredictedMenses()
this.state = {
bleedingDaysInCalFormat: toCalFormat(bleedingDaysSortedByDate),
predictedBleedingDaysInCalFormat: predictionToCalFormat(predictedMenses)
predictedBleedingDaysInCalFormat: predictionToCalFormat(predictedMenses),
todayInCalFormat: todayToCalFormat()
}
this.setStateWithCalFormattedDays = (function (CalendarComponent) {
......@@ -18,7 +21,8 @@ export default class CalendarView extends Component {
const predictedMenses = cycleModule().getPredictedMenses()
CalendarComponent.setState({
bleedingDaysInCalFormat: toCalFormat(bleedingDaysSortedByDate),
predictedBleedingDaysInCalFormat: predictionToCalFormat(predictedMenses)
predictedBleedingDaysInCalFormat: predictionToCalFormat(predictedMenses),
todayInCalFormat: todayToCalFormat()
})
}
})(this)
......@@ -35,7 +39,6 @@ export default class CalendarView extends Component {
const navigate = this.props.navigate
navigate('CycleDay', { cycleDay })
}
render() {
return (
<CalendarList
......@@ -43,22 +46,29 @@ export default class CalendarView extends Component {
markedDates={
Object.assign(
{},
this.state.todayInCalFormat,
this.state.bleedingDaysInCalFormat,
this.state.predictedBleedingDaysInCalFormat
)
}
markingType={'period'}
markingType={'custom'}
/>
)
}
}
function toCalFormat(bleedingDaysSortedByDate) {
const todayDateString = LocalDate.now().toString()
return bleedingDaysSortedByDate.reduce((acc, day) => {
acc[day.date] = {
startingDay: true,
endingDay: true,
color: shadesOfRed[day.bleeding.value]
customStyles: {
container: {
backgroundColor: shadesOfRed[day.bleeding.value],
}
}
}
if (day.date === todayDateString) {
acc[day.date].customStyles.text = styles.calendarToday
}
return acc
}, {})
......@@ -66,16 +76,41 @@ function toCalFormat(bleedingDaysSortedByDate) {
function predictionToCalFormat(predictedDays) {
if (!predictedDays.length) return {}
const todayDateString = LocalDate.now().toString()
const middleIndex = (predictedDays[0].length - 1) / 2
return predictedDays.reduce((acc, setOfDays) => {
setOfDays.reduce((accSet, day, i) => {
accSet[day] = {
startingDay: true,
endingDay: true,
color: (i === middleIndex) ? shadesOfGrey[1] : shadesOfGrey[0]
customStyles: {
container: {
borderColor: (i === middleIndex) ? shadesOfRed[3] : shadesOfRed[2],
borderWidth: 3,
},
text: {
marginTop: 1,
}
}
}
if (day === todayDateString) {
accSet[day].customStyles.text = Object.assign(
{},
styles.calendarToday,
{marginTop: -2}
)
}
return accSet
}, acc)
return acc
}, {})
}
function todayToCalFormat() {
const todayDateString = LocalDate.now().toString()
const todayFormated = {}
todayFormated[todayDateString] = {
customStyles: {
text: styles.calendarToday
}
}
return todayFormated
}
\ No newline at end of file
......@@ -2,9 +2,9 @@ import { StyleSheet } from 'react-native'
export const primaryColor = '#ff7e5f'
export const secondaryColor = '#351c4d'
export const secondaryColorLight = '#91749d'
export const fontOnPrimaryColor = 'white'
export const shadesOfRed = ['#ffcbbf', '#ffb19f', '#ff977e', '#ff7e5f'] // light to dark
export const shadesOfGrey = ['#e5e5e5', '#cccccc'] // [lighter, darker]
const defaultBottomMargin = 5
const defaultIndentation = 10
......@@ -243,6 +243,12 @@ export default StyleSheet.create({
},
page: {
marginHorizontal: 10
},
calendarToday: {
fontWeight: 'bold',
fontSize: 20,
color: secondaryColor,
marginTop: 1
}
})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment