fix: handle optional messages in ConversationDetailDialog and API response
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user