@@ -27,6 +27,7 @@ import {
27
27
SingleType ,
28
28
OnClear ,
29
29
INTERNAL_PROPS_MARK ,
30
+ SelectSource ,
30
31
} from './interface/generator' ;
31
32
import { OptionListProps , RefOptionListProps } from './OptionList' ;
32
33
import { toInnerValue , toOuterValues , removeLastEnabledValue , getUUID } from './utils/commonUtil' ;
@@ -150,8 +151,12 @@ export interface SelectProps<OptionsType extends object[], ValueType> extends Re
150
151
onClear ?: OnClear ;
151
152
skipTriggerChange ?: boolean ;
152
153
skipTriggerSelect ?: boolean ;
153
- onRawSelect ?: ( value : RawValueType , option : OptionsType [ number ] ) => void ;
154
- onRawDeselect ?: ( value : RawValueType , option : OptionsType [ number ] ) => void ;
154
+ onRawSelect ?: ( value : RawValueType , option : OptionsType [ number ] , source : SelectSource ) => void ;
155
+ onRawDeselect ?: (
156
+ value : RawValueType ,
157
+ option : OptionsType [ number ] ,
158
+ source : SelectSource ,
159
+ ) => void ;
155
160
} ;
156
161
}
157
162
@@ -433,7 +438,7 @@ export default function generateSelector<
433
438
[ baseValue , mergedOptions ] ,
434
439
) ;
435
440
436
- const triggerSelect = ( newValue : RawValueType , isSelect : boolean ) => {
441
+ const triggerSelect = ( newValue : RawValueType , isSelect : boolean , source : SelectSource ) => {
437
442
const outOption = findValueOption ( [ newValue ] , mergedFlattenOptions ) [ 0 ] ;
438
443
439
444
if ( ! internalProps . skipTriggerSelect ) {
@@ -457,9 +462,9 @@ export default function generateSelector<
457
462
// Trigger internal event
458
463
if ( useInternalProps ) {
459
464
if ( isSelect && internalProps . onRawSelect ) {
460
- internalProps . onRawSelect ( newValue , outOption ) ;
465
+ internalProps . onRawSelect ( newValue , outOption , source ) ;
461
466
} else if ( ! isSelect && internalProps . onRawDeselect ) {
462
- internalProps . onRawDeselect ( newValue , outOption ) ;
467
+ internalProps . onRawDeselect ( newValue , outOption , source ) ;
463
468
}
464
469
}
465
470
} ;
@@ -488,7 +493,10 @@ export default function generateSelector<
488
493
setInnerValue ( outValue ) ;
489
494
} ;
490
495
491
- const onInternalSelect = ( newValue : RawValueType , { selected } : { selected : boolean } ) => {
496
+ const onInternalSelect = (
497
+ newValue : RawValueType ,
498
+ { selected, source } : { selected : boolean ; source : 'option' | 'selection' } ,
499
+ ) => {
492
500
if ( disabled ) {
493
501
return ;
494
502
}
@@ -513,7 +521,7 @@ export default function generateSelector<
513
521
}
514
522
515
523
// Trigger `onSelect`. Single mode always trigger select
516
- triggerSelect ( newValue , ! isMultiple || selected ) ;
524
+ triggerSelect ( newValue , ! isMultiple || selected , source ) ;
517
525
518
526
// Clean search value if single or configured
519
527
if ( mode === 'combobox' ) {
@@ -525,6 +533,14 @@ export default function generateSelector<
525
533
}
526
534
} ;
527
535
536
+ const onInternalOptionSelect = ( newValue : RawValueType , info : { selected : boolean } ) => {
537
+ onInternalSelect ( newValue , { ...info , source : 'option' } ) ;
538
+ } ;
539
+
540
+ const onInternalSelectionSelect = ( newValue : RawValueType , info : { selected : boolean } ) => {
541
+ onInternalSelect ( newValue , { ...info , source : 'selection' } ) ;
542
+ } ;
543
+
528
544
// ============================= Input ==============================
529
545
// Only works in `combobox`
530
546
const customizeInputElement : React . ReactElement =
@@ -585,7 +601,7 @@ export default function generateSelector<
585
601
) ;
586
602
triggerChange ( newRawValues ) ;
587
603
newRawValues . forEach ( newRawValue => {
588
- triggerSelect ( newRawValue , true ) ;
604
+ triggerSelect ( newRawValue , true , 'input' ) ;
589
605
} ) ;
590
606
591
607
// Should close when paste finish
@@ -644,7 +660,7 @@ export default function generateSelector<
644
660
645
661
if ( removeInfo . removedValue !== null ) {
646
662
triggerChange ( removeInfo . values ) ;
647
- triggerSelect ( removeInfo . removedValue , false ) ;
663
+ triggerSelect ( removeInfo . removedValue , false , 'input' ) ;
648
664
}
649
665
}
650
666
@@ -773,7 +789,7 @@ export default function generateSelector<
773
789
values = { rawValues }
774
790
height = { listHeight }
775
791
itemHeight = { listItemHeight }
776
- onSelect = { onInternalSelect }
792
+ onSelect = { onInternalOptionSelect }
777
793
onToggleOpen = { onToggleOpen }
778
794
onActiveValue = { onActiveValue }
779
795
defaultActiveFirstOption = { mergedDefaultActiveFirstOption }
@@ -896,7 +912,7 @@ export default function generateSelector<
896
912
searchValue = { mergedSearchValue }
897
913
activeValue = { activeValue }
898
914
onSearch = { triggerSearch }
899
- onSelect = { onInternalSelect }
915
+ onSelect = { onInternalSelectionSelect }
900
916
/>
901
917
</ SelectTrigger >
902
918
0 commit comments