Files
doneit-web/src/app/ui/chat/store/model/message.ts
T
2024-08-29 12:13:15 +01:00

69 lines
1.9 KiB
TypeScript

import { SafeResourceUrl } from "@angular/platform-browser";
import { IMessageType, MessageEntity, MessageEntitySchema } from "src/app/core/chat/entity/message";
import { SessionStore } from "src/app/store/session.service";
export class MessageViewModal {
$id?: number
id?: string
roomId?: string
receiverId?: number
message?: string
messageType: number = 0
canEdit: boolean = false
oneShot: boolean = false
sentAt?: string
requireUnlock: boolean = false
info: typeof MessageEntitySchema._type.info = []
sender!: typeof MessageEntitySchema._type.sender
sending: boolean = false
sendAttemp = 0
attachments: typeof MessageEntitySchema._type.attachments = []
reactions: typeof MessageEntitySchema._type.reactions = []
requestId!: string
isDeleted: typeof MessageEntitySchema._type.isDeleted = false
status!: 'allViewed' | 'allReceived'| 'enviado'| 'enviar'
messageUiType!: 'info-meeting'| 'my-message'| 'other-message'
constructor(model: MessageEntity) {
Object.assign(this, model)
this.setMessageUIType()
}
setMessageUIType() {
if(this.messageType == IMessageType.information) {
this.messageUiType = 'info-meeting'
} else if (this.sender?.wxUserId === SessionStore.user.UserId) {
this.messageUiType = 'my-message'
} else {
this.messageUiType = 'other-message'
}
}
messageStatus(totalMembers: number) {
if(this.allViewed(totalMembers)) {
this.status = 'allViewed'
} else if(this.allReceived(totalMembers)) {
this.status = 'allReceived'
} else if (this.id) {
this.status = 'enviado'
} else {
this.status = 'enviar'
}
}
allReceived(totalMembers: number) {
return this.info.filter(e => typeof e.deliverAt == 'string').length == totalMembers
}
allViewed(totalMembers: number) {
return this.info.filter(e => typeof e.readAt == 'string').length == totalMembers
}
get hasAttachment() {
return this.attachments.length >= 1
}
}