Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
5 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
 
7
import WidgetLayout from '../widgets/WidgetLayout'
8
import EmptySection from '../UI/EmptySection'
9
 
10
const StyledContainer = styled(WidgetLayout)`
11
  padding: 1rem;
12
  h2 {
13
    font-size: 1.1rem;
14
    font-weight: 600;
15
    color: var(--title-color);
16
  }
17
  ul {
18
    display: flex;
19
    flex-direction: column;
20
    gap: 0.5rem;
21
    margin-top: 1rem;
22
  }
23
  a {
24
    display: block;
25
  }
26
`
27
 
28
const EventsList = () => {
29
  const [eventsAndTasks, setEventsAndTasks] = useState([])
30
  const dispatch = useDispatch()
31
 
32
  const getBackendVarUrl = (url) => {
33
    axios
34
      .get(url)
706 stevensc 35
      .then(({ data: responseData }) => {
36
        const { data, success } = responseData
5 stevensc 37
 
38
        if (!success) {
39
          dispatch(
40
            addNotification({
41
              style: 'danger',
655 stevensc 42
              msg: 'Error interno. Por favor, intente más tarde.'
5 stevensc 43
            })
44
          )
45
          return
46
        }
47
 
48
        window.open(data, '_blank')
49
      })
655 stevensc 50
      .catch((err) => {
706 stevensc 51
        console.log(err)
52
        const error = new Error('Error interno. Por favor, intente más tarde.')
53
        dispatch(addNotification({ style: 'danger', message: error.message }))
5 stevensc 54
      })
55
  }
56
 
57
  const getEvents = () => {
58
    axios
59
      .get('/helpers/next-events')
60
      .then((response) => {
61
        const { success, data } = response.data
62
 
63
        if (!success) {
64
          dispatch(addNotification({ style: 'danger', message: data }))
65
          return
66
        }
67
 
68
        setEventsAndTasks(data)
69
      })
655 stevensc 70
      .catch((err) => {
71
        dispatch(addNotification({ style: 'danger', message: err.message }))
5 stevensc 72
      })
73
  }
74
 
75
  useEffect(() => {
76
    getEvents()
77
  }, [])
78
 
79
  return (
80
    <StyledContainer>
81
      <h2>Eventos y Tareas</h2>
82
 
83
      <ul>
84
        {eventsAndTasks.length ? (
85
          eventsAndTasks.map((event) => {
86
            return (
87
              <li key={event.id}>
88
                <a
89
                  href={event.url}
90
                  onClick={(e) => {
91
                    e.preventDefault()
92
                    getBackendVarUrl(event.url)
93
                  }}
94
                >
95
                  <div
655 stevensc 96
                    className='calendar-event'
5 stevensc 97
                    style={{
98
                      color: event.textColor,
655 stevensc 99
                      background: event.backgroundColor
5 stevensc 100
                    }}
101
                  >
102
                    <h4>
103
                      <b>Evento: </b> {event.title}
104
                    </h4>
105
                    <span>
106
                      <b>Inicio: </b>
107
                      {event.start}
108
                    </span>
109
                    {event.end && (
110
                      <span>
111
                        <b>Fin: </b>
112
                        {event.end}
113
                      </span>
114
                    )}
115
                  </div>
116
                </a>
117
              </li>
118
            )
119
          })
120
        ) : (
655 stevensc 121
          <EmptySection message='No hay eventos disponibles' />
5 stevensc 122
        )}
123
      </ul>
124
    </StyledContainer>
125
  )
126
}
127
 
128
export default EventsList