diff --git a/components/chart/chart.js b/components/chart/chart.js index c475ae2..b394129 100644 --- a/components/chart/chart.js +++ b/components/chart/chart.js @@ -21,6 +21,7 @@ import { noteTrackingCategoryObservable, painTrackingCategoryObservable, sexTrackingCategoryObservable, + temperatureTrackingCategoryObservable, } from '../../local-storage' import { makeColumnInfo } from '../helpers/chart' @@ -84,7 +85,11 @@ const CycleChart = ({ navigate, setDate }) => { } }) - const shouldShowTemperatureColumn = chartSymptoms.indexOf('temperature') > -1 + const isTemperatureEnabled = temperatureTrackingCategoryObservable.value + const shouldShowTemperatureColumn = + isTemperatureEnabled && chartSymptoms.indexOf('temperature') > -1 + const shouldShowNoDataWarning = + isTemperatureEnabled && chartSymptoms.indexOf('temperature') <= -1 const { width, height } = Dimensions.get('window') const numberOfColumnsToRender = Math.round(width / CHART_COLUMN_WIDTH) @@ -135,7 +140,7 @@ const CycleChart = ({ navigate, setDate }) => { > {shouldShowHint && } - {!shouldShowTemperatureColumn && } + {shouldShowNoDataWarning && } { } const allEnabledSymptoms = SYMPTOMS.map((symptom) => { - if (symptom === 'sex') { + if (symptom === 'temperature') { + return temperatureTrackingCategoryObservable.value ? symptom : null + } else if (symptom === 'sex') { return sexTrackingCategoryObservable.value ? symptom : null } else if (symptom === 'desire') { return desireTrackingCategoryObservable.value ? symptom : null diff --git a/components/settings/customization/index.js b/components/settings/customization/index.js index 537773c..a8e0ab2 100644 --- a/components/settings/customization/index.js +++ b/components/settings/customization/index.js @@ -1,4 +1,5 @@ import React, { useState } from 'react' +import { Alert, Pressable } from 'react-native' import AppPage from '../../common/app-page' import AppSwitch from '../../common/app-switch' @@ -12,18 +13,21 @@ import { noteTrackingCategoryObservable, painTrackingCategoryObservable, sexTrackingCategoryObservable, + temperatureTrackingCategoryObservable, saveDesireTrackingCategory, saveMoodTrackingCategory, saveNoteTrackingCategory, savePainTrackingCategory, savePeriodPrediction, saveSexTrackingCategory, + saveTemperatureTrackingCategory, saveUseCervix, periodPredictionObservable, useCervixObservable, } from '../../../local-storage' import { Colors } from '../../../styles' import labels from '../../../i18n/en/settings' +import { SYMPTOMS } from '../../../config' const Settings = () => { const [shouldUseCervix, setShouldUseCervix] = useState( @@ -34,6 +38,9 @@ const Settings = () => { periodPredictionObservable.value ) + const [isTemperatureTrackingCategoryEnabled, setTemperatureTrackingCategory] = + useState(temperatureTrackingCategoryObservable.value) + const [isSexTrackingCategoryEnabled, setSexTrackingCategory] = useState( sexTrackingCategoryObservable.value ) @@ -57,6 +64,11 @@ const Settings = () => { const [isEnabled, setIsEnabled] = useState(false) const toggleSwitch = () => setIsEnabled((previousState) => !previousState) + const temperatureTrackingCategoryToggle = (value) => { + setTemperatureTrackingCategory(value) + saveTemperatureTrackingCategory(value) + } + const sexTrackingCategoryToggle = (value) => { setSexTrackingCategory(value) saveSexTrackingCategory(value) @@ -97,36 +109,47 @@ const Settings = () => { ? labels.useCervix.cervixModeOn : labels.useCervix.cervixModeOff + const sliderDisabledPrompt = () => { + if (!isTemperatureTrackingCategoryEnabled) { + Alert.alert(labels.disabled.title, labels.disabled.message) + } + } return ( + @@ -141,19 +164,35 @@ const Settings = () => { /> - - {labels.tempScale.segmentExplainer} - - + + + {isTemperatureTrackingCategoryEnabled && ( + <> + {labels.tempScale.segmentExplainer} + + + )} + {!isTemperatureTrackingCategoryEnabled && ( + {labels.disabled.message} + )} + + - - - + + + {isTemperatureTrackingCategoryEnabled && ( + + )} + {!isTemperatureTrackingCategoryEnabled && ( + {labels.disabled.message} + )} + + { } } + const tempReminderDisabledPrompt = () => { + if (!temperatureTrackingCategoryObservable.value) { + Alert.alert( + labels.tempReminder.alertNoTempReminder.title, + labels.tempReminder.alertNoTempReminder.message + ) + } + } return ( @@ -46,9 +55,11 @@ const Reminders = () => { /> - - - + + + + + ) } diff --git a/components/settings/reminders/temperature-reminder.js b/components/settings/reminders/temperature-reminder.js index d5fb874..5b06b19 100644 --- a/components/settings/reminders/temperature-reminder.js +++ b/components/settings/reminders/temperature-reminder.js @@ -7,6 +7,7 @@ import AppSwitch from '../../common/app-switch' import { saveTempReminder, tempReminderObservable, + temperatureTrackingCategoryObservable, } from '../../../local-storage' import padWithZeros from '../../helpers/pad-time-with-zeros' @@ -51,6 +52,7 @@ const TemperatureReminder = () => { onToggle={temperatureReminderToggle} text={tempReminderText} value={isEnabled} + disabled={!temperatureTrackingCategoryObservable.value} /> `Daily reminder set for ${time}`, notification: 'Record your morning temperature', + alertNoTempReminder: { + title: 'Temperature turned off', + message: + 'To use the temperature reminder please first enable the temperature tracking category in the customization settings.', + }, }, periodReminder: { title: 'Next period reminder', diff --git a/local-storage.js b/local-storage.js index c5e0060..ece4355 100644 --- a/local-storage.js +++ b/local-storage.js @@ -92,6 +92,21 @@ export async function setChartFlag() { await AsyncStorage.setItem('isFirstChartView', JSON.stringify(false)) } +export const temperatureTrackingCategoryObservable = Observable() +setObvWithInitValue('temperature', temperatureTrackingCategoryObservable, true) + +export async function saveTemperatureTrackingCategory(bool) { + await AsyncStorage.setItem('temperature', JSON.stringify(bool)) + temperatureTrackingCategoryObservable.set(bool) + + if (!temperatureTrackingCategoryObservable.value) { + const result = await AsyncStorage.getItem('tempReminder') + if (JSON.parse(result).enabled) { + tempReminderObservable.set(false) + } + } +} + export const sexTrackingCategoryObservable = Observable() setObvWithInitValue('sex', sexTrackingCategoryObservable, true)