1
1
import FullCalendar from "@fullcalendar/react" ;
2
2
import interactionPlugin from "@fullcalendar/interaction" ;
3
3
import timeGridPlugin from "@fullcalendar/timegrid" ;
4
- import { EventChangeArg , EventInput } from "@fullcalendar/core" ;
4
+ import { DateSelectArg , EventChangeArg , EventInput } from "@fullcalendar/core" ;
5
5
import { formatDate , getDateFromTimeAndWeekday , getTime , isSame , Modal , useDisclosure , useMantineTheme } from "@quassel/ui" ;
6
6
import { QuestionnaireEntry } from "./QuestionnaireEntry" ;
7
7
import { components } from "../../../api.gen" ;
@@ -10,6 +10,7 @@ import { useEffect, useState } from "react";
10
10
import { i18n } from "../../../stores/i18n" ;
11
11
import { useStore } from "@nanostores/react" ;
12
12
import { GapsPerDay } from "../../../utils/entry" ;
13
+ import { EventImpl } from "@fullcalendar/core/internal" ;
13
14
14
15
const calendarBaseConfig : FullCalendar [ "props" ] = {
15
16
allDaySlot : false ,
@@ -96,6 +97,27 @@ export function EntryCalendar({
96
97
}
97
98
} , [ entries , gaps ] ) ;
98
99
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
+
99
121
const handleEventChange = ( { event } : EventChangeArg ) => {
100
122
const { id, start, end } = event ;
101
123
setEvents ( events . map ( ( e ) => ( e . id === id ? { ...e , start : start ! , end : end ! } : e ) ) ) ;
@@ -132,24 +154,13 @@ export function EntryCalendar({
132
154
{ ...calendarBaseConfig }
133
155
plugins = { [ timeGridPlugin , interactionPlugin ] }
134
156
events = { events }
135
- select = { ( { start, end } ) => {
136
- setEntryDraft ( { startedAt : getTime ( start ) , endedAt : getTime ( end ) } ) ;
137
- setSelectedWeekday ( start . getDay ( ) ) ;
138
- open ( ) ;
139
- } }
157
+ select = { setupEntryCreate }
140
158
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
+ }
153
164
} }
154
165
eventChange = { handleEventChange }
155
166
eventContent = { ( { event } ) => < QuestionnaireEntry event = { event } /> }
0 commit comments