diff --git a/components/chart/day-column.js b/components/chart/day-column.js index 4236c41..2404887 100644 --- a/components/chart/day-column.js +++ b/components/chart/day-column.js @@ -27,50 +27,21 @@ class DayColumn extends Component { constructor(props) { super() - const { dateString, columnHeight, chartSymptoms } = props + const { dateString, chartSymptoms, columnHeight } = props const cycleDayData = getCycleDay(dateString) this.data = {} if (cycleDayData) { - this.data = chartSymptoms.reduce((symptomDataToDisplay, symptom) => { + this.data = chartSymptoms.reduce((symptomDataToDisplay, symptom, ) => { const symptomData = cycleDayData[symptom] - if (symptomData && !this.isSymptomExcluded(symptomData)) { - symptomDataToDisplay[symptom] = {} - switch (symptom) { - case 'temperature': { - symptomDataToDisplay[symptom].data = symptomData.value - symptomDataToDisplay.y = - normalizeToScale(symptomData.value, columnHeight) - const neighbourTemperatureValue = - getInfoForNeighborColumns(dateString, columnHeight) - for (const key in neighbourTemperatureValue) { - symptomDataToDisplay[key] = neighbourTemperatureValue[key] - } - break - } - case 'cervix': - symptomDataToDisplay[symptom].data = - (symptomData.opening + symptomData.firmness) > 0 ? 2 : 0 - symptomDataToDisplay[symptom].isComplete = - this.isCervixDataComplete(symptomData) - break - case 'mucus': - symptomDataToDisplay[symptom].data = - (symptomData.feeling + symptomData.texture) > 0 ? 2 : 0 - symptomDataToDisplay[symptom].isComplete = - this.isMucusDataComplete(symptomData) - break - case 'sex': - symptomDataToDisplay[symptom].data = - symptomData.solo + 2 * symptomData.partner - 1 - break - case 'bleeding': - case 'desire': - symptomDataToDisplay[symptom].data = symptomData.value - break - default: // pain, mood, note - symptomDataToDisplay[symptom].data = 0 + if (symptomData && symptom === 'temperature') { + symptomDataToDisplay[symptom] = + this.getTemperatureProps(symptomData, columnHeight, dateString) + } else { + if (symptomData && ! symptomData.exclude) { + symptomDataToDisplay[symptom] = + (this.getSymptomColorIndex[symptom] || this.getSymptomColorIndex['default'])(symptomData) } } @@ -80,20 +51,78 @@ class DayColumn extends Component { this.fhmAndLtl = props.getFhmAndLtlInfo( props.dateString, - this.data.temperature, + this.data.temperature ? this.data.temperature.value : null, props.columnHeight ) } - isSymptomExcluded = (symptomData) => { - return symptomData && symptomData.exclude ? symptomData.exclude : false + getTemperatureProps = (symptomData, columnHeight, dateString) => { + const extractedData = {} + const { value, exclude } = symptomData + const neighborTemperatureGraphPoints = + getInfoForNeighborColumns(dateString, columnHeight) + + for (const key in neighborTemperatureGraphPoints) { + extractedData[key] = neighborTemperatureGraphPoints[key] + } + return Object.assign({ + value, + y: normalizeToScale(value, columnHeight), + temperatureExclude: exclude, + }, extractedData) } - isCervixDataComplete = (symptomData) => - (symptomData.opening != null) && (symptomData.firmness != null) + getSymptomColorIndex = { + 'mucus': (symptomData) => { + const { feeling, texture } = symptomData + const colorIndex = feeling + texture + return colorIndex + }, + 'cervix': (symptomData) => { + const { opening, firmness } = symptomData + const isDataComplete = opening !== null && firmness !== null + // is fertile? fertile only when opening=closed and firmness=hard (=0) + const isFertile = isDataComplete && (opening === 0 && firmness === 0) + const colorIndex = isFertile ? 0 : 2 + return colorIndex + }, + 'sex': (symptomData) => { + const { solo, partner } = symptomData + const colorIndex = (solo !== null && partner !== null) ? + (solo + 2 * partner - 1) : 0 + return colorIndex + }, + 'bleeding': (symptomData) => { + const { value } = symptomData + const colorIndex = value + return colorIndex + }, + 'default': () => { // desire, pain, mood, note + const colorIndex = 0 + return colorIndex + } + } - isMucusDataComplete = (symptomData) => - (symptomData.feeling != null) && (symptomData.texture != null) + isSymptomDataComplete = (symptom) => { + const { dateString } = this.props + const cycleDayData = getCycleDay(dateString) + const symptomData = cycleDayData[symptom] + + const dataCompletenessCheck = { + 'cervix': () => { + const { opening, firmness } = symptomData + return (opening !== null) && (firmness !== null) + }, + 'mucus': () => { + const { feeling, texture } = symptomData + return (feeling !== null) && (texture !== null) + }, + 'default': () => { + return true + } + } + return (dataCompletenessCheck[symptom] || dataCompletenessCheck['default'])() + } onDaySelect = (date) => { this.props.setDate(date) @@ -114,14 +143,13 @@ class DayColumn extends Component { const styleSymptom = styles.iconShades[symptom] const symptomData = this.data[symptom] - const isDataIncomplete = !symptomData.isComplete + const dataIsComplete = this.isSymptomDataComplete(symptom) const isMucusOrCervix = (symptom === 'mucus') || (symptom === 'cervix') - const backgroundColor = ( isMucusOrCervix && isDataIncomplete) ? - 'white' : styleSymptom[symptomData.data] - const borderWidth = ( isMucusOrCervix && isDataIncomplete) ? 2 : 0 + const backgroundColor = (isMucusOrCervix && !dataIsComplete) ? + 'white' : styleSymptom[symptomData] + const borderWidth = (isMucusOrCervix && !dataIsComplete) ? 2 : 0 const borderColor = styleSymptom[0] - const styleChild = [styles.symptomIcon, { backgroundColor, borderColor, @@ -130,7 +158,7 @@ class DayColumn extends Component { return ( - {shouldDrawSymptom && } + ) } else { @@ -148,7 +176,6 @@ class DayColumn extends Component { columnHeight, xAxisHeight } = this.props - if(this.fhmAndLtl.drawLtlAt) { const ltlLine = ( )