Я разрабатываю приложение для своей некоммерческой организации на основе большого календаря. Мне нужно использовать функцию перетаскивания. Я могу перетащить событие из слота в другую позицию, но событие не остается на месте и возвращается в прежнее положение. Все остальные функции работают нормально: создание и редактирование событий. Вот код
import React, { useState, useEffect } from 'react';
import { Calendar, momentLocalizer } from 'react-big-calendar';
import withDragAndDrop from 'react-big-calendar/lib/addons/dragAndDrop';
import moment from 'moment';
import 'moment/locale/fr';
import Modal from 'react-bootstrap/Modal';
import CalendarForm from './CalendarForm';
import { observer } from 'mobx-react';
import { getCalendar } from './requests';
const localizer = momentLocalizer(moment);
const DnDCalendar = withDragAndDrop(Calendar);
const HomePage = ({ calendarStore }) => {
const [showAddModal, setShowAddModal] = useState(false);
const [showEditModal, setShowEditModal] = useState(false);
const [calendarEvent, setCalendarEvent] = useState({});
const [initialized, setInitialized] = useState(false);
let today = new Date();
const hideModals = () => {
setShowAddModal(false);
setShowEditModal(false);
};
const getCalendarEvents = async () => {
const response = await getCalendar();
const evs = response.data.map((d) => {
return {
...d,
start: new Date(d.start),
end: new Date(d.end),
};
});
calendarStore.setCalendarEvents(evs);
setInitialized(true);
};
const handleSelect = (event, e) => {
const { start, end } = event;
const data = { title: '', subject: '', start, end, allDay: false };
setShowAddModal(true);
setShowEditModal(false);
setCalendarEvent(data);
};
const handleSelectEvent = (event, e) => {
setShowAddModal(false);
setShowEditModal(true);
let { id, title, subject, start, end, allDay } = event;
start = new Date(start);
end = new Date(end);
const data = { id, title, subject, start, end, allDay };
setCalendarEvent(data);
};
const handleDragEvent = (event, e) => {
setShowAddModal(false);
setShowEditModal(false);
let { id, title, subject, start, end, allDay } = event;
start = new Date(start);
end = new Date(end);
const data = { id, title, subject, start, end, allDay };
setCalendarEvent(data);
};
useEffect(() => {
if (!initialized) {
getCalendarEvents();
}
});
return (
<div className="page">
<Modal show={showAddModal} onHide={hideModals}>
<Modal.Header closeButton>
<Modal.Title>Ajouter une session</Modal.Title>
</Modal.Header>
<Modal.Body>
<CalendarForm
calendarStore={calendarStore}
calendarEvent={calendarEvent}
onCancel={hideModals.bind(this)}
edit={false}
/>
</Modal.Body>
</Modal>
<Modal show={showEditModal} onHide={hideModals}>
<Modal.Header closeButton>
<Modal.Title>Editer la session</Modal.Title>
</Modal.Header>
<Modal.Body>
<CalendarForm
calendarStore={calendarStore}
calendarEvent={calendarEvent}
onCancel={hideModals.bind(this)}
edit={true}
/>
</Modal.Body>
</Modal>
<DnDCalendar
localizer={localizer}
events={calendarStore.calendarEvents}
startAccessor="start"
endAccessor="end"
defaultView="week"
selectable={true}
resizable={true}
onEventDrop={handleDragEvent}
style={{ height: '70vh' }}
onSelectSlot={handleSelect}
onSelectEvent={handleSelectEvent}
min={
new Date(today.getFullYear(), today.getMonth(), today.getDate(), 8)
}
max={
new Date(today.getFullYear(), today.getMonth(), today.getDate(), 23)
}
messages={{
month: 'mois',
week: 'semaine',
day: 'jour',
today: "aujourd'hui",
next: 'suiv.',
previous: 'préc.',
}}
resource="Test ressource"
eventPropGetter={(event) => ({
style: {
backgroundColor: event.isDone === true ? '#ad4ca4' : '#3174ad',
},
})}
/>
</div>
);
};
export default observer(HomePage);