Rev 694 | Rev 2270 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useState } from 'react'import { axios } from '../../../utils'import { useDispatch } from 'react-redux'import { addNotification } from '../../../redux/notification/notification.actions'import styled from 'styled-components'import WidgetLayout from '../WidgetLayout'import Spinner from '../../UI/Spinner'import LoaderContainer from '../../UI/LoaderContainer'const StyledDailyPulseContainer = styled(WidgetLayout)`padding: 1rem;h3 {color: var(--title-color);font-weight: 700;font-size: 1.1rem;}span {color: var(--subtitle-color);font-weight: 600;}h4 {font-weight: 600;color: var(--title-color);text-align: center;margin-bottom: 0.5rem;}`const StyledPulseList = styled.ul`display: flex;gap: 0.5rem;justify-content: center;button {width: 32px;height: 32px;border-radius: 50%;transition: all 300ms;& > img {width: 100%;height: 100%;object-fit: cover;}&:hover {transform: translateY(-10px);}}`const StyledLoaderContainer = styled(LoaderContainer)`position: absolute !important;top: 50%;left: 50%;margin: 0;transform: translate(-50%, -50%);`const DailyPulse = ({ dailyPulseUrl = '' }) => {const [emojisHowAreYouFeel, setEmojisHowAreYouFeel] = useState([])const [emojisClimateOrganization, setEmojisClimateOrganization] = useState([])const dispatch = useDispatch()const getData = (url = '') => {axios.get(url).then(({ data: responseData }) => {const { success, data } = responseDataif (success) {setEmojisHowAreYouFeel(data.emojis_how_are_you_feel)setEmojisClimateOrganization(data.emojis_climate_on_your_organization)}}).catch((error) => {dispatch(addNotification({ style: 'danger', msg: error.message }))})}useEffect(() => {getData(dailyPulseUrl)}, [dailyPulseUrl])return (<StyledDailyPulseContainer><h3>Pulso Diario</h3><DailyPulse.Listoptions={emojisHowAreYouFeel}title='¿Como te sientes hoy?'onComplete={() => getData(dailyPulseUrl)}/><DailyPulse.Listoptions={emojisClimateOrganization}title='¿Como esta el clima en la organización?'onComplete={() => getData(dailyPulseUrl)}/></StyledDailyPulseContainer>)}const PulseList = ({ options = [], title = '', onComplete = () => null }) => {const [isLoading, setIsLoading] = useState(false)const dispatch = useDispatch()const handleEmojiSave = (url) => {if (!url) returnsetIsLoading(true)axios.post(url).then(({ data: responseData }) => {const { data, success } = responseDataif (!success) {const errorMessage =typeof data === 'string' ? data : 'Ha ocurrido un error'throw new Error(errorMessage)}onComplete()}).catch((error) => {dispatch(addNotification({ style: 'danger', msg: error.message }))}).finally(() => setIsLoading(false))}return (<><h4>{title}</h4><StyledPulseList>{options.map(({ link_save, id, image }, index) => (<li key={id}><button onClick={() => handleEmojiSave(link_save)}><imgclassName='fadedown'src={image}style={{ animationDelay: `${index + 10}00ms` }}/></button></li>))}</StyledPulseList>{isLoading && (<StyledLoaderContainer><Spinner /></StyledLoaderContainer>)}</>)}DailyPulse.List = PulseListexport default DailyPulse