@@ -148,6 +148,10 @@ export interface SelectProps<OptionsType extends object[], ValueType> extends Re
148148 internalProps ?: {
149149 mark ?: string ;
150150 onClear ?: OnClear ;
151+ skipTriggerChange ?: boolean ;
152+ skipTriggerSelect ?: boolean ;
153+ onRawSelect ?: ( value : RawValueType , option : OptionsType [ number ] ) => void ;
154+ onRawDeselect ?: ( value : RawValueType , option : OptionsType [ number ] ) => void ;
151155 } ;
152156}
153157
@@ -289,6 +293,8 @@ export default function generateSelector<
289293 ...restProps
290294 } = props ;
291295
296+ const useInternalProps = internalProps . mark === INTERNAL_PROPS_MARK ;
297+
292298 const domProps = omitDOMProps ? omitDOMProps ( restProps ) : restProps ;
293299 DEFAULT_OMIT_PROPS . forEach ( prop => {
294300 delete domProps [ prop ] ;
@@ -428,25 +434,41 @@ export default function generateSelector<
428434 ) ;
429435
430436 const triggerSelect = ( newValue : RawValueType , isSelect : boolean ) => {
431- const selectValue = ( mergedLabelInValue
432- ? getLabeledValue ( newValue , {
433- options : mergedFlattenOptions ,
434- prevValue : baseValue ,
435- labelInValue : mergedLabelInValue ,
436- optionLabelProp : mergedOptionLabelProp ,
437- } )
438- : newValue ) as SingleType < ValueType > ;
439-
440437 const outOption = findValueOption ( [ newValue ] , mergedFlattenOptions ) [ 0 ] ;
441438
442- if ( isSelect && onSelect ) {
443- onSelect ( selectValue , outOption ) ;
444- } else if ( ! isSelect && onDeselect ) {
445- onDeselect ( selectValue , outOption ) ;
439+ if ( ! internalProps . skipTriggerSelect ) {
440+ // Skip trigger `onSelect` or `onDeselect` if configured
441+ const selectValue = ( mergedLabelInValue
442+ ? getLabeledValue ( newValue , {
443+ options : mergedFlattenOptions ,
444+ prevValue : baseValue ,
445+ labelInValue : mergedLabelInValue ,
446+ optionLabelProp : mergedOptionLabelProp ,
447+ } )
448+ : newValue ) as SingleType < ValueType > ;
449+
450+ if ( isSelect && onSelect ) {
451+ onSelect ( selectValue , outOption ) ;
452+ } else if ( ! isSelect && onDeselect ) {
453+ onDeselect ( selectValue , outOption ) ;
454+ }
455+ }
456+
457+ // Trigger internal event
458+ if ( useInternalProps ) {
459+ if ( isSelect && internalProps . onRawSelect ) {
460+ internalProps . onRawSelect ( newValue , outOption ) ;
461+ } else if ( ! isSelect && internalProps . onRawDeselect ) {
462+ internalProps . onRawDeselect ( newValue , outOption ) ;
463+ }
446464 }
447465 } ;
448466
449467 const triggerChange = ( newRawValues : RawValueType [ ] ) => {
468+ if ( useInternalProps && internalProps . skipTriggerChange ) {
469+ return ;
470+ }
471+
450472 const outValues = toOuterValues < FlattenOptionsType < OptionsType > > ( Array . from ( newRawValues ) , {
451473 labelInValue : mergedLabelInValue ,
452474 options : mergedFlattenOptions ,
@@ -766,7 +788,7 @@ export default function generateSelector<
766788 let clearNode : React . ReactNode ;
767789 const onClearMouseDown : React . MouseEventHandler < HTMLSpanElement > = ( ) => {
768790 // Trigger internal `onClear` event
769- if ( internalProps . mark === INTERNAL_PROPS_MARK && internalProps . onClear ) {
791+ if ( useInternalProps && internalProps . onClear ) {
770792 internalProps . onClear ( ) ;
771793 }
772794
0 commit comments