1
1
import * as React from 'react' ;
2
2
import classNames from 'classnames' ;
3
- import { DisabledTimes , PanelMode , PickerMode } from './interface' ;
3
+ import {
4
+ DisabledTimes ,
5
+ PanelMode ,
6
+ PickerMode ,
7
+ RangeValue ,
8
+ EventValue ,
9
+ } from './interface' ;
4
10
import {
5
11
PickerBaseProps ,
6
12
PickerDateProps ,
@@ -12,7 +18,11 @@ import useMergedState from './hooks/useMergeState';
12
18
import PickerTrigger from './PickerTrigger' ;
13
19
import PickerPanel from './PickerPanel' ;
14
20
import usePickerInput from './hooks/usePickerInput' ;
15
- import getDataOrAriaProps , { toArray } from './utils/miscUtil' ;
21
+ import getDataOrAriaProps , {
22
+ toArray ,
23
+ getValue ,
24
+ updateValues ,
25
+ } from './utils/miscUtil' ;
16
26
import { getDefaultFormat , getInputSize } from './utils/uiUtil' ;
17
27
import PanelContext , { ContextOperationRefProps } from './PanelContext' ;
18
28
import {
@@ -27,40 +37,6 @@ import { GenerateConfig } from './generate';
27
37
import { PickerPanelProps } from '.' ;
28
38
import RangeContext from './RangeContext' ;
29
39
30
- type EventValue < DateType > = DateType | null ;
31
- type RangeValue < DateType > = [ EventValue < DateType > , EventValue < DateType > ] | null ;
32
-
33
- function getIndexValue < T > (
34
- values : null | undefined | [ T | null , T | null ] ,
35
- index : number ,
36
- ) : T | null {
37
- return values ? values [ index ] : null ;
38
- }
39
-
40
- type UpdateValue < T > = ( prev : T ) => T ;
41
-
42
- function updateRangeValue < T , R = [ T | null , T | null ] | null > (
43
- values : [ T | null , T | null ] | null ,
44
- value : T | UpdateValue < T > ,
45
- index : number ,
46
- ) : R {
47
- const newValues : [ T | null , T | null ] = [
48
- getIndexValue ( values , 0 ) ,
49
- getIndexValue ( values , 1 ) ,
50
- ] ;
51
-
52
- newValues [ index ] =
53
- typeof value === 'function'
54
- ? ( value as UpdateValue < T | null > ) ( newValues [ index ] )
55
- : value ;
56
-
57
- if ( ! newValues [ 0 ] && ! newValues [ 1 ] ) {
58
- return ( null as unknown ) as R ;
59
- }
60
-
61
- return ( newValues as unknown ) as R ;
62
- }
63
-
64
40
function reorderValues < DateType > (
65
41
values : RangeValue < DateType > ,
66
42
generateConfig : GenerateConfig < DateType > ,
@@ -183,7 +159,6 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
183
159
locale,
184
160
placeholder,
185
161
autoFocus,
186
- allowEmpty,
187
162
disabled,
188
163
format,
189
164
picker = 'date' ,
@@ -196,6 +171,8 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
196
171
open,
197
172
defaultOpen,
198
173
disabledDate,
174
+ selectable,
175
+ allowEmpty,
199
176
allowClear,
200
177
suffixIcon,
201
178
clearIcon,
@@ -253,13 +230,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
253
230
compareFunc = isSameYear ;
254
231
}
255
232
256
- if (
257
- compareFunc (
258
- generateConfig ,
259
- getIndexValue ( values , 0 ) ,
260
- getIndexValue ( values , 1 ) ,
261
- )
262
- ) {
233
+ if ( compareFunc ( generateConfig , getValue ( values , 0 ) , getValue ( values , 1 ) ) ) {
263
234
return viewDate ;
264
235
}
265
236
return getClosingViewDate ( viewDate , picker , generateConfig , - 1 ) ;
@@ -272,7 +243,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
272
243
> ( {
273
244
defaultValue : ( ) =>
274
245
defaultPickerValue ||
275
- updateRangeValue (
246
+ updateValues (
276
247
mergedValue ,
277
248
( viewDate : DateType ) => getEndViewDate ( viewDate , mergedValue ) ,
278
249
1 ,
@@ -348,8 +319,8 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
348
319
349
320
setSelectedValue ( values ) ;
350
321
351
- const startValue = getIndexValue ( values , 0 ) ;
352
- const endValue = getIndexValue ( values , 1 ) ;
322
+ const startValue = getValue ( values , 0 ) ;
323
+ const endValue = getValue ( values , 1 ) ;
353
324
354
325
const canStartValueTrigger = canValueTrigger ( startValue , 0 , allowEmpty ) ;
355
326
const canEndValueTrigger = canValueTrigger ( endValue , 1 , allowEmpty ) ;
@@ -364,8 +335,8 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
364
335
365
336
if (
366
337
onChange &&
367
- ( ! isEqual ( generateConfig , getIndexValue ( mergedValue , 0 ) , startValue ) ||
368
- ! isEqual ( generateConfig , getIndexValue ( mergedValue , 1 ) , endValue ) )
338
+ ( ! isEqual ( generateConfig , getValue ( mergedValue , 0 ) , startValue ) ||
339
+ ! isEqual ( generateConfig , getValue ( mergedValue , 1 ) , endValue ) )
369
340
) {
370
341
onChange ( values , [
371
342
startValue
@@ -437,12 +408,12 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
437
408
} ;
438
409
439
410
const startValueTexts = useValueTexts < DateType > (
440
- getIndexValue ( selectedValue , 0 ) ,
411
+ getValue ( selectedValue , 0 ) ,
441
412
sharedTextHooksProps ,
442
413
) ;
443
414
444
415
const endValueTexts = useValueTexts < DateType > (
445
- getIndexValue ( selectedValue , 1 ) ,
416
+ getValue ( selectedValue , 1 ) ,
446
417
sharedTextHooksProps ,
447
418
) ;
448
419
@@ -453,8 +424,8 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
453
424
formatList ,
454
425
) ;
455
426
if ( inputDate && ( ! disabledDate || ! disabledDate ( inputDate ) ) ) {
456
- setSelectedValue ( updateRangeValue ( selectedValue , inputDate , index ) ) ;
457
- setViewDates ( updateRangeValue ( viewDates , inputDate , index ) ) ;
427
+ setSelectedValue ( updateValues ( selectedValue , inputDate , index ) ) ;
428
+ setViewDates ( updateValues ( viewDates , inputDate , index ) ) ;
458
429
}
459
430
} ;
460
431
@@ -580,18 +551,14 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
580
551
className = { classNames ( {
581
552
[ `${ prefixCls } -panel-focused` ] : ! startTyping && ! endTyping ,
582
553
} ) }
583
- value = { getIndexValue ( selectedValue , activePickerIndex ) }
554
+ value = { getValue ( selectedValue , activePickerIndex ) }
584
555
locale = { locale }
585
556
tabIndex = { - 1 }
586
557
onMouseDown = { e => {
587
558
e . preventDefault ( ) ;
588
559
} }
589
560
onSelect = { date => {
590
- const values = updateRangeValue (
591
- selectedValue ,
592
- date ,
593
- activePickerIndex ,
594
- ) ;
561
+ const values = updateValues ( selectedValue , date , activePickerIndex ) ;
595
562
596
563
if ( picker === 'date' && showTime ) {
597
564
setSelectedValue ( values ) ;
@@ -602,11 +569,11 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
602
569
} }
603
570
onPanelChange = { ( date , newMode ) => {
604
571
triggerModesChange (
605
- updateRangeValue ( mergedModes , newMode , activePickerIndex ) ,
606
- updateRangeValue ( selectedValue , date , activePickerIndex ) ,
572
+ updateValues ( mergedModes , newMode , activePickerIndex ) ,
573
+ updateValues ( selectedValue , date , activePickerIndex ) ,
607
574
) ;
608
575
609
- setViewDates ( updateRangeValue ( viewDates , date , activePickerIndex ) ) ;
576
+ setViewDates ( updateValues ( viewDates , date , activePickerIndex ) ) ;
610
577
} }
611
578
onChange = { undefined }
612
579
defaultValue = { undefined }
@@ -630,7 +597,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
630
597
pickerValue : viewDate ,
631
598
onPickerValueChange : ( newViewDate : DateType ) => {
632
599
setViewDates (
633
- updateRangeValue ( viewDates , newViewDate , activePickerIndex ) ,
600
+ updateValues ( viewDates , newViewDate , activePickerIndex ) ,
634
601
) ;
635
602
} ,
636
603
} ) }
@@ -639,7 +606,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
639
606
pickerValue : nextViewDate ,
640
607
onPickerValueChange : newViewDate => {
641
608
setViewDates (
642
- updateRangeValue (
609
+ updateValues (
643
610
viewDates ,
644
611
getClosingViewDate ( newViewDate , picker , generateConfig , - 1 ) ,
645
612
activePickerIndex ,
@@ -682,7 +649,6 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
682
649
}
683
650
684
651
const inputSharedProps = {
685
- disabled,
686
652
size : getInputSize ( picker , formatList [ 0 ] ) ,
687
653
} ;
688
654
@@ -715,11 +681,12 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
715
681
>
716
682
< div className = { `${ prefixCls } -input` } ref = { startInputDivRef } >
717
683
< input
684
+ disabled = { disabled || getValue ( selectable , 0 ) === false }
718
685
readOnly = { inputReadOnly || ! startTyping }
719
686
value = { startText }
720
687
onChange = { triggerStartTextChange }
721
688
autoFocus = { autoFocus }
722
- placeholder = { getIndexValue ( placeholder , 0 ) || '' }
689
+ placeholder = { getValue ( placeholder , 0 ) || '' }
723
690
ref = { startInputRef }
724
691
{ ...startInputProps }
725
692
{ ...inputSharedProps }
@@ -728,10 +695,11 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
728
695
{ separator }
729
696
< div className = { `${ prefixCls } -input` } ref = { startInputDivRef } >
730
697
< input
698
+ disabled = { disabled || getValue ( selectable , 1 ) === false }
731
699
readOnly = { inputReadOnly || ! startTyping }
732
700
value = { endText }
733
701
onChange = { triggerEndTextChange }
734
- placeholder = { getIndexValue ( placeholder , 1 ) || '' }
702
+ placeholder = { getValue ( placeholder , 1 ) || '' }
735
703
ref = { endInputRef }
736
704
{ ...endInputProps }
737
705
{ ...inputSharedProps }
0 commit comments