1
0

feat: emoji reactions for tasks and comments (#2196)

This PR adds reactions for tasks and comments, similar to what you can do on Gitea, GitHub, Slack and plenty of other tools.

Reviewed-on: https://kolaente.dev/vikunja/vikunja/pulls/2196
Co-authored-by: kolaente <k@knt.li>
Co-committed-by: kolaente <k@knt.li>
This commit is contained in:
kolaente
2024-03-12 19:25:58 +00:00
committed by konrad
parent b9c513f681
commit a5c51d4b1e
43 changed files with 1653 additions and 37 deletions

View File

@ -0,0 +1,14 @@
import type {IReaction} from '@/modelTypes/IReaction'
import AbstractModel from '@/models/abstractModel'
export default class ReactionModel extends AbstractModel<IReaction> implements IReaction {
id: number = 0
kind: 'tasks' | 'comments' = 'tasks'
value: string = ''
constructor(data: Partial<IReaction>) {
super()
this.assignData(data)
}
}

View File

@ -86,6 +86,8 @@ export default class TaskModel extends AbstractModel<ITask> implements ITask {
position = 0
kanbanPosition = 0
reactions = {}
createdBy: IUser = UserModel
created: Date = null
@ -148,6 +150,12 @@ export default class TaskModel extends AbstractModel<ITask> implements ITask {
this.updated = new Date(this.updated)
this.projectId = Number(this.projectId)
// We can't convert emojis to camel case, hence we do this manually
this.reactions = {}
Object.keys(data.reactions || {}).forEach(reaction => {
this.reactions[reaction] = data.reactions[reaction].map(u => new UserModel(u))
})
}
getTextIdentifier() {

View File

@ -10,6 +10,8 @@ export default class TaskCommentModel extends AbstractModel<ITaskComment> implem
taskId: ITask['id'] = 0
comment = ''
author: IUser = UserModel
reactions = {}
created: Date = null
updated: Date = null
@ -21,5 +23,11 @@ export default class TaskCommentModel extends AbstractModel<ITaskComment> implem
this.author = new UserModel(this.author)
this.created = new Date(this.created)
this.updated = new Date(this.updated)
// We can't convert emojis to camel case, hence we do this manually
this.reactions = {}
Object.keys(data.reactions || {}).forEach(reaction => {
this.reactions[reaction] = data.reactions[reaction].map(u => new UserModel(u))
})
}
}