Rev 2717 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import { axios } from "../../../utils";import React, { useEffect, useState } from "react";import { connect } from "react-redux";import styled from "styled-components";import { addNotification } from "../../../redux/notification/notification.actions";import FormErrorFeedback from "../../../shared/form-error-feedback/FormErrorFeedback";import Spinner from "../../../shared/loading-spinner/Spinner";import MyDropzone from "./dropzone/Dropzone";const StyledSetting = styled.div`display: flex;justify-content: center;align-items: center;flex-direction: column;margin: 0 2rem;.dropzoneContainer {width: 90%;height: 230px;margin: auto;margin-top: 1.5rem;text-align: center;}`;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 ChangeImage = (props) => {// redux destructuringconst { addNotification } = props;// statesconst [imageUrl, setImageUrl] = useState("");const [imageFile, setImageFile] = useState(null);const [error, setError] = useState("");const [loading, setLoading] = useState(false);const handleOnDropImage = (acceptedFile) => {setError("");const newImgUrl = URL.createObjectURL(acceptedFile);setImageUrl(newImgUrl);setImageFile(acceptedFile);};const handleDropReject = () => {setError("Por favor solo introducir imagenes jpeg, jpeg y png");};const handleSubmit = async () => {setLoading(true);if (validate()) {const formData = new FormData();formData.append("image", imageFile);axios.post("/account-settings/image/upload", formData).then(({ data }) => {if (!data.success) {addNotification({style: "danger",msg: typeof data.data === "string"? data.data: "Ha ocurrido un error, Por favor intente más tarde"});return}sessionStorage.setItem('user_session_image', data.data)addNotification({style: "success",msg: 'Imagen cambiada exitosamente'});setLoading(false);});}setLoading(false);};const validate = () => {let errorMsg = "";if (!imageFile) {errorMsg = "Por favor ingrese una imagen";setError(errorMsg);return false;}return true;};useEffect(async () => {setLoading(true);await axios.get("/account-settings/image/upload").then((response) => {const resData = response.data;if (resData.success) {setImageUrl(resData.data);}});setLoading(false);}, []);return (<div className="settings-container"><h2>Cambiar Imagen</h2><div className="acc-setting_content"><StyledSetting>{imageUrl && (<imgid="user-img-change"src={imageUrl}className="img img-responsive"/>)}<div className="dropzoneContainer"><MyDropzoneonDrop={handleOnDropImage}onDropRejected={handleDropReject}/>{error && <FormErrorFeedback>{error}</FormErrorFeedback>}</div></StyledSetting><div className="pt-4 d-flex align-items-center justify-content-center"><buttontype="button"className="btn btn-secondary"onClick={handleSubmit}>Guardar</button></div></div>{loading && (<StyledSpinnerContainer><Spinner></Spinner></StyledSpinnerContainer>)}</div>);};// const mapStateToProps = (state) => ({// })const mapDispatchToProps = {addNotification: (notification) => addNotification(notification),};export default connect(null, mapDispatchToProps)(ChangeImage);