diff --git a/components/chart/chart.js b/components/chart/chart.js
index ded01cf..dd2c29b 100644
--- a/components/chart/chart.js
+++ b/components/chart/chart.js
@@ -2,13 +2,12 @@ import React, { Component } from 'react'
import { View, FlatList } from 'react-native'
import range from 'date-range'
import { LocalDate } from 'js-joda'
-import { yAxis, normalizeToScale, horizontalGrid } from './y-axis'
+import { makeYAxisLabels, normalizeToScale, makeHorizontalGrid } from './y-axis'
import setUpFertilityStatusFunc from './nfp-lines'
import DayColumn from './day-column'
import { getCycleDay, cycleDaysSortedByDate, getAmountOfCycleDays } from '../../db'
import styles from './styles'
-const yAxisView = {yAxis.labels}
export default class CycleChart extends Component {
constructor(props) {
@@ -25,6 +24,7 @@ export default class CycleChart extends Component {
/>
)
}
+ this.yAxisView = {makeYAxisLabels()}
this.reCalculateChartInfo = (function(Chart) {
return function() {
@@ -42,8 +42,8 @@ export default class CycleChart extends Component {
render() {
return (
- {yAxisView}
- {horizontalGrid}
+ {this.yAxisView}
+ {makeHorizontalGrid()}
{ {
const style = styles.yAxisLabel
// this eyeballing is sadly necessary because RN does not
// support percentage values for transforms, which we'd need
// to reliably place the label vertically centered to the grid
style.top = y - 8
- labels.push(
+ return (
- {scaleMax - i * scale.units}
+ {scaleMax - i * units}
)
- tickPositions.push(y)
- }
-
- return {labels, tickPositions}
+ })
}
-export const yAxis = makeYAxis()
+export function makeHorizontalGrid() {
+ return getTickPositions().map(tick => {
+ return (
+
+ )
+ })
+}
-export const horizontalGrid = yAxis.tickPositions.map(tick => {
- return (
-
- )
-})
+function getTickPositions() {
+ const units = config.temperatureScale.units
+ const scaleMin = tempScaleObservable.value.min
+ const scaleMax = tempScaleObservable.value.max
+ const numberOfTicks = (scaleMax - scaleMin) * (1 / units)
+ const tickDistance = config.chartHeight / numberOfTicks
+
+ const tickPositions = []
+ // for style reasons, we don't want the first and last tick
+ for (let i = 1; i < numberOfTicks - 1; i++) {
+ tickPositions.push(tickDistance * i)
+ }
+ return tickPositions
+}
export function normalizeToScale(temp) {
const scale = config.temperatureScale
diff --git a/components/settings.js b/components/settings.js
index f92ff33..f5fa29f 100644
--- a/components/settings.js
+++ b/components/settings.js
@@ -15,7 +15,7 @@ import config from '../config'
import { settings as labels } from './labels'
import getDataAsCsvDataUri from '../lib/import-export/export-to-csv'
import importCsv from '../lib/import-export/import-from-csv'
-import { getTempScale, saveTempScale } from '../local-storage'
+import { tempScaleObservable, saveTempScale } from '../local-storage'
export default class Settings extends Component {
render() {
@@ -62,23 +62,7 @@ export default class Settings extends Component {
class TempSlider extends Component {
constructor(props) {
super(props)
- this.state = {
- min: config.temperatureScale.defaultLow,
- max: config.temperatureScale.defaultHigh
- }
- this.getStoredScale()
- }
-
- async getStoredScale() {
- let storedScale
- try {
- storedScale = await getTempScale()
- } catch(err) {
- alertError(labels.tempScale.loadError)
- return
- }
- if (!storedScale) return
- this.setState(storedScale)
+ this.state = Object.assign({}, tempScaleObservable.value)
}
onValuesChange = (values) => {
diff --git a/local-storage/index.js b/local-storage/index.js
index e64bc18..21ac57c 100644
--- a/local-storage/index.js
+++ b/local-storage/index.js
@@ -1,13 +1,22 @@
import { AsyncStorage } from 'react-native'
import Observable from 'obv'
+import config from '../config'
export const tempScaleObservable = Observable()
-getTempScale()
+setTempScaleInitially()
-async function getTempScale() {
+async function setTempScaleInitially() {
const result = await AsyncStorage.getItem('tempScale')
- if (!result) return result
- tempScaleObservable.set(JSON.parse(result))
+ let value
+ if (result) {
+ value = JSON.parse(result)
+ } else {
+ value = {
+ min: config.temperatureScale.defaultLow,
+ max: config.temperatureScale.defaultHigh
+ }
+ }
+ tempScaleObservable.set(value)
}
export async function saveTempScale(scale) {