import { ContentPart, Message } from '@/types/ask'; import React, { Dispatch, ForwardedRef, forwardRef, SetStateAction, useCallback, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { FlatList, FlatListProps, SafeAreaView, View } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import MessageItem from '../chat/message-item/message-item'; import SelectModel from "./selectModel"; import SingleContentModel from "./singleContentModel"; // 继承 FlatListProps 来接收所有 FlatList 的属性 interface ChatProps extends Omit, 'data' | 'renderItem'> { userMessages: Message[]; sessionId: string; setSelectedImages: Dispatch>; selectedImages: string[]; } function ChatComponent( { userMessages, sessionId, setSelectedImages, selectedImages, ...restProps }: ChatProps, ref: ForwardedRef> ) { const insets = useSafeAreaInsets(); const [modalVisible, setModalVisible] = React.useState({ visible: false, data: {} as ContentPart }); const { t } = useTranslation(); const keyExtractor = useCallback((item: Message) => `${item.role}-${item.timestamp}`, []); // 取消展示右键菜单 const [cancel, setCancel] = useState(true); const contentContainerStyle = useMemo(() => ({ padding: 16, flexGrow: 1, paddingTop: 0, }), []); const [modalDetailsVisible, setModalDetailsVisible] = useState<{ visible: boolean, content: any }>({ visible: false, content: [] }); const renderMessageItem = useCallback(({ item, index }: { item: Message, index: number }) => { const itemStyle = index === 0 ? { marginTop: 16, marginHorizontal: 16 } : { marginHorizontal: 16 }; return ( ); }, [insets, sessionId, modalVisible, modalDetailsVisible, selectedImages, t, cancel]); return ( {/* 单个图片弹窗 */} {/* 全部图片详情弹窗 */} ); } export default React.memo(forwardRef(ChatComponent));