@@ -1007,7 +1007,7 @@ export class DatePicker extends Component<DatePickerProps, DatePickerState> {
10071007 this . setOpen ( ! this . state . open ) ;
10081008 } ;
10091009
1010- handleTimeChange = ( time : Date ) : void => {
1010+ handleTimeChange = ( time : Date , modifyDateType ?: "start" | "end" ) : void => {
10111011 if ( this . props . selectsMultiple ) {
10121012 return ;
10131013 }
@@ -1016,39 +1016,69 @@ export class DatePicker extends Component<DatePickerProps, DatePickerState> {
10161016
10171017 if ( selectsRange ) {
10181018 // In range mode, apply time to the appropriate date
1019- // If we have a startDate but no endDate, apply time to startDate
1020- // If we have both, apply time to endDate
1021- const hasStartRange = startDate && ! endDate ;
1022-
1023- if ( hasStartRange ) {
1024- // Apply time to startDate
1025- const changedStartDate = setTime ( startDate , {
1026- hour : getHours ( time ) ,
1027- minute : getMinutes ( time ) ,
1028- } ) ;
1029- this . setState ( {
1030- preSelection : changedStartDate ,
1031- } ) ;
1032- onChange ?.( [ changedStartDate , null ] , undefined ) ;
1033- } else if ( startDate && endDate ) {
1034- // Apply time to endDate
1035- const changedEndDate = setTime ( endDate , {
1036- hour : getHours ( time ) ,
1037- minute : getMinutes ( time ) ,
1038- } ) ;
1039- this . setState ( {
1040- preSelection : changedEndDate ,
1041- } ) ;
1042- onChange ?.( [ startDate , changedEndDate ] , undefined ) ;
1019+ // If modifyDateType is specified, use that to determine which date to modify
1020+ // Otherwise, use the legacy behavior:
1021+ // - If we have a startDate but no endDate, apply time to startDate
1022+ // - If we have both, apply time to endDate
1023+
1024+ if ( modifyDateType === "start" ) {
1025+ // Explicitly modify start date
1026+ if ( startDate ) {
1027+ const changedStartDate = setTime ( startDate , {
1028+ hour : getHours ( time ) ,
1029+ minute : getMinutes ( time ) ,
1030+ } ) ;
1031+ this . setState ( {
1032+ preSelection : changedStartDate ,
1033+ } ) ;
1034+ onChange ?.( [ changedStartDate , endDate ?? null ] , undefined ) ;
1035+ }
1036+ } else if ( modifyDateType === "end" ) {
1037+ // Explicitly modify end date
1038+ if ( endDate ) {
1039+ const changedEndDate = setTime ( endDate , {
1040+ hour : getHours ( time ) ,
1041+ minute : getMinutes ( time ) ,
1042+ } ) ;
1043+ this . setState ( {
1044+ preSelection : changedEndDate ,
1045+ } ) ;
1046+ onChange ?.( [ startDate ?? null , changedEndDate ] , undefined ) ;
1047+ }
10431048 } else {
1044- // No dates selected yet, just update preSelection
1045- const changedDate = setTime ( this . getPreSelection ( ) , {
1046- hour : getHours ( time ) ,
1047- minute : getMinutes ( time ) ,
1048- } ) ;
1049- this . setState ( {
1050- preSelection : changedDate ,
1051- } ) ;
1049+ // Legacy behavior for showTimeSelect (single time picker)
1050+ const hasStartRange = startDate && ! endDate ;
1051+
1052+ if ( hasStartRange ) {
1053+ // Apply time to startDate
1054+ const changedStartDate = setTime ( startDate , {
1055+ hour : getHours ( time ) ,
1056+ minute : getMinutes ( time ) ,
1057+ } ) ;
1058+ this . setState ( {
1059+ preSelection : changedStartDate ,
1060+ } ) ;
1061+ onChange ?.( [ changedStartDate , null ] , undefined ) ;
1062+ } else if ( startDate && endDate ) {
1063+ // Apply time to endDate
1064+ const changedEndDate = setTime ( endDate , {
1065+ hour : getHours ( time ) ,
1066+ minute : getMinutes ( time ) ,
1067+ } ) ;
1068+ this . setState ( {
1069+ preSelection : changedEndDate ,
1070+ } ) ;
1071+ onChange ?.( [ startDate , changedEndDate ] , undefined ) ;
1072+ } else {
1073+ // No dates selected yet, just update preSelection
1074+ const changedDate = setTime ( this . getPreSelection ( ) , {
1075+ hour : getHours ( time ) ,
1076+ minute : getMinutes ( time ) ,
1077+ } ) ;
1078+ this . setState ( {
1079+ preSelection : changedDate ,
1080+ } ) ;
1081+ }
10521082 }
10531083 } else {
10541084 // Single date mode (original behavior)
0 commit comments