Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 41 | Rev 334 | 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;
42 stevensc 30
  justify-content: center;
41 stevensc 31
  button {
32
    width: 32px;
33
    height: 32px;
34
    border-radius: 50%;
35
    transition: all 300ms;
36
    & > img {
37
      width: 100%;
38
      height: 100%;
39
      object-fit: cover;
40
    }
41
    &:hover {
42
      transform: translateY(-10px);
43
    }
44
  }
45
`;
46
 
40 stevensc 47
const DailyPulse = ({ dailyPulseUrl = "" }) => {
48
  const [emojisHowAreYouFeel, setEmojisHowAreYouFeel] = useState([]);
5 stevensc 49
  const [emojisClimateOnYourOrganization, setEmojisClimateOnYourOrganization] =
40 stevensc 50
    useState([]);
5 stevensc 51
 
52
  const getData = (url) => {
53
    axios
54
      .get(url)
55
      .then((response) => {
40 stevensc 56
        const { success, data } = response.data;
5 stevensc 57
 
58
        if (success) {
40 stevensc 59
          setEmojisHowAreYouFeel(data.emojis_how_are_you_feel);
5 stevensc 60
          setEmojisClimateOnYourOrganization(
61
            data.emojis_climate_on_your_organization
40 stevensc 62
          );
5 stevensc 63
        }
64
      })
65
      .catch((error) => {
40 stevensc 66
        console.trace(error);
67
        throw new Error(error);
68
      });
69
  };
5 stevensc 70
 
71
  useEffect(() => {
40 stevensc 72
    getData(dailyPulseUrl);
73
  }, [dailyPulseUrl]);
5 stevensc 74
 
75
  return (
40 stevensc 76
    <StyledDailyPulseContainer>
5 stevensc 77
      <h3>Pulso Diario</h3>
78
      <DailyPulse.List
79
        options={emojisHowAreYouFeel}
80
        title="¿Como te sientes hoy?"
81
        onComplete={getData}
82
      />
83
      <DailyPulse.List
84
        options={emojisClimateOnYourOrganization}
85
        title="¿Como esta el clima en la organización?"
86
        onComplete={getData}
87
      />
40 stevensc 88
    </StyledDailyPulseContainer>
89
  );
90
};
5 stevensc 91
 
40 stevensc 92
const PulseList = ({ options = [], title = "", onComplete = () => null }) => {
93
  const dispatch = useDispatch();
5 stevensc 94
 
95
  const handleEmojiSave = (url) => {
96
    if (!url) {
40 stevensc 97
      return false;
5 stevensc 98
    }
99
 
100
    axios.post(url).then(({ data }) => {
101
      if (!data.success) {
102
        return dispatch(
103
          addNotification({
40 stevensc 104
            style: "danger",
5 stevensc 105
            msg:
40 stevensc 106
              typeof data.data === "string"
5 stevensc 107
                ? data.data
40 stevensc 108
                : "Ha ocurrido un error",
5 stevensc 109
          })
40 stevensc 110
        );
5 stevensc 111
      }
112
 
40 stevensc 113
      return onComplete();
114
    });
115
  };
5 stevensc 116
 
117
  return (
41 stevensc 118
    <>
5 stevensc 119
      <h4>{title}</h4>
41 stevensc 120
      <StyledPulseList>
5 stevensc 121
        {options.map(({ link_save, id, image }, index) => (
122
          <li key={id}>
41 stevensc 123
            <button onClick={() => handleEmojiSave(link_save)}>
5 stevensc 124
              <img
125
                className="fadedown"
126
                src={image}
127
                style={{ animationDelay: `${index + 10}00ms` }}
128
              />
41 stevensc 129
            </button>
5 stevensc 130
          </li>
131
        ))}
41 stevensc 132
      </StyledPulseList>
133
    </>
40 stevensc 134
  );
135
};
5 stevensc 136
 
40 stevensc 137
DailyPulse.List = PulseList;
5 stevensc 138
 
40 stevensc 139
export default DailyPulse;