When adding a comments, it is visible on the client

This commit is contained in:
Jonathan Bourdon
2024-07-20 03:16:35 -04:00
parent e1caef71b2
commit d392730c98
5 changed files with 666 additions and 692 deletions

1295
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -14,6 +14,7 @@
"@xtiannyeto/vue-auth-social": "^0.1.9", "@xtiannyeto/vue-auth-social": "^0.1.9",
"axios": "^1.6.7", "axios": "^1.6.7",
"pinia": "^2.1.7", "pinia": "^2.1.7",
"uuid": "^10.0.0",
"vue": "^3.4.15", "vue": "^3.4.15",
"vue-router": "^4.2.5", "vue-router": "^4.2.5",
"vue3-google-login": "^2.0.26", "vue3-google-login": "^2.0.26",

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="shadow-md rounded-lg bg-blue-100"> <div class="shadow-md rounded-lg bg-gray-50">
<div class="text-lg font-bold"> <div class="text-lg font-bold">
{{ props.content.title }} {{ props.content.title }}
@@ -45,12 +45,12 @@
<div> <div>
<h2 class="font-sans font-semibold">Commentaires</h2> <h2 class="font-sans font-semibold">Commentaires</h2>
<message-list :subject-id="props.content.id"> <message-list :subject-id="props.content.id" :messages="messages">
</message-list> </message-list>
</div> </div>
<div class="border-t-2 border-gray-300 mt-4 pt-4"> <div class="border-t-2 border-gray-300 mt-4 pt-4">
<post-message :subject-id="props.content.id"> <post-message :subject-id="props.content.id" @message-posted="addMessage">
</post-message> </post-message>
</div> </div>
@@ -62,10 +62,10 @@
<script setup> <script setup>
import {defineProps, computed} from 'vue'; import {defineProps, computed, reactive} from 'vue';
import {time_ago} from "@/internal_time_ago.js";
import MessageList from "@/views/messages/MessageList.vue"; import MessageList from "@/views/messages/MessageList.vue";
import PostMessage from "@/views/messages/PostMessage.vue"; import PostMessage from "@/views/messages/PostMessage.vue";
import {time_ago} from "@/internal_time_ago.js";
const isHttpUrl = computed(() => props.content?.uri?.startsWith('http')) const isHttpUrl = computed(() => props.content?.uri?.startsWith('http'))
@@ -76,4 +76,13 @@ const props = defineProps({
} }
}); });
const messages = reactive([]);
function addMessage(newMessage) {
console.table(newMessage, 'test')
console.table(messages)
messages.unshift(newMessage)
console.table(messages)
}
</script> </script>

View File

@@ -45,13 +45,16 @@ const props = defineProps({
subjectId: { subjectId: {
type: String, type: String,
required: true required: true
},
messages: {
default: []
} }
}); });
const errorMessage = ref() const errorMessage = ref()
let last_id = null let last_id = null
const client = useClient(); const client = useClient();
const messages = ref([]); const messages = ref(props.messages);
onBeforeMount(async () => { onBeforeMount(async () => {
if (props.subjectId == null) return if (props.subjectId == null) return

View File

@@ -13,7 +13,7 @@
</div> </div>
<v-text-field <v-text-field
v-model="message" v-model="value"
density="compact" density="compact"
variant="solo-inverted" variant="solo-inverted"
placeholder="Votre commentaire..." placeholder="Votre commentaire..."
@@ -35,7 +35,9 @@
<script setup> <script setup>
import {useClient} from '@/plugins/api.js'; import {useClient} from '@/plugins/api.js';
import {defineProps, ref} from 'vue'; import {defineEmits, defineProps, ref} from 'vue';
import {useUserStore} from "@/stores/user.js";
import {v7} from 'uuid'
const props = defineProps({ const props = defineProps({
subjectId: { subjectId: {
@@ -44,16 +46,34 @@ const props = defineProps({
} }
}); });
const emit = defineEmits(['message-posted']);
const client = useClient(); const client = useClient();
const message = ref(""); const value = ref("");
const user = useUserStore();
const publish = async () => { const publish = async () => {
await client.post(
`/api/messages/`, try {
{ const messageId = v7()
"subjectId": props.subjectId, await client.post(`/api/messages/`,
"message": message.value {
}); "id": messageId,
"subjectId": props.subjectId,
"message": value.value
})
emit('message-posted',
{
"id": messageId,
"subjectId": props.subjectId,
"createdBy": user.getCurrentUser().id,
"createdAt": new Date(Date.now()).toISOString(),
"value": value.value,
parentId: null,
})
} catch (error) {
console.error(`post api/message : ${error}`)
}
} }
</script> </script>