vikunja-frontend/src/models/notification.ts

95 lines
2.8 KiB
TypeScript
Raw Normal View History

2022-08-04 20:57:43 +02:00
import AbstractModel from './abstractModel'
import {parseDateOrNull} from '@/helpers/parseDateOrNull'
2022-08-04 20:57:43 +02:00
import UserModel from '@/models/user'
import TaskModel from '@/models/task'
import TaskCommentModel from '@/models/taskComment'
import ListModel from '@/models/list'
import TeamModel from '@/models/team'
2022-06-23 03:22:21 +02:00
2022-08-04 20:57:43 +02:00
import {NOTIFICATION_NAMES, type INotification} from '@/modelTypes/INotification'
2022-07-21 00:42:36 +02:00
export default class NotificationModel extends AbstractModel implements INotification {
id = 0
name = ''
2022-08-04 20:57:43 +02:00
notification: INotification['notification'] = null
read = false
readAt: Date | null = null
2022-07-21 00:42:36 +02:00
created: Date
2022-06-23 03:22:21 +02:00
constructor(data: Partial<INotification>) {
super()
this.assignData(data)
switch (this.name) {
2022-06-23 03:22:21 +02:00
case NOTIFICATION_NAMES.TASK_COMMENT:
this.notification = {
doer: new UserModel(this.notification.doer),
task: new TaskModel(this.notification.task),
comment: new TaskCommentModel(this.notification.comment),
}
break
2022-06-23 03:22:21 +02:00
case NOTIFICATION_NAMES.TASK_ASSIGNED:
this.notification = {
doer: new UserModel(this.notification.doer),
task: new TaskModel(this.notification.task),
assignee: new UserModel(this.notification.assignee),
}
break
2022-06-23 03:22:21 +02:00
case NOTIFICATION_NAMES.TASK_DELETED:
this.notification = {
doer: new UserModel(this.notification.doer),
task: new TaskModel(this.notification.task),
}
break
2022-06-23 03:22:21 +02:00
case NOTIFICATION_NAMES.LIST_CREATED:
this.notification = {
doer: new UserModel(this.notification.doer),
list: new ListModel(this.notification.list),
}
break
2022-06-23 03:22:21 +02:00
case NOTIFICATION_NAMES.TEAM_MEMBER_ADDED:
this.notification = {
doer: new UserModel(this.notification.doer),
member: new UserModel(this.notification.member),
team: new TeamModel(this.notification.team),
}
break
}
this.created = new Date(this.created)
this.readAt = parseDateOrNull(this.readAt)
}
toText(user = null) {
let who = ''
switch (this.name) {
2022-06-23 03:22:21 +02:00
case NOTIFICATION_NAMES.TASK_COMMENT:
return `commented on ${this.notification.task.getTextIdentifier()}`
2022-06-23 03:22:21 +02:00
case NOTIFICATION_NAMES.TASK_ASSIGNED:
who = `${this.notification.assignee.getDisplayName()}`
if (user !== null && user.id === this.notification.assignee.id) {
who = 'you'
}
return `assigned ${who} to ${this.notification.task.getTextIdentifier()}`
2022-06-23 03:22:21 +02:00
case NOTIFICATION_NAMES.TASK_DELETED:
return `deleted ${this.notification.task.getTextIdentifier()}`
2022-06-23 03:22:21 +02:00
case NOTIFICATION_NAMES.LIST_CREATED:
return `created ${this.notification.list.title}`
2022-06-23 03:22:21 +02:00
case NOTIFICATION_NAMES.TEAM_MEMBER_ADDED:
who = `${this.notification.member.getDisplayName()}`
if (user !== null && user.id === this.notification.member.id) {
who = 'you'
}
return `added ${who} to the ${this.notification.team.name} team`
}
return ''
}
}