@@ -62,6 +62,7 @@ const eventFieldOrder = [
6262 "timezone" ,
6363 "dates" ,
6464 "weekdays" ,
65+ "fullDayStartMinutes" ,
6566 "dayStartMinutes" ,
6667 "dayEndMinutes" ,
6768 "slotMinutes" ,
@@ -81,6 +82,7 @@ const eventFieldIds: Record<EventField, string> = {
8182 timezone : "timezone-trigger" ,
8283 dates : "date-range-trigger" ,
8384 weekdays : "weekday-filter" ,
85+ fullDayStartMinutes : "full-day-start-trigger" ,
8486 dayStartMinutes : "day-start-trigger" ,
8587 dayEndMinutes : "day-end-trigger" ,
8688 slotMinutes : "slot-size-trigger" ,
@@ -224,6 +226,7 @@ export function CreateEventForm({
224226 const [ dayEndMinutes , setDayEndMinutes ] = useState (
225227 defaultCreateEventDefaults . dayEndMinutes ,
226228 ) ;
229+ const [ fullDayStartMinutes , setFullDayStartMinutes ] = useState < number | undefined > ( undefined ) ;
227230 const [ selectedWeekdays , setSelectedWeekdays ] = useState < number [ ] > (
228231 defaultSelectedWeekdays ,
229232 ) ;
@@ -385,6 +388,7 @@ export function CreateEventForm({
385388 notificationEmail : notificationsConfigured ? notificationEmail : undefined ,
386389 timezone,
387390 dates : selectedDates ,
391+ fullDayStartMinutes : eventType === "full_day" ? fullDayStartMinutes : undefined ,
388392 dayStartMinutes,
389393 dayEndMinutes,
390394 slotMinutes,
@@ -1027,7 +1031,64 @@ export function CreateEventForm({
10271031 </ div >
10281032 </ div >
10291033 </ >
1030- ) : null }
1034+ ) : (
1035+ < >
1036+ < Separator />
1037+
1038+ < div className = "max-w-md space-y-2" >
1039+ < Label htmlFor = { eventFieldIds . fullDayStartMinutes } >
1040+ { messages . createEvent . fullDayStartTimeLabel }
1041+ </ Label >
1042+ < p className = "text-sm text-muted-foreground" >
1043+ { messages . createEvent . fullDayStartTimeDescription }
1044+ </ p >
1045+ < Select
1046+ value = {
1047+ fullDayStartMinutes === undefined
1048+ ? "none"
1049+ : String ( fullDayStartMinutes )
1050+ }
1051+ onValueChange = { ( value ) => {
1052+ setFullDayStartMinutes ( value === "none" ? undefined : Number ( value ) ) ;
1053+ clearErrors ( "fullDayStartMinutes" ) ;
1054+ } }
1055+ >
1056+ < SelectTrigger
1057+ id = { eventFieldIds . fullDayStartMinutes }
1058+ aria-invalid = { fieldErrors . fullDayStartMinutes ? true : undefined }
1059+ aria-describedby = {
1060+ fieldErrors . fullDayStartMinutes
1061+ ? "full-day-start-error"
1062+ : undefined
1063+ }
1064+ className = { cn (
1065+ fieldErrors . fullDayStartMinutes &&
1066+ "border-destructive focus:ring-destructive/20" ,
1067+ ) }
1068+ >
1069+ < SelectValue placeholder = { messages . createEvent . fullDayStartTimePlaceholder } />
1070+ </ SelectTrigger >
1071+ < SelectContent className = "max-h-80" >
1072+ < SelectItem value = "none" >
1073+ { messages . createEvent . fullDayStartTimePlaceholder }
1074+ </ SelectItem >
1075+ { timeOptions
1076+ . filter ( ( option ) => option . value < 24 * 60 )
1077+ . map ( ( option ) => (
1078+ < SelectItem key = { option . value } value = { String ( option . value ) } >
1079+ { option . label }
1080+ </ SelectItem >
1081+ ) ) }
1082+ </ SelectContent >
1083+ </ Select >
1084+ { fieldErrors . fullDayStartMinutes ? (
1085+ < p id = "full-day-start-error" className = "text-sm text-destructive" >
1086+ { fieldErrors . fullDayStartMinutes }
1087+ </ p >
1088+ ) : null }
1089+ </ div >
1090+ </ >
1091+ ) }
10311092
10321093 { errorMessage ? < p className = "text-sm text-destructive" > { errorMessage } </ p > : null }
10331094
@@ -1091,6 +1152,13 @@ export function CreateEventForm({
10911152 </ dd >
10921153 </ div >
10931154 </ >
1155+ ) : fullDayStartMinutes !== undefined ? (
1156+ < div className = "flex items-center justify-between gap-4" >
1157+ < dt className = "text-muted-foreground" >
1158+ { messages . createEvent . previewFields . startTime }
1159+ </ dt >
1160+ < dd className = "font-medium" > { getTimeLabel ( fullDayStartMinutes ) } </ dd >
1161+ </ div >
10941162 ) : null }
10951163 </ dl >
10961164 </ CardContent >
0 commit comments