diff --git a/chart.js b/chart.js index f3eb165..7645027 100644 --- a/chart.js +++ b/chart.js @@ -75,22 +75,18 @@ export default class CycleChart extends Component { }) } - determineCurvePoints() { + makeTemperatureCurves() { return temperatureDaysSortedByDate .filter(cycleDayIsNotInTheFuture()) - .map(cycleDay => { - const match = this.xAxisTicks.find(tick => tick.label === cycleDay.date) - const x = match.rightOffset + columnWidth / 2 - const y = normalizeToScale(cycleDay.temperature.value) - return [x, y].join() - }).join(' ') + .reduce(separateIntoContinousChunks, [[]]) + .map(makeCurveCoordinatesForChunk.bind(this)) + .map(makeCurveFromPoints) } componentDidMount() { this.scrollContainer.scrollToEnd() } - render() { return ( this.scrollContainer.scrollToEnd()} > - {this.makeColumnGrid(this.xAxisTicks)} + { this.makeColumnGrid(this.xAxisTicks) } - {this.placeBleedingSymbolsOnColumns()} + { this.placeBleedingSymbolsOnColumns() } + + { this.makeTemperatureCurves() } - ) @@ -164,4 +155,48 @@ function cycleDayIsNotInTheFuture() { const cycleDayLocalDate = LocalDate.parse(cycleDay.date) return cycleDayLocalDate.isBefore(today) || cycleDayLocalDate.isEqual(today) } +} + +function separateIntoContinousChunks(curveChunks, curr) { + const lastChunk = curveChunks[curveChunks.length - 1] + const lastSeenCycleDate = lastChunk.length && lastChunk[lastChunk.length - 1] + + if (!lastSeenCycleDate) { + lastChunk.push(curr) + return curveChunks + } + + const lastSeenLocalDate = LocalDate.parse(lastSeenCycleDate.date) + const currLocalDate = LocalDate.parse(curr.date) + if (lastSeenLocalDate.compareTo(currLocalDate) === 1) { + lastChunk.push(curr) + } else { + curveChunks.push([curr]) + } + + return curveChunks +} + +function makeCurveCoordinatesForChunk(chunk) { + return chunk + .map(cycleDay => { + const match = this.xAxisTicks.find(tick => tick.label === cycleDay.date) + const x = match.rightOffset + columnWidth / 2 + const y = normalizeToScale(cycleDay.temperature.value) + return [x, y].join() + }) + .join(' ') +} + +function makeCurveFromPoints(curveChunkPoints, i) { + return ( + + ) } \ No newline at end of file