Shorten line lengths in cycle

This commit is contained in:
Julia Friesel
2018-08-02 10:33:52 +02:00
parent e1fa656b8f
commit 2f9b08fd8b
+23 -14
View File
@@ -1,6 +1,6 @@
import * as joda from 'js-joda'
const LocalDate = joda.LocalDate
const DAYS = joda.ChronoUnit.DAYS
export default function config(opts) {
let bleedingDaysSortedByDate
@@ -28,28 +28,31 @@ export default function config(opts) {
return day
})
const firstBleedingDayBeforeTargetDayIndex = withWrappedDates.findIndex(day => {
const firstBleedingBeforeTargetDayIndex = withWrappedDates.findIndex(day => {
return (
day.wrappedDate.isEqual(targetDate) ||
day.wrappedDate.isBefore(targetDate)
)
})
if (firstBleedingDayBeforeTargetDayIndex < 0) {
if (firstBleedingBeforeTargetDayIndex < 0) {
withWrappedDates.forEach(day => delete day.wrappedDate)
return null
}
const previousBleedingDays = withWrappedDates.slice(firstBleedingDayBeforeTargetDayIndex)
const prevBleedingDays = withWrappedDates.slice(firstBleedingBeforeTargetDayIndex)
const lastMensesStart = previousBleedingDays.find((day, i) => {
return thereIsNoPreviousBleedingDayWithinTheThreshold(day, previousBleedingDays.slice(i + 1))
const lastMensesStart = prevBleedingDays.find((day, i) => {
return noBleedingDayWithinThreshold(day, prevBleedingDays.slice(i + 1))
})
function thereIsNoPreviousBleedingDayWithinTheThreshold(bleedingDay, previousBleedingDays) {
const periodThreshold = bleedingDay.wrappedDate.minusDays(maxBreakInBleeding + 1)
function noBleedingDayWithinThreshold(day, previousBleedingDays) {
const periodThreshold = day.wrappedDate.minusDays(maxBreakInBleeding + 1)
return !previousBleedingDays.some(({ wrappedDate }) => {
return wrappedDate.equals(periodThreshold) || wrappedDate.isAfter(periodThreshold)
return (
wrappedDate.equals(periodThreshold) ||
wrappedDate.isAfter(periodThreshold)
)
})
}
@@ -66,9 +69,11 @@ export default function config(opts) {
return day
})
const firstBleedingDayAfterTargetDay = withWrappedDates.reverse().find(day => {
return day.wrappedDate.isAfter(targetDate)
})
const firstBleedingDayAfterTargetDay = withWrappedDates
.reverse()
.find(day => {
return day.wrappedDate.isAfter(targetDate)
})
withWrappedDates.forEach(day => delete day.wrappedDate)
@@ -80,7 +85,7 @@ export default function config(opts) {
if (!lastMensesStart) return null
const targetDate = LocalDate.parse(targetDateString)
const lastMensesLocalDate = LocalDate.parse(lastMensesStart.date)
const diffInDays = lastMensesLocalDate.until(targetDate, joda.ChronoUnit.DAYS)
const diffInDays = lastMensesLocalDate.until(targetDate, DAYS)
// cycle starts at day 1
return diffInDays + 1
@@ -100,7 +105,11 @@ export default function config(opts) {
function getPreviousCycle(dateString) {
const startOfCycle = getLastMensesStart(dateString)
if (!startOfCycle) return null
const dateBeforeStartOfCycle = LocalDate.parse(startOfCycle.date).minusDays(1).toString()
const dateBeforeStartOfCycle = LocalDate
.parse(startOfCycle.date)
.minusDays(1)
.toString()
return getCycleForDay(dateBeforeStartOfCycle)
}