Proyectos de Subversion LeadersLinked - Backend

Rev

Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React, { useState, useEffect } from "react";
import { connect } from "react-redux";
import styled from "styled-components";
import { Alert } from "react-bootstrap";
import { removeNotification } from "../../redux/notification/notification.actions";

const AlertContainer = styled.div`
  .alert {
    transition: all 0.3s;
  }
  .isShow {
    animation: slideIn 0.3s;
  }
  .isHidden {
    animation: fadeOut 0.3s;
    animation-fill-mode: forwards;
  }

  @keyframes slideIn {
    0% {
      transform: translateY(-200%);
      opacity: 0;
    }
    100% {
      transform: translateY(0);
      opacity: 100;
    }
  }

  @keyframes fadeOut {
    0% {
      opacity: 100;
    }
    100% {
      opacity: 0;
    }
  }
`;
const AlertComponent = (props) => {
  // redux destructuring
  const { removeNotification } = props;

  const { notification } = props;
  const { id, style, msg } = notification;
  const [show, setShow] = useState(true);
  let closeTimeOut = null;
  let removeNotificationTimeOut = null;

  const closeAlertHandler = () => {
    setShow(false);
    removeNotificationTimeOut = setTimeout(() => {
      removeNotification(id);
    }, 300);
  };

  useEffect(() => {
    closeTimeOut = setTimeout(() => {
      closeAlertHandler();
    }, 3000);
    return () => {
      clearTimeout(closeTimeOut);
      clearTimeout(removeNotificationTimeOut);
    };
  }, []);

  return (
    <AlertContainer>
      <Alert
        variant={style}
        dismissible
        onClose={closeAlertHandler}
        transition
        className={`${show ? "isShow" : "isHidden"} alert`}
      >
        <p>{msg}</p>
      </Alert>
    </AlertContainer>
  );
};

// const mapStateToProps = (state) => ({

// })

const mapDispatchToProps = {
  removeNotification: (id) => removeNotification(id),
};

export default connect(null, mapDispatchToProps)(AlertComponent);