mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
revert refactor of preenHistory
This commit is contained in:
@@ -108,50 +108,3 @@ export function shouldDo (day, dailyTask, options = {}) {
|
|||||||
return false; // error condition - unexpected frequency string
|
return false; // error condition - unexpected frequency string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Preen history for users with > 7 history entries
|
|
||||||
This takes an infinite array of single day entries [day day day day day...], and turns it into a condensed array of averages, condensing more the further back in time we go.
|
|
||||||
Eg, 7 entries each for last 7 days; 1 entry each week of this month; 1 entry for each month of this year; 1 entry per previous year: [day*7 week*4 month*12 year*infinite]
|
|
||||||
*/
|
|
||||||
|
|
||||||
export function preenHistory (history) {
|
|
||||||
// 'export' is temporary pending further refactoring
|
|
||||||
history = _.filter(history, function discardNulls (h) {
|
|
||||||
return Boolean(h); // nulls are from corruption somehow - TODO is this still needed?
|
|
||||||
});
|
|
||||||
let newHistory = [];
|
|
||||||
|
|
||||||
function preen (amount, groupBy) {
|
|
||||||
let groups = _.chain(history).groupBy(function getDateGroupings (h) {
|
|
||||||
return moment(h.date).format(groupBy);
|
|
||||||
}).sortBy(function sortByDate (h, k) {
|
|
||||||
return k;
|
|
||||||
}).value(); // turn into an array
|
|
||||||
|
|
||||||
groups = groups.slice(-amount);
|
|
||||||
groups.pop(); // get rid of 'this week', 'this month', etc (except for case of days)
|
|
||||||
return _.each(groups, function recreateHistory (group) {
|
|
||||||
newHistory.push({
|
|
||||||
date: moment(group[0].date).toDate(),
|
|
||||||
value: _.reduce(group, function makeAverage (m, obj) {
|
|
||||||
return m + obj.value;
|
|
||||||
}, 0) / group.length,
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Keep the last:
|
|
||||||
preen(50, 'YYYY'); // 50 years (habit will toootally be around that long!)
|
|
||||||
preen(moment().format('MM'), 'YYYYMM'); // last MM months (eg, if today is 05, keep the last 5 months)
|
|
||||||
// Then keep all days of this month. Note, the extra logic is to account for Habits, which can be counted multiple times per day
|
|
||||||
// FIXME I'd rather keep 1-entry/week of this month, then last 'd' days in this week. However, I'm having issues where the 1st starts mid week
|
|
||||||
let thisMonth = moment().format('YYYYMM');
|
|
||||||
|
|
||||||
newHistory = newHistory.concat(_.filter(history, function keepThisMonthsData (h) {
|
|
||||||
return moment(h.date).format('YYYYMM') === thisMonth;
|
|
||||||
}));
|
|
||||||
return newHistory;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import {
|
import {
|
||||||
daysSince,
|
daysSince,
|
||||||
shouldDo,
|
shouldDo,
|
||||||
preenHistory, // temporary pending further refactoring
|
|
||||||
} from '../../common/script/cron';
|
} from '../../common/script/cron';
|
||||||
import * as statHelpers from './statHelpers';
|
import * as statHelpers from './statHelpers';
|
||||||
|
|
||||||
var $w, _, api, content, i18n, moment, sortOrder,
|
var $w, _, api, content, i18n, moment, preenHistory, sortOrder,
|
||||||
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
||||||
|
|
||||||
moment = require('moment');
|
moment = require('moment');
|
||||||
@@ -75,6 +74,48 @@ api.planGemLimits = {
|
|||||||
convCap: 25
|
convCap: 25
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Preen history for users with > 7 history entries
|
||||||
|
This takes an infinite array of single day entries [day day day day day...], and turns it into a condensed array
|
||||||
|
of averages, condensing more the further back in time we go. Eg, 7 entries each for last 7 days; 1 entry each week
|
||||||
|
of this month; 1 entry for each month of this year; 1 entry per previous year: [day*7 week*4 month*12 year*infinite]
|
||||||
|
*/
|
||||||
|
|
||||||
|
preenHistory = function(history) {
|
||||||
|
var newHistory, preen, thisMonth;
|
||||||
|
history = _.filter(history, function(h) {
|
||||||
|
return !!h;
|
||||||
|
});
|
||||||
|
newHistory = [];
|
||||||
|
preen = function(amount, groupBy) {
|
||||||
|
var groups;
|
||||||
|
groups = _.chain(history).groupBy(function(h) {
|
||||||
|
return moment(h.date).format(groupBy);
|
||||||
|
}).sortBy(function(h, k) {
|
||||||
|
return k;
|
||||||
|
}).value();
|
||||||
|
groups = groups.slice(-amount);
|
||||||
|
groups.pop();
|
||||||
|
return _.each(groups, function(group) {
|
||||||
|
newHistory.push({
|
||||||
|
date: moment(group[0].date).toDate(),
|
||||||
|
value: _.reduce(group, (function(m, obj) {
|
||||||
|
return m + obj.value;
|
||||||
|
}), 0) / group.length
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
preen(50, "YYYY");
|
||||||
|
preen(moment().format('MM'), "YYYYMM");
|
||||||
|
thisMonth = moment().format('YYYYMM');
|
||||||
|
newHistory = newHistory.concat(_.filter(history, function(h) {
|
||||||
|
return moment(h.date).format('YYYYMM') === thisMonth;
|
||||||
|
}));
|
||||||
|
return newHistory;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Preen 3-day past-completed To-Dos from Angular & mobile app
|
Preen 3-day past-completed To-Dos from Angular & mobile app
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user