Files
ntu-awd-website/src/views/BoardView.vue
T
2025-04-15 03:59:33 +08:00

58 lines
1.5 KiB
Vue

<script setup>
import BoardForm from '../components/Board/BoardForm.vue';
import BoardMessage from '../components/Board/BoardMessage.vue';
import { ref, onMounted } from 'vue';
import { postMessage, deleteMessage, getMessages } from '../lib/api';
import { useAuthStore } from '../stores/auth';
const messages = ref([]);
const authStore = useAuthStore();
const jwt = authStore.jwt;
const isLoggedIn = authStore.isLoggedIn;
onMounted(async () => {
try {
const response = await getMessages(jwt);
messages.value = response.messages;
} catch (error) {
alert("Failed to get messages: " + error.message);
}
});
const onSubmit = async (message) => {
if (!isLoggedIn) return;
try {
await postMessage(message.text, jwt);
const response = await getMessages();
messages.value = response.messages;
} catch (error) {
alert("Failed to post message: " + error.message);
}
};
const onDelete = async (messageId) => {
try {
await deleteMessage(messageId, jwt);
const response = await getMessages();
messages.value = response.messages;
} catch (error) {
alert("Failed to delete message: " + error.message);
}
};
</script>
<template>
<div class="ts-container">
<BoardForm :locked="!isLoggedIn" @new-message="onSubmit" />
<div class="ts-content is-horizontally-fitted is-vertically-padded">
<div class="ts-wrap is-vertical">
<BoardMessage :message="message" v-for="message in messages" :key="message.id" @delete-message="onDelete(message.id)" />
</div>
</div>
</div>
</template>