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) {
|
||||
// sort the cycle days in descending order so we travel into
|
||||
// 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) => {
|
||||
if (
|
||||
|
||||
@@ -142,6 +142,35 @@ describe('getCycleDay', () => {
|
||||
const result = getCycleDayNumber(cycleDays, targetDate)
|
||||
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', () => {
|
||||
|
||||
Reference in New Issue
Block a user