fix: harden dashboard message state
This commit is contained in:
@@ -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) =>
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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"}
|
||||||
|
|||||||
Reference in New Issue
Block a user