import { nip04 } from 'nostr-tools'; import { useCallback, useState } from 'react'; import TextareaAutosize from 'react-textarea-autosize'; import { MediaUploader } from '@app/chats/components/messages/mediaUploader'; import { EnterIcon } from '@shared/icons'; import { useNostr } from '@utils/hooks/useNostr'; export function ChatMessageForm({ receiverPubkey, userPrivkey, }: { receiverPubkey: string; userPubkey: string; userPrivkey: string; }) { const { publish } = useNostr(); const [value, setValue] = useState(''); const encryptMessage = useCallback(async () => { return await nip04.encrypt(userPrivkey, receiverPubkey, value); }, [receiverPubkey, value]); const submit = async () => { const message = await encryptMessage(); const tags = [['p', receiverPubkey]]; // publish message await publish({ content: message, kind: 4, tags }); // reset state setValue(''); }; const handleEnterPress = (e: { key: string; shiftKey: KeyboardEvent['shiftKey']; preventDefault: () => void; }) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); submit(); } }; return (