Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
706 stevensc 1
import React, { useEffect, useState } from 'react'
2
import { axios } from '../../utils'
3
import { Container, Grid } from '@mui/material'
4
import { Calendar, momentLocalizer } from 'react-big-calendar'
5
import moment from 'moment'
6
import EventsList from '../../components/calendar/EventsList'
7
import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos'
8
import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos'
5 stevensc 9
 
706 stevensc 10
import EventModal from '../../components/calendar/EventModal'
5 stevensc 11
 
706 stevensc 12
import 'react-big-calendar/lib/sass/styles.scss'
5 stevensc 13
 
706 stevensc 14
moment.locale('es-ES')
15
const localizer = momentLocalizer(moment)
5 stevensc 16
 
17
const CalendarPage = () => {
706 stevensc 18
  const [events, setEvents] = useState([])
19
  const [selectedEvent, setSelectedEvent] = useState(null)
20
  const [modalShow, setModalShow] = useState(false)
5 stevensc 21
 
22
  const selectEvent = (event) => {
706 stevensc 23
    setSelectedEvent(event)
24
    setModalShow(true)
25
  }
5 stevensc 26
 
27
  const unselectEvent = () => {
706 stevensc 28
    setSelectedEvent(null)
29
    setModalShow(false)
30
  }
5 stevensc 31
 
32
  useEffect(() => {
706 stevensc 33
    axios.get('/calendar/events').then((response) => {
34
      const events = response.data
5 stevensc 35
 
36
      const formattedData = events.map((event) => {
706 stevensc 37
        const eventStart = new Date(event.start.replace(/-/g, '/'))
5 stevensc 38
        const eventEnd = event.allDay
39
          ? eventStart
706 stevensc 40
          : new Date(event.end.replace(/-/g, '/'))
5 stevensc 41
 
42
        return {
43
          ...event,
44
          start: eventStart,
706 stevensc 45
          end: eventEnd
46
        }
47
      })
5 stevensc 48
 
706 stevensc 49
      setEvents(formattedData)
50
    })
51
  }, [])
5 stevensc 52
 
53
  return (
54
    <>
706 stevensc 55
      <Container as='main'>
202 stevensc 56
        <Grid container spacing={2}>
5 stevensc 57
          <Grid item xs={12} md={8} spacing={3}>
58
            <Calendar
706 stevensc 59
              views={['month', 'week', 'day', 'agenda']}
5 stevensc 60
              selectable
61
              localizer={localizer}
62
              defaultDate={new Date()}
706 stevensc 63
              defaultView='month'
5 stevensc 64
              onSelectEvent={selectEvent}
65
              events={events}
66
              messages={{
67
                next: <ArrowForwardIosIcon />,
68
                previous: <ArrowBackIosIcon />,
706 stevensc 69
                today: 'Hoy',
70
                month: 'Mes',
71
                week: 'Semana',
72
                day: 'Día',
73
                agenda: 'Agenda',
74
                allDay: 'Todo el día',
75
                date: 'Fecha',
76
                time: 'Hora',
77
                event: 'Evento',
78
                showMore: 'Ver más',
79
                noEventsInRange: 'Sin eventos disponibles'
5 stevensc 80
              }}
81
              eventPropGetter={(event) => {
82
                const backgroundColor = event.backgroundColor
83
                  ? event.backgroundColor
706 stevensc 84
                  : 'blue'
85
                const color = event.textColor ? event.textColor : '#fff'
86
                return { style: { backgroundColor, color } }
5 stevensc 87
              }}
88
            />
89
          </Grid>
90
          <Grid item xs={12} md={4}>
91
            <EventsList />
92
          </Grid>
93
        </Grid>
94
      </Container>
95
      <EventModal
96
        show={modalShow}
97
        event={selectedEvent}
98
        onClose={unselectEvent}
99
      />
100
    </>
706 stevensc 101
  )
102
}
5 stevensc 103
 
706 stevensc 104
export default CalendarPage