Added message modification (UI) need backend to be called

This commit is contained in:
PascalMarchesseault
2024-08-17 11:19:21 -04:00
parent 9faa6fa4a5
commit a923dd93c0

View File

@@ -1,32 +1,31 @@
<template> <template>
<div class="flex flex-column py-2 "> <div class="flex flex-column py-2">
<div class="flex flex-row full "> <div class="flex flex-row full">
<div class="w-full"> <div class="w-full">
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<div> <div>
<div> <div>
<div class=" content-center flex flex-row"> <div class="content-center flex flex-row">
<img <img
:src="message.createdByPortraitUrl ?? '/images/usersmedia/anonyme/profilepictures/profileAnonymeSquare.png'" :src="message.createdByPortraitUrl ?? '/images/usersmedia/anonyme/profilepictures/profileAnonymeSquare.png'"
alt="Profile Image" alt="Profile Image"
class="rounded-full" class="rounded-full"
width="32px" width="32px"
height="32px"> height="32px"
/>
<span class="font-semibold font-sans mr-2 capitalize ml-2"> <span class="font-semibold font-sans mr-2 capitalize ml-2">
{{ message.createdByName }} {{ message.createdByName }}
</span> </span>
<v-tooltip :text="new Date(message.createdAt).toLocaleString()"> <v-tooltip :text="new Date(message.createdAt).toLocaleString()">
<template v-slot:activator="{ props }"> <template v-slot:activator="{ props }">
<span v-bind="props" class="text-sm-caption text-gray-700 mt-1"> <span v-bind="props" class="text-sm-caption text-gray-700 mt-1">
{{ time_ago(message.createdAt) }} {{ time_ago(message.createdAt) }}
</span> </span>
</template> </template>
</v-tooltip> </v-tooltip>
</div> </div>
</div> </div>
</div> </div>
<v-menu class="ml-auto"> <v-menu class="ml-auto">
<template v-slot:activator="{ props }"> <template v-slot:activator="{ props }">
@@ -49,8 +48,27 @@
</div> </div>
<div class="font-sans message-content"> <div class="font-sans message-content">
<p class=" pb-2"> {{ message.value }}</p> <p class="pb-2" v-if="!isEditMessage"> {{ message.value }}</p>
<div v-if="isEditMessage" class="flex flex-row">
<v-textarea
variant="outlined"
v-model="editMessageValue"
rows="1"
auto-grow
class="flex-1 mt-3"
@keyup.enter="acceptechanges"
></v-textarea>
<div class="flex flex-col px-2 space-y-1">
<v-btn variant="plain" @click="acceptechanges">
<v-icon>mdi-check</v-icon>
</v-btn>
<v-btn variant="plain" @click="cancel">
<v-icon class="rounded-full">mdi-cancel</v-icon>
</v-btn>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -58,9 +76,12 @@
</template> </template>
<script setup> <script setup>
import { ref, watch, onMounted, onBeforeUnmount } from "vue";
import { time_ago } from "@/internal_time_ago.js";
import {time_ago} from "@/internal_time_ago.js"; const isEditMessage = ref(false);
const editMessageValue = ref("");
const originalMessageValue = ref("");
const props = defineProps({ const props = defineProps({
message: { message: {
@@ -69,23 +90,56 @@ const props = defineProps({
} }
}); });
function editMessage(message) { function editMessage(message) {
// Logic for editing the message isEditMessage.value = true;
console.log('Edit message', message); originalMessageValue.value = message.value;
editMessageValue.value = message.value;
}
function acceptechanges() {
props.message.value = editMessageValue.value;
isEditMessage.value = false;
}
function cancel() {
editMessageValue.value = originalMessageValue.value;
isEditMessage.value = false;
} }
function deleteMessage(message) { function deleteMessage(message) {
// Logic for deleting the message
console.log('Delete message', message); console.log('Delete message', message);
} }
function reportMessage(message) { function reportMessage(message) {
// Logic for reporting the message
console.log('Report message', message); console.log('Report message', message);
} }
function handleKeydown(event) {
if (event.key === "Escape") {
cancel();
}
}
watch(isEditMessage, (newValue) => {
if (newValue) {
window.addEventListener('keydown', handleKeydown);
} else {
window.removeEventListener('keydown', handleKeydown);
}
});
onMounted(() => {
if (isEditMessage.value) {
window.addEventListener('keydown', handleKeydown);
}
});
onBeforeUnmount(() => {
window.removeEventListener('keydown', handleKeydown);
});
</script> </script>
<style scoped> <style scoped>
.content-center { .content-center {
display: flex; display: flex;