From cd1e689aae98cb467e8a5124e3f68819978c6f34 Mon Sep 17 00:00:00 2001 From: Julia Friesel <julia.friesel@gmail.com> Date: Sun, 12 Aug 2018 11:21:11 +0200 Subject: [PATCH] Get actual amount of cycle days to display --- components/chart/chart.js | 21 ++++++++++++++------- components/chart/config.js | 3 +-- components/chart/day-column.js | 1 - db/index.js | 14 ++++++++++++-- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/components/chart/chart.js b/components/chart/chart.js index dcc5be84..c08e0dcf 100644 --- a/components/chart/chart.js +++ b/components/chart/chart.js @@ -4,9 +4,8 @@ import range from 'date-range' import { LocalDate } from 'js-joda' import { yAxis, normalizeToScale } from './y-axis' import DayColumn from './day-column' -import { getCycleDay, cycleDaysSortedByDate } from '../../db' +import { getCycleDay, cycleDaysSortedByDate, getAmountOfCycleDays } from '../../db' import styles from './styles' -import config from './config' const yAxisView = <View {...styles.yAxis}>{yAxis.labels}</View> @@ -14,7 +13,7 @@ export default class CycleChart extends Component { constructor(props) { super(props) this.state = { - columns: makeColumnInfo(config.xAxisRangeInDays) + columns: makeColumnInfo(), } this.renderColumn = ({item, index}) => { return ( @@ -29,7 +28,7 @@ export default class CycleChart extends Component { this.reCalculateChartInfo = (function(Chart) { return function() { - Chart.setState({columns: makeColumnInfo(config.xAxisRangeInDays)}) + Chart.setState({columns: makeColumnInfo()}) } })(this) @@ -60,8 +59,16 @@ export default class CycleChart extends Component { } } -function makeColumnInfo(n) { - const xAxisDates = getPreviousDays(n).map(jsDate => { +function makeColumnInfo() { + let amountOfCycleDays = getAmountOfCycleDays() + // if there's not much data yet, we want to show at least 30 days on the chart + if (amountOfCycleDays < 30) { + amountOfCycleDays = 30 + } else { + // we don't want the chart to end abruptly before the first data day + amountOfCycleDays += 5 + } + const xAxisDates = getTodayAndPreviousDays(amountOfCycleDays).map(jsDate => { return LocalDate.of( jsDate.getFullYear(), jsDate.getMonth() + 1, @@ -85,7 +92,7 @@ function makeColumnInfo(n) { }) } -function getPreviousDays(n) { +function getTodayAndPreviousDays(n) { const today = new Date() today.setHours(0) today.setMinutes(0) diff --git a/components/chart/config.js b/components/chart/config.js index 39d8a51b..a83eafc6 100644 --- a/components/chart/config.js +++ b/components/chart/config.js @@ -4,8 +4,7 @@ const config = { temperatureScale: { low: 35, high: 38 - }, - xAxisRangeInDays: 1000 + } } const margin = 3 diff --git a/components/chart/day-column.js b/components/chart/day-column.js index 419042de..f356e7c9 100644 --- a/components/chart/day-column.js +++ b/components/chart/day-column.js @@ -57,7 +57,6 @@ export default class DayColumn extends Component { } if (typeof mucus === 'number') { - console.log('ever') const mucusIcon = ( <View position='absolute' diff --git a/db/index.js b/db/index.js index d3d49e87..55b34b47 100644 --- a/db/index.js +++ b/db/index.js @@ -1,5 +1,5 @@ import Realm from 'realm' -import { LocalDate } from 'js-joda' +import { LocalDate, ChronoUnit } from 'js-joda' import { cycleWithTempAndNoMucusShift, cycleWithFhm, @@ -193,6 +193,15 @@ function getColumnNamesForCsv() { } } +function getAmountOfCycleDays() { + const amountOfCycleDays = cycleDaysSortedByDate.length + if (!amountOfCycleDays) return 0 + const earliest = cycleDaysSortedByDate[amountOfCycleDays - 1] + const today = LocalDate.now() + const earliestAsLocalDate = LocalDate.parse(earliest.date) + return earliestAsLocalDate.until(today, ChronoUnit.DAYS) +} + export { saveSymptom, getOrCreateCycleDay, @@ -203,5 +212,6 @@ export { deleteAll, getPreviousTemperature, getCycleDay, - getColumnNamesForCsv + getColumnNamesForCsv, + getAmountOfCycleDays } -- GitLab