Skip to content

Commit c4f168e

Browse files
committed
feat: Support forward
1 parent 431595d commit c4f168e

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

src/Item.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ export interface ItemProps<ItemType> extends React.HTMLAttributes<any> {
1919
invalidate?: boolean;
2020
}
2121

22-
export default function Item<ItemType>(props: ItemProps<ItemType>) {
22+
function InternalItem<ItemType>(
23+
props: ItemProps<ItemType>,
24+
ref: React.Ref<any>,
25+
) {
2326
const {
2427
prefixCls,
2528
invalidate,
@@ -74,6 +77,7 @@ export default function Item<ItemType>(props: ItemProps<ItemType>) {
7477
...style,
7578
}}
7679
{...restProps}
80+
ref={ref}
7781
>
7882
{childNode}
7983
</Component>
@@ -93,3 +97,8 @@ export default function Item<ItemType>(props: ItemProps<ItemType>) {
9397

9498
return itemNode;
9599
}
100+
101+
const Item = React.forwardRef(InternalItem);
102+
Item.displayName = 'Item';
103+
104+
export default Item;

src/RawItem.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export interface RawItemProps extends React.HTMLAttributes<any> {
88
children?: React.ReactNode;
99
}
1010

11-
export default function RawItem(props: RawItemProps) {
11+
const InternalRawItem = (props: RawItemProps, ref: React.Ref<any>) => {
1212
const context = React.useContext(OverflowContext);
1313

1414
// Render directly when context not provided
@@ -24,10 +24,16 @@ export default function RawItem(props: RawItemProps) {
2424
return (
2525
<OverflowContext.Provider value={null}>
2626
<Item
27+
ref={ref}
2728
className={classNames(contextClassName, className)}
2829
{...restContext}
2930
{...restProps}
3031
/>
3132
</OverflowContext.Provider>
3233
);
33-
}
34+
};
35+
36+
const RawItem = React.forwardRef(InternalRawItem);
37+
RawItem.displayName = 'RawItem';
38+
39+
export default RawItem;

tests/raw.spec.tsx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,32 @@ describe('Overflow.Raw', () => {
1717
}
1818

1919
it('render node directly', () => {
20+
const elements = new Set<HTMLElement>();
21+
2022
const wrapper = mount(
2123
<Overflow<ItemType>
2224
data={getData(1)}
2325
renderRawItem={item => {
24-
return <Overflow.Item component="li">{item.label}</Overflow.Item>;
26+
return (
27+
<Overflow.Item
28+
component="li"
29+
ref={ele => {
30+
elements.add(ele);
31+
}}
32+
>
33+
{item.label}
34+
</Overflow.Item>
35+
);
2536
}}
2637
itemKey={item => `bamboo-${item.key}`}
2738
component="ul"
2839
/>,
2940
);
3041

42+
const elementList = [...elements];
43+
expect(elementList).toHaveLength(1);
44+
expect(elementList[0] instanceof HTMLLIElement).toBeTruthy();
45+
3146
expect(wrapper.render()).toMatchSnapshot();
3247
});
3348

0 commit comments

Comments
 (0)