mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
Group Tasks Shared Completion (#10515)
* WIP(groups): add shared completion prop Also fix an issue where the Needs Approval toggle would not read/save correctly. * fix(groups): save group options on task create Also, correct count of assigned members when viewing user is among assignments * fix(groups): display correct messages in two places * fix(tasks): eliminate console error related to filtering Also localize a group plans string * WIP(groups): implement single completion for approval workflow * WIP(groups): Add shared completion handling to no-approval-needed flow * WIP(groups): cover approval flow case for all-assigned Also save new field on initial task creation * fix(tasks): use default sharedCompletion value when creating tasks * WIP(tests): non-working draft test * Added completed todo to group query * WIP(group-tasks): fix bugs, add tests * refactor(group-tasks): deleteMany op, add more tests * refactor(group-tasks): move shared completion handling to lib * WIP(group-tasks): broken refactor * WIP(group-tasks): await all the things * Turned complete master task to save * WIP(group-tasks): show completed * fix(filtering): don't try to filter if no list is passed * refactor(group-tasks): load completed to-dos on demand, not at start * fix(group-tasks): don't double up on repeat visits * fix(group-tasks): include brief explanation in dropdown * fix(group-tasks): improve wording some more
This commit is contained in:
@@ -12,10 +12,13 @@ import {
|
||||
getTasks,
|
||||
moveTask,
|
||||
} from '../../../libs/taskManager';
|
||||
import { handleSharedCompletion } from '../../../libs/groupTasks';
|
||||
import apiError from '../../../libs/apiError';
|
||||
|
||||
let requiredGroupFields = '_id leader tasksOrder name';
|
||||
// @TODO: abstract to task lib
|
||||
let types = Tasks.tasksTypes.map(type => `${type}s`);
|
||||
types.push('completedTodos', '_allCompletedTodos'); // _allCompletedTodos is currently in BETA and is likely to be removed in future
|
||||
|
||||
function canNotEditTasks (group, user, assignedUserId) {
|
||||
let isNotGroupLeader = group.leader !== user._id;
|
||||
@@ -338,7 +341,7 @@ api.approveTask = {
|
||||
}
|
||||
|
||||
// Remove old notifications
|
||||
let managerPromises = [];
|
||||
let approvalPromises = [];
|
||||
managers.forEach((manager) => {
|
||||
let notificationIndex = manager.notifications.findIndex(function findNotification (notification) {
|
||||
return notification && notification.data && notification.data.taskId === task._id && notification.type === 'GROUP_TASK_APPROVAL';
|
||||
@@ -346,7 +349,7 @@ api.approveTask = {
|
||||
|
||||
if (notificationIndex !== -1) {
|
||||
manager.notifications.splice(notificationIndex, 1);
|
||||
managerPromises.push(manager.save());
|
||||
approvalPromises.push(manager.save());
|
||||
}
|
||||
});
|
||||
|
||||
@@ -362,9 +365,11 @@ api.approveTask = {
|
||||
direction,
|
||||
});
|
||||
|
||||
managerPromises.push(task.save());
|
||||
managerPromises.push(assignedUser.save());
|
||||
await Promise.all(managerPromises);
|
||||
await handleSharedCompletion(task);
|
||||
|
||||
approvalPromises.push(task.save());
|
||||
approvalPromises.push(assignedUser.save());
|
||||
await Promise.all(approvalPromises);
|
||||
|
||||
res.respond(200, task);
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user