From cb953881a9437e07b448eba5afaf48f4a3f29f74 Mon Sep 17 00:00:00 2001
From: emelko <ml.kochsiek@mailbox.org>
Date: Wed, 19 Sep 2018 10:36:41 +0200
Subject: [PATCH] Adding secondarySymptom * so calculating preOvuPhase with
 cervix is possible

---
 lib/sympto/index.js            | 3 ++-
 lib/sympto/minus-8-day-rule.js | 4 ++--
 lib/sympto/pre-ovulatory.js    | 9 +++++----
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/lib/sympto/index.js b/lib/sympto/index.js
index 575b608e..96e2b491 100644
--- a/lib/sympto/index.js
+++ b/lib/sympto/index.js
@@ -23,7 +23,8 @@ export default function getSymptoThermalStatus(cycleInfo) {
     if (statusForLast.temperatureShift) {
       const preOvuPhase = getPreOvulatoryPhase(
         cycle,
-        [previousCycle, ...earlierCycles]
+        [previousCycle, ...earlierCycles],
+        secondarySymptom
       )
       if (preOvuPhase) {
         status.phases.preOvulatory = preOvuPhase
diff --git a/lib/sympto/minus-8-day-rule.js b/lib/sympto/minus-8-day-rule.js
index 2964b373..5a07d765 100644
--- a/lib/sympto/minus-8-day-rule.js
+++ b/lib/sympto/minus-8-day-rule.js
@@ -1,10 +1,10 @@
 import { LocalDate } from 'js-joda'
 import getNfpStatus from './index'
 
-export default function (previousCycles) {
+export default function (previousCycles, secondarySymptom) {
   const fhms = previousCycles
     .map(cycle => {
-      const status = getNfpStatus({ cycle })
+      const status = getNfpStatus({ cycle, secondarySymptom })
       if (status.temperatureShift) {
         const day = status.temperatureShift.firstHighMeasurementDay
         const firstCycleDayDate = LocalDate.parse(cycle[0].date)
diff --git a/lib/sympto/pre-ovulatory.js b/lib/sympto/pre-ovulatory.js
index 874e2bc9..236eefdc 100644
--- a/lib/sympto/pre-ovulatory.js
+++ b/lib/sympto/pre-ovulatory.js
@@ -1,10 +1,10 @@
 import { LocalDate } from "js-joda"
 import apply8DayRule from './minus-8-day-rule'
 
-export default function(cycle, previousCycles) {
+export default function(cycle, previousCycles, secondarySymptom) {
   let preOvuPhaseLength = 5
 
-  const minus8DayRuleResult = apply8DayRule(previousCycles)
+  const minus8DayRuleResult = apply8DayRule(previousCycles, secondarySymptom)
   if (minus8DayRuleResult) preOvuPhaseLength = minus8DayRuleResult
 
   const startDate = LocalDate.parse(cycle[0].date)
@@ -12,7 +12,7 @@ export default function(cycle, previousCycles) {
   const maybePreOvuDays = cycle.slice(0, preOvuPhaseLength).filter(d => {
     return d.date <= preOvuEndDate
   })
-  const preOvulatoryDays = getDaysUntilFertileSecondarySymptom(maybePreOvuDays)
+  const preOvulatoryDays = getDaysUntilFertileSecondarySymptom(maybePreOvuDays, secondarySymptom)
   // if fertile mucus or cervix occurs on the 1st cycle day, there is no pre-ovu phase
   if (!preOvulatoryDays.length) return null
 
@@ -39,7 +39,8 @@ function getDaysUntilFertileSecondarySymptom(days, secondarySymptom = 'mucus') {
     if (secondarySymptom === 'mucus') {
       return day.mucus && day.mucus.value > 1
     } else if (secondarySymptom === 'cervix') {
-      return day.cervix && !day.cervix.isClosedAndHard
+      return day.cervix && day.cervix.opening > 0
+        || day.cervix && day.cervix.firmness > 0
     }
   })
 
-- 
GitLab