mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-16 22:27:26 +01:00
* If user's cron will happen later today, start the task yesterday. * Added default dayStart to taskDefaults. * Removed the need to call shouldDo twice to calculate nextDue. * Revert "Removed the need to call shouldDo twice to calculate nextDue." This reverts commit e1467f2fc33cfb11e6a4fc667460df6a48b69d45. * Removed defaults from taskDefault arguments. * Got user from $store in copyAsTodoModal.vue. * Fixed tests for taskDefaults to include mock user. * Fix shouldDo tests when run in GMT timezone. * Added test to taskDefault; added utcOffset to taskDefault. * Replaced utcOffset with zone. * Removed erroneous import.
101 lines
2.2 KiB
JavaScript
101 lines
2.2 KiB
JavaScript
import { v4 as uuid } from 'uuid';
|
|
import defaults from 'lodash/defaults';
|
|
import moment from 'moment';
|
|
|
|
// Even though Mongoose handles task defaults, we want to make sure defaults are set on the client-side before
|
|
// sending up to the server for performance
|
|
|
|
// TODO move to client code?
|
|
|
|
const tasksTypes = ['habit', 'daily', 'todo', 'reward'];
|
|
|
|
module.exports = function taskDefaults (task, user) {
|
|
if (!task.type || tasksTypes.indexOf(task.type) === -1) {
|
|
task.type = 'habit';
|
|
}
|
|
|
|
let defaultId = uuid();
|
|
let defaultTaskObj = {
|
|
_id: defaultId,
|
|
text: task._id || defaultId,
|
|
notes: '',
|
|
tags: [],
|
|
value: task.type === 'reward' ? 10 : 0,
|
|
priority: 1,
|
|
challenge: {
|
|
shortName: 'None',
|
|
},
|
|
group: {
|
|
approval: {
|
|
required: false,
|
|
approved: false,
|
|
requested: false,
|
|
},
|
|
},
|
|
reminders: [],
|
|
attribute: 'str',
|
|
createdAt: new Date(), // TODO these are going to be overwritten by the server...
|
|
updatedAt: new Date(),
|
|
};
|
|
|
|
defaults(task, defaultTaskObj);
|
|
|
|
if (task.type === 'habit' || task.type === 'daily') {
|
|
defaults(task, {
|
|
history: [],
|
|
});
|
|
}
|
|
|
|
if (task.type === 'todo' || task.type === 'daily') {
|
|
defaults(task, {
|
|
completed: false,
|
|
collapseChecklist: false,
|
|
checklist: [],
|
|
});
|
|
}
|
|
|
|
if (task.type === 'habit') {
|
|
defaults(task, {
|
|
up: true,
|
|
down: true,
|
|
frequency: 'daily',
|
|
counterUp: 0,
|
|
counterDown: 0,
|
|
});
|
|
}
|
|
|
|
if (task.type === 'daily') {
|
|
let now = moment().zone(user.preferences.timezoneOffset);
|
|
let startOfDay = now.clone().startOf('day');
|
|
let startOfDayWithCDSTime = startOfDay
|
|
.clone()
|
|
.add({
|
|
hours: user.preferences.dayStart,
|
|
});
|
|
|
|
defaults(task, {
|
|
streak: 0,
|
|
repeat: {
|
|
m: true,
|
|
t: true,
|
|
w: true,
|
|
th: true,
|
|
f: true,
|
|
s: true,
|
|
su: true,
|
|
},
|
|
// If cron will happen today, start the daily yesterday
|
|
startDate: startOfDayWithCDSTime.isAfter(now) ?
|
|
startOfDay.clone().subtract(1, 'day').toDate() :
|
|
startOfDay.toDate(),
|
|
everyX: 1,
|
|
frequency: 'weekly',
|
|
daysOfMonth: [],
|
|
weeksOfMonth: [],
|
|
yesterDaily: true,
|
|
});
|
|
}
|
|
|
|
return task;
|
|
};
|