Rev 15269 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
/* eslint-disable no-mixed-spaces-and-tabs */import React, { useState, useCallback, useEffect } from 'react'import { useDropzone } from 'react-dropzone'import { baseStyle, imgStyle, thumbsContainerStyle } from '../../assets/styles/js-styles/Dropzone'import FilePreview from './FilePreview'const DropzoneComponent = ({modalType,onUploaded,settedFile,recomendationText}) => {const [errors, setErrors] = useState([])const [files, setFiles] = useState([])const onDropRejected = useCallback((rejectedFiles) => {rejectedFiles.map((fileRejection) => {switch (fileRejection.errors[0].code) {case 'too-many-files':setErrors([...errors, 'solo puedes agregar 1 archivo'])breakcase 'file-invalid-type':setErrors([...errors, 'por favor seleccione un archivo valido'])breakdefault:setErrors(errors)break}})}, [])useEffect(() => {if (settedFile) setFiles([settedFile])}, [settedFile])const acceptedMimeTypes = {IMAGE: 'image/jpeg, image/png, image/jpg',FILE: 'application/pdf',VIDEO: 'video/mp4, video/mpeg, video/webm',CHAT: 'video/mp4, video/mpeg, video/webm, application/pdf, image/jpeg, image/png, image/jpg'}const { getRootProps, getInputProps } = useDropzone({accept: acceptedMimeTypes[modalType],multiple: false,onDrop: (accepted) => {onUploaded(accepted[0])setFiles(accepted[0])},onDropRejected,onDropAccepted: () => {setErrors([])},maxFiles: 1,})const onDeleteFileHandler = (id) => {onUploaded('')setFiles(files.filter(file => file !== id))}const filePreviewOptions = (modalType, file) => {const options = {IMAGE: <img src={URL.createObjectURL(file)} style={imgStyle} />,FILE: <object data={URL.createObjectURL(file)} type="application/pdf" width="400" height="200" />,VIDEO: <video src={URL.createObjectURL(file)} width="400" height="300" controls autoPlay muted />}return options[modalType]}return (<div>{!files.length &&<div {...getRootProps({ className: 'dropzone', style: baseStyle })}><input {...getInputProps()} /><p>Arrastra el archivo aqui, o haga click para seleccionar</p>{recomendationText}</div>}<aside><div style={thumbsContainerStyle}>{files.map((file, index) =><FilePreviewonDeleteFileHandler={() => onDeleteFileHandler(file)}key={index}>{filePreviewOptions(modalType, file)}</FilePreview>)}</div></aside></div>)}export default React.memo(DropzoneComponent)