Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 40 | Rev 42 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
40 stevensc 1
import React, { useEffect, useState } from "react";
2
import { axios } from "../../../utils";
3
import { useDispatch } from "react-redux";
4
import { addNotification } from "../../../redux/notification/notification.actions";
5
import { styled } from "styled-components";
6
import WidgetLayout from "../WidgetLayout";
5 stevensc 7
 
40 stevensc 8
const StyledDailyPulseContainer = styled(WidgetLayout)`
9
  padding: 1rem;
10
  h3 {
41 stevensc 11
    color: var(--title-color);
40 stevensc 12
    font-weight: 700;
13
    font-size: 1.1rem;
14
  }
15
  span {
41 stevensc 16
    color: var(--subtitle-color);
40 stevensc 17
    font-weight: 600;
18
  }
41 stevensc 19
  h4 {
20
    font-weight: 600;
21
    color: var(--title-color);
22
    text-align: center;
23
    margin-bottom: 0.5rem;
24
  }
40 stevensc 25
`;
5 stevensc 26
 
41 stevensc 27
const StyledPulseList = styled.ul`
28
  display: flex;
29
  gap: 0.5rem;
30
  button {
31
    width: 32px;
32
    height: 32px;
33
    border-radius: 50%;
34
    transition: all 300ms;
35
    & > img {
36
      width: 100%;
37
      height: 100%;
38
      object-fit: cover;
39
    }
40
    &:hover {
41
      transform: translateY(-10px);
42
    }
43
  }
44
`;
45
 
40 stevensc 46
const DailyPulse = ({ dailyPulseUrl = "" }) => {
47
  const [emojisHowAreYouFeel, setEmojisHowAreYouFeel] = useState([]);
5 stevensc 48
  const [emojisClimateOnYourOrganization, setEmojisClimateOnYourOrganization] =
40 stevensc 49
    useState([]);
5 stevensc 50
 
51
  const getData = (url) => {
52
    axios
53
      .get(url)
54
      .then((response) => {
40 stevensc 55
        const { success, data } = response.data;
5 stevensc 56
 
57
        if (success) {
40 stevensc 58
          setEmojisHowAreYouFeel(data.emojis_how_are_you_feel);
5 stevensc 59
          setEmojisClimateOnYourOrganization(
60
            data.emojis_climate_on_your_organization
40 stevensc 61
          );
5 stevensc 62
        }
63
      })
64
      .catch((error) => {
40 stevensc 65
        console.trace(error);
66
        throw new Error(error);
67
      });
68
  };
5 stevensc 69
 
70
  useEffect(() => {
40 stevensc 71
    getData(dailyPulseUrl);
72
  }, [dailyPulseUrl]);
5 stevensc 73
 
74
  return (
40 stevensc 75
    <StyledDailyPulseContainer>
5 stevensc 76
      <h3>Pulso Diario</h3>
77
      <DailyPulse.List
78
        options={emojisHowAreYouFeel}
79
        title="¿Como te sientes hoy?"
80
        onComplete={getData}
81
      />
82
      <DailyPulse.List
83
        options={emojisClimateOnYourOrganization}
84
        title="¿Como esta el clima en la organización?"
85
        onComplete={getData}
86
      />
40 stevensc 87
    </StyledDailyPulseContainer>
88
  );
89
};
5 stevensc 90
 
40 stevensc 91
const PulseList = ({ options = [], title = "", onComplete = () => null }) => {
92
  const dispatch = useDispatch();
5 stevensc 93
 
94
  const handleEmojiSave = (url) => {
95
    if (!url) {
40 stevensc 96
      return false;
5 stevensc 97
    }
98
 
99
    axios.post(url).then(({ data }) => {
100
      if (!data.success) {
101
        return dispatch(
102
          addNotification({
40 stevensc 103
            style: "danger",
5 stevensc 104
            msg:
40 stevensc 105
              typeof data.data === "string"
5 stevensc 106
                ? data.data
40 stevensc 107
                : "Ha ocurrido un error",
5 stevensc 108
          })
40 stevensc 109
        );
5 stevensc 110
      }
111
 
40 stevensc 112
      return onComplete();
113
    });
114
  };
5 stevensc 115
 
116
  return (
41 stevensc 117
    <>
5 stevensc 118
      <h4>{title}</h4>
41 stevensc 119
      <StyledPulseList>
5 stevensc 120
        {options.map(({ link_save, id, image }, index) => (
121
          <li key={id}>
41 stevensc 122
            <button onClick={() => handleEmojiSave(link_save)}>
5 stevensc 123
              <img
124
                className="fadedown"
125
                src={image}
126
                style={{ animationDelay: `${index + 10}00ms` }}
127
              />
41 stevensc 128
            </button>
5 stevensc 129
          </li>
130
        ))}
41 stevensc 131
      </StyledPulseList>
132
    </>
40 stevensc 133
  );
134
};
5 stevensc 135
 
40 stevensc 136
DailyPulse.List = PulseList;
5 stevensc 137
 
40 stevensc 138
export default DailyPulse;