diff --git a/src/generate.tsx b/src/generate.tsx index 35f61aa6c..38f0eb0f5 100644 --- a/src/generate.tsx +++ b/src/generate.tsx @@ -209,7 +209,7 @@ export interface GenerateConfig { | (( values: RawValueType[], options: FlattenOptionsType, - info?: { prevValueOptions?: OptionsType[] }, + info?: { prevValueOptions?: OptionsType[]; props?: any }, ) => OptionsType); /** Check if a value is disabled */ isValueDisabled: (value: RawValueType, options: FlattenOptionsType) => boolean; @@ -233,7 +233,7 @@ export default function generateSelector< label?: React.ReactNode; key?: Key; disabled?: boolean; - }[] + }[], >(config: GenerateConfig) { const { prefixCls: defaultPrefixCls, @@ -527,18 +527,20 @@ export default function generateSelector< const triggerSelect = (newValue: RawValueType, isSelect: boolean, source: SelectSource) => { const newValueOption = getValueOption([newValue]); - const outOption = findValueOption([newValue], newValueOption)[0]; + const outOption = findValueOption([newValue], newValueOption, { props })[0]; if (!internalProps.skipTriggerSelect) { // Skip trigger `onSelect` or `onDeselect` if configured - const selectValue = (mergedLabelInValue - ? getLabeledValue(newValue, { - options: newValueOption, - prevValueMap: mergedValueMap, - labelInValue: mergedLabelInValue, - optionLabelProp: mergedOptionLabelProp, - }) - : newValue) as SingleType; + const selectValue = ( + mergedLabelInValue + ? getLabeledValue(newValue, { + options: newValueOption, + prevValueMap: mergedValueMap, + labelInValue: mergedLabelInValue, + optionLabelProp: mergedOptionLabelProp, + }) + : newValue + ) as SingleType; if (isSelect && onSelect) { onSelect(selectValue, outOption); @@ -576,7 +578,10 @@ export default function generateSelector< const outValue: ValueType = (isMultiple ? outValues : outValues[0]) as ValueType; // Skip trigger if prev & current value is both empty if (onChange && (mergedRawValue.length !== 0 || outValues.length !== 0)) { - const outOptions = findValueOption(newRawValues, newRawValuesOptions, { prevValueOptions }); + const outOptions = findValueOption(newRawValues, newRawValuesOptions, { + prevValueOptions, + props, + }); // We will cache option in case it removed by ajax setPrevValueOptions( @@ -756,9 +761,7 @@ export default function generateSelector< if (!searchText || !searchText.trim()) { return; } - const newRawValues = Array.from( - new Set([...mergedRawValue, searchText]), - ); + const newRawValues = Array.from(new Set([...mergedRawValue, searchText])); triggerChange(newRawValues); newRawValues.forEach((newRawValue) => { triggerSelect(newRawValue, true, 'input'); @@ -1148,7 +1151,7 @@ export default function generateSelector< // Ref of Select type RefSelectFuncType = typeof RefSelectFunc; - const RefSelect = ((React.forwardRef as unknown) as RefSelectFuncType)(Select); + const RefSelect = (React.forwardRef as unknown as RefSelectFuncType)(Select); return RefSelect; }