diff --git a/components/cycle-day/cycle-day-overview.js b/components/cycle-day/cycle-day-overview.js
index 13d43a4..839de29 100644
--- a/components/cycle-day/cycle-day-overview.js
+++ b/components/cycle-day/cycle-day-overview.js
@@ -10,6 +10,9 @@ import {
mucusFeeling as feelingLabels,
mucusTexture as textureLabels,
mucusNFP as computeSensiplanMucusLabels,
+ cervixOpening as openingLabels,
+ cervixFirmness as firmnessLabels,
+ cervixPosition as positionLabels
} from './labels/labels'
import cycleDayModule from '../../lib/get-cycle-day-number'
import { bleedingDaysSortedByDate } from '../../db'
@@ -41,36 +44,53 @@ export default class DayView extends Component {
}
render() {
- const bleedingValue = this.cycleDay.bleeding && this.cycleDay.bleeding.value
let bleedingLabel
- if (typeof bleedingValue === 'number') {
- bleedingLabel = `${bleedingLabels[bleedingValue]}`
- if (this.cycleDay.bleeding.exclude) bleedingLabel = "( " + bleedingLabel + " )"
+ if (this.cycleDay.bleeding) {
+ const bleeding = this.cycleDay.bleeding
+ if (typeof bleeding === 'number') {
+ bleedingLabel = `${bleedingLabels[bleeding]}`
+ if (bleeding.exclude) bleedingLabel = "( " + bleedingLabel + " )"
+ }
} else {
bleedingLabel = 'edit'
}
- const temperatureValue = this.cycleDay.temperature && this.cycleDay.temperature.value
+
let temperatureLabel
- if (typeof temperatureValue === 'number') {
- temperatureLabel = `${temperatureValue} °C - ${this.cycleDay.temperature.time}`
- if (this.cycleDay.temperature.exclude) {
- temperatureLabel = "( " + temperatureLabel + " )"
+ if (this.cycleDay.temperature) {
+ const temperature = this.cycleDay.temperature
+ if (typeof temperature === 'number') {
+ temperatureLabel = `${temperature} °C - ${temperature.time}`
+ if (temperature.exclude) {
+ temperatureLabel = "( " + temperatureLabel + " )"
+ }
}
} else {
temperatureLabel = 'edit'
}
- const mucusFeelingValue = this.cycleDay.mucus && this.cycleDay.mucus.feeling
- const mucusTextureValue = this.cycleDay.mucus && this.cycleDay.mucus.texture
- const mucusComputedValue = this.cycleDay.mucus && this.cycleDay.mucus.computedNfp
let mucusLabel
- if (typeof mucusFeelingValue === 'number' && typeof mucusTextureValue === 'number') {
- mucusLabel = `${feelingLabels[mucusFeelingValue]} + ${textureLabels[mucusTextureValue]} ( ${computeSensiplanMucusLabels[mucusComputedValue]} )`
- if (this.cycleDay.mucus.exclude) mucusLabel = "( " + mucusLabel + " )"
+ if (this.cycleDay.mucus) {
+ const mucus = this.cycleDay.mucus
+ if (typeof mucus.feeling === 'number' && typeof mucus.texture === 'number') {
+ mucusLabel = `${feelingLabels[mucus.feeling]} + ${textureLabels[mucus.texture]} ( ${computeSensiplanMucusLabels[mucus.computedNfp]} )`
+ if (mucus.exclude) mucusLabel = "( " + mucusLabel + " )"
+ }
} else {
mucusLabel = 'edit'
}
+ let cervixLabel
+ if (this.cycleDay.cervix) {
+ const cervix = this.cycleDay.cervix
+ if (cervix.opening > -1 && cervix.firmness > -1) {
+ cervixLabel = `${openingLabels[cervix.opening]} + ${firmnessLabels[cervix.firmness]}`
+ if (cervix.position > -1) cervixLabel += `+ ${positionLabels[cervix.position]}`
+ if (cervix.exclude) cervixLabel = "( " + cervixLabel + " )"
+ }
+ } else {
+ cervixLabel = 'edit'
+ }
+
return (
@@ -100,6 +120,15 @@ export default class DayView extends Component {
+
+ Cervix
+
+
+
+
)
}
diff --git a/components/cycle-day/index.js b/components/cycle-day/index.js
index 758fa1d..3d2ffde 100644
--- a/components/cycle-day/index.js
+++ b/components/cycle-day/index.js
@@ -10,6 +10,7 @@ import BleedingEditView from './symptoms/bleeding'
import TemperatureEditView from './symptoms/temperature'
import MucusEditView from './symptoms/mucus'
import { formatDateForViewHeader } from './labels/format'
+import CervixEditView from './symptoms/cervix'
import styles from '../../styles'
import actionButtonModule from './action-buttons'
@@ -48,7 +49,8 @@ export default class Day extends Component {
{ dayView: ,
bleedingEditView: ,
temperatureEditView: ,
- mucusEditView:
+ mucusEditView: ,
+ cervixEditView:
}[this.state.visibleComponent]
}
diff --git a/components/cycle-day/labels/labels.js b/components/cycle-day/labels/labels.js
index 459370b..25909df 100644
--- a/components/cycle-day/labels/labels.js
+++ b/components/cycle-day/labels/labels.js
@@ -2,10 +2,16 @@ const bleeding = ['spotting', 'light', 'medium', 'heavy']
const mucusFeeling = ['dry', 'nothing', 'wet', 'slippery']
const mucusTexture = ['nothing', 'creamy', 'egg white']
const mucusNFP = ['t', 'Ø', 'f', 'S', '+S']
+const cervixOpening = ['closed', 'medium', 'open']
+const cervixFirmness = ['hard', 'soft']
+const cervixPosition = ['low', 'medium', 'high']
export {
bleeding,
mucusFeeling,
mucusTexture,
- mucusNFP
+ mucusNFP,
+ cervixOpening,
+ cervixFirmness,
+ cervixPosition
}
diff --git a/components/cycle-day/symptoms/cervix.js b/components/cycle-day/symptoms/cervix.js
new file mode 100644
index 0000000..59d9d8b
--- /dev/null
+++ b/components/cycle-day/symptoms/cervix.js
@@ -0,0 +1,121 @@
+import React, { Component } from 'react'
+import {
+ View,
+ Text,
+ Switch
+} from 'react-native'
+import RadioForm from 'react-native-simple-radio-button'
+import styles from '../../../styles'
+import { saveSymptom } from '../../../db'
+import {
+ cervixOpening as openingLabels,
+ cervixFirmness as firmnessLabels,
+ cervixPosition as positionLabels
+} from '../labels/labels'
+
+export default class Cervix extends Component {
+ constructor(props) {
+ super(props)
+ this.cycleDay = props.cycleDay
+ this.makeActionButtons = props.makeActionButtons
+ this.state = {
+ exclude: this.cycleDay.cervix ? this.cycleDay.cervix.exclude : false
+ };
+
+ /* eslint-disable react/no-direct-mutation-state */
+ ['opening', 'firmness', 'position'].forEach(label => {
+ this.state[label] = this.cycleDay.cervix && this.cycleDay.cervix[label]
+ if (typeof this.state[label] !== 'number') {
+ this.state[label] = -1
+ }
+ })
+ /* eslint-enable react/no-direct-mutation-state */
+ }
+
+ render() {
+ const cervixOpeningRadioProps = [
+ {label: openingLabels[0], value: 0},
+ {label: openingLabels[1], value: 1},
+ {label: openingLabels[2], value: 2}
+ ]
+ const cervixFirmnessRadioProps = [
+ {label: firmnessLabels[0], value: 0 },
+ {label: firmnessLabels[1], value: 1 }
+ ]
+ const cervixPositionRadioProps = [
+ {label: positionLabels[0], value: 0 },
+ {label: positionLabels[1], value: 1 },
+ {label: positionLabels[2], value: 2 }
+ ]
+ return(
+
+ Cervix
+ Opening
+
+ {
+ this.setState({opening: itemValue})
+ }}
+ />
+
+ Firmness
+
+ {
+ this.setState({firmness: itemValue})
+ }}
+ />
+
+ Position
+
+ {
+ this.setState({position: itemValue})
+ }}
+ />
+
+
+ Exclude
+ {
+ this.setState({ exclude: val })
+ }}
+ value={this.state.exclude}
+ />
+
+
+ {this.makeActionButtons(
+ {
+ symptom: 'cervix',
+ cycleDay: this.cycleDay,
+ saveAction: () => {
+ saveSymptom('cervix', this.cycleDay, {
+ opening: this.state.opening,
+ firmness: this.state.firmness,
+ position: this.state.position,
+ exclude: this.state.exclude
+ })
+ },
+ saveDisabled: this.state.opening === -1 || this.state.firmness === -1
+ }
+ )}
+
+
+ )
+ }
+}
diff --git a/components/cycle-day/symptoms/mucus.js b/components/cycle-day/symptoms/mucus.js
index f94a656..4a090d2 100644
--- a/components/cycle-day/symptoms/mucus.js
+++ b/components/cycle-day/symptoms/mucus.js
@@ -21,17 +21,17 @@ export default class Mucus extends Component {
this.makeActionButtons = props.makeActionButtons
this.state = {
exclude: this.cycleDay.mucus ? this.cycleDay.mucus.exclude : false
- }
+ };
- this.state.currentFeelingValue = this.cycleDay.mucus && this.cycleDay.mucus.feeling
- if (typeof this.state.currentFeelingValue !== 'number') {
- this.state.currentFeelingValue = -1
- }
+ /* eslint-disable react/no-direct-mutation-state */
+ ['feeling', 'texture'].forEach(label => {
+ this.state[label] = this.cycleDay.mucus && this.cycleDay.mucus[label]
+ if (typeof this.state[label] !== 'number') {
+ this.state[label] = -1
+ }
+ })
+ /* eslint-enable react/no-direct-mutation-state */
- this.state.currentTextureValue = this.cycleDay.mucus && this.cycleDay.mucus.texture
- if (typeof this.state.currentTextureValue !== 'number') {
- this.state.currentTextureValue = -1
- }
}
render() {
@@ -53,12 +53,12 @@ export default class Mucus extends Component {
{
- this.setState({ currentFeelingValue: itemValue })
+ this.setState({feeling: itemValue })
}}
/>
@@ -66,12 +66,12 @@ export default class Mucus extends Component {
{
- this.setState({ currentTextureValue: itemValue })
+ this.setState({texture: itemValue })
}}
/>
@@ -92,13 +92,13 @@ export default class Mucus extends Component {
cycleDay: this.cycleDay,
saveAction: () => {
saveSymptom('mucus', this.cycleDay, {
- feeling: this.state.currentFeelingValue,
- texture: this.state.currentTextureValue,
- computedNfp: computeSensiplanValue(this.state.currentFeelingValue, this.state.currentTextureValue),
+ feeling: this.state.feeling,
+ texture: this.state.texture,
+ computedNfp: computeSensiplanValue(this.state.feeling, this.state.texture),
exclude: this.state.exclude
})
},
- saveDisabled: this.state.currentFeelingValue === -1 || this.state.currentTextureValue === -1
+ saveDisabled: this.state.feeling === -1 || this.state.texture === -1
}
)}
diff --git a/db.js b/db.js
index e2cf940..6fb743d 100644
--- a/db.js
+++ b/db.js
@@ -32,6 +32,16 @@ const MucusSchema = {
}
}
+const CervixSchema = {
+ name: 'Cervix',
+ properties: {
+ opening: 'int',
+ firmness: 'int',
+ position: {type: 'int', optional: true },
+ exclude: 'bool'
+ }
+}
+
const CycleDaySchema = {
name: 'CycleDay',
primaryKey: 'date',
@@ -48,6 +58,10 @@ const CycleDaySchema = {
mucus: {
type: 'Mucus',
optional: true
+ },
+ cervix: {
+ type: 'Cervix',
+ optional: true
}
}
}
@@ -57,7 +71,8 @@ const db = new Realm({
CycleDaySchema,
TemperatureSchema,
BleedingSchema,
- MucusSchema
+ MucusSchema,
+ CervixSchema
],
// we only want this in dev mode
deleteRealmIfMigrationNeeded: true