Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
201 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
 
201 stevensc 10
import EventModal from "../../components/calendar/EventModal";
5 stevensc 11
 
201 stevensc 12
import "react-big-calendar/lib/sass/styles.scss";
5 stevensc 13
 
201 stevensc 14
moment.locale("es-ES");
15
const localizer = momentLocalizer(moment);
5 stevensc 16
 
17
const CalendarPage = () => {
201 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) => {
201 stevensc 23
    setSelectedEvent(event);
24
    setModalShow(true);
25
  };
5 stevensc 26
 
27
  const unselectEvent = () => {
201 stevensc 28
    setSelectedEvent(null);
29
    setModalShow(false);
30
  };
5 stevensc 31
 
32
  useEffect(() => {
201 stevensc 33
    axios.get("/calendar/events").then((response) => {
34
      const events = response.data;
5 stevensc 35
 
36
      const formattedData = events.map((event) => {
201 stevensc 37
        const eventStart = new Date(event.start.replace(/-/g, "/"));
5 stevensc 38
        const eventEnd = event.allDay
39
          ? eventStart
201 stevensc 40
          : new Date(event.end.replace(/-/g, "/"));
5 stevensc 41
 
42
        return {
43
          ...event,
44
          start: eventStart,
45
          end: eventEnd,
201 stevensc 46
        };
47
      });
5 stevensc 48
 
201 stevensc 49
      setEvents(formattedData);
50
    });
51
  }, []);
5 stevensc 52
 
53
  return (
54
    <>
202 stevensc 55
      <Container as="main">
56
        <Grid container spacing={2}>
5 stevensc 57
          <Grid item xs={12} md={8} spacing={3}>
58
            <Calendar
201 stevensc 59
              views={["month", "week", "day", "agenda"]}
5 stevensc 60
              selectable
61
              localizer={localizer}
62
              defaultDate={new Date()}
63
              defaultView="month"
64
              onSelectEvent={selectEvent}
65
              events={events}
66
              messages={{
67
                next: <ArrowForwardIosIcon />,
68
                previous: <ArrowBackIosIcon />,
201 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
201 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
    </>
201 stevensc 101
  );
102
};
5 stevensc 103
 
201 stevensc 104
export default CalendarPage;