@@ -69,11 +69,17 @@ export interface PickerPanelSharedProps<DateType> {
6969 onChange ?: ( value : DateType ) => void ;
7070 onPanelChange ?: OnPanelChange < DateType > ;
7171 onMouseDown ?: React . MouseEventHandler < HTMLDivElement > ;
72+ onOk ?: ( ) => void ;
7273
7374 /** @private This is internal usage. Do not use in your production env */
7475 hideHeader ?: boolean ;
7576 /** @private This is internal usage. Do not use in your production env */
7677 onPickerValueChange ?: ( date : DateType ) => void ;
78+
79+ /** @private Internal usage. Do not use in your production env */
80+ components ?: {
81+ button : React . ComponentType ;
82+ } ;
7783}
7884
7985export interface PickerPanelBaseProps < DateType >
@@ -135,6 +141,8 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
135141 onPanelChange,
136142 onMouseDown,
137143 onPickerValueChange,
144+ onOk,
145+ components,
138146 } = props as MergedPickerPanelProps < DateType > ;
139147
140148 if ( process . env . NODE_ENV !== 'production' ) {
@@ -229,20 +237,20 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
229237
230238 const triggerSelect = (
231239 date : DateType ,
232- type : 'key' | 'mouse' ,
240+ type : 'key' | 'mouse' | 'submit' ,
233241 forceTriggerSelect : boolean = false ,
234242 ) => {
235243 if ( mergedMode === picker || forceTriggerSelect ) {
236244 setInnerValue ( date ) ;
237245
238- if ( onContextSelect ) {
239- onContextSelect ( date , type ) ;
240- }
241-
242246 if ( onSelect ) {
243247 onSelect ( date ) ;
244248 }
245249
250+ if ( onContextSelect ) {
251+ onContextSelect ( date , type ) ;
252+ }
253+
246254 if ( onChange && ! isEqual ( generateConfig , date , mergedValue ) ) {
247255 onChange ( date ) ;
248256 }
@@ -418,17 +426,35 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
418426 let nowNode : React . ReactNode ;
419427 let todayNode : React . ReactNode ;
420428
421- if ( showTime && ! inRange ) {
429+ if ( ( mergedMode === 'date' && showTime ) || mergedMode === 'time' ) {
430+ const Button = components ? components . button : 'button' ;
431+
422432 nowNode = (
423433 < div className = { `${ prefixCls } -now` } >
424434 < a
425435 className = { `${ prefixCls } -now-btn` }
426436 onClick = { ( ) => {
427- triggerSelect ( generateConfig . getNow ( ) , 'mouse ' , true ) ;
437+ triggerSelect ( generateConfig . getNow ( ) , 'submit ' , true ) ;
428438 } }
429439 >
430440 { locale . now }
431441 </ a >
442+
443+ < div className = { `${ prefixCls } -ok` } >
444+ < Button
445+ disabled = { ! value }
446+ onClick = { ( ) => {
447+ if ( value ) {
448+ triggerSelect ( value , 'submit' , true ) ;
449+ if ( onOk ) {
450+ onOk ( ) ;
451+ }
452+ }
453+ } }
454+ >
455+ { locale . ok }
456+ </ Button >
457+ </ div >
432458 </ div >
433459 ) ;
434460 } else if ( showToday && mergedMode === 'date' && picker === 'date' ) {
0 commit comments