Skip to content
Snippets Groups Projects
symptom-view.js 2.53 KiB
Newer Older
import React, { Component } from 'react'
import { ScrollView, View, Alert } from 'react-native'
import PropTypes from 'prop-types'

import { connect } from 'react-redux'
import { getDate } from '../../../slices/date'
import { saveSymptom } from '../../../db'
Sofiya Tepikin's avatar
Sofiya Tepikin committed
import formatDate from '../../helpers/format-date'
Sofiya Tepikin's avatar
Sofiya Tepikin committed
import Header from '../../header'
import SymptomInfo from './symptom-info'

import { headerTitles } from '../../../i18n/en/labels'
import { sharedDialogs } from '../../../i18n/en/cycle-day'
Sofiya Tepikin's avatar
Sofiya Tepikin committed
const checkIfHasValues = data => {
  const isMeaningfulValue = value => value || value === 0
  return Object.values(data).some(isMeaningfulValue)
}

class SymptomView extends Component {

  static propTypes = {
    symptom: PropTypes.string.isRequired,
    values: PropTypes.object,
    date: PropTypes.string,
Sofiya Tepikin's avatar
Sofiya Tepikin committed
    handleBackButtonPress: PropTypes.func,
    children: PropTypes.node,
Sofiya Tepikin's avatar
Sofiya Tepikin committed
      shouldShowDelete: checkIfHasValues(props.values)
  componentDidUpdate() {
Sofiya Tepikin's avatar
Sofiya Tepikin committed
    const shouldShowDelete = checkIfHasValues(this.props.values)
    if (shouldShowDelete !== this.state.shouldShowDelete) {
      this.setState({ shouldShowDelete })
  }

  deleteSymptomEntry() {
    const { symptom, date } = this.props
    saveSymptom(symptom, date, null)
  onDeleteConfirmation = () => {
    this.deleteSymptomEntry()
    this.props.handleBackButtonPress()
  }

  showConfirmationAlert = () => {

    const cancelButton = {
      text: sharedDialogs.cancel,
      style: 'cancel'
    }

    const confirmationButton = {
      text: sharedDialogs.reallyDeleteData,
      onPress: this.onDeleteConfirmation
    }

    return Alert.alert(
      sharedDialogs.areYouSureTitle,
      sharedDialogs.areYouSureToDelete,
      [cancelButton, confirmationButton]
    )
Sofiya Tepikin's avatar
Sofiya Tepikin committed
    const { symptom, date } = this.props
    return (
      <View style={{flex: 1}}>
        <Header
          title={headerTitles[symptom]}
Sofiya Tepikin's avatar
Sofiya Tepikin committed
          subtitle={formatDate(date)}
Sofiya Tepikin's avatar
Sofiya Tepikin committed
          handleBack={this.props.handleBackButtonPress}
          handleDelete={
            this.state.shouldShowDelete && this.showConfirmationAlert
          }
          <ScrollView style={styles.page}>
            {this.props.children}
          </ScrollView>
          <SymptomInfo symptom={symptom} />
const mapStateToProps = (state) => {
  return({
    date: getDate(state)
  })
}

export default connect(
  mapStateToProps,
  null
)(SymptomView)