Skip to content

Commit 695dad0

Browse files
committed
chore: Use fixed
1 parent 5346f1b commit 695dad0

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

assets/index.less

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
display: flex;
55
flex-wrap: wrap;
66
max-width: 100%;
7+
position: relative;
78

89
&-item {
910
background: rgba(0, 255, 0, 0.2);

src/Item.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export interface ItemProps<ItemType> {
66
prefixCls: string;
77
item?: ItemType;
88
className?: string;
9+
style?: React.CSSProperties;
910
renderItem?: (item: ItemType) => React.ReactNode;
1011
responsive?: boolean;
1112
itemKey?: React.Key;
@@ -24,6 +25,7 @@ export default function Item<ItemType>(props: ItemProps<ItemType>) {
2425
registerSize,
2526
itemKey,
2627
className,
28+
style,
2729
children,
2830
display,
2931
order,
@@ -55,6 +57,7 @@ export default function Item<ItemType>(props: ItemProps<ItemType>) {
5557
overflowY: mergedHidden ? 'hidden' : undefined,
5658
order: responsive ? order : undefined,
5759
pointerEvents: mergedHidden ? 'none' : undefined,
60+
...style,
5861
}}
5962
>
6063
{childNode}

src/Overflow.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ function Overflow<ItemType = any>(
5555
const [restWidth, setRestWidth] = createUseState(0);
5656

5757
const [suffixWidth, setSuffixWidth] = createUseState(0);
58+
const [suffixFixedStart, setSuffixFixedStart] = useState<number>(null);
5859

5960
const [displayCount, setDisplayCount] = useState(0);
6061
const [restReady, setRestReady] = useState(false);
@@ -171,17 +172,26 @@ function Overflow<ItemType = any>(
171172
) {
172173
// Additional check if match the end
173174
updateDisplayCount(lastIndex);
175+
setSuffixFixedStart(null);
174176
break;
175177
} else if (totalWidth + mergedRestWidth > containerWidth) {
176178
// Can not hold all the content to show rest
177179
updateDisplayCount(i - 1);
180+
setSuffixFixedStart(
181+
totalWidth - currentItemWidth - suffixWidth + mergedRestWidth,
182+
);
178183
break;
179184
} else if (i === lastIndex) {
180185
// Reach the end
181186
updateDisplayCount(lastIndex);
187+
setSuffixFixedStart(totalWidth - suffixWidth);
182188
break;
183189
}
184190
}
191+
192+
if (suffix && getItemWidth(0) + suffixWidth > containerWidth) {
193+
setSuffixFixedStart(null);
194+
}
185195
}
186196
}, [
187197
containerWidth,
@@ -195,6 +205,15 @@ function Overflow<ItemType = any>(
195205
// ================================ Render ================================
196206
const displayRest = restReady && !!omittedItems.length;
197207

208+
let suffixStyle: React.CSSProperties = {};
209+
if (suffixFixedStart !== null) {
210+
suffixStyle = {
211+
position: 'absolute',
212+
left: suffixFixedStart,
213+
top: 0,
214+
};
215+
}
216+
198217
let overflowNode = (
199218
<div className={classNames(prefixCls, className)} style={style} ref={ref}>
200219
{mergedData.map((item, index) => {
@@ -240,6 +259,7 @@ function Overflow<ItemType = any>(
240259
responsive={isResponsive}
241260
registerSize={registerSuffixSize}
242261
display
262+
style={suffixStyle}
243263
>
244264
{suffix}
245265
</Item>

0 commit comments

Comments
 (0)