52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import { useState, useCallback } from 'react'
|
|
import type { SendMessagePayload } from '../types'
|
|
import type { PlatformConfig } from './useNovaEvents'
|
|
|
|
interface UseMessageSenderProps {
|
|
conversationId?: string
|
|
platformConfig?: PlatformConfig
|
|
sendMessage?: (message: string) => void
|
|
agentId?: string
|
|
}
|
|
|
|
export function useMessageSender({
|
|
conversationId,
|
|
platformConfig,
|
|
sendMessage,
|
|
agentId,
|
|
}: UseMessageSenderProps) {
|
|
const [sendingMessage, setSendingMessage] = useState(false)
|
|
|
|
// Send Message Logic
|
|
const handleSend = useCallback(
|
|
(payload: SendMessagePayload) => {
|
|
// If platformConfig is provided, send via WebSocket
|
|
if (platformConfig && sendMessage) {
|
|
try {
|
|
setSendingMessage(true)
|
|
const message = {
|
|
message_type: 'chat',
|
|
conversation_id: conversationId,
|
|
agent_id: agentId,
|
|
agent_model: 'Nova Pro',
|
|
content: payload.content,
|
|
refer_content: payload.refer_content || '',
|
|
upload_file_ids: payload.upload_file_ids,
|
|
}
|
|
sendMessage(JSON.stringify(message))
|
|
} catch (error) {
|
|
console.error('Failed to send message via WebSocket:', error)
|
|
setSendingMessage(false)
|
|
}
|
|
}
|
|
},
|
|
[platformConfig, sendMessage, conversationId, agentId]
|
|
)
|
|
|
|
return {
|
|
sendingMessage,
|
|
setSendingMessage,
|
|
handleSend
|
|
}
|
|
}
|