Rev 7391 | Rev 7783 | 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 { Button, Modal } from "react-bootstrap";import { useForm } from "react-hook-form";import DescriptionInput from "./DescriptionInput";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";const ShareModal = () => {const [loading, setLoading] = useState(false);const { postUrl, isOpen, modalType } = useSelector(state => state.shareModal)const dispatch = useDispatch()const {register,unregister,errors,handleSubmit,setValue,getValues,clearErrors,setError,} = 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");}}, [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 = async (data, e) => {setLoading(true);const currentFormData = new FormData();for (let input in data) {currentFormData.append(input, data[input]);(`${input}:${data[input]}`);}axios.post(postUrl, currentFormData).then(({ data }) => {const newFeed = data.data;if (data.data.description || data.data.file || data.data.share_width) {return Object.entries(data.data).map(([key, value]) => {setError(key, { type: "required", message: value })})}if (data.success) {closeModal();// reset datae.target.reset();setValue("description", "");setValue("file", "");clearErrors();console.log("La publicación ha sido compartida")if (currentPage && timelineUrl) {fetchFeeds(timelineUrl, currentPage)}if (feedSharedId) {return addFeed(newFeed, feedSharedId);}return addFeed(newFeed);}console.log("Ha ocurrido un error")})setLoading(false);};const onUploadedHandler = (files) => {setValue("file", files);clearErrors("file");};return (<Modalshow={isOpen}onHide={closeModal}autoFocus={false}><form encType="multipart/form-data" onSubmit={handleSubmit(onSubmit)}><Modal.Header closeButton><Modal.Title>Compartir una publicación</Modal.Title></Modal.Header><Modal.Body><DescriptionInputname="description"setValue={setValue}/>{modalType !== shareModalTypes.POST&&<DropzoneComponentmodalType={modalType}onUploaded={onUploadedHandler}settedFile={getValues("file")}recomendationText={recomendationText[modalType]}/>}</Modal.Body><Modal.Footer><Buttonsize="sm"type="submit">Enviar</Button><Buttoncolor="danger"size="sm"variant="danger"onClick={closeModal}>Cancelar</Button></Modal.Footer></form></Modal>);};export default ShareModal