fix: harden dashboard message state

This commit is contained in:
MythEclipse
2026-05-14 21:10:24 +07:00
parent cb2cfc76f2
commit a812182218
3 changed files with 11 additions and 11 deletions

View File

@@ -29,7 +29,15 @@ export default function App() {
const ws = connectDashboardSocket((event: DashboardEvent) => { const ws = connectDashboardSocket((event: DashboardEvent) => {
switch (event.type) { switch (event.type) {
case "message_created": case "message_created":
setMessages((prev) => [event.data, ...prev].slice(0, 200)); setMessages((prev) => {
const existing = prev.some((message) => message.id === event.data.id);
if (existing) {
return prev.map((message) =>
message.id === event.data.id ? event.data : message,
);
}
return [event.data, ...prev].slice(0, 200);
});
break; break;
case "message_analyzed": case "message_analyzed":
setMessages((prev) => setMessages((prev) =>

View File

@@ -29,16 +29,7 @@ export interface PageResult<T> {
nextCursor: string | null; nextCursor: string | null;
} }
export interface DashboardMessage { export type DashboardMessage = MessageRecord;
id: string;
channel_id: string;
user_id: string;
username: string;
avatar_url: string | null;
content: string;
created_at: number;
type: "text" | "image" | "voice";
}
export interface Guild { export interface Guild {
id: string; id: string;

View File

@@ -60,6 +60,7 @@ export function MessageCard({ message, onReanalyze }: MessageCardProps) {
<div className="message-card-actions"> <div className="message-card-actions">
<button <button
type="button"
className="btn-reanalyze" className="btn-reanalyze"
onClick={() => onReanalyze(message.id)} onClick={() => onReanalyze(message.id)}
disabled={aiStatus === "pending"} disabled={aiStatus === "pending"}