Autoría | Ultima modificación | Ver Log |
import React from "react";import { useState, useEffect } from "react";import { Button, Modal } from "react-bootstrap";import { useForm } from "react-hook-form";import {axios} from "../../../../../../../utils";import styled from "styled-components";import DropzoneComponent from "../../../../../../../shared/dropzone/DropzoneComponent";import FormErrorFeedback from "../../../../../../../shared/form-error-feedback/FormErrorFeedback";import Spinner from "../../../../../../../shared/loading-spinner/Spinner";const StyledSpinnerContainer = styled.div`position: absolute;left: 0;top: 0;width: 100%;height: 100%;background: rgba(255, 255, 255, 0.4);display: flex;justify-content: center;align-items: center;z-index: 300;`;const Cover = (props) => {// props destructuringconst { groupId, cover, addNotification, imageSizeCover } = props;// react hook formconst {register,errors,handleSubmit,setValue,clearErrors,setError,} = useForm();// statesconst [isModalOpen, setIsModalOpen] = useState(false);const [loading, setLoading] = useState(false);const [coverImg, setCoverImg] = useState({path: `/storage/type/group-cover/code/${groupId}/${cover && `filename/${cover}`}`,uid: Date.now(),});useEffect(() => {register("cover", {required: { value: "true", message: "El campo es requerido" },});// setSettedCover(false);}, []);const handleCoverSectionModalOpen = (event) => {event && event.preventDefault();setIsModalOpen(!isModalOpen);};const onUploadedHandler = (files) => {setValue("cover", files);clearErrors("cover");};const onSubmitHandler = async (data) => {setLoading(true);const formData = new FormData();Object.entries(data).map(([key, value]) => {formData.append(key, value);});await axios.post(`/group/my-groups/cover/${groupId}/operation/upload`, formData).then((response) => {const resData = response.data;(resData);if (resData.success) {setLoading(false);const newCoverImg = {path: resData.data,uid: Date.now(),};setCoverImg(newCoverImg);setValue("cover", "");handleCoverSectionModalOpen();} else {const resError = resData.data;if (resError.constructor.name === "Object") {Object.entries(resError).map(([key, value]) => {if (key in getValues()) {setError(key, {type: "manual",message: Array.isArray(value) ? value[0] : value,});}});} else {addNotification({style: "danger",msg: resError,});}}});setLoading(false);};const dropZoneRender = () => (<DropzoneComponentmodalType="IMAGE"onUploaded={onUploadedHandler}recomendationText={`Imágenes recomendadas de ${imageSizeCover}`}/>);return (<React.Fragment><section className="cover-sec"><imgid="user-cover-img"// src={`${coverImg.path}?${coverImg.uid}`}src={`${coverImg.path}`}// src="<?php echo $this->url('storage', ['type' => 'group-cover', 'code' => $group_id_encrypted, 'filename' => $cover]) ?>"alt="cover-image"/><div className="add-pic-box"><div className="container"><div className="row no-gutters"><div className="col-lg-12 col-sm-12"><ahref="#"className="btn-cover-open"onClick={(e) => {e.preventDefault();handleCoverSectionModalOpen();}}>Cambiar imagen</a></div></div></div></div></section>{/* modal */}<Modalshow={isModalOpen}onHide={handleCoverSectionModalOpen}style={{ overflowY: "scroll" }}><Modal.Header closeButton><Modal.Title>Portada</Modal.Title></Modal.Header><formencType="multipart/form-data"onSubmit={handleSubmit(onSubmitHandler)}><Modal.Body>{dropZoneRender()}{errors.cover && (<FormErrorFeedback>{errors.cover.message}</FormErrorFeedback>)}</Modal.Body><Modal.Footer><Button type="submit">Enviar</Button><Button variant="danger" onClick={handleCoverSectionModalOpen}>Cancelar</Button></Modal.Footer></form>{loading && (<StyledSpinnerContainer><Spinner /></StyledSpinnerContainer>)}</Modal></React.Fragment>);};export default Cover;