From 750bfa58c3713e150a121c720f0e1aa4c94603f2 Mon Sep 17 00:00:00 2001 From: bl00dymarie Date: Thu, 11 Jan 2024 13:16:24 +0100 Subject: [PATCH 1/4] Add sexTrackingCategory as toggle --- components/settings/customization/index.js | 35 +++++++++------------- local-storage.js | 8 +++++ 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/components/settings/customization/index.js b/components/settings/customization/index.js index 9d0408c..9d55ef6 100644 --- a/components/settings/customization/index.js +++ b/components/settings/customization/index.js @@ -11,6 +11,8 @@ import { savePeriodPrediction, useCervixObservable, saveUseCervix, + saveSexTrackingCategory, + sexTrackingCategoryObservable, } from '../../../local-storage' import { Colors } from '../../../styles' import labels from '../../../i18n/en/settings' @@ -24,9 +26,18 @@ const Settings = () => { periodPredictionObservable.value ) + const [isSexTrackingCategoryEnabled, setSexTrackingCategory] = useState( + sexTrackingCategoryObservable.value + ) + const [isEnabled, setIsEnabled] = useState(false) const toggleSwitch = () => setIsEnabled((previousState) => !previousState) + const sexTrackingCategoryToggle = (value) => { + setSexTrackingCategory(value) + saveSexTrackingCategory(value) + } + const onPeriodPredictionToggle = (value) => { setPeriodPrediction(value) savePeriodPrediction(value) @@ -49,27 +60,9 @@ const Settings = () => { - - - Date: Thu, 11 Jan 2024 18:02:16 +0100 Subject: [PATCH 2/4] Remove sex from cycle day if not enabled --- components/cycle-day/cycle-day-overview.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/components/cycle-day/cycle-day-overview.js b/components/cycle-day/cycle-day-overview.js index de5ab0c..0cec502 100644 --- a/components/cycle-day/cycle-day-overview.js +++ b/components/cycle-day/cycle-day-overview.js @@ -9,6 +9,7 @@ import SymptomPageTitle from './symptom-page-title' import { getCycleDay } from '../../db' import { getData, nextDate, prevDate } from '../helpers/cycle-day' +import { sexTrackingCategoryObservable } from '../../local-storage' import { Spacing } from '../../styles' import { SYMPTOMS } from '../../config' @@ -27,6 +28,19 @@ const CycleDayOverView = ({ date, setDate, isTemperatureEditView }) => { setDate(prevDate(date)) } + const isSexEnabled = sexTrackingCategoryObservable.value + const allesymptoms = SYMPTOMS.map((symptom) => { + if (symptom === 'sex') { + if (isSexEnabled) { + return symptom + } + } else { + return symptom + } + }) + + const cleanSymptoms = allesymptoms.filter(Boolean) + return ( { onPrevCycleDay={showPrevCycleDay} /> - {SYMPTOMS.map((symptom) => { + {cleanSymptoms.map((symptom) => { const symptomData = cycleDay && cycleDay[symptom] ? cycleDay[symptom] : null From 26d971a8b28a9f7208c5da7b672a69da6229db23 Mon Sep 17 00:00:00 2001 From: bl00dymarie Date: Mon, 15 Jan 2024 15:17:04 +0100 Subject: [PATCH 3/4] Remove sex from chart if not enabled --- components/chart/chart.js | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/components/chart/chart.js b/components/chart/chart.js index 93703b1..6ab5581 100644 --- a/components/chart/chart.js +++ b/components/chart/chart.js @@ -13,7 +13,11 @@ import Tutorial from './Tutorial' import YAxis from './y-axis' import { getCycleDaysSortedByDate } from '../../db' -import { getChartFlag, setChartFlag } from '../../local-storage' +import { + getChartFlag, + setChartFlag, + sexTrackingCategoryObservable, +} from '../../local-storage' import { makeColumnInfo } from '../helpers/chart' import { @@ -60,6 +64,16 @@ const CycleChart = ({ navigate, setDate }) => { (symptom) => symptom !== 'temperature' ) + const symptomRowEnabledSymptoms = symptomRowSymptoms.filter((symptom) => { + if (symptom === 'sex') { + if (sexTrackingCategoryObservable.value) { + return symptom + } + } else { + return symptom + } + }) + const shouldShowTemperatureColumn = chartSymptoms.indexOf('temperature') > -1 const { width, height } = Dimensions.get('window') @@ -71,8 +85,9 @@ const CycleChart = ({ navigate, setDate }) => { remainingHeight * CHART_SYMPTOM_HEIGHT_RATIO ) const symptomRowHeight = - PixelRatio.roundToNearestPixel(symptomRowSymptoms.length * symptomHeight) + - CHART_GRID_LINE_HORIZONTAL_WIDTH + PixelRatio.roundToNearestPixel( + symptomRowEnabledSymptoms.length * symptomHeight + ) + CHART_GRID_LINE_HORIZONTAL_WIDTH const columnHeight = remainingHeight - symptomRowHeight const chartHeight = shouldShowTemperatureColumn @@ -89,7 +104,7 @@ const CycleChart = ({ navigate, setDate }) => { navigate={navigate} symptomHeight={symptomHeight} columnHeight={columnHeight} - symptomRowSymptoms={symptomRowSymptoms} + symptomRowSymptoms={symptomRowEnabledSymptoms} chartSymptoms={chartSymptoms} shouldShowTemperatureColumn={shouldShowTemperatureColumn} xAxisHeight={xAxisHeight} @@ -114,7 +129,7 @@ const CycleChart = ({ navigate, setDate }) => { Date: Fri, 19 Jan 2024 13:36:34 +0100 Subject: [PATCH 4/4] Make desire, pain, mood and note customizable --- components/chart/chart.js | 16 ++++- components/cycle-day/cycle-day-overview.js | 26 +++++--- components/settings/customization/index.js | 75 +++++++++++++++++----- local-storage.js | 32 +++++++++ 4 files changed, 121 insertions(+), 28 deletions(-) diff --git a/components/chart/chart.js b/components/chart/chart.js index 6ab5581..c475ae2 100644 --- a/components/chart/chart.js +++ b/components/chart/chart.js @@ -16,6 +16,10 @@ import { getCycleDaysSortedByDate } from '../../db' import { getChartFlag, setChartFlag, + desireTrackingCategoryObservable, + moodTrackingCategoryObservable, + noteTrackingCategoryObservable, + painTrackingCategoryObservable, sexTrackingCategoryObservable, } from '../../local-storage' import { makeColumnInfo } from '../helpers/chart' @@ -66,9 +70,15 @@ const CycleChart = ({ navigate, setDate }) => { const symptomRowEnabledSymptoms = symptomRowSymptoms.filter((symptom) => { if (symptom === 'sex') { - if (sexTrackingCategoryObservable.value) { - return symptom - } + return sexTrackingCategoryObservable.value ? symptom : null + } else if (symptom === 'desire') { + return desireTrackingCategoryObservable.value ? symptom : null + } else if (symptom === 'pain') { + return painTrackingCategoryObservable.value ? symptom : null + } else if (symptom === 'mood') { + return moodTrackingCategoryObservable.value ? symptom : null + } else if (symptom === 'note') { + return noteTrackingCategoryObservable.value ? symptom : null } else { return symptom } diff --git a/components/cycle-day/cycle-day-overview.js b/components/cycle-day/cycle-day-overview.js index 0cec502..52dd3ec 100644 --- a/components/cycle-day/cycle-day-overview.js +++ b/components/cycle-day/cycle-day-overview.js @@ -9,7 +9,13 @@ import SymptomPageTitle from './symptom-page-title' import { getCycleDay } from '../../db' import { getData, nextDate, prevDate } from '../helpers/cycle-day' -import { sexTrackingCategoryObservable } from '../../local-storage' +import { + desireTrackingCategoryObservable, + moodTrackingCategoryObservable, + noteTrackingCategoryObservable, + painTrackingCategoryObservable, + sexTrackingCategoryObservable, +} from '../../local-storage' import { Spacing } from '../../styles' import { SYMPTOMS } from '../../config' @@ -28,18 +34,22 @@ const CycleDayOverView = ({ date, setDate, isTemperatureEditView }) => { setDate(prevDate(date)) } - const isSexEnabled = sexTrackingCategoryObservable.value - const allesymptoms = SYMPTOMS.map((symptom) => { + const allEnabledSymptoms = SYMPTOMS.map((symptom) => { if (symptom === 'sex') { - if (isSexEnabled) { - return symptom - } + return sexTrackingCategoryObservable.value ? symptom : null + } else if (symptom === 'desire') { + return desireTrackingCategoryObservable.value ? symptom : null + } else if (symptom === 'pain') { + return painTrackingCategoryObservable.value ? symptom : null + } else if (symptom === 'mood') { + return moodTrackingCategoryObservable.value ? symptom : null + } else if (symptom === 'note') { + return noteTrackingCategoryObservable.value ? symptom : null } else { return symptom } }) - - const cleanSymptoms = allesymptoms.filter(Boolean) + const cleanSymptoms = allEnabledSymptoms.filter(Boolean) return ( diff --git a/components/settings/customization/index.js b/components/settings/customization/index.js index 9d55ef6..537773c 100644 --- a/components/settings/customization/index.js +++ b/components/settings/customization/index.js @@ -7,12 +7,20 @@ import TemperatureSlider from './temperature-slider' import Segment from '../../common/segment' import { - periodPredictionObservable, - savePeriodPrediction, - useCervixObservable, - saveUseCervix, - saveSexTrackingCategory, + desireTrackingCategoryObservable, + moodTrackingCategoryObservable, + noteTrackingCategoryObservable, + painTrackingCategoryObservable, sexTrackingCategoryObservable, + saveDesireTrackingCategory, + saveMoodTrackingCategory, + saveNoteTrackingCategory, + savePainTrackingCategory, + savePeriodPrediction, + saveSexTrackingCategory, + saveUseCervix, + periodPredictionObservable, + useCervixObservable, } from '../../../local-storage' import { Colors } from '../../../styles' import labels from '../../../i18n/en/settings' @@ -30,6 +38,22 @@ const Settings = () => { sexTrackingCategoryObservable.value ) + const [isDesireTrackingCategoryEnabled, setDesireTrackingCategory] = useState( + desireTrackingCategoryObservable.value + ) + + const [isPainTrackingCategoryEnabled, setPainTrackingCategory] = useState( + painTrackingCategoryObservable.value + ) + + const [isMoodTrackingCategoryEnabled, setMoodTrackingCategory] = useState( + moodTrackingCategoryObservable.value + ) + + const [isNoteTrackingCategoryEnabled, setNoteTrackingCategory] = useState( + noteTrackingCategoryObservable.value + ) + const [isEnabled, setIsEnabled] = useState(false) const toggleSwitch = () => setIsEnabled((previousState) => !previousState) @@ -38,6 +62,23 @@ const Settings = () => { saveSexTrackingCategory(value) } + const desireTrackingCategoryToggle = (value) => { + setDesireTrackingCategory(value) + saveDesireTrackingCategory(value) + } + const painTrackingCategoryToggle = (value) => { + setPainTrackingCategory(value) + savePainTrackingCategory(value) + } + const moodTrackingCategoryToggle = (value) => { + setMoodTrackingCategory(value) + saveMoodTrackingCategory(value) + } + const noteTrackingCategoryToggle = (value) => { + setNoteTrackingCategory(value) + saveNoteTrackingCategory(value) + } + const onPeriodPredictionToggle = (value) => { setPeriodPrediction(value) savePeriodPrediction(value) @@ -66,27 +107,27 @@ const Settings = () => { trackColor={{ true: Colors.turquoiseDark }} /> diff --git a/local-storage.js b/local-storage.js index 8c94dd2..c5e0060 100644 --- a/local-storage.js +++ b/local-storage.js @@ -100,6 +100,38 @@ export async function saveSexTrackingCategory(bool) { sexTrackingCategoryObservable.set(bool) } +export const desireTrackingCategoryObservable = Observable() +setObvWithInitValue('desire', desireTrackingCategoryObservable, true) + +export async function saveDesireTrackingCategory(bool) { + await AsyncStorage.setItem('desire', JSON.stringify(bool)) + desireTrackingCategoryObservable.set(bool) +} + +export const painTrackingCategoryObservable = Observable() +setObvWithInitValue('pain', painTrackingCategoryObservable, true) + +export async function savePainTrackingCategory(bool) { + await AsyncStorage.setItem('pain', JSON.stringify(bool)) + painTrackingCategoryObservable.set(bool) +} + +export const moodTrackingCategoryObservable = Observable() +setObvWithInitValue('mood', moodTrackingCategoryObservable, true) + +export async function saveMoodTrackingCategory(bool) { + await AsyncStorage.setItem('mood', JSON.stringify(bool)) + moodTrackingCategoryObservable.set(bool) +} + +export const noteTrackingCategoryObservable = Observable() +setObvWithInitValue('note', noteTrackingCategoryObservable, true) + +export async function saveNoteTrackingCategory(bool) { + await AsyncStorage.setItem('note', JSON.stringify(bool)) + noteTrackingCategoryObservable.set(bool) +} + async function setObvWithInitValue(key, obv, defaultValue) { const result = await AsyncStorage.getItem(key) let value