diff --git a/chart.js b/chart.js
index 238c56e..c9f0f65 100644
--- a/chart.js
+++ b/chart.js
@@ -19,65 +19,16 @@ const dateRow = {
height: 30,
width: right
}
-
-function getPreviousDays(n) {
- const today = new Date()
- today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0)
- const twoWeeksAgo = new Date(today - (range.DAY * n))
-
- return range(twoWeeksAgo, today).reverse()
+const temperatureScale = {
+ low: 33,
+ high: 40
}
+const cycleDaysToShow = 40
-const xAxisDates = getPreviousDays(14).map(jsDate => {
- return LocalDate.of(
- jsDate.getFullYear(),
- jsDate.getMonth() + 1,
- jsDate.getDate()
- ).toString()
-})
-
-const xAxisDatesWithRightOffset = xAxisDates.map((datestring, columnIndex) => {
- const rightOffset = right - (columnWidth * (columnIndex + 1))
- return {
- label: datestring,
- rightOffset
- }
-})
-
-function determineCurvePoints() {
- return temperatureDaysSortedByDate.map(cycleDay => {
- const match = xAxisDatesWithRightOffset.find(tick => tick.label === cycleDay.date)
- const x = match.rightOffset + columnWidth / 2
- const y = normalizeToScale(cycleDay.temperature.value)
- return [x,y].join()
- }).join(' ')
-}
-
-function normalizeToScale(temp) {
- const scale = {
- low: 33,
- high: 40
- }
- const valueRelativeToScale = (scale.high - temp) / (scale.high - scale.low)
- const scaleHeight = bottom - top
- return scaleHeight * valueRelativeToScale
-}
-
-function placeBleedingSymbolsOnColumns() {
- return bleedingDaysSortedByDate.map(day => {
- // TODO handle no bleeding days, same for curve
- // TODO exclude future bleeding days (??)
- const match = xAxisDatesWithRightOffset.find(tick => {
- return tick.label === day.date
- })
- const x = match.rightOffset + columnWidth / 2
- return ()
- })
-}
-
-export default class SvgExample extends Component {
+export default class CycleChart extends Component {
constructor(props) {
super(props)
+ this.xAxisTicks = makeXAxisTicks(cycleDaysToShow)
}
passDateToDayView(dateString) {
@@ -85,33 +36,59 @@ export default class SvgExample extends Component {
this.props.navigation.navigate('cycleDay', { cycleDay })
}
- makeDayColumn(labelInfo) {
+ makeDayColumn(columnInfo) {
return (
-
+
this.passDateToDayView(labelInfo.label)}
+ onPress={() => this.passDateToDayView(columnInfo.label)}
/>
{labelInfo.label.split('-')[2]}
+ >{columnInfo.label.split('-')[2]}
)
}
+ makeColumnGrid(xAxisTicks) {
+ return xAxisTicks.map(this.makeDayColumn.bind(this))
+ }
+
+ placeBleedingSymbolsOnColumns() {
+ return bleedingDaysSortedByDate.map(day => {
+ // TODO handle no bleeding days, same for curve
+ // TODO exclude future bleeding days (??)
+ const match = this.xAxisTicks.find(tick => {
+ return tick.label === day.date
+ })
+ const x = match.rightOffset + columnWidth / 2
+ return ()
+ })
+ }
+
+ determineCurvePoints() {
+ return temperatureDaysSortedByDate.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(' ')
+ }
+
componentDidMount() {
this.scrollContainer.scrollToEnd()
}
+
render() {
return (
this.scrollContainer.scrollToEnd()}
>
- {xAxisDatesWithRightOffset.map(this.makeDayColumn.bind(this))}
- {placeBleedingSymbolsOnColumns()}
+ {this.makeColumnGrid(this.xAxisTicks)}
+
+ {this.placeBleedingSymbolsOnColumns()}
)
}
+}
+
+function makeXAxisTicks(n) {
+ const xAxisDates = getPreviousDays(n).map(jsDate => {
+ return LocalDate.of(
+ jsDate.getFullYear(),
+ jsDate.getMonth() + 1,
+ jsDate.getDate()
+ ).toString()
+ })
+
+ return xAxisDates.map((datestring, columnIndex) => {
+ const rightOffset = right - (columnWidth * (columnIndex + 1))
+ return {
+ label: datestring,
+ rightOffset
+ }
+ })
+}
+
+function getPreviousDays(n) {
+ const today = new Date()
+ today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0)
+ const twoWeeksAgo = new Date(today - (range.DAY * n))
+
+ return range(twoWeeksAgo, today).reverse()
+}
+
+function normalizeToScale(temp) {
+ const valueRelativeToScale = (temperatureScale.high - temp) / (temperatureScale.high - temperatureScale.low)
+ const scaleHeight = bottom - top
+ return scaleHeight * valueRelativeToScale
}
\ No newline at end of file