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; saving: boolean;
item: AdminConversation | null; item: AdminConversation | null;
detail: AdminConversationDetail | null; detail: AdminConversationDetail | null;
messages: AdminMessage[]; messages?: AdminMessage[] | null;
/** 是否还有更早消息(cursor 分页) */ /** 是否还有更早消息(cursor 分页) */
messagesHasMore?: boolean; messagesHasMore?: boolean;
loadingMoreMessages?: boolean; loadingMoreMessages?: boolean;
@@ -139,7 +139,7 @@ export function ConversationDetailDialog({
saving, saving,
item, item,
detail, detail,
messages, messages: rawMessages,
messagesHasMore = false, messagesHasMore = false,
loadingMoreMessages = false, loadingMoreMessages = false,
onLoadMoreMessages, onLoadMoreMessages,
@@ -150,6 +150,7 @@ export function ConversationDetailDialog({
onRead, onRead,
onOpenClose, onOpenClose,
}: ConversationDetailDialogProps) { }: ConversationDetailDialogProps) {
const messages = Array.isArray(rawMessages) ? rawMessages : [];
const currentConversation = detail ?? item; const currentConversation = detail ?? item;
const isClosedConversation = currentConversation?.status === 4; const isClosedConversation = currentConversation?.status === 4;
const isPendingConversation = currentConversation?.status === 2; const isPendingConversation = currentConversation?.status === 2;
@@ -456,7 +456,7 @@ export default function DashboardConversationsPage() {
fetchConversationMessages({ conversationId: item.id, limit: 20 }), fetchConversationMessages({ conversationId: item.id, limit: 20 }),
]) ])
setDetailData(detail) setDetailData(detail)
setDetailMessages(messages.results) setDetailMessages(Array.isArray(messages.results) ? messages.results : [])
setDetailMessagesNextCursor(messages.cursor ?? "") setDetailMessagesNextCursor(messages.cursor ?? "")
setDetailMessagesHasMore(Boolean(messages.hasMore)) setDetailMessagesHasMore(Boolean(messages.hasMore))
} catch (error) { } catch (error) {
@@ -481,7 +481,8 @@ export default function DashboardConversationsPage() {
cursor, cursor,
limit: 20, limit: 20,
}) })
setDetailMessages((prev) => [...page.results, ...prev]) const nextResults = Array.isArray(page.results) ? page.results : []
setDetailMessages((prev) => [...nextResults, ...prev])
setDetailMessagesNextCursor(page.cursor ?? "") setDetailMessagesNextCursor(page.cursor ?? "")
setDetailMessagesHasMore(Boolean(page.hasMore)) setDetailMessagesHasMore(Boolean(page.hasMore))
} catch (error) { } catch (error) {
+1 -1
View File
@@ -14,7 +14,7 @@ export type PageResult<T> = {
} }
export type CursorResult<T> = { export type CursorResult<T> = {
results: T[] results?: T[] | null
cursor: string cursor: string
hasMore: boolean hasMore: boolean
} }