1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-19 05:09:43 +02:00

feat: Display comments total on front of cards (#1146)

Closes #1136
This commit is contained in:
Hannes 2025-05-23 17:31:28 +02:00 committed by GitHub
parent f9d3e73651
commit 4049b4c396
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 165 additions and 13 deletions

View file

@ -114,6 +114,7 @@ const ProjectContent = React.memo(({ cardId }) => {
card.description ||
card.dueDate ||
card.stopwatch ||
card.commentsTotal > 0 ||
attachmentsTotal > 0 ||
notificationsTotal > 0 ||
listName;
@ -226,6 +227,14 @@ const ProjectContent = React.memo(({ cardId }) => {
</span>
</span>
)}
{card.commentsTotal > 0 && (
<span className={classNames(styles.attachment, styles.attachmentLeft)}>
<span className={styles.attachmentContent}>
<Icon name="comment outline" />
{card.commentsTotal}
</span>
</span>
)}
</span>
)}
{!isCompact && usersNode}

View file

@ -20,6 +20,9 @@ export default class extends BaseModel {
description: attr(),
dueDate: attr(),
stopwatch: attr(),
commentsTotal: attr({
getDefault: () => 0,
}),
createdAt: attr({
getDefault: () => new Date(),
}),

View file

@ -42,31 +42,47 @@ export default class extends BaseModel {
break;
case ActionTypes.COMMENT_CREATE:
case ActionTypes.COMMENT_CREATE_HANDLE:
case ActionTypes.COMMENT_UPDATE__SUCCESS:
case ActionTypes.COMMENT_UPDATE_HANDLE:
Comment.upsert(payload.comment);
case ActionTypes.COMMENT_CREATE_HANDLE: {
const commentModel = Comment.upsert(payload.comment);
if (commentModel.card) {
commentModel.card.commentsTotal += 1;
}
break;
}
case ActionTypes.COMMENT_CREATE__SUCCESS:
Comment.withId(payload.localId).delete();
Comment.upsert(payload.comment);
break;
case ActionTypes.COMMENT_CREATE__FAILURE:
Comment.withId(payload.localId).delete();
case ActionTypes.COMMENT_CREATE__FAILURE: {
const commentModel = Comment.withId(payload.localId);
commentModel.delete();
if (commentModel.card) {
commentModel.card.commentsTotal -= 1;
}
break;
}
case ActionTypes.COMMENT_UPDATE:
Comment.withId(payload.id).update(payload.data);
break;
case ActionTypes.COMMENT_DELETE:
Comment.withId(payload.id).delete();
case ActionTypes.COMMENT_UPDATE__SUCCESS:
case ActionTypes.COMMENT_UPDATE_HANDLE:
Comment.upsert(payload.comment);
break;
case ActionTypes.COMMENT_DELETE__SUCCESS:
case ActionTypes.COMMENT_DELETE_HANDLE: {
case ActionTypes.COMMENT_DELETE: {
const commentModel = Comment.withId(payload.id);
commentModel.delete();
commentModel.card.commentsTotal -= 1;
break;
}
case ActionTypes.COMMENT_DELETE__SUCCESS: {
const commentModel = Comment.withId(payload.comment.id);
if (commentModel) {
@ -75,6 +91,19 @@ export default class extends BaseModel {
break;
}
case ActionTypes.COMMENT_DELETE_HANDLE: {
const commentModel = Comment.withId(payload.comment.id);
if (commentModel) {
commentModel.delete();
if (commentModel.card) {
commentModel.card.commentsTotal -= 1;
}
}
break;
}
default:
}
}