Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 1289 | Ir a la última revisión | Autoría | Comparar con el anterior | 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 styled from "styled-components";
import { axios } from "../../../../utils";
import Spinner from "../../../../shared/loading-spinner/Spinner";
import FormErrorFeedback from "../../../../shared/form-error-feedback/FormErrorFeedback";
import { shareModalTypes } from "../../../../redux/share-modal/shareModal.types";
import DropzoneComponent from "../../../../shared/dropzone/DropzoneComponent";

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 SendFileModal = (props) => {
  // props destructuring
  const { show, onHide, urlUpload } = props;

  // react hook form
  const {
    register,
    errors,
    handleSubmit,
    setValue,
    getValues,
    clearErrors,
  } = useForm();

  // states
  const [loading, setLoading] = useState(false);

  const onUploadedHandler = (files) => {
    setValue("file", files);
    clearErrors("file");
  };

  const onSubmitHandler = async (data) => {
    setLoading(true);
    const formData = new FormData();
    Object.entries(data).map(([key, value]) => {
      formData.append(key, value);
    });
    await axios.post(urlUpload, formData).then((response) => {
      const resData = response.data;
      if (resData.success) {
        onHide();
      }
    });
    setLoading(false);
  };

  useEffect(() => {
    register("file", {
      required: "Por favor seleccione un archivo",
    });
  }, []);

  return (
    <Modal show={show} onHide={onHide} style={{ overflowY: "scroll" }}>
      <Modal.Header closeButton>
        <Modal.Title>Compartir un documento</Modal.Title>
      </Modal.Header>
      <form
        encType="multipart/form-data"
        onSubmit={handleSubmit(onSubmitHandler)}
      >
        <Modal.Body>
          {
            loading
              ?
              <StyledSpinnerContainer>
                <Spinner />
              </StyledSpinnerContainer>
              :
              <DropzoneComponent
                modalType={shareModalTypes.CHAT}
                onUploaded={onUploadedHandler}
                recomendationText={
                  <p style={{ textAlign: "center" }}>
                    Imagenes: png, jpg, jpeg
                    <br />
                    Videos: mp4, mpeg, webm
                    <br />
                    Archivos: pdf
                  </p>
                }
              />
          }
          {
            errors.file
            &&
            <FormErrorFeedback>{errors.file.message}</FormErrorFeedback>
          }
        </Modal.Body>
        <Modal.Footer>
          <Button
            type="submit"
            disabled={loading}
          >
            Enviar
          </Button>
          <Button variant="danger" onClick={onHide}>
            Cancelar
          </Button>
        </Modal.Footer>
      </form>
    </Modal>
  );
};

export default SendFileModal;