11"use client" ;
22
3- import { addDays , eachDayOfInterval , format , isAfter , startOfToday } from "date-fns" ;
3+ import { addDays , addMonths , eachDayOfInterval , format , isAfter , startOfToday } from "date-fns" ;
44import type { DateRange } from "react-day-picker" ;
55import {
66 CalendarDaysIcon ,
@@ -36,6 +36,7 @@ import {
3636import { meetingDurationOptions , slotMinuteOptions } from "@/lib/constants" ;
3737import { useI18n } from "@/lib/i18n/context" ;
3838import { buildTimezoneOptions } from "@/lib/timezone-options" ;
39+ import type { EventType } from "@/lib/types" ;
3940import { cn } from "@/lib/utils" ;
4041import { createEventCreateSchema } from "@/lib/validators" ;
4142
@@ -93,6 +94,21 @@ const defaultSelectedWeekdays = weekdayOptions
9394 . filter ( ( weekday ) => weekday . defaultSelected )
9495 . map ( ( weekday ) => weekday . value ) ;
9596
97+ function getDefaultDateRange ( eventType : EventType , today : Date ) : DateRange {
98+ if ( eventType === "full_day" ) {
99+ return {
100+ from : today ,
101+ to : addMonths ( today , 1 ) ,
102+ } ;
103+ }
104+
105+ const tomorrow = addDays ( today , 1 ) ;
106+ return {
107+ from : tomorrow ,
108+ to : addDays ( tomorrow , 2 ) ,
109+ } ;
110+ }
111+
96112function sortWeekdays ( values : number [ ] ) {
97113 return [ ...values ] . sort (
98114 ( left , right ) =>
@@ -171,23 +187,13 @@ export function CreateEventForm({
171187 const [ errorMessage , setErrorMessage ] = useState < string | null > ( null ) ;
172188 const [ fieldErrors , setFieldErrors ] = useState < EventFormErrors > ( { } ) ;
173189 const [ isRangePickerOpen , setIsRangePickerOpen ] = useState ( false ) ;
174- const [ eventType , setEventType ] = useState < "time_grid" | "full_day" > ( "time_grid" ) ;
190+ const [ initialDateRange ] = useState ( ( ) => getDefaultDateRange ( "time_grid" , startOfToday ( ) ) ) ;
191+ const [ eventType , setEventType ] = useState < EventType > ( "time_grid" ) ;
175192 const [ title , setTitle ] = useState ( "" ) ;
176193 const [ notificationEmail , setNotificationEmail ] = useState ( "" ) ;
177- const [ dateRange , setDateRange ] = useState < DateRange | undefined > ( ( ) => {
178- const tomorrow = addDays ( new Date ( ) , 1 ) ;
179- return {
180- from : tomorrow ,
181- to : addDays ( tomorrow , 2 ) ,
182- } ;
183- } ) ;
184- const [ draftDateRange , setDraftDateRange ] = useState < DateRange | undefined > ( ( ) => {
185- const tomorrow = addDays ( new Date ( ) , 1 ) ;
186- return {
187- from : tomorrow ,
188- to : addDays ( tomorrow , 2 ) ,
189- } ;
190- } ) ;
194+ const [ dateRange , setDateRange ] = useState < DateRange | undefined > ( initialDateRange ) ;
195+ const [ draftDateRange , setDraftDateRange ] = useState < DateRange | undefined > ( initialDateRange ) ;
196+ const [ usesDefaultDateRange , setUsesDefaultDateRange ] = useState ( true ) ;
191197 const [ timezone , setTimezone ] = useState ( ( ) => {
192198 const browserTimezone =
193199 typeof window !== "undefined"
@@ -309,6 +315,7 @@ export function CreateEventForm({
309315 }
310316
311317 setDateRange ( draftDateRange ) ;
318+ setUsesDefaultDateRange ( false ) ;
312319 clearErrors ( "dates" ) ;
313320 setIsRangePickerOpen ( false ) ;
314321 }
@@ -324,6 +331,17 @@ export function CreateEventForm({
324331 clearErrors ( "weekdays" , "dates" ) ;
325332 }
326333
334+ function selectEventType ( nextEventType : EventType ) {
335+ if ( usesDefaultDateRange ) {
336+ const nextDefaultRange = getDefaultDateRange ( nextEventType , startOfToday ( ) ) ;
337+ setDateRange ( nextDefaultRange ) ;
338+ setDraftDateRange ( nextDefaultRange ) ;
339+ clearErrors ( "dates" , "weekdays" ) ;
340+ }
341+
342+ setEventType ( nextEventType ) ;
343+ }
344+
327345 function onSubmit ( event : React . FormEvent < HTMLFormElement > ) {
328346 event . preventDefault ( ) ;
329347 setErrorMessage ( null ) ;
@@ -446,7 +464,7 @@ export function CreateEventForm({
446464 eventType === "time_grid" && "border-primary bg-primary/8" ,
447465 ) }
448466 onClick = { ( ) => {
449- setEventType ( "time_grid" ) ;
467+ selectEventType ( "time_grid" ) ;
450468 clearErrors ( "eventType" ) ;
451469 } }
452470 >
@@ -469,7 +487,7 @@ export function CreateEventForm({
469487 eventType === "full_day" && "border-primary bg-primary/8" ,
470488 ) }
471489 onClick = { ( ) => {
472- setEventType ( "full_day" ) ;
490+ selectEventType ( "full_day" ) ;
473491 clearErrors (
474492 "eventType" ,
475493 "dayStartMinutes" ,
0 commit comments