Get cycle day for day in any cycle, not just the current
This commit is contained in:
@@ -10,7 +10,11 @@ export default function config(opts) {
|
|||||||
return function getCycleDayNumber(unsorted, targetDate) {
|
return function getCycleDayNumber(unsorted, targetDate) {
|
||||||
// sort the cycle days in descending order so we travel into
|
// sort the cycle days in descending order so we travel into
|
||||||
// the past as we iterate over the array
|
// the past as we iterate over the array
|
||||||
const cycleDays = [...unsorted].sort((a, b) => b.date.isAfter(a.date))
|
// also, to retrieve the number, we only need the cycle days before the target day
|
||||||
|
// TODO we can probably rely on the db to do the sorting for us
|
||||||
|
const sorted = [...unsorted].sort((a, b) => b.date.isAfter(a.date))
|
||||||
|
const firstDayBeforeTargetDayIndex = sorted.findIndex(day => day.date.isBefore(targetDate))
|
||||||
|
const cycleDays = sorted.slice(firstDayBeforeTargetDayIndex)
|
||||||
|
|
||||||
const lastPeriodStart = cycleDays.find((day, i) => {
|
const lastPeriodStart = cycleDays.find((day, i) => {
|
||||||
if (
|
if (
|
||||||
|
|||||||
@@ -142,6 +142,35 @@ describe('getCycleDay', () => {
|
|||||||
const result = getCycleDayNumber(cycleDays, targetDate)
|
const result = getCycleDayNumber(cycleDays, targetDate)
|
||||||
expect(result).to.eql(15)
|
expect(result).to.eql(15)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('gets the correct number if the target day is not in the current cycle', () => {
|
||||||
|
const cycleDays = [{
|
||||||
|
date: moment([2018, 5, 14]),
|
||||||
|
}, {
|
||||||
|
date: moment([2018, 5, 13]),
|
||||||
|
bleeding: {
|
||||||
|
value: 2
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
date: moment([2018, 4, 12]),
|
||||||
|
}, {
|
||||||
|
date: moment([2018, 4, 11]),
|
||||||
|
bleeding: {
|
||||||
|
value: 2
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
date: moment([2018, 4, 10]),
|
||||||
|
bleeding: {
|
||||||
|
value: 2
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
date: moment([2018, 4, 9]),
|
||||||
|
}]
|
||||||
|
|
||||||
|
const targetDate = moment([2018, 4, 27])
|
||||||
|
const result = getCycleDayNumber(cycleDays, targetDate)
|
||||||
|
expect(result).to.eql(18)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('getCycleDay returns null', () => {
|
describe('getCycleDay returns null', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user