Skip to content
Snippets Groups Projects
temperature.js 2.80 KiB
import React, { Component } from 'react'
import {
  View,
  Text,
  TextInput,
  Switch
} from 'react-native'

import { getPreviousTemperature, saveSymptom } from '../../../db'
import styles from '../../../styles'
import { LocalTime, ChronoUnit } from 'js-joda'

export default class Temp extends Component {
  constructor(props) {
    super(props)
    this.cycleDay = props.cycleDay
    this.makeActionButtons = props.makeActionButtons
    let initialValue

    const temp = this.cycleDay.temperature

    if (temp) {
      initialValue = temp.value.toString()
      this.time = temp.time
    } else {
      const prevTemp = getPreviousTemperature(this.cycleDay)
      initialValue = prevTemp ? prevTemp.toString() : ''
    }

    this.state = {
      currentValue: initialValue,
      exclude: temp ? temp.exclude : false,
      time: this.time || LocalTime.now().truncatedTo(ChronoUnit.MINUTES).toString()
    }
  }

  render() {
    const cycleDay = this.cycleDay
    return (
      <View style={styles.symptomEditView}>
        <View style={styles.symptomViewRowInline}>
          <Text style={styles.symptomDayView}>Temperature (°C)</Text>
          <TextInput
            style={styles.temperatureTextInput}
            placeholder="Enter"
            onChangeText={(val) => {
              this.setState({ currentValue: val })
            }}
            keyboardType='numeric'
            value={this.state.currentValue}
          />
        </View>
        <View style={styles.symptomViewRowInline}>
          <Text style={styles.symptomDayView}>Time</Text>
          <TextInput
            style={styles.temperatureTextInput}
            onChangeText={(val) => {
              this.setState({ time: val })
            }}
            keyboardType='numeric'
            value={this.state.time}
          />
        </View>
        <View style={styles.symptomViewRowInline}>
          <Text style={styles.symptomDayView}>Exclude</Text>
          <Switch
            onValueChange={(val) => {
              this.setState({ exclude: val })
            }}
            value={this.state.exclude}
          />
        </View>
        <View style={styles.actionButtonRow}>
          {this.makeActionButtons({
            symptom: 'temperature',
            cycleDay: this.cycleDay,
            saveAction: () => {
              const dataToSave = {
                value: Number(this.state.currentValue),
                exclude: this.state.exclude,
                time: this.state.time
              }
              saveSymptom('temperature', cycleDay, dataToSave)
            },
            saveDisabled: this.state.currentValue === '' || isInvalidTime(this.state.time)
          })}
        </View>
      </View>
    )
  }
}

function isInvalidTime(timeString) {
  try {
    LocalTime.parse(timeString)
  } catch (err) {
    return true
  }
  return false
}