Rev 3274 | Rev 3585 | 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 "store/notification/notification.actions";import { Grid } from "@mui/material";import { Calendar, momentLocalizer } from "react-big-calendar";import ArrowBackIosIcon from "@mui/icons-material/ArrowBackIos";import ArrowForwardIosIcon from "@mui/icons-material/ArrowForwardIos";import moment from "moment";import EventsList from "components/calendar/EventsList";import EventModal from "components/calendar/EventModal";import "react-big-calendar/lib/sass/styles.scss";moment.locale("es");const localizer = momentLocalizer(moment);const CalendarPage = () => {const [events, setEvents] = useState([]);const [selectedEvent, setSelectedEvent] = useState(null);const [modalShow, setModalShow] = useState(false);const dispatch = useDispatch();const selectEvent = (event) => {setSelectedEvent(event);setModalShow(true);};const unselectEvent = () => {setSelectedEvent(null);setModalShow(false);};useEffect(() => {axios.get("/calendar/events").then((response) => {const { data, success } = response.data;if (!success) {const errorMessage =typeof data === "string"? data: "Error interno. Por favor, intente más tarde.";throw new Error(errorMessage);}const formattedEvents = data.map((event) => {if (event.allDay) {return {...event,start: new Date(event.start.replace("-", "/")),end: new Date(event.start.replace("-", "/")),};}return {...event,start: new Date(event.start),end: new Date(event.end),};});setEvents(formattedEvents);}).catch((err) => {dispatch(addNotification({ style: "danger", msg: err.message }));});}, []);return (<><Grid container spacing={1}><Grid item xs={12} md={8} spacing={3}><Calendarlocalizer={localizer}events={events}views={["month", "week", "day"]}popup={false}defaultDate={new Date()}defaultView="month"selectableonSelectEvent={selectEvent}onShowMore={(events) => this.setState({ showModal: true, events })}messages={{next: <ArrowForwardIosIcon />,previous: <ArrowBackIosIcon />,today: "Hoy",month: "Mes",week: "Semana",day: "Día",allDay: "Todo el día",date: "Fecha",time: "Hora",event: "Evento",noEventsInRange: "Sin eventos disponibles",}}eventPropGetter={(event) => {const backgroundColor = event.backgroundColor? event.backgroundColor: "blue";const color = event.textColor ? event.textColor : "#fff";return { style: { backgroundColor, color } };}}/></Grid><Grid item xs={12} md={4}><EventsList /></Grid></Grid><EventModalshow={modalShow}event={selectedEvent}onClose={unselectEvent}/></>);};export default CalendarPage;