feat: emoji reactions for tasks and comments #2196

Merged
konrad merged 19 commits from feature/reactions into main 2024-03-12 19:26:01 +00:00
4 changed files with 61 additions and 6 deletions
Showing only changes of commit a65776ad56 - Show all commits

View File

@ -77,19 +77,25 @@ export default abstract class AbstractService<Model extends IAbstract = IAbstrac
case 'post':
if (this.useUpdateInterceptor()) {
config.data = this.beforeUpdate(config.data)
config.data = objectToSnakeCase(config.data)
if(this.autoTransformBeforePost()) {
config.data = objectToSnakeCase(config.data)
}
}
break
case 'put':
if (this.useCreateInterceptor()) {
config.data = this.beforeCreate(config.data)
config.data = objectToSnakeCase(config.data)
if(this.autoTransformBeforePut()) {
config.data = objectToSnakeCase(config.data)
}
}
break
case 'delete':
if (this.useDeleteInterceptor()) {
config.data = this.beforeDelete(config.data)
config.data = objectToSnakeCase(config.data)
if(this.autoTransformBeforeDelete()) {
config.data = objectToSnakeCase(config.data)
}
}
break
}
@ -119,6 +125,22 @@ export default abstract class AbstractService<Model extends IAbstract = IAbstrac
useDeleteInterceptor(): boolean {
return true
}
autoTransformBeforeSend(): boolean {
return true
}
autoTransformBeforePost(): boolean {
return this.autoTransformBeforeSend()
}
autoTransformBeforePut(): boolean {
return this.autoTransformBeforeSend()
}
autoTransformBeforeDelete(): boolean {
return this.autoTransformBeforeSend()
}
/////////////////
// Helper functions
@ -370,6 +392,7 @@ export default abstract class AbstractService<Model extends IAbstract = IAbstrac
const cancel = this.setLoading()
try {
console.log('post', model.reactions)
const response = await this.http.post(url, model)
const result = this.modelUpdateFactory(response.data)
if (typeof model.maxRight !== 'undefined') {

View File

@ -6,7 +6,7 @@ import LabelService from './label'
import {colorFromHex} from '@/helpers/color/colorFromHex'
import {SECONDS_A_DAY, SECONDS_A_HOUR, SECONDS_A_WEEK} from '@/constants/date'
import UserModel from '@/models/user'
import {objectToSnakeCase} from '@/helpers/case'
const parseDate = date => {
if (date) {
@ -39,8 +39,12 @@ export default class TaskService extends AbstractService<ITask> {
return this.processModel(model)
}
autoTransformBeforePost(): boolean {
return false
}
processModel(updatedModel) {
const model = { ...updatedModel }
const model = {...updatedModel}
model.title = model.title?.trim()
@ -109,7 +113,15 @@ export default class TaskService extends AbstractService<ITask> {
model.labels = model.labels.map(l => labelService.processModel(l))
}
return model as ITask
const transformed = objectToSnakeCase(model)
// We can't convert emojis to skane case, hence we add them back again
transformed.reactions = {}
Object.keys(updatedModel.reactions || {}).forEach(reaction => {
transformed.reactions[reaction] = updatedModel.reactions[reaction].map(u => objectToSnakeCase(u))
})
return transformed as ITask
}
}

View File

@ -1,6 +1,7 @@
import AbstractService from './abstractService'
import TaskCommentModel from '@/models/taskComment'
import type {ITaskComment} from '@/modelTypes/ITaskComment'
import {objectToSnakeCase} from '@/helpers/case'
export default class TaskCommentService extends AbstractService<ITaskComment> {
constructor() {
@ -16,4 +17,22 @@ export default class TaskCommentService extends AbstractService<ITaskComment> {
modelFactory(data) {
return new TaskCommentModel(data)
}
autoTransformBeforePost(): boolean {
return false
}
beforeUpdate(model: ITaskComment) {
const transformed = objectToSnakeCase({...model})
// We can't convert emojis to skane case, hence we add them back again
transformed.reactions = {}
Object.keys(model.reactions || {}).forEach(reaction => {
transformed.reactions[reaction] = model.reactions[reaction].map(u => objectToSnakeCase(u))
})
console.log()
return transformed as ITaskComment
}
}

View File

@ -152,6 +152,7 @@ export const useTaskStore = defineStore('task', () => {
const taskService = new TaskService()
try {
const updatedTask = await taskService.update(task)
console.log({updated: updatedTask.reactions, old: task.reactions})
kanbanStore.setTaskInBucket(updatedTask)
return updatedTask
} finally {