From c716e92c5de4e08b665b2d14116223385468c90a Mon Sep 17 00:00:00 2001 From: Uyarn Date: Tue, 21 Dec 2021 01:04:28 +0800 Subject: [PATCH] fix(select): support 0 value to be selected --- src/select/base/PopupContent.tsx | 40 +++++++++++++++----------------- src/select/base/Select.tsx | 35 +++++++++++++--------------- 2 files changed, 35 insertions(+), 40 deletions(-) diff --git a/src/select/base/PopupContent.tsx b/src/select/base/PopupContent.tsx index f2de74e180..b7cd3e66b6 100644 --- a/src/select/base/PopupContent.tsx +++ b/src/select/base/PopupContent.tsx @@ -50,30 +50,28 @@ const PopupContent = (props: SelectPopupProps) => { if (!children && !props.options) return null; const onSelect: SelectOptionProps['onSelect'] = (selectedValue, { label, selected, restData }) => { - if (selectedValue) { - const isValObj = valueType === 'object'; - let objVal = {}; - if (isValObj) { - objVal = { ...restData }; - if (!keys?.label) { - Object.assign(objVal, { label }); - } - if (!keys?.value) { - Object.assign(objVal, { value: selectedValue }); - } + const isValObj = valueType === 'object'; + let objVal = {}; + if (isValObj) { + objVal = { ...restData }; + if (!keys?.label) { + Object.assign(objVal, { label }); } + if (!keys?.value) { + Object.assign(objVal, { value: selectedValue }); + } + } - if (multiple) { - // calc multiple select values - const values = getSelectValueArr(value, selectedValue, selected, valueType, keys, objVal); - onChange(values, { label }); - } else { - // calc single select value - const selectVal = valueType === 'object' ? objVal : selectedValue; + if (multiple) { + // calc multiple select values + const values = getSelectValueArr(value, selectedValue, selected, valueType, keys, objVal); + onChange(values, { label }); + } else { + // calc single select value + const selectVal = valueType === 'object' ? objVal : selectedValue; - onChange(selectVal, { label }); - setShowPopup(!showPopup); - } + onChange(selectVal, { label }); + setShowPopup(!showPopup); } }; diff --git a/src/select/base/Select.tsx b/src/select/base/Select.tsx index 8573a5e78a..dafaed67cb 100644 --- a/src/select/base/Select.tsx +++ b/src/select/base/Select.tsx @@ -5,6 +5,7 @@ import isFunction from 'lodash/isFunction'; import get from 'lodash/get'; import isString from 'lodash/isString'; +import { isNumber } from 'lodash'; import { useLocaleReceiver } from '../../locale/LocalReceiver'; import useConfig from '../../_util/useConfig'; import composeRefs from '../../_util/composeRefs'; @@ -94,9 +95,7 @@ const Select = forwardRefWithStatics( const selectRef = useRef(null); const overlayRef = useRef(null); - if (value) { - selectedLabel = getLabel(children, value, currentOptions, keys); - } + selectedLabel = getLabel(children, value, currentOptions, keys); // 计算Select的宽高 useEffect(() => { @@ -203,7 +202,7 @@ const Select = forwardRefWithStatics( { - const isEmpty = !value || (Array.isArray(value) && value.length === 0); - return ( - onFocus?.({ value, e: context?.e })} - onBlur={(_, context) => onBlur?.({ value, e: context?.e })} - onEnter={(_, context) => onEnter?.({ inputValue: inputVal, value, e: context?.e })} - /> - ); - }; + const renderInput = () => ( + 0 ? null : selectedLabel || placeholder || '-请选择-'} + className={`${name}-input`} + onChange={handleInputChange} + onFocus={(_, context) => onFocus?.({ value, e: context?.e })} + onBlur={(_, context) => onBlur?.({ value, e: context?.e })} + onEnter={(_, context) => onEnter?.({ inputValue: inputVal, value, e: context?.e })} + /> + ); const onInputClick = (e: React.MouseEvent) => { e.preventDefault(); if (!disabled) { - setShowPopup(!showPopup); + setShowPopup(true); + setInputVal(''); } };