@@ -26,6 +26,7 @@ import {
2626 PickerMode ,
2727 DisabledTime ,
2828 OnPanelChange ,
29+ Components ,
2930} from './interface' ;
3031import { isEqual } from './utils/dateUtil' ;
3132import PanelContext from './PanelContext' ;
@@ -35,6 +36,7 @@ import { MonthCellRender } from './panels/MonthPanel/MonthBody';
3536import RangeContext from './RangeContext' ;
3637import useMergedState from './hooks/useMergeState' ;
3738import getExtraFooter from './utils/getExtraFooter' ;
39+ import getRanges from './utils/getRanges' ;
3840
3941export interface PickerPanelSharedProps < DateType > {
4042 prefixCls ?: string ;
@@ -77,10 +79,7 @@ export interface PickerPanelSharedProps<DateType> {
7779 onPickerValueChange ?: ( date : DateType ) => void ;
7880
7981 /** @private Internal usage. Do not use in your production env */
80- components ?: {
81- button ?: React . ComponentType | string ;
82- rangeItem ?: React . ComponentType | string ;
83- } ;
82+ components ?: Components ;
8483}
8584
8685export interface PickerPanelBaseProps < DateType >
@@ -143,7 +142,6 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
143142 onMouseDown,
144143 onPickerValueChange,
145144 onOk,
146- components = { } ,
147145 } = props as MergedPickerPanelProps < DateType > ;
148146
149147 const needConfirmButton : boolean =
@@ -174,7 +172,6 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
174172 panelPosition,
175173 rangedValue,
176174 hoverRangedValue,
177- rangeList = [ ] ,
178175 } = React . useContext ( RangeContext ) ;
179176 const panelRef = React . useRef < PanelRefProps > ( { } ) ;
180177
@@ -424,81 +421,30 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
424421 }
425422
426423 // ============================ Footer ============================
427- const extraFooter : React . ReactNode = inRange
428- ? null
429- : getExtraFooter ( prefixCls , mergedMode , renderExtraFooter ) ;
430-
424+ let extraFooter : React . ReactNode ;
431425 let rangesNode : React . ReactNode ;
432- let todayNode : React . ReactNode ;
433-
434- if ( rangeList . length || needConfirmButton ) {
435- let presetNode : React . ReactNode ;
436- let okNode : React . ReactNode ;
437-
438- if ( rangeList . length ) {
439- const Item = ( components . rangeItem || 'span' ) as any ;
440-
441- presetNode = (
442- < >
443- { rangeList . map ( ( { label, onClick, onMouseEnter, onMouseLeave } ) => (
444- < li key = { label } className = { `${ prefixCls } -range` } >
445- < Item
446- onClick = { onClick }
447- onMouseEnter = { onMouseEnter }
448- onMouseLeave = { onMouseLeave }
449- >
450- { label }
451- </ Item >
452- </ li >
453- ) ) }
454- </ >
455- ) ;
456- }
457426
458- if ( needConfirmButton ) {
459- const Button = ( components . button || 'button' ) as any ;
460-
461- if ( ! inRange && ! presetNode ) {
462- presetNode = (
463- < li className = { ` ${ prefixCls } -now` } >
464- < a
465- className = { ` ${ prefixCls } -now-btn` }
466- onClick = { ( ) => {
467- triggerSelect ( generateConfig . getNow ( ) , 'submit' , true ) ;
468- } }
469- >
470- { locale . now }
471- </ a >
472- </ li >
473- ) ;
474- }
427+ if ( ! onContextSelect ) {
428+ extraFooter = getExtraFooter ( prefixCls , mergedMode , renderExtraFooter ) ;
429+ rangesNode = getRanges ( {
430+ prefixCls ,
431+ needConfirmButton ,
432+ okDisabled : ! value ,
433+ locale ,
434+ onOk : ( ) => {
435+ if ( value ) {
436+ triggerSelect ( value , 'submit' , true ) ;
437+ if ( onOk ) {
438+ onOk ( value ) ;
439+ }
440+ }
441+ } ,
442+ } ) ;
443+ }
475444
476- okNode = (
477- < li className = { `${ prefixCls } -ok` } >
478- < Button
479- disabled = { ! value }
480- onClick = { ( ) => {
481- if ( value ) {
482- triggerSelect ( value , 'submit' , true ) ;
483- if ( onOk ) {
484- onOk ( value ) ;
485- }
486- }
487- } }
488- >
489- { locale . ok }
490- </ Button >
491- </ li >
492- ) ;
493- }
445+ let todayNode : React . ReactNode ;
494446
495- rangesNode = (
496- < ul className = { `${ prefixCls } -ranges` } >
497- { presetNode }
498- { okNode }
499- </ ul >
500- ) ;
501- } else if ( showToday && mergedMode === 'date' && picker === 'date' ) {
447+ if ( showToday && mergedMode === 'date' && picker === 'date' && ! showTime ) {
502448 todayNode = (
503449 < a
504450 className = { `${ prefixCls } -today-btn` }
0 commit comments