fix: blank page on channel click + logout issue

This commit is contained in:
2026-06-29 14:16:32 -04:00
parent a7da8104d7
commit 175ec90705
4 changed files with 37 additions and 28 deletions
+30 -16
View File
@@ -1,14 +1,15 @@
import { create } from 'zustand';
import { api } from '../lib/api.ts';
import type { User } from './auth.ts';
import { create } from "zustand";
import { api } from "../lib/api.ts";
export interface Message {
id: string;
channelId: string;
author: User;
channel_id: string;
author_id: string;
author_username: string;
author_display_name: string | null;
content: string;
createdAt: string;
updatedAt?: string;
created_at: string;
edited_at: string | null;
}
interface MessageState {
@@ -30,22 +31,33 @@ export const useMessageStore = create<MessageState>((set) => ({
fetchMessages: async (channelId, before) => {
set({ isLoading: true, error: null });
try {
const params = before ? `?before=${encodeURIComponent(before)}` : '';
const messages = await api.get<Message[]>(`/channels/${channelId}/messages${params}`);
const params = before ? `?before=${encodeURIComponent(before)}` : "";
const messages = await api.get<Message[]>(
`/channels/${channelId}/messages${params}`,
);
set((state) => ({
messagesByChannel: { ...state.messagesByChannel, [channelId]: messages },
messagesByChannel: {
...state.messagesByChannel,
[channelId]: Array.isArray(messages) ? messages : [],
},
isLoading: false,
}));
} catch (error) {
set({
isLoading: false,
error: error instanceof Error ? error.message : 'Failed to fetch messages',
error:
error instanceof Error
? error.message
: "Failed to fetch messages",
});
}
},
sendMessage: async (channelId, content) => {
const message = await api.post<Message>(`/channels/${channelId}/messages`, { content });
const message = await api.post<Message>(
`/channels/${channelId}/messages`,
{ content },
);
set((state) => {
const list = state.messagesByChannel[channelId] || [];
return {
@@ -60,25 +72,27 @@ export const useMessageStore = create<MessageState>((set) => ({
addMessage: (message) =>
set((state) => {
const list = state.messagesByChannel[message.channelId] || [];
const list = state.messagesByChannel[message.channel_id] || [];
if (list.some((m) => m.id === message.id)) {
return state;
}
return {
messagesByChannel: {
...state.messagesByChannel,
[message.channelId]: [...list, message],
[message.channel_id]: [...list, message],
},
};
}),
updateMessage: (message) =>
set((state) => {
const list = state.messagesByChannel[message.channelId] || [];
const list = state.messagesByChannel[message.channel_id] || [];
return {
messagesByChannel: {
...state.messagesByChannel,
[message.channelId]: list.map((m) => (m.id === message.id ? message : m)),
[message.channel_id]: list.map((m) =>
m.id === message.id ? message : m,
),
},
};
}),