From abe69ac29e648f4a6c6c98ba20ad626858058ac5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E8=89=B3=E5=85=B5?= Date: Mon, 28 Sep 2026 10:36:25 +0800 Subject: [PATCH] fix: preserve zero-valued overflow indicators --- src/Overflow.tsx | 21 ++++++++++++--------- tests/renderability.spec.tsx | 24 ++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 9 deletions(-) create mode 100644 tests/renderability.spec.tsx diff --git a/src/Overflow.tsx b/src/Overflow.tsx index ffa2bc8..18de929 100644 --- a/src/Overflow.tsx +++ b/src/Overflow.tsx @@ -16,8 +16,10 @@ export { OverflowContext } from './context'; export type { ComponentType } from './RawItem'; -export interface OverflowProps - extends Omit, 'prefix'> { +export interface OverflowProps extends Omit< + React.HTMLAttributes, + 'prefix' +> { prefixCls?: string; className?: string; style?: React.CSSProperties; @@ -30,8 +32,7 @@ export interface OverflowProps renderRawItem?: (item: ItemType, index: number) => React.ReactElement; maxCount?: number | typeof RESPONSIVE | typeof INVALIDATE; renderRest?: - | React.ReactNode - | ((omittedItems: ItemType[]) => React.ReactNode); + React.ReactNode | ((omittedItems: ItemType[]) => React.ReactNode); /** @private Do not use in your production. Render raw node that need wrap Item by developer self */ renderRawRest?: (omittedItems: ItemType[]) => React.ReactElement; prefix?: React.ReactNode; @@ -380,7 +381,9 @@ function Overflow( display: displayRest, }; - const mergedRenderRest = renderRest || defaultRenderRest; + const mergedRenderRest = isReactRenderable(renderRest) + ? renderRest + : defaultRenderRest; const restNode = renderRawRest ? ( 0])('renders zero rest content %s', renderRest => { + const { container } = render( + , + ); + expect(container.querySelector('.rc-overflow-item-rest').textContent).toBe( + '0', + ); +}); + +it.each([false, null, undefined, ''])( + 'keeps the default rest for %s', + renderRest => { + const { container } = render( + , + ); + expect(container.querySelector('.rc-overflow-item-rest').textContent).toBe( + '+ 1 ...', + ); + }, +);