FreeDATA/gui_vue/src/components/chat_messages_received.vue

81 lines
2.3 KiB
Vue
Raw Normal View History

2023-09-14 19:17:05 +00:00
<template>
<div class="row justify-content-start mb-2">
<div :class="messageWidthClass">
<div class="card bg-light border-0 text-dark">
2023-09-21 21:04:12 +00:00
<div class="card-header" v-if="getFileContent['filesize'] !== 0">
2023-10-03 13:15:17 +00:00
<p class="card-text">
{{ getFileContent["filename"] }} |
{{ getFileContent["filesize"] }} Bytes |
{{ getFileContent["filetype"] }}
</p>
2023-09-21 21:04:12 +00:00
</div>
2023-09-14 19:17:05 +00:00
<div class="card-body">
<p class="card-text">{{ message.msg }}</p>
</div>
2023-09-22 21:21:44 +00:00
2023-09-14 19:17:05 +00:00
<div class="card-footer p-0 bg-light border-top-0">
2023-10-03 13:15:17 +00:00
<p class="text-muted p-0 m-0 me-1 text-end">{{ getDateTime }}</p>
<!-- Display formatted timestamp in card-footer -->
2023-09-14 19:17:05 +00:00
</div>
</div>
</div>
2023-09-22 21:21:44 +00:00
<!-- Delete button outside of the card -->
2023-09-27 12:30:47 +00:00
<div class="col-auto">
2023-10-03 13:15:17 +00:00
<button class="btn btn-outline-secondary border-0" @click="deleteMessage">
<i class="bi bi-trash"></i>
</button>
2023-09-22 21:21:44 +00:00
</div>
2023-09-14 19:17:05 +00:00
</div>
</template>
2023-09-13 21:28:20 +00:00
<script>
2023-10-03 13:15:17 +00:00
import { deleteMessageFromDB } from "../js/chatHandler";
2023-09-22 21:21:44 +00:00
2023-09-13 21:28:20 +00:00
export default {
props: {
2023-09-14 19:17:05 +00:00
message: Object,
2023-09-13 21:28:20 +00:00
},
2023-09-14 19:17:05 +00:00
computed: {
2023-10-03 13:15:17 +00:00
getFileContent() {
try {
var filename = Object.keys(this.message._attachments)[0];
var filesize = this.message._attachments[filename]["length"];
var filetype = filename.split(".")[1];
2023-09-21 21:04:12 +00:00
2023-10-03 13:15:17 +00:00
return { filename: filename, filesize: filesize, filetype: filetype };
} catch (e) {
console.log("file not loaded from database - empty?");
// we are only checking against filesize for displaying attachments
return { filesize: 0 };
}
2023-09-21 21:04:12 +00:00
},
2023-09-14 19:17:05 +00:00
messageWidthClass() {
// Calculate a Bootstrap grid class based on message length
// Adjust the logic as needed to fit your requirements
if (this.message.msg.length <= 50) {
2023-10-03 13:15:17 +00:00
return "col-4";
2023-09-14 19:17:05 +00:00
} else if (this.message.msg.length <= 100) {
2023-10-03 13:15:17 +00:00
return "col-6";
2023-09-14 19:17:05 +00:00
} else {
2023-10-03 13:15:17 +00:00
return "col-9";
2023-09-14 19:17:05 +00:00
}
},
2023-10-03 13:15:17 +00:00
deleteMessage() {
deleteMessageFromDB(this.message._id);
2023-09-22 21:21:44 +00:00
},
2023-09-14 19:17:05 +00:00
getDateTime() {
var datetime = new Date(this.message.timestamp * 1000).toLocaleString(
navigator.language,
{
2023-10-03 13:15:17 +00:00
hour: "2-digit",
minute: "2-digit",
},
2023-09-14 19:17:05 +00:00
);
return datetime;
},
},
};
2023-09-13 21:28:20 +00:00
</script>