diff --git a/src/BaseSelect.tsx b/src/BaseSelect.tsx index db09169b8..3208301d1 100644 --- a/src/BaseSelect.tsx +++ b/src/BaseSelect.tsx @@ -27,7 +27,7 @@ import Selector from './Selector'; import type { RefTriggerProps } from './SelectTrigger'; import SelectTrigger from './SelectTrigger'; import TransBtn from './TransBtn'; -import { getSeparatedContent } from './utils/valueUtil'; +import { getSeparatedContent, isValidCount } from './utils/valueUtil'; import SelectContext from './SelectContext'; import type { SelectContextProps } from './SelectContext'; @@ -399,7 +399,7 @@ const BaseSelect = React.forwardRef((props, ref) const { maxCount, rawValues } = React.useContext(SelectContext) || {}; const onInternalSearch = (searchText: string, fromTyping: boolean, isCompositing: boolean) => { - if (rawValues?.size >= maxCount) { + if (isValidCount(maxCount) && rawValues?.size >= maxCount) { return; } let ret = true; @@ -409,7 +409,7 @@ const BaseSelect = React.forwardRef((props, ref) const separatedList = getSeparatedContent( searchText, tokenSeparators, - maxCount && maxCount - rawValues.size, + isValidCount(maxCount) ? maxCount - rawValues.size : undefined, ); // Check if match the `tokenSeparators` diff --git a/src/OptionList.tsx b/src/OptionList.tsx index ee7e3cd80..9bb1a6c9c 100644 --- a/src/OptionList.tsx +++ b/src/OptionList.tsx @@ -14,6 +14,7 @@ import TransBtn from './TransBtn'; import useBaseProps from './hooks/useBaseProps'; import type { FlattenOptionData } from './interface'; import { isPlatformMac } from './utils/platformUtil'; +import { isValidCount } from './utils/valueUtil'; // export interface OptionListProps { export type OptionListProps = Record; @@ -72,7 +73,7 @@ const OptionList: React.ForwardRefRenderFunction = (_, r const listRef = React.useRef(null); const overMaxCount = React.useMemo( - () => multiple && typeof maxCount !== 'undefined' && rawValues?.size >= maxCount, + () => multiple && isValidCount(maxCount) && rawValues?.size >= maxCount, [multiple, maxCount, rawValues?.size], ); diff --git a/src/utils/valueUtil.ts b/src/utils/valueUtil.ts index 920078f92..ffcad5af5 100644 --- a/src/utils/valueUtil.ts +++ b/src/utils/valueUtil.ts @@ -20,6 +20,10 @@ function getKey(data: BaseOptionType, index: number) { return `rc-index-key-${index}`; } +export function isValidCount(value?: number) { + return typeof value !== 'undefined' && !Number.isNaN(value); +} + export function fillFieldNames(fieldNames: FieldNames | undefined, childrenAsData: boolean) { const { label, value, options, groupLabel } = fieldNames || {}; const mergedLabel = label || (childrenAsData ? 'children' : 'label');