Skip to content

Commit b1a664d

Browse files
committed
feat: allow clicking on highlighted gapsx
1 parent 66ebdff commit b1a664d

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed

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

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import FullCalendar from "@fullcalendar/react";
22
import interactionPlugin from "@fullcalendar/interaction";
33
import timeGridPlugin from "@fullcalendar/timegrid";
4-
import { EventChangeArg, EventInput } from "@fullcalendar/core";
4+
import { DateSelectArg, 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";
@@ -10,6 +10,7 @@ import { useEffect, useState } from "react";
1010
import { i18n } from "../../../stores/i18n";
1111
import { useStore } from "@nanostores/react";
1212
import { GapsPerDay } from "../../../utils/entry";
13+
import { EventImpl } from "@fullcalendar/core/internal";
1314

1415
const calendarBaseConfig: FullCalendar["props"] = {
1516
allDaySlot: false,
@@ -96,6 +97,27 @@ export function EntryCalendar({
9697
}
9798
}, [entries, gaps]);
9899

100+
const setupEntryUpdate = (event: EventImpl) => {
101+
const { carer, entryLanguages, id, weekday, ...rest } = entries?.find((entry) => entry.id.toString() === event.id) ?? {};
102+
103+
setEntryDraft({
104+
carer: carer?.id,
105+
entryLanguages: entryLanguages?.map(({ language, ...rest }) => ({ ...rest, language: language.id })),
106+
...rest,
107+
startedAt: getTime(event.start!),
108+
endedAt: getTime(event.end!),
109+
});
110+
setSelectedWeekday(weekday);
111+
setEntryUpdadingId(id);
112+
open();
113+
};
114+
115+
const setupEntryCreate = ({ start, end }: DateSelectArg | EventImpl) => {
116+
setEntryDraft({ startedAt: getTime(start!), endedAt: getTime(end!) });
117+
setSelectedWeekday(start!.getDay());
118+
open();
119+
};
120+
99121
const handleEventChange = ({ event }: EventChangeArg) => {
100122
const { id, start, end } = event;
101123
setEvents(events.map((e) => (e.id === id ? { ...e, start: start!, end: end! } : e)));
@@ -132,24 +154,13 @@ export function EntryCalendar({
132154
{...calendarBaseConfig}
133155
plugins={[timeGridPlugin, interactionPlugin]}
134156
events={events}
135-
select={({ start, end }) => {
136-
setEntryDraft({ startedAt: getTime(start), endedAt: getTime(end) });
137-
setSelectedWeekday(start.getDay());
138-
open();
139-
}}
157+
select={setupEntryCreate}
140158
eventClick={({ event }) => {
141-
const { carer, entryLanguages, id, weekday, ...rest } = entries?.find((entry) => entry.id.toString() === event.id) ?? {};
142-
143-
setEntryDraft({
144-
carer: carer?.id,
145-
entryLanguages: entryLanguages?.map(({ language, ...rest }) => ({ ...rest, language: language.id })),
146-
...rest,
147-
startedAt: getTime(event.start!),
148-
endedAt: getTime(event.end!),
149-
});
150-
setSelectedWeekday(weekday);
151-
setEntryUpdadingId(id);
152-
open();
159+
if (event.display === "background") {
160+
setupEntryCreate(event);
161+
} else {
162+
setupEntryUpdate(event);
163+
}
153164
}}
154165
eventChange={handleEventChange}
155166
eventContent={({ event }) => <QuestionnaireEntry event={event} />}

0 commit comments

Comments
 (0)