This commit is contained in:
Nell committed 2026-10-18 18:46:52 +02:00
1 parent 0cb8b068a8
commit 64b0c76120
11 files changed
+453 -5

No files matched your search

+13 -1
View File
@@ -30,7 +30,7 @@ const router = useRouter()
const {renderMarkdown} = useMarkdown()
const messageContainer = ref<HTMLElement | null>(null);
const {messages, loading, loadingBefore, loadingAfter, hasMoreAfter, isAtBottom, newestId} = storeToRefs(messageStore);
const {messages, loading, loadError, loadingBefore, loadingAfter, hasMoreAfter, isAtBottom, newestId} = storeToRefs(messageStore);
const newMessage = ref('');
const fileInput = ref<HTMLInputElement | null>(null);
type PendingAttachment = {
@@ -435,6 +435,18 @@ watch(() => props.serverId, (newServerId) => {
indeterminate
/>
<v-alert
v-if="loadError && !loading"
class="mx-4 mt-4"
type="error"
variant="tonal"
>
<div class="d-flex align-center justify-space-between ga-2">
<span>Impossible de charger l'historique des messages.</span>
<v-btn size="small" variant="text" @click="messageStore.fetchMessages(channelId)">Réessayer</v-btn>
</div>
</v-alert>
<v-list bg-color="transparent" lines="three">
<v-list-item
v-for="msg in messages"
+3
View File
@@ -124,6 +124,7 @@ export const useMessageStore = defineStore("message", {
hasMoreBefore: false,
hasMoreAfter: false,
loading: false,
loadError: null as string | null,
loadingBefore: false,
loadingAfter: false,
isAtBottom: true,
@@ -155,6 +156,7 @@ export const useMessageStore = defineStore("message", {
this.hasMoreAfter = false;
this.isAtBottom = true;
this.loading = true;
this.loadError = null;
try {
const page = await requestPage(channelId, {limit: MESSAGE_WINDOW_SIZE});
@@ -166,6 +168,7 @@ export const useMessageStore = defineStore("message", {
} catch (error) {
if (requestVersion === this.requestVersion) {
console.error("Erreur lors du chargement des messages:", error);
this.loadError = error instanceof Error ? error.message : "Message loading failed";
}
} finally {
if (requestVersion === this.requestVersion) {
+13 -1
View File
@@ -1,10 +1,12 @@
import {defineStore} from 'pinia'
import {useApi} from "@/composables/useApi.ts";
import type {User} from "@/types/user";
import {onGatewayEvent} from "@/plugins/events.ts";
export const useUserStore = defineStore('user', {
state: () => ({
users: [] as User[]
users: [] as User[],
serverId: null as string | null
}),
getters: {
usersById: (state): Record<string, User> => {
@@ -21,11 +23,21 @@ export const useUserStore = defineStore('user', {
if (serverId) {
url += `?server_id=${serverId}`;
}
this.serverId = serverId ?? null;
const response = await api.get(url);
this.users = await response.json();
},
reset() {
this.users = [];
this.serverId = null;
}
}
});
onGatewayEvent("ServerUser", (payload) => {
const store = useUserStore();
const content = payload.content as { server_id?: string | null };
if (content?.server_id && content.server_id === store.serverId) {
void store.fetchUsers(content.server_id);
}
});