@@ -65,6 +65,13 @@ function useUtil<MergedValueType extends object[], DateType extends MergedValueT
6565 return [ getDateTexts , isSameDates ] as const ;
6666}
6767
68+ function orderDates < DateType extends object , DatesType extends DateType [ ] > (
69+ dates : DatesType ,
70+ generateConfig : GenerateConfig < DateType > ,
71+ ) {
72+ return [ ...dates ] . sort ( ( a , b ) => ( generateConfig . isAfter ( a , b ) ? 1 : - 1 ) ) as DatesType ;
73+ }
74+
6875/**
6976 * Used for internal value management.
7077 * It should always use `mergedValue` in render logic
@@ -94,6 +101,12 @@ export function useInnerValue<ValueType extends DateType[], DateType extends obj
94101 formatList : FormatType [ ] ,
95102 /** Used for RangePicker. `true` means [DateType, DateType] or will be DateType[] */
96103 rangeValue : boolean ,
104+ /**
105+ * Trigger order when trigger calendar value change.
106+ * This should only used in SinglePicker with `multiple` mode.
107+ * So when `rangeValue` is `true`, order will be ignored.
108+ */
109+ order : boolean ,
97110 defaultValue ?: ValueType ,
98111 value ?: ValueType ,
99112 onCalendarChange ?: (
@@ -117,12 +130,14 @@ export function useInnerValue<ValueType extends DateType[], DateType extends obj
117130
118131 const triggerCalendarChange : TriggerCalendarChange < ValueType > = useEvent (
119132 ( nextCalendarValues : ValueType ) => {
120- const clone = [ ...nextCalendarValues ] as ValueType ;
133+ let clone = [ ...nextCalendarValues ] as ValueType ;
121134
122135 if ( rangeValue ) {
123136 for ( let i = 0 ; i < 2 ; i += 1 ) {
124137 clone [ i ] = clone [ i ] || null ;
125138 }
139+ } else if ( order ) {
140+ clone = orderDates ( clone , generateConfig ) ;
126141 }
127142
128143 // Update merged value
@@ -142,7 +157,7 @@ export function useInnerValue<ValueType extends DateType[], DateType extends obj
142157 } ,
143158 ) ;
144159
145- const triggerOk = ( ) => {
160+ const triggerOk = ( ) => {
146161 if ( onOk ) {
147162 onOk ( calendarValue ( ) ) ;
148163 }
@@ -209,7 +224,7 @@ export default function useRangeValue<ValueType extends DateType[], DateType ext
209224 const triggerSubmit = useEvent ( ( nextValue ?: ValueType ) => {
210225 const isNullValue = nextValue === null ;
211226
212- const clone = [ ...( nextValue || submitValue ( ) ) ] as ValueType ;
227+ let clone = [ ...( nextValue || submitValue ( ) ) ] as ValueType ;
213228
214229 // Fill null value
215230 if ( isNullValue ) {
@@ -224,7 +239,7 @@ export default function useRangeValue<ValueType extends DateType[], DateType ext
224239
225240 // Only when exist value to sort
226241 if ( orderOnChange && clone [ 0 ] && clone [ 1 ] ) {
227- clone . sort ( ( a , b ) => ( generateConfig . isAfter ( a , b ) ? 1 : - 1 ) ) ;
242+ clone = orderDates ( clone , generateConfig ) ;
228243 }
229244
230245 // Sync `calendarValue`
0 commit comments