Disable and switch secondary symptom depending on cervical mucus and cervix turned on or off.

This commit is contained in:
wunderfisch
2024-02-04 17:12:42 +01:00
parent 1db2f3a945
commit e11acbab78
4 changed files with 137 additions and 16 deletions
+6
View File
@@ -22,6 +22,8 @@ import {
painTrackingCategoryObservable, painTrackingCategoryObservable,
sexTrackingCategoryObservable, sexTrackingCategoryObservable,
temperatureTrackingCategoryObservable, temperatureTrackingCategoryObservable,
mucusTrackingCategoryObservable,
cervixTrackingCategoryObservable,
} from '../../local-storage' } from '../../local-storage'
import { makeColumnInfo } from '../helpers/chart' import { makeColumnInfo } from '../helpers/chart'
@@ -72,6 +74,10 @@ const CycleChart = ({ navigate, setDate }) => {
const symptomRowEnabledSymptoms = symptomRowSymptoms.filter((symptom) => { const symptomRowEnabledSymptoms = symptomRowSymptoms.filter((symptom) => {
if (symptom === 'sex') { if (symptom === 'sex') {
return sexTrackingCategoryObservable.value ? symptom : null return sexTrackingCategoryObservable.value ? symptom : null
} else if (symptom === 'mucus') {
return mucusTrackingCategoryObservable.value ? symptom : null
} else if (symptom === 'cervix') {
return cervixTrackingCategoryObservable.value ? symptom : null
} else if (symptom === 'desire') { } else if (symptom === 'desire') {
return desireTrackingCategoryObservable.value ? symptom : null return desireTrackingCategoryObservable.value ? symptom : null
} else if (symptom === 'pain') { } else if (symptom === 'pain') {
@@ -16,6 +16,8 @@ import {
painTrackingCategoryObservable, painTrackingCategoryObservable,
sexTrackingCategoryObservable, sexTrackingCategoryObservable,
temperatureTrackingCategoryObservable, temperatureTrackingCategoryObservable,
mucusTrackingCategoryObservable,
cervixTrackingCategoryObservable,
} from '../../local-storage' } from '../../local-storage'
import { Spacing } from '../../styles' import { Spacing } from '../../styles'
import { SYMPTOMS } from '../../config' import { SYMPTOMS } from '../../config'
@@ -40,6 +42,10 @@ const CycleDayOverView = ({ date, setDate, isTemperatureEditView }) => {
return temperatureTrackingCategoryObservable.value ? symptom : null return temperatureTrackingCategoryObservable.value ? symptom : null
} else if (symptom === 'sex') { } else if (symptom === 'sex') {
return sexTrackingCategoryObservable.value ? symptom : null return sexTrackingCategoryObservable.value ? symptom : null
} else if (symptom === 'mucus') {
return mucusTrackingCategoryObservable.value ? symptom : null
} else if (symptom === 'cervix') {
return cervixTrackingCategoryObservable.value ? symptom : null
} else if (symptom === 'desire') { } else if (symptom === 'desire') {
return desireTrackingCategoryObservable.value ? symptom : null return desireTrackingCategoryObservable.value ? symptom : null
} else if (symptom === 'pain') { } else if (symptom === 'pain') {
+103 -10
View File
@@ -1,4 +1,4 @@
import React, { useState } from 'react' import React, { useEffect, useState } from 'react'
import { Alert, Pressable } from 'react-native' import { Alert, Pressable } from 'react-native'
import AppPage from '../../common/app-page' import AppPage from '../../common/app-page'
@@ -14,10 +14,14 @@ import {
painTrackingCategoryObservable, painTrackingCategoryObservable,
sexTrackingCategoryObservable, sexTrackingCategoryObservable,
temperatureTrackingCategoryObservable, temperatureTrackingCategoryObservable,
mucusTrackingCategoryObservable,
cervixTrackingCategoryObservable,
saveDesireTrackingCategory, saveDesireTrackingCategory,
saveMoodTrackingCategory, saveMoodTrackingCategory,
saveNoteTrackingCategory, saveNoteTrackingCategory,
savePainTrackingCategory, savePainTrackingCategory,
saveMucusTrackingCategory,
saveCervixTrackingCategory,
savePeriodPrediction, savePeriodPrediction,
saveSexTrackingCategory, saveSexTrackingCategory,
saveTemperatureTrackingCategory, saveTemperatureTrackingCategory,
@@ -41,6 +45,14 @@ const Settings = () => {
const [isTemperatureTrackingCategoryEnabled, setTemperatureTrackingCategory] = const [isTemperatureTrackingCategoryEnabled, setTemperatureTrackingCategory] =
useState(temperatureTrackingCategoryObservable.value) useState(temperatureTrackingCategoryObservable.value)
const [isMucusTrackingCategoryEnabled, setMucusTrackingCategory] = useState(
mucusTrackingCategoryObservable.value
)
const [isCervixTrackingCategoryEnabled, setCervixTrackingCategory] = useState(
cervixTrackingCategoryObservable.value
)
const [isSexTrackingCategoryEnabled, setSexTrackingCategory] = useState( const [isSexTrackingCategoryEnabled, setSexTrackingCategory] = useState(
sexTrackingCategoryObservable.value sexTrackingCategoryObservable.value
) )
@@ -61,6 +73,9 @@ const Settings = () => {
noteTrackingCategoryObservable.value noteTrackingCategoryObservable.value
) )
const [isSecondarySymptomDisabled, setIsSecondarySymptomDisabled] =
useState(false)
const [isEnabled, setIsEnabled] = useState(false) const [isEnabled, setIsEnabled] = useState(false)
const toggleSwitch = () => setIsEnabled((previousState) => !previousState) const toggleSwitch = () => setIsEnabled((previousState) => !previousState)
@@ -69,11 +84,44 @@ const Settings = () => {
saveTemperatureTrackingCategory(value) saveTemperatureTrackingCategory(value)
} }
const mucusTrackingCategoryToggle = (value) => {
if (!cervixTrackingCategoryObservable.value && value) {
setShouldUseCervix(false)
setIsSecondarySymptomDisabled(true)
} else if (cervixTrackingCategoryObservable.value && value) {
setIsSecondarySymptomDisabled(false)
} else if (cervixTrackingCategoryObservable.value && !value) {
setShouldUseCervix(true)
setIsSecondarySymptomDisabled(true)
} else if (!cervixTrackingCategoryObservable.value && !value) {
setIsSecondarySymptomDisabled(true)
}
setMucusTrackingCategory(value)
saveMucusTrackingCategory(value)
saveUseCervix(shouldUseCervix)
}
const cervixTrackingCategoryToggle = (value) => {
if (!mucusTrackingCategoryObservable.value && value) {
setShouldUseCervix(true)
setIsSecondarySymptomDisabled(true)
} else if (mucusTrackingCategoryObservable.value && value) {
setIsSecondarySymptomDisabled(false)
} else if (mucusTrackingCategoryObservable.value && !value) {
setShouldUseCervix(false)
setIsSecondarySymptomDisabled(true)
} else if (!mucusTrackingCategoryObservable.value && !value) {
setIsSecondarySymptomDisabled(true)
}
setCervixTrackingCategory(value)
saveCervixTrackingCategory(value)
saveUseCervix(shouldUseCervix)
}
const sexTrackingCategoryToggle = (value) => { const sexTrackingCategoryToggle = (value) => {
setSexTrackingCategory(value) setSexTrackingCategory(value)
saveSexTrackingCategory(value) saveSexTrackingCategory(value)
} }
const desireTrackingCategoryToggle = (value) => { const desireTrackingCategoryToggle = (value) => {
setDesireTrackingCategory(value) setDesireTrackingCategory(value)
saveDesireTrackingCategory(value) saveDesireTrackingCategory(value)
@@ -90,12 +138,10 @@ const Settings = () => {
setNoteTrackingCategory(value) setNoteTrackingCategory(value)
saveNoteTrackingCategory(value) saveNoteTrackingCategory(value)
} }
const onPeriodPredictionToggle = (value) => { const onPeriodPredictionToggle = (value) => {
setPeriodPrediction(value) setPeriodPrediction(value)
savePeriodPrediction(value) savePeriodPrediction(value)
} }
const periodPredictionText = isPeriodPredictionEnabled const periodPredictionText = isPeriodPredictionEnabled
? labels.periodPrediction.on ? labels.periodPrediction.on
: labels.periodPrediction.off : labels.periodPrediction.off
@@ -105,6 +151,41 @@ const Settings = () => {
saveUseCervix(value) saveUseCervix(value)
} }
useEffect(() => {
if (
!mucusTrackingCategoryObservable.value &&
cervixTrackingCategoryObservable.value
) {
setShouldUseCervix(true)
setIsSecondarySymptomDisabled(false)
} else if (
mucusTrackingCategoryObservable.value &&
cervixTrackingCategoryObservable.value
) {
setIsSecondarySymptomDisabled(false)
} else if (
mucusTrackingCategoryObservable.value &&
!cervixTrackingCategoryObservable.value
) {
setShouldUseCervix(false)
setIsSecondarySymptomDisabled(false)
} else if (
!mucusTrackingCategoryObservable.value &&
!cervixTrackingCategoryObservable.value
) {
setIsSecondarySymptomDisabled(true)
}
}, [])
const secSymptomDisabledPrompt = () => {
if (isSecondarySymptomDisabled) {
Alert.alert(
labels.periodReminder.alertNoPeriodReminder.title,
labels.periodReminder.alertNoPeriodReminder.message
)
}
}
const cervixText = shouldUseCervix const cervixText = shouldUseCervix
? labels.useCervix.cervixModeOn ? labels.useCervix.cervixModeOn
: labels.useCervix.cervixModeOff : labels.useCervix.cervixModeOff
@@ -121,6 +202,22 @@ const Settings = () => {
onToggle={temperatureTrackingCategoryToggle} onToggle={temperatureTrackingCategoryToggle}
text={SYMPTOMS[1]} text={SYMPTOMS[1]}
value={isTemperatureTrackingCategoryEnabled} value={isTemperatureTrackingCategoryEnabled}
/>
<AppSwitch
onToggle={(enabled) => {
mucusTrackingCategoryToggle(enabled)
}}
text={'mucus'}
value={isMucusTrackingCategoryEnabled}
trackColor={{ true: Colors.turquoiseDark }}
/>
<AppSwitch
onToggle={(enabled) => {
cervixTrackingCategoryToggle(enabled)
}}
text={'cervix'}
value={isCervixTrackingCategoryEnabled}
trackColor={{ true: Colors.turquoiseDark }} trackColor={{ true: Colors.turquoiseDark }}
/> />
<AppSwitch <AppSwitch
@@ -178,19 +275,15 @@ const Settings = () => {
</Segment> </Segment>
</Pressable> </Pressable>
<Pressable onPress={sliderDisabledPrompt}> <Pressable onPress={secSymptomDisabledPrompt}>
<Segment title={labels.useCervix.title}> <Segment title={labels.useCervix.title}>
{isTemperatureTrackingCategoryEnabled && (
<AppSwitch <AppSwitch
onToggle={onCervixToggle} onToggle={onCervixToggle}
text={cervixText} text={cervixText}
value={shouldUseCervix} value={shouldUseCervix}
trackColor={{ true: Colors.turquoiseDark }} trackColor={{ true: Colors.turquoiseDark }}
disabled={isSecondarySymptomDisabled}
/> />
)}
{!isTemperatureTrackingCategoryEnabled && (
<AppText>{labels.disabled.message}</AppText>
)}
</Segment> </Segment>
</Pressable> </Pressable>
+16
View File
@@ -107,6 +107,22 @@ export async function saveTemperatureTrackingCategory(bool) {
} }
} }
export const mucusTrackingCategoryObservable = Observable()
setObvWithInitValue('mucus', mucusTrackingCategoryObservable, true)
export async function saveMucusTrackingCategory(bool) {
await AsyncStorage.setItem('mucus', JSON.stringify(bool))
mucusTrackingCategoryObservable.set(bool)
}
export const cervixTrackingCategoryObservable = Observable()
setObvWithInitValue('cervix', cervixTrackingCategoryObservable, true)
export async function saveCervixTrackingCategory(bool) {
await AsyncStorage.setItem('cervix', JSON.stringify(bool))
cervixTrackingCategoryObservable.set(bool)
}
export const sexTrackingCategoryObservable = Observable() export const sexTrackingCategoryObservable = Observable()
setObvWithInitValue('sex', sexTrackingCategoryObservable, true) setObvWithInitValue('sex', sexTrackingCategoryObservable, true)