Files
doneit-web/src/app/ui/chat/store/model/room.ts
T
peter.maquiran 3eecedb23f fix publication
2025-09-17 18:37:35 +01:00

85 lines
2.9 KiB
TypeScript

import { IRoom, RoomEntitySchema } from "src/app/core/chat/entity/group";
import { MessageAttachmentSource } from "src/app/core/chat/entity/message";
import { isDocument } from "src/app/utils/document-mimetype";
import { MessageViewModal } from "./message";
export class RoomViewModel implements IRoom {
$id: typeof RoomEntitySchema._input.$id
id?: typeof RoomEntitySchema._input.id
roomName: typeof RoomEntitySchema._input.roomName
createdBy: typeof RoomEntitySchema._input.createdBy
createdAt: typeof RoomEntitySchema._input.createdAt
expirationDate: typeof RoomEntitySchema._input.expirationDate
roomType: typeof RoomEntitySchema._input.roomType
members: typeof RoomEntitySchema._input.members
messages: MessageViewModal[]
local: typeof RoomEntitySchema._input.local
receiverId?: typeof RoomEntitySchema._input.receiverId
displayDate = ''
lastMessageImage = false
lastMessageAudio = false
lastMessageDocument = false
constructor(model: IRoom) {
Object.assign(this, model)
this.formatarData()
this.check()
}
check() {
if(this.messages?.[0]?.attachments[0]?.mimeType?.startsWith('image/') ) {
this.lastMessageImage = true
} else if (this.messages?.[0]?.attachments[0]?.mimeType && isDocument({mimeType: this.messages?.[0]?.attachments[0]?.mimeType})) {
this.lastMessageDocument = true
} else if (this.messages?.[0]?.attachments[0]?.source == MessageAttachmentSource.Webtrix) {
this.lastMessageDocument = true
} else if (this.messages?.[0]?.attachments[0]?.mimeType?.startsWith('audio/')) {
this.lastMessageAudio = true;
}
}
formatarData() {
if(this.messages?.[0]?.sentAt) {
const dataMensagem = new Date(this.messages[0].sentAt);
const agora = new Date();
const hoje = new Date(agora.getFullYear(), agora.getMonth(), agora.getDate());
const ontem = new Date(hoje);
ontem.setDate(hoje.getDate() - 1);
const diasDaSemana = ["Domingo", "Segunda-feira", "Terça-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "Sábado"];
// Verifica se a mensagem foi enviada hoje
if (dataMensagem >= hoje) {
this.displayDate = dataMensagem.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
return
}
// Verifica se a mensagem foi enviada ontem
if (dataMensagem >= ontem && dataMensagem < hoje) {
this.displayDate = "Ontem";
return
}
// Verifica se a mensagem foi enviada nesta semana
const inicioDaSemana = new Date(hoje);
inicioDaSemana.setDate(hoje.getDate() - hoje.getDay());
if (dataMensagem >= inicioDaSemana) {
this.displayDate = diasDaSemana[dataMensagem.getDay()];
return
}
// Se a mensagem foi enviada antes desta semana
this.displayDate = dataMensagem.toLocaleDateString("pt-BR"); // Formato: DD/MM/AAAA
return
}
}
}