@@ -26,11 +26,7 @@ import { isEqual } from './utils/dateUtil';
26
26
import getDataOrAriaProps , { toArray } from './utils/miscUtil' ;
27
27
import PanelContext , { ContextOperationRefProps } from './PanelContext' ;
28
28
import { PickerMode } from './interface' ;
29
- import {
30
- getDefaultFormat ,
31
- getInputSize ,
32
- elementsContains ,
33
- } from './utils/uiUtil' ;
29
+ import { getDefaultFormat , getInputSize , elementsContains } from './utils/uiUtil' ;
34
30
import usePickerInput from './hooks/usePickerInput' ;
35
31
import useTextValueMapping from './hooks/useTextValueMapping' ;
36
32
import useValueTexts from './hooks/useValueTexts' ;
@@ -120,9 +116,7 @@ export type PickerProps<DateType> =
120
116
121
117
interface MergedPickerProps < DateType >
122
118
extends Omit <
123
- PickerBaseProps < DateType > &
124
- PickerDateProps < DateType > &
125
- PickerTimeProps < DateType > ,
119
+ PickerBaseProps < DateType > & PickerDateProps < DateType > & PickerTimeProps < DateType > ,
126
120
'picker'
127
121
> {
128
122
picker ?: PickerMode ;
@@ -173,13 +167,10 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
173
167
174
168
const inputRef = React . useRef < HTMLInputElement > ( null ) ;
175
169
176
- const needConfirmButton : boolean =
177
- ( picker === 'date' && ! ! showTime ) || picker === 'time' ;
170
+ const needConfirmButton : boolean = ( picker === 'date' && ! ! showTime ) || picker === 'time' ;
178
171
179
172
// ============================= State =============================
180
- const formatList = toArray (
181
- getDefaultFormat ( format , picker , showTime , use12Hours ) ,
182
- ) ;
173
+ const formatList = toArray ( getDefaultFormat ( format , picker , showTime , use12Hours ) ) ;
183
174
184
175
// Panel ref
185
176
const panelDivRef = React . useRef < HTMLDivElement > ( null ) ;
@@ -192,9 +183,7 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
192
183
} ) ;
193
184
194
185
// Selected value
195
- const [ selectedValue , setSelectedValue ] = React . useState < DateType | null > (
196
- mergedValue ,
197
- ) ;
186
+ const [ selectedValue , setSelectedValue ] = React . useState < DateType | null > ( mergedValue ) ;
198
187
199
188
// Operation ref
200
189
const operationRef : React . MutableRefObject < ContextOperationRefProps | null > = React . useRef <
@@ -227,11 +216,7 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
227
216
const [ text , triggerTextChange , resetText ] = useTextValueMapping ( {
228
217
valueTexts,
229
218
onTextChange : newText => {
230
- const inputDate = generateConfig . locale . parse (
231
- locale . locale ,
232
- newText ,
233
- formatList ,
234
- ) ;
219
+ const inputDate = generateConfig . locale . parse ( locale . locale , newText , formatList ) ;
235
220
if ( inputDate && ( ! disabledDate || ! disabledDate ( inputDate ) ) ) {
236
221
setSelectedValue ( inputDate ) ;
237
222
}
@@ -246,17 +231,12 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
246
231
if ( onChange && ! isEqual ( generateConfig , mergedValue , newValue ) ) {
247
232
onChange (
248
233
newValue ,
249
- newValue
250
- ? generateConfig . locale . format ( locale . locale , newValue , formatList [ 0 ] )
251
- : '' ,
234
+ newValue ? generateConfig . locale . format ( locale . locale , newValue , formatList [ 0 ] ) : '' ,
252
235
) ;
253
236
}
254
237
} ;
255
238
256
- const triggerOpen = (
257
- newOpen : boolean ,
258
- preventChangeEvent : boolean = false ,
259
- ) => {
239
+ const triggerOpen = ( newOpen : boolean , preventChangeEvent : boolean = false ) => {
260
240
triggerInnerOpen ( newOpen ) ;
261
241
if ( ! newOpen && ! preventChangeEvent ) {
262
242
triggerChange ( selectedValue ) ;
@@ -280,9 +260,7 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
280
260
}
281
261
} ;
282
262
283
- const onInternalMouseUp : React . MouseEventHandler < HTMLDivElement > = (
284
- ...args
285
- ) => {
263
+ const onInternalMouseUp : React . MouseEventHandler < HTMLDivElement > = ( ...args ) => {
286
264
if ( onMouseUp ) {
287
265
onMouseUp ( ...args ) ;
288
266
}
@@ -300,14 +278,16 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
300
278
triggerOpen,
301
279
forwardKeyDown,
302
280
isClickOutside : target =>
303
- ! elementsContains (
304
- [ panelDivRef . current , inputDivRef . current ] ,
305
- target as HTMLElement ,
306
- ) ,
281
+ ! elementsContains ( [ panelDivRef . current , inputDivRef . current ] , target as HTMLElement ) ,
307
282
onSubmit : ( ) => {
283
+ if ( disabledDate && disabledDate ( selectedValue ) ) {
284
+ return false ;
285
+ }
286
+
308
287
triggerChange ( selectedValue ) ;
309
288
triggerOpen ( false , true ) ;
310
289
resetText ( ) ;
290
+ return true ;
311
291
} ,
312
292
onCancel : ( ) => {
313
293
triggerOpen ( false , true ) ;
@@ -428,10 +408,7 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
428
408
}
429
409
430
410
// ============================ Return =============================
431
- const onContextSelect = (
432
- date : DateType ,
433
- type : 'key' | 'mouse' | 'submit' ,
434
- ) => {
411
+ const onContextSelect = ( date : DateType , type : 'key' | 'mouse' | 'submit' ) => {
435
412
if ( type === 'submit' || ( type !== 'key' && ! needConfirmButton ) ) {
436
413
// triggerChange will also update selected values
437
414
triggerChange ( date ) ;
0 commit comments