@@ -209,57 +209,72 @@ const DateTimePicker = (
209209
210210 const onSelectDate = useCallback (
211211 ( datetime : DateType ) => {
212- if ( onChange )
213- if ( mode === 'single' ) {
214- const newDate = timePicker ? datetime : getStartOfDay ( datetime ) ;
215-
216- dispatch ( {
217- type : CalendarActionKind . CHANGE_CURRENT_DATE ,
218- payload : newDate ,
219- } ) ;
220-
221- ( onChange as SingleChange ) ( {
222- date : newDate ,
223- } ) ;
224- } else if ( mode === 'range' ) {
225- const sd = state . startDate ;
226- const ed = state . endDate ;
227- let isStart : boolean = true ;
228-
229- if ( sd && ! ed && dateToUnix ( datetime ) >= dateToUnix ( sd ! ) )
230- isStart = false ;
231-
232- ( onChange as RangeChange ) ( {
233- startDate : isStart ? getStartOfDay ( datetime ) : sd ,
234- endDate : ! isStart ? getEndOfDay ( datetime ) : undefined ,
235- } ) ;
236- } else if ( mode === 'multiple' ) {
237- const safeDates = ( state . dates as DateType [ ] ) || [ ] ;
238- const newDate = getStartOfDay ( datetime ) ;
239-
240- const exists = safeDates . some ( ( ed ) => areDatesOnSameDay ( ed , newDate ) ) ;
241-
242- const newDates = exists
243- ? safeDates . filter ( ( ed ) => ! areDatesOnSameDay ( ed , newDate ) )
244- : [ ...safeDates , newDate ] ;
245-
246- newDates . sort ( ( a , b ) => ( dayjs ( a ) . isAfter ( dayjs ( b ) ) ? 1 : - 1 ) ) ;
247-
248- ( onChange as MultiChange ) ( {
249- dates : newDates ,
250- datePressed : newDate ,
251- change : exists ? 'removed' : 'added' ,
252- } ) ;
253- } else if ( mode === 'wheel' ) {
254- dispatch ( {
255- type : CalendarActionKind . CHANGE_CURRENT_DATE ,
256- payload : datetime ,
257- } ) ;
258-
259- ( onChange as SingleChange ) ( {
260- date : datetime ,
261- } ) ;
262- }
212+ if ( mode === 'single' ) {
213+ const newDate = timePicker ? datetime : getStartOfDay ( datetime ) ;
214+
215+ dispatch ( {
216+ type : CalendarActionKind . CHANGE_CURRENT_DATE ,
217+ payload : newDate ,
218+ } ) ;
219+
220+ ( onChange as SingleChange ) ?.( {
221+ date : newDate ,
222+ } ) ;
223+ } else if ( mode === 'range' ) {
224+ const sd = state . startDate ;
225+ const ed = state . endDate ;
226+ let isStart : boolean = true ;
227+
228+ if ( sd && ! ed && dateToUnix ( datetime ) >= dateToUnix ( sd ! ) )
229+ isStart = false ;
230+
231+ const newDateRang = {
232+ startDate : isStart ? getStartOfDay ( datetime ) : sd ,
233+ endDate : ! isStart ? getEndOfDay ( datetime ) : undefined ,
234+ } ;
235+
236+ dispatch ( {
237+ type : CalendarActionKind . CHANGE_SELECTED_RANGE ,
238+ payload : newDateRang ,
239+ } ) ;
240+
241+ ( onChange as RangeChange ) ?.( newDateRang ) ;
242+ } else if ( mode === 'multiple' ) {
243+ const safeDates = ( state . dates as DateType [ ] ) || [ ] ;
244+ const newDate = getStartOfDay ( datetime ) ;
245+
246+ const exists = safeDates . some ( ( ed ) => areDatesOnSameDay ( ed , newDate ) ) ;
247+
248+ const newDates = exists
249+ ? safeDates . filter ( ( ed ) => ! areDatesOnSameDay ( ed , newDate ) )
250+ : [ ...safeDates , newDate ] ;
251+
252+ newDates . sort ( ( a , b ) => ( dayjs ( a ) . isAfter ( dayjs ( b ) ) ? 1 : - 1 ) ) ;
253+
254+ const newDatesObj = {
255+ dates : newDates ,
256+ datePressed : newDate ,
257+ change : ( exists
258+ ? 'removed'
259+ : 'added' ) as Parameters < MultiChange > [ 0 ] [ 'change' ] ,
260+ } ;
261+
262+ dispatch ( {
263+ type : CalendarActionKind . CHANGE_SELECTED_MULTIPLE ,
264+ payload : newDatesObj ,
265+ } ) ;
266+
267+ ( onChange as MultiChange ) ?.( newDatesObj ) ;
268+ } else if ( mode === 'wheel' ) {
269+ dispatch ( {
270+ type : CalendarActionKind . CHANGE_CURRENT_DATE ,
271+ payload : datetime ,
272+ } ) ;
273+
274+ ( onChange as SingleChange ) ?.( {
275+ date : datetime ,
276+ } ) ;
277+ }
263278 } ,
264279 [ onChange , mode , timePicker , state . startDate , state . endDate , state . dates ]
265280 ) ;
0 commit comments