fix: handle optional messages in ConversationDetailDialog and API response

This commit is contained in:
mlogclub
2026-04-24 21:37:50 +08:00
parent 4f633b3794
commit 92fae381a4
3 changed files with 7 additions and 5 deletions
@@ -33,7 +33,7 @@ type ConversationDetailDialogProps = {
saving: boolean;
item: AdminConversation | null;
detail: AdminConversationDetail | null;
messages: AdminMessage[];
messages?: AdminMessage[] | null;
/** 是否还有更早消息(cursor 分页) */
messagesHasMore?: boolean;
loadingMoreMessages?: boolean;
@@ -139,7 +139,7 @@ export function ConversationDetailDialog({
saving,
item,
detail,
messages,
messages: rawMessages,
messagesHasMore = false,
loadingMoreMessages = false,
onLoadMoreMessages,
@@ -150,6 +150,7 @@ export function ConversationDetailDialog({
onRead,
onOpenClose,
}: ConversationDetailDialogProps) {
const messages = Array.isArray(rawMessages) ? rawMessages : [];
const currentConversation = detail ?? item;
const isClosedConversation = currentConversation?.status === 4;
const isPendingConversation = currentConversation?.status === 2;
@@ -456,7 +456,7 @@ export default function DashboardConversationsPage() {
fetchConversationMessages({ conversationId: item.id, limit: 20 }),
])
setDetailData(detail)
setDetailMessages(messages.results)
setDetailMessages(Array.isArray(messages.results) ? messages.results : [])
setDetailMessagesNextCursor(messages.cursor ?? "")
setDetailMessagesHasMore(Boolean(messages.hasMore))
} catch (error) {
@@ -481,7 +481,8 @@ export default function DashboardConversationsPage() {
cursor,
limit: 20,
})
setDetailMessages((prev) => [...page.results, ...prev])
const nextResults = Array.isArray(page.results) ? page.results : []
setDetailMessages((prev) => [...nextResults, ...prev])
setDetailMessagesNextCursor(page.cursor ?? "")
setDetailMessagesHasMore(Boolean(page.hasMore))
} catch (error) {
+1 -1
View File
@@ -14,7 +14,7 @@ export type PageResult<T> = {
}
export type CursorResult<T> = {
results: T[]
results?: T[] | null
cursor: string
hasMore: boolean
}