2016-02-09 17:10:18 +00:00
|
|
|
import _ from 'lodash';
|
2016-01-20 02:11:20 +00:00
|
|
|
import moment from 'moment-timezone';
|
2015-12-10 22:52:09 +00:00
|
|
|
import { dayCount } from '../utils/date-utils';
|
|
|
|
|
|
|
|
const daysBetween = 1.5;
|
|
|
|
|
2016-02-09 17:10:18 +00:00
|
|
|
export function prepUniqueDays(cals, tz = 'UTC') {
|
2015-12-10 22:52:09 +00:00
|
|
|
|
2016-02-09 17:10:18 +00:00
|
|
|
return _(cals)
|
|
|
|
.map(ts => moment(ts).tz(tz).startOf('day').valueOf())
|
|
|
|
.uniq()
|
|
|
|
.sort()
|
|
|
|
.value();
|
|
|
|
}
|
|
|
|
|
|
|
|
export function calcCurrentStreak(cals, tz = 'UTC') {
|
|
|
|
|
|
|
|
let prev = _.last(cals);
|
|
|
|
if (moment().tz(tz).startOf('day').diff(prev, 'days') > daysBetween) {
|
2015-12-10 22:52:09 +00:00
|
|
|
return 0;
|
|
|
|
}
|
2016-02-09 17:10:18 +00:00
|
|
|
let currentStreak = 0;
|
|
|
|
let streakContinues = true;
|
|
|
|
_.forEachRight(cals, cur => {
|
|
|
|
if (moment(prev).diff(cur, 'days') < daysBetween) {
|
|
|
|
prev = cur;
|
|
|
|
currentStreak++;
|
|
|
|
} else {
|
|
|
|
// current streak found
|
|
|
|
streakContinues = false;
|
|
|
|
}
|
|
|
|
return streakContinues;
|
|
|
|
});
|
2015-12-10 22:52:09 +00:00
|
|
|
|
2016-02-09 17:10:18 +00:00
|
|
|
return currentStreak;
|
2015-12-10 22:52:09 +00:00
|
|
|
}
|
|
|
|
|
2016-02-09 17:10:18 +00:00
|
|
|
export function calcLongestStreak(cals, tz = 'UTC') {
|
|
|
|
|
2015-12-10 22:52:09 +00:00
|
|
|
let tail = cals[0];
|
|
|
|
const longest = cals.reduce((longest, head, index) => {
|
|
|
|
const last = cals[index === 0 ? 0 : index - 1];
|
|
|
|
// is streak broken
|
2016-02-09 17:10:18 +00:00
|
|
|
if (moment(head).tz(tz).diff(moment(last).tz(tz), 'days') > daysBetween) {
|
2015-12-10 22:52:09 +00:00
|
|
|
tail = head;
|
|
|
|
}
|
2016-02-09 17:10:18 +00:00
|
|
|
if (dayCount(longest, tz) < dayCount([head, tail], tz)) {
|
2015-12-10 22:52:09 +00:00
|
|
|
return [head, tail];
|
|
|
|
}
|
|
|
|
return longest;
|
|
|
|
}, [cals[0], cals[0]]);
|
|
|
|
|
2016-02-09 17:10:18 +00:00
|
|
|
return dayCount(longest, tz);
|
2015-12-10 22:52:09 +00:00
|
|
|
}
|