Rev 15214 | Rev 15354 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useState, useEffect } from 'react'import axios from 'axios'import { Modal } from 'react-bootstrap'import { useForm } from 'react-hook-form'import { shareModalTypes } from '../redux/share-modal/shareModal.types'import { closeShareModal } from '../redux/share-modal/shareModal.actions'import { useDispatch, useSelector } from 'react-redux'import DropzoneComponent from './Dropzone/DropzoneComponent'import { addFeed, fetchFeeds } from '../redux/feed/feed.actions'import { addNotification } from '../redux/notification/notification.actions'import Spinner from './Spinner'import { CKEditor } from 'ckeditor4-react'import { config } from './helpers/ckeditor_config'const ShareModal = () => {const [loading, setLoading] = useState(false)const { postUrl, isOpen, modalType } = useSelector(state => state.shareModal)const { currentPage, timelineUrl, feedSharedId } = useSelector(state => state.feed)const dispatch = useDispatch()const {register,unregister,errors,handleSubmit,setValue,getValues,clearErrors,} = useForm({defaultValues: {description: '',share_width: '',}})useEffect(() => {register('description', {required: { value: 'true', message: 'El campo es requerido' },})register('posted_or_shared')if (modalType !== shareModalTypes.POST && modalType !== shareModalTypes.SHARE) {register('file', {required: { value: 'true', message: 'El campo es requerido' },})} else {if (!getValues('file')) unregister('file')}if (modalType === shareModalTypes.SHARE) setValue('posted_or_shared', shareModalTypes.POST)}, [modalType])const recomendationText = {IMAGE: 'Tamaño recomendado: 720x720',FILE: 'solo documentos PDF',VIDEO: 'Video de extensión mp4, mpeg, webm'}const closeModal = () => dispatch(closeShareModal())useEffect(() => clearErrors(), [isOpen])const onSubmit = (data) => {setLoading(true)const currentFormData = new FormData()Object.entries(data).map(([entry, value]) => currentFormData.append(entry, value))axios.post(postUrl, currentFormData).then(({ data }) => {const newFeed = data.dataif (!data.success) {typeof data.data === 'string'? dispatch(addNotification({style: 'danger',msg: data.data})): Object.entries(data.data).map(([key, value]) =>value.map(err =>dispatch(addNotification({style: 'danger',msg: `${key}: ${err}`}))))setLoading(false)closeModal()}setLoading(false)setValue('description', '')setValue('file', '')clearErrors()closeModal()dispatch(addNotification({style: 'success',msg: 'La publicación ha sido compartida',}))if (currentPage && timelineUrl) {dispatch(fetchFeeds(timelineUrl, currentPage))}if (feedSharedId) {return dispatch(addFeed(newFeed, feedSharedId))}return dispatch(addFeed(newFeed))})}const onUploadedHandler = (files) => {setValue('file', files)clearErrors('file')}return (<Modalshow={isOpen}onHide={closeModal}autoFocus={false}><form onSubmit={handleSubmit(onSubmit)}><Modal.Header closeButton><Modal.Title>Compartir una publicación</Modal.Title></Modal.Header><Modal.Body>{loading? <Spinner />: <><CKEditoronChange={(e) => setValue('description', e.editor.getData())}config={config}/>{errors.description && <p>{errors.description.message}</p>}{(modalType !== shareModalTypes.POST || modalType !== shareModalTypes.SHARE)&&<DropzoneComponentmodalType={modalType}onUploaded={onUploadedHandler}settedFile={getValues('file')}recomendationText={recomendationText[modalType]}/>}{errors.file && <p>{errors.file.message}</p>}</>}</Modal.Body><Modal.Footer><buttonclassName='btn btn-sm btn-primary'disabled={loading}type='submit'>Enviar</button><buttonclassName='btn btn-sm btn-tertiary'disabled={loading}onClick={closeModal}>Cancelar</button></Modal.Footer></form></Modal>)}export default ShareModal