Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
2268 stevensc 1
import React, { useState } from 'react'
691 stevensc 2
import { useDispatch } from 'react-redux'
2268 stevensc 3
import { styled } from '@mui/material'
5 stevensc 4
 
2268 stevensc 5
import { axios } from '@app/utils'
6
import { addNotification } from '@app/redux/notification/notification.actions'
7
import useFetch from '@app/hooks/useFetch'
5 stevensc 8
 
2268 stevensc 9
import Widget from '@app/components/UI/Widget'
10
import Spinner from '@app/components/UI/Spinner'
11
 
12
const EmojisList = styled('div')`
41 stevensc 13
  display: flex;
14
  gap: 0.5rem;
42 stevensc 15
  justify-content: center;
2271 stevensc 16
  padding: 0.5rem 0;
691 stevensc 17
`
41 stevensc 18
 
2268 stevensc 19
const EmojiItem = styled('button')`
20
  width: 32px;
21
  height: 32px;
22
  border-radius: 50%;
2274 stevensc 23
  transition: all 300ms;
2268 stevensc 24
  & > img {
25
    height: 100%;
26
    object-fit: cover;
2271 stevensc 27
    width: 100%;
2268 stevensc 28
  }
2272 stevensc 29
  &:hover {
2271 stevensc 30
    transform: translateY(-5px);
2268 stevensc 31
  }
691 stevensc 32
`
5 stevensc 33
 
691 stevensc 34
const DailyPulse = ({ dailyPulseUrl = '' }) => {
2268 stevensc 35
  const { data, refetch } = useFetch(dailyPulseUrl)
36
  const {
37
    emojis_how_are_you_feel: emojisHowAreYouFeel = [],
38
    emojis_climate_on_your_organization: emojisClimateOrganization
39
  } = data || {}
40
  const completed =
41
    emojisHowAreYouFeel.length === 1 && emojisClimateOrganization.length === 1
691 stevensc 42
 
2268 stevensc 43
  return (
44
    <Widget styles={{ display: completed ? 'none' : 'block' }}>
2271 stevensc 45
      <Widget.Header title='Pulso Diario' styles={{ paddingBottom: 0 }} />
5 stevensc 46
 
2271 stevensc 47
      <Widget.Body
48
        styles={{ textAlign: 'center', '& h4': { fontWeight: 400 } }}
49
      >
2268 stevensc 50
        <Emojis
51
          title='¿Como te sientes hoy?'
52
          options={emojisHowAreYouFeel}
53
          onComplete={refetch}
54
        />
55
        <Emojis
56
          title='¿Como esta el clima en la organización?'
57
          options={emojisClimateOrganization}
58
          onComplete={refetch}
59
        />
60
      </Widget.Body>
61
    </Widget>
691 stevensc 62
  )
63
}
5 stevensc 64
 
2268 stevensc 65
const Emojis = ({ options = [], title = '', onComplete = () => null }) => {
695 stevensc 66
  const [isLoading, setIsLoading] = useState(false)
691 stevensc 67
  const dispatch = useDispatch()
5 stevensc 68
 
69
  const handleEmojiSave = (url) => {
691 stevensc 70
    if (!url) return
71
    setIsLoading(true)
5 stevensc 72
 
691 stevensc 73
    axios
74
      .post(url)
75
      .then(({ data: responseData }) => {
76
        const { data, success } = responseData
5 stevensc 77
 
691 stevensc 78
        if (!success) {
79
          const errorMessage =
80
            typeof data === 'string' ? data : 'Ha ocurrido un error'
81
          throw new Error(errorMessage)
82
        }
5 stevensc 83
 
691 stevensc 84
        onComplete()
85
      })
86
      .catch((error) => {
87
        dispatch(addNotification({ style: 'danger', msg: error.message }))
88
      })
89
      .finally(() => setIsLoading(false))
90
  }
91
 
5 stevensc 92
  return (
41 stevensc 93
    <>
5 stevensc 94
      <h4>{title}</h4>
2268 stevensc 95
      <EmojisList>
5 stevensc 96
        {options.map(({ link_save, id, image }, index) => (
2268 stevensc 97
          <EmojiItem onClick={() => handleEmojiSave(link_save)} key={id}>
98
            <img
99
              className='fadedown'
100
              src={image}
101
              style={{ animationDelay: `${index + 10}00ms` }}
102
            />
103
          </EmojiItem>
5 stevensc 104
        ))}
2268 stevensc 105
      </EmojisList>
106
      {isLoading && <Spinner />}
41 stevensc 107
    </>
691 stevensc 108
  )
109
}
5 stevensc 110
 
691 stevensc 111
export default DailyPulse