import { View, ScrollView } from "react-native"; import { StyleSheet, useUnistyles } from "react-native-unistyles"; import { forwardRef, useRef, useState } from "react"; import { BottomSheetModal } from "@gorhom/bottom-sheet"; import { UserMessage, AssistantMessage, ActivityLog, ToolCall, } from "@/components/message"; import { ToolCallBottomSheet } from "./tool-call-bottom-sheet"; import type { MessageEntry } from "@/contexts/session-context"; interface OrchestratorMessagesViewProps { messages: MessageEntry[]; currentAssistantMessage: string; onArtifactClick: (artifactId: string) => void; } export const OrchestratorMessagesView = forwardRef( function OrchestratorMessagesView({ messages, currentAssistantMessage, onArtifactClick }, ref) { const { theme } = useUnistyles(); const bottomSheetRef = useRef(null); const [selectedToolCall, setSelectedToolCall] = useState<{ toolName: string; status: 'executing' | 'completed' | 'failed'; args: any; result?: any; error?: any; } | null>(null); function handleOpenToolCallDetails(toolCall: { toolName: string; status: 'executing' | 'completed' | 'failed'; args: any; result?: any; error?: any; }) { setSelectedToolCall(toolCall); bottomSheetRef.current?.present(); } return ( <> {messages.map((msg) => { if (msg.type === "user") { return ( ); } if (msg.type === "assistant") { return ( ); } if (msg.type === "activity") { return ( ); } if (msg.type === "artifact") { return ( ); } if (msg.type === "tool_call") { return ( handleOpenToolCallDetails({ toolName: msg.toolName, status: msg.status, args: msg.args, result: msg.result, error: msg.error, })} /> ); } return null; })} {/* Streaming assistant message */} {currentAssistantMessage && ( )} ); } ); const styles = StyleSheet.create((theme) => ({ scrollView: { flex: 1, }, scrollContent: { paddingHorizontal: theme.spacing[4], paddingTop: theme.spacing[4], paddingBottom: theme.spacing[6], }, }));