Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 5 | Rev 202 | 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
    <>
201 stevensc 55
      <Container
56
        as="main"
57
        className="px-0"
58
        sx={{ height: "100%", maxHeight: "70vh" }}
59
      >
60
        <Grid container spacing={2} sx={{ height: "100%" }}>
5 stevensc 61
          <Grid item xs={12} md={8} spacing={3}>
62
            <Calendar
201 stevensc 63
              views={["month", "week", "day", "agenda"]}
5 stevensc 64
              selectable
65
              localizer={localizer}
66
              defaultDate={new Date()}
67
              defaultView="month"
68
              onSelectEvent={selectEvent}
69
              events={events}
70
              messages={{
71
                next: <ArrowForwardIosIcon />,
72
                previous: <ArrowBackIosIcon />,
201 stevensc 73
                today: "Hoy",
74
                month: "Mes",
75
                week: "Semana",
76
                day: "Día",
77
                agenda: "Agenda",
78
                allDay: "Todo el día",
79
                date: "Fecha",
80
                time: "Hora",
81
                event: "Evento",
82
                showMore: "Ver más",
83
                noEventsInRange: "Sin eventos disponibles",
5 stevensc 84
              }}
85
              eventPropGetter={(event) => {
86
                const backgroundColor = event.backgroundColor
87
                  ? event.backgroundColor
201 stevensc 88
                  : "blue";
89
                const color = event.textColor ? event.textColor : "#fff";
90
                return { style: { backgroundColor, color } };
5 stevensc 91
              }}
92
            />
93
          </Grid>
94
          <Grid item xs={12} md={4}>
95
            <EventsList />
96
          </Grid>
97
        </Grid>
98
      </Container>
99
      <EventModal
100
        show={modalShow}
101
        event={selectedEvent}
102
        onClose={unselectEvent}
103
      />
104
    </>
201 stevensc 105
  );
106
};
5 stevensc 107
 
201 stevensc 108
export default CalendarPage;