Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4353 | Rev 5187 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3704 stevensc 1
/* eslint-disable react/prop-types */
2655 stevensc 2
import React, { useRef, useState } from 'react'
5185 stevensc 3
import { axios } from '../../utils'
4
import { addNotification } from '../../redux/notification/notification.actions'
5
import { useDispatch } from 'react-redux'
6
import { useForm } from 'react-hook-form'
7
import SendIcon from '@mui/icons-material/Send'
8
import AttachFileIcon from '@mui/icons-material/AttachFile'
9
import FileModal from '../../mobile-chat/mobile-chat/chat/fileModal/FileModal'
1748 stevensc 10
 
5185 stevensc 11
const permittedFiles = 'video/mp4, video/mpeg, video/webm, application/pdf, image/jpeg, image/png, image/jpg'
1748 stevensc 12
 
5185 stevensc 13
const MessageBox = ({ onSend, sendLink, setMsgs }) => {
14
  const fileInputEl = useRef(null)
15
  const [selectedFile, setSelectedFile] = useState('')
16
  const { handleSubmit, register, reset } = useForm()
17
  const dispatch = useDispatch()
2655 stevensc 18
 
5185 stevensc 19
  const handleUploadFile = (e) => {
20
    const file = e.target.files[0]
21
    if (file) setSelectedFile(file)
22
  }
1748 stevensc 23
 
5185 stevensc 24
  const removeSelectedFile = () => setSelectedFile('')
2655 stevensc 25
 
5185 stevensc 26
  const handleSendFile = () => {
27
    const formData = new FormData()
28
    formData.append('filename', selectedFile)
29
    formData.append('message', 'File')
2655 stevensc 30
 
5185 stevensc 31
    axios.post(sendLink, formData)
32
      .then(({ data }) => {
33
        if (!data.success) {
34
          return dispatch(addNotification({
35
            style: 'danger',
36
            msg: 'Ha ocurrido un error'
37
          }))
38
        }
2655 stevensc 39
 
5185 stevensc 40
        setMsgs(prev => [data.data, ...prev])
41
        setSelectedFile('')
42
      })
43
  }
3044 stevensc 44
 
5185 stevensc 45
  const handleSend = ({ message }) => {
46
    onSend(message)
47
    reset()
48
  }
2655 stevensc 49
 
5185 stevensc 50
  return (
4351 stevensc 51
        <div className="chat__input-container">
3711 stevensc 52
            <form onSubmit={handleSubmit(handleSend)}>
4351 stevensc 53
                <input
54
                    type="file"
55
                    name="file"
56
                    hidden
57
                    ref={fileInputEl}
58
                    accept={permittedFiles}
59
                    onChange={handleUploadFile}
60
                />
61
                <button
62
                    type="button"
4353 stevensc 63
                    className='send_btn icon'
4351 stevensc 64
                    onClick={() => fileInputEl.current.click()}
4352 stevensc 65
                >
66
                    <AttachFileIcon />
67
                </button>
4351 stevensc 68
                <input
69
                    type="text"
70
                    name="message"
4352 stevensc 71
                    className="chatInput"
4351 stevensc 72
                    ref={register({ required: true })}
5185 stevensc 73
                    placeholder={LABELS.WRITE_YOUR_MESSAGE_HERE}
4351 stevensc 74
                />
75
                <button type="submit" className="send_btn">
4352 stevensc 76
                    <SendIcon />
4351 stevensc 77
                </button>
1748 stevensc 78
            </form>
3710 stevensc 79
            {selectedFile &&
2657 stevensc 80
                <FileModal
81
                    file={selectedFile}
82
                    onCancel={removeSelectedFile}
83
                    onSend={handleSendFile}
84
                />
85
            }
3710 stevensc 86
        </div >
5185 stevensc 87
  )
1748 stevensc 88
}
5185 stevensc 89
export default MessageBox