@@ -26,20 +26,15 @@ import getDataOrAriaProps, {
2626} from './utils/miscUtil' ;
2727import { getDefaultFormat , getInputSize } from './utils/uiUtil' ;
2828import PanelContext , { ContextOperationRefProps } from './PanelContext' ;
29- import {
30- isEqual ,
31- getClosingViewDate ,
32- isSameMonth ,
33- isSameYear ,
34- isSameDate ,
35- } from './utils/dateUtil' ;
29+ import { isEqual , getClosingViewDate , isSameDate } from './utils/dateUtil' ;
3630import useValueTexts from './hooks/useValueTexts' ;
3731import useTextValueMapping from './hooks/useTextValueMapping' ;
3832import { GenerateConfig } from './generate' ;
3933import { PickerPanelProps } from '.' ;
4034import RangeContext from './RangeContext' ;
4135import useRangeDisabled from './hooks/useRangeDisabled' ;
4236import getExtraFooter from './utils/getExtraFooter' ;
37+ import useRangeViewDates from './hooks/useRangeViewDates' ;
4338
4439function reorderValues < DateType > (
4540 values : RangeValue < DateType > ,
@@ -252,51 +247,12 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
252247 } ) ;
253248
254249 // =========================== View Date ===========================
255- /**
256- * End view date is use right panel by default.
257- * But when they in same month (date picker) or year (month picker), will both use left panel.
258- */
259- function getEndViewDate ( viewDate : DateType , values : RangeValue < DateType > ) {
260- let compareFunc : (
261- generateConfig : GenerateConfig < DateType > ,
262- date1 : DateType | null ,
263- date2 : DateType | null ,
264- ) => boolean = isSameMonth ;
265-
266- if ( picker === 'month' ) {
267- compareFunc = isSameYear ;
268- }
269-
270- if ( compareFunc ( generateConfig , getValue ( values , 0 ) , getValue ( values , 1 ) ) ) {
271- return viewDate ;
272- }
273- return getClosingViewDate ( viewDate , picker , generateConfig , - 1 ) ;
274- }
275-
276250 // Config view panel
277- const [ viewDates , setViewDates ] = useMergedState <
278- RangeValue < DateType > ,
279- [ DateType , DateType ]
280- > ( {
281- defaultValue : ( ) =>
282- defaultPickerValue ||
283- updateValues (
284- mergedValue ,
285- ( viewDate : DateType ) => getEndViewDate ( viewDate , mergedValue ) ,
286- 1 ,
287- ) ,
288- defaultStateValue : null ,
289- postState : postViewDates => {
290- let startViewDate : DateType | null =
291- getValue ( postViewDates , 0 ) || getValue ( mergedValue , 0 ) ;
292- let endViewDate : DateType | null =
293- getValue ( postViewDates , 1 ) || getValue ( mergedValue , 1 ) ;
294-
295- startViewDate = startViewDate || endViewDate || generateConfig . getNow ( ) ;
296- endViewDate = endViewDate || startViewDate || generateConfig . getNow ( ) ;
297-
298- return [ startViewDate , endViewDate ] ;
299- } ,
251+ const [ getViewDate , setViewDate ] = useRangeViewDates ( {
252+ values : mergedValue ,
253+ picker,
254+ defaultDates : defaultPickerValue ,
255+ generateConfig,
300256 } ) ;
301257
302258 // ========================= Select Values =========================
@@ -418,7 +374,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
418374 values = [ startValue , null ] ;
419375 endValue = null ;
420376
421- setViewDates ( updateValues ( viewDates , startValue , 1 ) ) ;
377+ // TODO: setViewDates1 (updateValues(viewDates1 , startValue, 1));
422378 }
423379
424380 setSelectedValue ( values ) ;
@@ -490,6 +446,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
490446 if ( ! preventChangeEvent ) {
491447 triggerChange ( selectedValue , { source : 'open' } ) ;
492448 }
449+ setViewDate ( null , index ) ;
493450 }
494451 } ;
495452
@@ -538,7 +495,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
538495
539496 if ( inputDate && ! disabledFunc ( inputDate ) ) {
540497 setSelectedValue ( updateValues ( selectedValue , inputDate , index ) ) ;
541- setViewDates ( updateValues ( viewDates , inputDate , index ) ) ;
498+ setViewDate ( inputDate , index ) ;
542499 }
543500 } ;
544501
@@ -758,7 +715,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
758715 updateValues ( selectedValue , date , activePickerIndex ) ,
759716 ) ;
760717
761- setViewDates ( updateValues ( viewDates , date , activePickerIndex ) ) ;
718+ setViewDate ( date , activePickerIndex ) ;
762719 } }
763720 onSelect = { undefined }
764721 onChange = { undefined }
@@ -798,7 +755,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
798755 ) ;
799756
800757 if ( picker !== 'time' && ! showTime ) {
801- const viewDate = viewDates [ activePickerIndex ] ;
758+ const viewDate = getViewDate ( activePickerIndex ) ;
802759 const nextViewDate = getClosingViewDate ( viewDate , picker , generateConfig ) ;
803760 const currentMode = mergedModes [ activePickerIndex ] ;
804761
@@ -809,21 +766,16 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
809766 { renderPanel ( showDoublePanel ? 'left' : false , {
810767 pickerValue : viewDate ,
811768 onPickerValueChange : newViewDate => {
812- setViewDates (
813- updateValues ( viewDates , newViewDate , activePickerIndex ) ,
814- ) ;
769+ setViewDate ( newViewDate , activePickerIndex ) ;
815770 } ,
816771 } ) }
817772 { showDoublePanel &&
818773 renderPanel ( 'right' , {
819774 pickerValue : nextViewDate ,
820775 onPickerValueChange : newViewDate => {
821- setViewDates (
822- updateValues (
823- viewDates ,
824- getClosingViewDate ( newViewDate , picker , generateConfig , - 1 ) ,
825- activePickerIndex ,
826- ) ,
776+ setViewDate (
777+ getClosingViewDate ( newViewDate , picker , generateConfig , - 1 ) ,
778+ activePickerIndex ,
827779 ) ;
828780 } ,
829781 } ) }
0 commit comments