diff --git a/client/src/components/activities/Activities/Item.jsx b/client/src/components/activities/Activities/Item.jsx index e1901076..e4d34acb 100755 --- a/client/src/components/activities/Activities/Item.jsx +++ b/client/src/components/activities/Activities/Item.jsx @@ -143,6 +143,44 @@ const Item = React.memo(({ id }) => { ); + break; + case ActivityTypes.COMPLETE_TASK: + contentNode = ( + + {userName} + + {' completed '} + {activity.data.task.name} + {' on this card'} + + + ); + + break; + case ActivityTypes.UNCOMPLETE_TASK: + contentNode = ( + + {userName} + + {' marked '} + {activity.data.task.name} + {' incomplete on this card'} + + + ); + break; default: contentNode = null; diff --git a/client/src/constants/Enums.js b/client/src/constants/Enums.js index 02f591cf..9da896a2 100755 --- a/client/src/constants/Enums.js +++ b/client/src/constants/Enums.js @@ -92,6 +92,8 @@ export const ActivityTypes = { MOVE_CARD: 'moveCard', ADD_MEMBER_TO_CARD: 'addMemberToCard', REMOVE_MEMBER_FROM_CARD: 'removeMemberFromCard', + COMPLETE_TASK: 'completeTask', + UNCOMPLETE_TASK: 'uncompleteTask', }; export const NotificationTypes = { diff --git a/client/src/locales/en-GB/core.js b/client/src/locales/en-GB/core.js index 688eebf2..2cb913e3 100644 --- a/client/src/locales/en-GB/core.js +++ b/client/src/locales/en-GB/core.js @@ -289,9 +289,12 @@ export default { userAddedThisCardToList: '<0>{{user}}<1> added this card to {{list}}', userAddedUserToThisCard: '<0>{{actorUser}}<1> added {{addedUser}} to this card', userAddedYouToCard: '{{user}} added you to <2>{{card}}', + userCompletedTaskOnThisCard: '<0>{{user}}<1> completed {{task}} on this card', userJoinedThisCard: `<0>{{user}}<1> joined this card`, userLeftNewCommentToCard: '{{user}} left a new comment «{{comment}}» to <2>{{card}}', userLeftThisCard: '<0>{{user}}<1> left this card', + userMarkedTaskIncompleteOnThisCard: + '<0>{{user}}<1> marked {{task}} incomplete on this card', userMovedCardFromListToList: '{{user}} moved <2>{{card}} from {{fromList}} to {{toList}}', userMovedThisCardFromListToList: '<0>{{user}}<1> moved this card from {{fromList}} to {{toList}}', diff --git a/client/src/locales/en-US/core.js b/client/src/locales/en-US/core.js index 50487bd3..28cae078 100644 --- a/client/src/locales/en-US/core.js +++ b/client/src/locales/en-US/core.js @@ -284,9 +284,12 @@ export default { userAddedThisCardToList: '<0>{{user}}<1> added this card to {{list}}', userAddedUserToThisCard: '<0>{{actorUser}}<1> added {{addedUser}} to this card', userAddedYouToCard: '{{user}} added you to <2>{{card}}', + userCompletedTaskOnThisCard: '<0>{{user}}<1> completed {{task}} on this card', userJoinedThisCard: `<0>{{user}}<1> joined this card`, userLeftNewCommentToCard: '{{user}} left a new comment «{{comment}}» to <2>{{card}}', userLeftThisCard: '<0>{{user}}<1> left this card', + userMarkedTaskIncompleteOnThisCard: + '<0>{{user}}<1> marked {{task}} incomplete on this card', userMovedCardFromListToList: '{{user}} moved <2>{{card}} from {{fromList}} to {{toList}}', userMovedThisCardFromListToList: '<0>{{user}}<1> moved this card from {{fromList}} to {{toList}}', diff --git a/server/api/helpers/tasks/update-one.js b/server/api/helpers/tasks/update-one.js index 84cd13e4..6261398f 100644 --- a/server/api/helpers/tasks/update-one.js +++ b/server/api/helpers/tasks/update-one.js @@ -132,6 +132,22 @@ module.exports = { }), user: inputs.actorUser, }); + + if (inputs.record.isCompleted !== task.isCompleted) { + await sails.helpers.actions.createOne.with({ + values: { + type: task.isCompleted ? Action.Types.COMPLETE_TASK : Action.Types.UNCOMPLETE_TASK, + data: { + task: _.pick(task, ['id', 'name']), + }, + user: inputs.actorUser, + card: inputs.card, + }, + project: inputs.project, + board: inputs.board, + list: inputs.list, + }); + } } return task; diff --git a/server/api/models/Action.js b/server/api/models/Action.js index 888d34f1..955bf812 100755 --- a/server/api/models/Action.js +++ b/server/api/models/Action.js @@ -15,6 +15,8 @@ const Types = { MOVE_CARD: 'moveCard', ADD_MEMBER_TO_CARD: 'addMemberToCard', REMOVE_MEMBER_FROM_CARD: 'removeMemberFromCard', + COMPLETE_TASK: 'completeTask', + UNCOMPLETE_TASK: 'uncompleteTask', }; const INTERNAL_NOTIFIABLE_TYPES = [Types.MOVE_CARD, Types.ADD_MEMBER_TO_CARD];