Skip to content

Commit 3a9050f

Browse files
committed
fix: event drag glitching
1 parent ddf0e85 commit 3a9050f

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

apps/frontend/src/components/questionnaire/calendar/EntryCalendar.tsx

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import FullCalendar from "@fullcalendar/react";
2-
import interactionPlugin, { EventResizeStopArg } from "@fullcalendar/interaction";
2+
import interactionPlugin from "@fullcalendar/interaction";
33
import timeGridPlugin from "@fullcalendar/timegrid";
4-
import { EventDropArg, EventInput } from "@fullcalendar/core";
4+
import { EventChangeArg, EventInput } from "@fullcalendar/core";
55
import { formatDate, getDateFromTimeAndWeekday, getTime, isSame, Modal, useDisclosure, useMantineTheme } from "@quassel/ui";
66
import { QuestionnaireEntry } from "./QuestionnaireEntry";
77
import { components } from "../../../api.gen";
88
import { EntityForm, EntryFormValues } from "./EntryForm";
9-
import { useState } from "react";
9+
import { useEffect, useState } from "react";
1010
import { i18n } from "../../../stores/i18n";
1111
import { useStore } from "@nanostores/react";
1212

@@ -65,17 +65,27 @@ export function EntryCalendar({
6565
const [entryUpdatingId, setEntryUpdadingId] = useState<number>();
6666
const [entryDraft, setEntryDraft] = useState<Partial<EntryFormValues>>();
6767

68-
const events: ExtendedEvent[] =
69-
entries.map(({ startedAt, endedAt, weekday, carer, entryLanguages, id }) => ({
70-
id: id.toString(),
71-
start: getDateFromTimeAndWeekday(startedAt, weekday),
72-
end: getDateFromTimeAndWeekday(endedAt, weekday),
73-
title: carer.name,
74-
extendedProps: { entryLanguages },
75-
backgroundColor: theme.colors[theme.primaryColor][4],
76-
})) ?? [];
77-
78-
const handleMove = ({ event: { id, start, end } }: EventDropArg | EventResizeStopArg) => {
68+
const [events, setEvents] = useState<ExtendedEvent[]>([]);
69+
70+
useEffect(() => {
71+
if (entries) {
72+
setEvents(
73+
entries.map(({ startedAt, endedAt, weekday, carer, entryLanguages, id }) => ({
74+
id: id.toString(),
75+
start: getDateFromTimeAndWeekday(startedAt, weekday),
76+
end: getDateFromTimeAndWeekday(endedAt, weekday),
77+
title: carer.name,
78+
extendedProps: { entryLanguages },
79+
backgroundColor: theme.colors[theme.primaryColor][4],
80+
})) ?? []
81+
);
82+
}
83+
}, [entries]);
84+
85+
const handleEventChange = ({ event }: EventChangeArg) => {
86+
const { id, start, end } = event;
87+
setEvents(events.map((e) => (e.id === id ? { ...e, start: start!, end: end! } : e)));
88+
7989
onUpdateEntry(parseInt(id), { startedAt: getTime(start!), endedAt: getTime(end!) }, start!.getDay());
8090
};
8191

@@ -127,8 +137,7 @@ export function EntryCalendar({
127137
setEntryUpdadingId(id);
128138
open();
129139
}}
130-
eventResize={handleMove}
131-
eventDrop={handleMove}
140+
eventChange={handleEventChange}
132141
eventContent={({ event }) => <QuestionnaireEntry event={event} />}
133142
/>
134143
</>

0 commit comments

Comments
 (0)