From e11acbab7847c3c08ea5bd812942283a7658620c Mon Sep 17 00:00:00 2001 From: wunderfisch Date: Sun, 4 Feb 2024 17:12:42 +0100 Subject: [PATCH] Disable and switch secondary symptom depending on cervical mucus and cervix turned on or off. --- components/chart/chart.js | 6 + components/cycle-day/cycle-day-overview.js | 6 + components/settings/customization/index.js | 125 ++++++++++++++++++--- local-storage.js | 16 +++ 4 files changed, 137 insertions(+), 16 deletions(-) diff --git a/components/chart/chart.js b/components/chart/chart.js index b394129..5cc54b3 100644 --- a/components/chart/chart.js +++ b/components/chart/chart.js @@ -22,6 +22,8 @@ import { painTrackingCategoryObservable, sexTrackingCategoryObservable, temperatureTrackingCategoryObservable, + mucusTrackingCategoryObservable, + cervixTrackingCategoryObservable, } from '../../local-storage' import { makeColumnInfo } from '../helpers/chart' @@ -72,6 +74,10 @@ const CycleChart = ({ navigate, setDate }) => { const symptomRowEnabledSymptoms = symptomRowSymptoms.filter((symptom) => { if (symptom === 'sex') { 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') { return desireTrackingCategoryObservable.value ? symptom : null } else if (symptom === 'pain') { diff --git a/components/cycle-day/cycle-day-overview.js b/components/cycle-day/cycle-day-overview.js index a033135..7f999f9 100644 --- a/components/cycle-day/cycle-day-overview.js +++ b/components/cycle-day/cycle-day-overview.js @@ -16,6 +16,8 @@ import { painTrackingCategoryObservable, sexTrackingCategoryObservable, temperatureTrackingCategoryObservable, + mucusTrackingCategoryObservable, + cervixTrackingCategoryObservable, } from '../../local-storage' import { Spacing } from '../../styles' import { SYMPTOMS } from '../../config' @@ -40,6 +42,10 @@ const CycleDayOverView = ({ date, setDate, isTemperatureEditView }) => { return temperatureTrackingCategoryObservable.value ? symptom : null } else if (symptom === 'sex') { 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') { return desireTrackingCategoryObservable.value ? symptom : null } else if (symptom === 'pain') { diff --git a/components/settings/customization/index.js b/components/settings/customization/index.js index a8e0ab2..83dfb28 100644 --- a/components/settings/customization/index.js +++ b/components/settings/customization/index.js @@ -1,4 +1,4 @@ -import React, { useState } from 'react' +import React, { useEffect, useState } from 'react' import { Alert, Pressable } from 'react-native' import AppPage from '../../common/app-page' @@ -14,10 +14,14 @@ import { painTrackingCategoryObservable, sexTrackingCategoryObservable, temperatureTrackingCategoryObservable, + mucusTrackingCategoryObservable, + cervixTrackingCategoryObservable, saveDesireTrackingCategory, saveMoodTrackingCategory, saveNoteTrackingCategory, savePainTrackingCategory, + saveMucusTrackingCategory, + saveCervixTrackingCategory, savePeriodPrediction, saveSexTrackingCategory, saveTemperatureTrackingCategory, @@ -41,6 +45,14 @@ const Settings = () => { const [isTemperatureTrackingCategoryEnabled, setTemperatureTrackingCategory] = useState(temperatureTrackingCategoryObservable.value) + const [isMucusTrackingCategoryEnabled, setMucusTrackingCategory] = useState( + mucusTrackingCategoryObservable.value + ) + + const [isCervixTrackingCategoryEnabled, setCervixTrackingCategory] = useState( + cervixTrackingCategoryObservable.value + ) + const [isSexTrackingCategoryEnabled, setSexTrackingCategory] = useState( sexTrackingCategoryObservable.value ) @@ -61,6 +73,9 @@ const Settings = () => { noteTrackingCategoryObservable.value ) + const [isSecondarySymptomDisabled, setIsSecondarySymptomDisabled] = + useState(false) + const [isEnabled, setIsEnabled] = useState(false) const toggleSwitch = () => setIsEnabled((previousState) => !previousState) @@ -69,11 +84,44 @@ const Settings = () => { 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) => { setSexTrackingCategory(value) saveSexTrackingCategory(value) } - const desireTrackingCategoryToggle = (value) => { setDesireTrackingCategory(value) saveDesireTrackingCategory(value) @@ -90,12 +138,10 @@ const Settings = () => { setNoteTrackingCategory(value) saveNoteTrackingCategory(value) } - const onPeriodPredictionToggle = (value) => { setPeriodPrediction(value) savePeriodPrediction(value) } - const periodPredictionText = isPeriodPredictionEnabled ? labels.periodPrediction.on : labels.periodPrediction.off @@ -105,6 +151,41 @@ const Settings = () => { 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 ? labels.useCervix.cervixModeOn : labels.useCervix.cervixModeOff @@ -121,6 +202,22 @@ const Settings = () => { onToggle={temperatureTrackingCategoryToggle} text={SYMPTOMS[1]} value={isTemperatureTrackingCategoryEnabled} + /> + + { + mucusTrackingCategoryToggle(enabled) + }} + text={'mucus'} + value={isMucusTrackingCategoryEnabled} + trackColor={{ true: Colors.turquoiseDark }} + /> + { + cervixTrackingCategoryToggle(enabled) + }} + text={'cervix'} + value={isCervixTrackingCategoryEnabled} trackColor={{ true: Colors.turquoiseDark }} /> { - + - {isTemperatureTrackingCategoryEnabled && ( - - )} - {!isTemperatureTrackingCategoryEnabled && ( - {labels.disabled.message} - )} + diff --git a/local-storage.js b/local-storage.js index ece4355..7b9477a 100644 --- a/local-storage.js +++ b/local-storage.js @@ -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() setObvWithInitValue('sex', sexTrackingCategoryObservable, true)