Added message modification (UI) need backend to be called
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user