diff --git a/components/chart/chart.js b/components/chart/chart.js index 201f0f8..ccffbba 100644 --- a/components/chart/chart.js +++ b/components/chart/chart.js @@ -10,6 +10,7 @@ import styles from './styles' import { scaleObservable } from '../../local-storage' import config from '../../config' import { AppText } from '../app-text' +import { shared as labels } from '../labels' export default class CycleChart extends Component { constructor(props) { @@ -111,7 +112,7 @@ export default class CycleChart extends Component { (cycleDay.cervix.opening + cycleDay.cervix.firmness) } else if (symptom === 'sex') { // solo = 1 + partner = 2 - acc.sex = cycleDay.sex && (cycleDay.sex.solo + cycleDay.sex.partner) + acc.sex = cycleDay.sex && (cycleDay.sex.solo + 2 * cycleDay.sex.partner) } else if (symptom === 'pain') { // is any pain documented? acc.pain = cycleDay.pain && @@ -144,20 +145,33 @@ export default class CycleChart extends Component { > {!this.state.chartLoaded && - Loading... + {labels.loading} } {this.state.chartHeight && this.state.chartLoaded && - - {makeYAxisLabels(this.columnHeight)} + + + {this.symptomRowSymptoms.map(symptomName => { + return + {symptomName[0]} + + })} + + + {makeYAxisLabels(this.columnHeight)} + + + + {labels.cycleDayWithLinebreak} + + + {labels.date} + + } + {this.state.chartHeight && this.state.chartLoaded && makeHorizontalGrid(this.columnHeight, this.symptomRowHeight) } diff --git a/components/chart/day-column.js b/components/chart/day-column.js index f2ed95b..ec3dd95 100644 --- a/components/chart/day-column.js +++ b/components/chart/day-column.js @@ -3,7 +3,8 @@ import { Text, View, TouchableOpacity } from 'react-native' import Svg,{ G, Rect, Line } from 'react-native-svg' -import Icon from 'react-native-vector-icons/Entypo' +import { LocalDate } from 'js-joda' +import moment from 'moment' import styles from './styles' import config from '../../config' import { getOrCreateCycleDay } from '../../db' @@ -88,13 +89,18 @@ export default class DayColumn extends Component { } const cycleDayNumber = this.getCycleDayNumber(dateString) - const shortDate = dateString.split('-').slice(1).join('-') + const dayDate = LocalDate.parse(dateString) + const shortDate = dayDate.dayOfMonth() === 1 ? + moment(dateString, "YYYY-MM-DD").format('MMM') + : + moment(dateString, "YYYY-MM-DD").format('Do') + const boldDateLabel = dayDate.dayOfMonth() === 1 ? {fontWeight: 'bold'} : {} const cycleDayLabel = ( {cycleDayNumber ? cycleDayNumber : ' '} ) const dateLabel = ( - + {shortDate} ) @@ -116,10 +122,9 @@ export default class DayColumn extends Component { symptomHeight={symptomHeight} key='bleeding' > - ), @@ -130,8 +135,8 @@ export default class DayColumn extends Component { key='mucus' > ), @@ -142,9 +147,9 @@ export default class DayColumn extends Component { key='cervix' > 0 ? 'blue' : 'green'} + backgroundColor={this.props.cervix > 0 ? styles.iconShades.cervix[2] : styles.iconShades.cervix[0]} /> ), @@ -155,8 +160,8 @@ export default class DayColumn extends Component { key='sex' > ), @@ -167,8 +172,8 @@ export default class DayColumn extends Component { key='desire' > ), @@ -179,8 +184,8 @@ export default class DayColumn extends Component { key='pain' > ), @@ -191,8 +196,8 @@ export default class DayColumn extends Component { key='note' > ) diff --git a/components/chart/styles.js b/components/chart/styles.js index 8441f9b..8cc044f 100644 --- a/components/chart/styles.js +++ b/components/chart/styles.js @@ -8,6 +8,7 @@ const lineWidth = 1.5 const colorLtl = '#feb47b' const gridColor = 'lightgrey' const gridLineWidth = 0.5 +const numberLabelFontSize = 13 const styles = { curve: { @@ -32,10 +33,11 @@ const styles = { color: 'grey', fontSize: 9, fontWeight: '100', + textAlign: 'center', }, number: { color: primaryColor, - fontSize: 13, + fontSize: numberLabelFontSize, textAlign: 'center', } }, @@ -48,37 +50,62 @@ const styles = { fill: 'transparent' } }, - bleedingIcon: { - fill: '#fb2e01', - scale: 0.6, - x: 6, - y: 3 - }, - bleedingIconShades: shadesOfRed, - mucusIcon: { + symptomIcon: { width: 12, height: 12, borderRadius: 50, }, - mucusIconShades: [ - '#fef0e4', - '#fee1ca', - '#fed2af', - '#fec395', - '#feb47b' - ], + iconShades: { + 'bleeding': shadesOfRed, + 'mucus': [ + '#e3e7ed', + '#c8cfdc', + '#acb8cb', + '#91a0ba', + '#7689a9' + ], + 'cervix': [ + '#f0e19d', + '#e9d26d', + '#e2c33c', + '#dbb40c', + ], + 'sex': [ + '#a87ca2', + '#8b5083', + '#6f2565', + ], + 'desire': [ + '#c485a6', + '#b15c89', + '#9e346c', + ], + 'pain': ['#bccd67'], + 'note': ['#6CA299'] + }, yAxis: { width: 27, - borderRightWidth: 0.5, + borderRightWidth: 1, borderColor: 'lightgrey', borderStyle: 'solid' }, - yAxisLabel: { - position: 'absolute', - left: 3, - color: 'grey', - fontSize: 11, - textAlign: 'left' + yAxisLabels: { + tempScale: { + position: 'absolute', + right: 2, + color: 'grey', + fontSize: 9, + textAlign: 'left' + }, + cycleDayLabel: { + textAlign: 'center', + justifyContent: 'center', + fontSize: Math.ceil(numberLabelFontSize / 2) + }, + dateLabel: { + textAlign: 'center', + justifyContent: 'center' + } }, horizontalGrid: { position:'absolute', diff --git a/components/chart/y-axis.js b/components/chart/y-axis.js index 12fa08c..e1e0d6f 100644 --- a/components/chart/y-axis.js +++ b/components/chart/y-axis.js @@ -8,7 +8,7 @@ import { AppText } from '../app-text' export function makeYAxisLabels(columnHeight) { const units = unitObservable.value const scaleMax = scaleObservable.value.max - const style = styles.yAxisLabel + const style = styles.yAxisLabels.tempScale return getTickPositions(columnHeight).map((y, i) => { const tick = scaleMax - i * units @@ -17,10 +17,10 @@ export function makeYAxisLabels(columnHeight) { let tickBold if (units === 0.1) { showTick = (tick * 10 % 2) ? false : true - tickBold = tick * 10 % 5 ? {} : {fontWeight: 'bold'} + tickBold = tick * 10 % 5 ? {} : {fontWeight: 'bold', fontSize: 11} } else { showTick = (tick * 10 % 5) ? false : true - tickBold = tick * 10 % 10 ? {} : {fontWeight: 'bold'} + tickBold = tick * 10 % 10 ? {} : {fontWeight: 'bold', fontSize: 11} } // this eyeballing is sadly necessary because RN does not // support percentage values for transforms, which we'd need diff --git a/components/labels.js b/components/labels.js index 7fde2b8..5ebae60 100644 --- a/components/labels.js +++ b/components/labels.js @@ -8,7 +8,10 @@ export const shared = { incorrectPasswordMessage: 'That password is incorrect.', tryAgain: 'Try again', ok: 'OK', - unlock: 'Unlock' + unlock: 'Unlock', + date: 'Date', + cycleDayWithLinebreak: 'Cycle\nday', + loading: 'Loading ...' } export const settings = { diff --git a/styles/index.js b/styles/index.js index ee63b83..28b6ff0 100644 --- a/styles/index.js +++ b/styles/index.js @@ -4,7 +4,12 @@ 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 shadesOfRed = [ + '#e7999e', + '#db666d', + '#cf323d', + '#c3000d' +] // light to dark const defaultBottomMargin = 5 const defaultIndentation = 10