Rev 5916 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
/* eslint-disable react/prop-types */import React, { useRef, useState } from 'react'import { axios } from '../../utils'import { useDispatch } from 'react-redux'import { addNotification } from '../../redux/notification/notification.actions'import AttachFileIcon from '@mui/icons-material/AttachFile'import SentimentVerySatisfiedRoundedIcon from '@mui/icons-material/SentimentVerySatisfiedRounded'import Emojione from '../../chat/chat/personal-chat/emojione/Emojione'import SendFileModal from '../../chat/chat/personal-chat/send-file-modal/SendFileModal'const TextBox = ({uploadUrl = '',isNotSeen = false,markRead = () => false,onSend,}) => {const [isShowFileModal, setIsShowFileModal] = useState(false)const [showEmojiTab, setShowEmojiTab] = useState(false)const [loading, setLoading] = useState(false)const textAreaEl = useRef(null)const dispatch = useDispatch()const handleShowEmojiTab = () => {setShowEmojiTab(!showEmojiTab)}const toggleFileModal = () => {setIsShowFileModal(!isShowFileModal)}const handleClickEmoji = (e) => {const shortname = e.currentTarget.dataset.shortnameconst currentText = textAreaEl.current.valueconst cursorPosition = textAreaEl.current.selectionStartconst textBehind = currentText.substring(0, cursorPosition)const textForward = currentText.substring(cursorPosition)const unicode = emojione.shortnameToUnicode(shortname)textAreaEl.current.value = `${textBehind}${unicode}${textForward}`textAreaEl.current.focus()textAreaEl.current.setSelectionRange(cursorPosition + unicode.length,cursorPosition + unicode.length)}const onKeyDown = async (e) => {if (e.key !== 'Enter') return falsee.preventDefault()const message = e.target.valueawait onSend(message)e.target.value = ''setShowEmojiTab(false)}const sendFile = (file) => {setLoading(true)const formData = new FormData()formData.append('file', file)axios.post(uploadUrl, formData).then(({ data: response }) => {const { success, data } = responseif (!success) {const errorMessage =typeof data === 'string' ? data : 'Ha ocurrido un error'dispatch(addNotification({ style: 'success', msg: errorMessage }))return}toggleFileModal()}).finally(() => setLoading(false))}return (<><div className="chat-text_box"><button className="btn" onClick={toggleFileModal}><AttachFileIcon /></button><button className="btn" onClick={handleShowEmojiTab}><SentimentVerySatisfiedRoundedIcon /></button><textareaplaceholder={CHAT_LABELS.WRITE_A_MESSAGE}onKeyDown={onKeyDown}ref={textAreaEl}onFocus={() => isNotSeen && markRead()}/><divclassName="emojione-container"style={{ display: showEmojiTab ? 'block' : 'none' }}><Emojione onClickEmoji={handleClickEmoji} /></div></div><SendFileModalisShow={isShowFileModal}onHide={toggleFileModal}onComplete={sendFile}loading={loading}/></>)}export default TextBox