1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-18 20:59:44 +02:00

feat: Log actions when task completion status changes

This commit is contained in:
Maksim Eltyshev 2025-05-20 21:17:51 +02:00
parent 5d53f44fe8
commit d5fd2fd33b
6 changed files with 64 additions and 0 deletions

View file

@ -143,6 +143,44 @@ const Item = React.memo(({ id }) => {
</Trans>
);
break;
case ActivityTypes.COMPLETE_TASK:
contentNode = (
<Trans
i18nKey="common.userCompletedTaskOnThisCard"
values={{
user: userName,
task: activity.data.task.name,
}}
>
<span className={styles.author}>{userName}</span>
<span className={styles.text}>
{' completed '}
{activity.data.task.name}
{' on this card'}
</span>
</Trans>
);
break;
case ActivityTypes.UNCOMPLETE_TASK:
contentNode = (
<Trans
i18nKey="common.userMarkedTaskIncompleteOnThisCard"
values={{
user: userName,
task: activity.data.task.name,
}}
>
<span className={styles.author}>{userName}</span>
<span className={styles.text}>
{' marked '}
{activity.data.task.name}
{' incomplete on this card'}
</span>
</Trans>
);
break;
default:
contentNode = null;

View file

@ -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 = {

View file

@ -289,9 +289,12 @@ export default {
userAddedThisCardToList: '<0>{{user}}</0><1> added this card to {{list}}</1>',
userAddedUserToThisCard: '<0>{{actorUser}}</0><1> added {{addedUser}} to this card</1>',
userAddedYouToCard: '{{user}} added you to <2>{{card}}</2>',
userCompletedTaskOnThisCard: '<0>{{user}}</0><1> completed {{task}} on this card</1>',
userJoinedThisCard: `<0>{{user}}</0><1> joined this card</1>`,
userLeftNewCommentToCard: '{{user}} left a new comment «{{comment}}» to <2>{{card}}</2>',
userLeftThisCard: '<0>{{user}}</0><1> left this card</1>',
userMarkedTaskIncompleteOnThisCard:
'<0>{{user}}</0><1> marked {{task}} incomplete on this card</1>',
userMovedCardFromListToList: '{{user}} moved <2>{{card}}</2> from {{fromList}} to {{toList}}',
userMovedThisCardFromListToList:
'<0>{{user}}</0><1> moved this card from {{fromList}} to {{toList}}</1>',

View file

@ -284,9 +284,12 @@ export default {
userAddedThisCardToList: '<0>{{user}}</0><1> added this card to {{list}}</1>',
userAddedUserToThisCard: '<0>{{actorUser}}</0><1> added {{addedUser}} to this card</1>',
userAddedYouToCard: '{{user}} added you to <2>{{card}}</2>',
userCompletedTaskOnThisCard: '<0>{{user}}</0><1> completed {{task}} on this card</1>',
userJoinedThisCard: `<0>{{user}}</0><1> joined this card</1>`,
userLeftNewCommentToCard: '{{user}} left a new comment «{{comment}}» to <2>{{card}}</2>',
userLeftThisCard: '<0>{{user}}</0><1> left this card</1>',
userMarkedTaskIncompleteOnThisCard:
'<0>{{user}}</0><1> marked {{task}} incomplete on this card</1>',
userMovedCardFromListToList: '{{user}} moved <2>{{card}}</2> from {{fromList}} to {{toList}}',
userMovedThisCardFromListToList:
'<0>{{user}}</0><1> moved this card from {{fromList}} to {{toList}}</1>',

View file

@ -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;

View file

@ -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];