Skip to content

Commit ea88dce

Browse files
committed
docs: Init examples
1 parent 8d6eeec commit ea88dce

File tree

5 files changed

+125
-3
lines changed

5 files changed

+125
-3
lines changed

assets/index.less

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
@overflow-prefix-cls: rc-overflow;
22

33
.@{overflow-prefix-cls} {
4+
display: inline-flex;
5+
flex-wrap: nowrap;
6+
7+
&-item {
8+
margin-right: 4px;
9+
background: rgba(0, 255, 0, 0.2);
10+
padding: 4px 8px;
11+
}
412
}

examples/basic.tsx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import React from 'react';
2+
import Overflow from '../src';
3+
import '../assets/index.less';
4+
5+
interface ItemType {
6+
value: string | number;
7+
label: string;
8+
}
9+
10+
function createData(count: number): ItemType[] {
11+
const data: ItemType[] = new Array(count).fill(undefined).map((_, index) => ({
12+
value: index,
13+
label: `Label${index}`,
14+
}));
15+
16+
return data;
17+
}
18+
19+
const Demo = () => {
20+
const [data, setData] = React.useState(createData(10));
21+
22+
return (
23+
<div>
24+
<select
25+
value={data.length}
26+
onChange={({ target: { value } }) => {
27+
setData(createData(Number(value)));
28+
}}
29+
>
30+
<option value={0}>0</option>
31+
<option value={5}>5</option>
32+
<option value={10}>10</option>
33+
<option value={20}>20</option>
34+
</select>
35+
36+
<div style={{ border: '5px solid green', padding: 8, maxWidth: 300 }}>
37+
<Overflow<ItemType> data={data} renderItem={(item) => item.label} />
38+
</div>
39+
</div>
40+
);
41+
};
42+
43+
export default Demo;

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@
4646
},
4747
"devDependencies": {
4848
"@types/classnames": "^2.2.9",
49-
"@types/react": "^16.9.2",
50-
"@types/react-dom": "^16.9.0",
49+
"@types/react": "^16.14.2",
50+
"@types/react-dom": "^16.9.10",
5151
"@umijs/fabric": "^2.0.8",
5252
"coveralls": "^3.0.6",
5353
"cross-env": "^7.0.2",

src/Overflow.tsx

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import * as React from 'react';
2+
import classNames from 'classnames';
3+
4+
export interface OverflowProps<ItemType> {
5+
prefixCls?: string;
6+
className?: string;
7+
style?: React.CSSProperties;
8+
data?: ItemType[];
9+
itemKey?: React.Key | ((item: ItemType) => React.Key);
10+
renderItem?: (item: ItemType) => React.ReactNode;
11+
}
12+
13+
function Overflow<ItemType = any>(
14+
props: OverflowProps<ItemType>,
15+
ref: React.Ref<HTMLDivElement>,
16+
) {
17+
const {
18+
prefixCls = 'rc-overflow',
19+
data = [],
20+
renderItem,
21+
itemKey,
22+
style,
23+
className,
24+
} = props;
25+
26+
// ================================= Item =================================
27+
const getKey = React.useCallback(
28+
(item: ItemType, index: number) => {
29+
if (typeof itemKey === 'function') {
30+
return itemKey(item);
31+
}
32+
return (itemKey && (item as any)?.[itemKey]) ?? index;
33+
},
34+
[itemKey],
35+
);
36+
37+
const mergedRenderItem = React.useCallback(
38+
renderItem || ((item: ItemType) => item),
39+
[renderItem],
40+
);
41+
42+
// ================================ Render ================================
43+
return (
44+
<div className={classNames(prefixCls, className)} style={style} ref={ref}>
45+
{data.map((item, index) => {
46+
const key = getKey(item, index);
47+
48+
return (
49+
<div className={`${prefixCls}-item`} key={key}>
50+
{mergedRenderItem(item)}
51+
</div>
52+
);
53+
})}
54+
</div>
55+
);
56+
}
57+
58+
const ForwardOverflow = React.forwardRef(Overflow);
59+
60+
ForwardOverflow.displayName = 'Overflow';
61+
62+
// Convert to generic type
63+
export default ForwardOverflow as <ItemType = any>(
64+
props: React.PropsWithChildren<OverflowProps<ItemType>> & {
65+
ref?: React.Ref<HTMLDivElement>;
66+
},
67+
) => React.ReactElement;

src/index.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
export default {};
1+
import Overflow, { OverflowProps } from './Overflow';
2+
3+
export { OverflowProps };
4+
5+
export default Overflow;

0 commit comments

Comments
 (0)