3042ddca38
- /wa-inbox, /wa-sessions e /wa-secretaria rodam sem a sidebar do scoreodonto (isStandaloneView); cada tela tem seu "Voltar" (Secretária ganhou botão na ThinNav). - SessionsView: banner "Você já possui acesso ao WhatsApp" quando há sessão ativa. - avatares: usa a URL do CDN (contactAvatarUrl/instance.avatar) direto; Avatar exibe sem depender de version; self-heal no onError re-busca a foto atual. - deps: framer-motion, immer. Dev override com HMR (docker-compose.dev.yml). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
/**
|
|
* useMessageInput — gerencia o estado e envio da barra de mensagem.
|
|
*
|
|
* Extrai de inbox/index.tsx:
|
|
* - newMessage + setNewMessage
|
|
* - handleSendMessage
|
|
*/
|
|
import { useState, useCallback } from 'react'
|
|
import type { NewWhatsChat } from '../../types/inboxTypes'
|
|
|
|
interface UseMessageInputOptions {
|
|
selectedChat: NewWhatsChat | null
|
|
replyingTo?: { message_id: string } | null
|
|
onClearReply?: () => void
|
|
onSendText: (text: string, mentions?: string[], replyToMessageId?: string) => Promise<void>
|
|
}
|
|
|
|
export function useMessageInput({ selectedChat, replyingTo, onClearReply, onSendText }: UseMessageInputOptions) {
|
|
const [newMessage, setNewMessage] = useState('')
|
|
const [mentions, setMentions] = useState<string[]>([])
|
|
|
|
const handleSendMessage = useCallback(async (e?: React.FormEvent) => {
|
|
e?.preventDefault()
|
|
if (!selectedChat || !newMessage.trim()) return
|
|
const text = newMessage
|
|
const mentionJids = mentions.length > 0 ? [...mentions] : undefined
|
|
const replyToMessageId = replyingTo?.message_id
|
|
setNewMessage('')
|
|
setMentions([])
|
|
onClearReply?.()
|
|
await onSendText(text, mentionJids, replyToMessageId)
|
|
}, [selectedChat, newMessage, mentions, replyingTo, onSendText, onClearReply])
|
|
|
|
return {
|
|
newMessage,
|
|
setNewMessage,
|
|
mentions,
|
|
setMentions,
|
|
handleSendMessage,
|
|
}
|
|
}
|