fix: harden dashboard message state
This commit is contained in:
@@ -29,7 +29,15 @@ export default function App() {
|
||||
const ws = connectDashboardSocket((event: DashboardEvent) => {
|
||||
switch (event.type) {
|
||||
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;
|
||||
case "message_analyzed":
|
||||
setMessages((prev) =>
|
||||
|
||||
@@ -29,16 +29,7 @@ export interface PageResult<T> {
|
||||
nextCursor: string | null;
|
||||
}
|
||||
|
||||
export interface DashboardMessage {
|
||||
id: string;
|
||||
channel_id: string;
|
||||
user_id: string;
|
||||
username: string;
|
||||
avatar_url: string | null;
|
||||
content: string;
|
||||
created_at: number;
|
||||
type: "text" | "image" | "voice";
|
||||
}
|
||||
export type DashboardMessage = MessageRecord;
|
||||
|
||||
export interface Guild {
|
||||
id: string;
|
||||
|
||||
@@ -60,6 +60,7 @@ export function MessageCard({ message, onReanalyze }: MessageCardProps) {
|
||||
|
||||
<div className="message-card-actions">
|
||||
<button
|
||||
type="button"
|
||||
className="btn-reanalyze"
|
||||
onClick={() => onReanalyze(message.id)}
|
||||
disabled={aiStatus === "pending"}
|
||||
|
||||
Reference in New Issue
Block a user