Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions src/Overflow.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ export { OverflowContext } from './context';

export type { ComponentType } from './RawItem';

export interface OverflowProps<ItemType>
extends Omit<React.HTMLAttributes<any>, 'prefix'> {
export interface OverflowProps<ItemType> extends Omit<
React.HTMLAttributes<any>,
'prefix'
> {
prefixCls?: string;
className?: string;
style?: React.CSSProperties;
Expand All @@ -30,8 +32,7 @@ export interface OverflowProps<ItemType>
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;
Expand Down Expand Up @@ -380,7 +381,9 @@ function Overflow<ItemType = any>(
display: displayRest,
};

const mergedRenderRest = renderRest || defaultRenderRest;
const mergedRenderRest = isReactRenderable(renderRest)
? renderRest
: defaultRenderRest;

const restNode = renderRawRest ? (
<OverflowContext.Provider
Expand Down Expand Up @@ -465,13 +468,13 @@ type FilledOverflowType = ForwardOverflowType & {
INVALIDATE: typeof INVALIDATE;
};

((ForwardOverflow as unknown) as FilledOverflowType).Item = RawItem;
((ForwardOverflow as unknown) as FilledOverflowType).RESPONSIVE = RESPONSIVE;
((ForwardOverflow as unknown) as FilledOverflowType).INVALIDATE = INVALIDATE;
(ForwardOverflow as unknown as FilledOverflowType).Item = RawItem;
(ForwardOverflow as unknown as FilledOverflowType).RESPONSIVE = RESPONSIVE;
(ForwardOverflow as unknown as FilledOverflowType).INVALIDATE = INVALIDATE;

if (process.env.NODE_ENV !== 'production') {
ForwardOverflow.displayName = 'Overflow';
}

// Convert to generic type
export default (ForwardOverflow as unknown) as FilledOverflowType;
export default ForwardOverflow as unknown as FilledOverflowType;
24 changes: 24 additions & 0 deletions tests/renderability.spec.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import React from 'react';
import { render } from '@testing-library/react';
import Overflow from '../src';

it.each([0, () => 0])('renders zero rest content %s', renderRest => {
const { container } = render(
<Overflow data={['A', 'B']} maxCount={1} renderRest={renderRest} />,
);
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(
<Overflow data={['A', 'B']} maxCount={1} renderRest={renderRest} />,
);
expect(container.querySelector('.rc-overflow-item-rest').textContent).toBe(
'+ 1 ...',
);
},
);
Loading