Skip to content

Commit ec2a4de

Browse files
fix(react-overflow): overflowMenuSize included in occupiedSize.
1 parent cb5aa49 commit ec2a4de

File tree

9 files changed

+50
-5
lines changed

9 files changed

+50
-5
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "patch",
3+
"comment": "fix: overflowMenuSize is included in occupiedSize",
4+
"packageName": "@fluentui/priority-overflow",
5+
"email": "[email protected]",
6+
"dependentChangeType": "patch"
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "minor",
3+
"comment": "fix: overflowMenuSize included in occupiedSize",
4+
"packageName": "@fluentui/react-overflow",
5+
"email": "[email protected]",
6+
"dependentChangeType": "patch"
7+
}

packages/react-components/priority-overflow/etc/priority-overflow.api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export function createOverflowManager(): OverflowManager;
99

1010
// @public (undocumented)
1111
export interface ObserveOptions {
12+
hasHiddenItems?: boolean;
1213
minimumVisible?: number;
1314
onUpdateItemVisibility: OnUpdateItemVisibility;
1415
onUpdateOverflow: OnUpdateOverflow;

packages/react-components/priority-overflow/src/overflowManager.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export function createOverflowManager(): OverflowManager {
3232
minimumVisible: 0,
3333
onUpdateItemVisibility: () => undefined,
3434
onUpdateOverflow: () => undefined,
35+
hasHiddenItems: false,
3536
};
3637

3738
const overflowItems: Record<string, OverflowItemEntry> = {};
@@ -103,7 +104,8 @@ export function createOverflowManager(): OverflowManager {
103104
0,
104105
);
105106

106-
const overflowMenuSize = invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;
107+
const overflowMenuSize =
108+
(invisibleItemQueue.size() > 0 || options.hasHiddenItems) && overflowMenu ? getOffsetSize(overflowMenu) : 0;
107109

108110
return totalItemSize + totalDividerSize + overflowMenuSize;
109111
}

packages/react-components/priority-overflow/src/types.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ export interface ObserveOptions {
8383
* Callback when item visibility is updated
8484
*/
8585
onUpdateOverflow: OnUpdateOverflow;
86+
87+
/**
88+
* When true, the overflow menu has default hidden items
89+
* @default false
90+
*/
91+
hasHiddenItems?: boolean;
8692
}
8793

8894
/**

packages/react-components/react-breadcrumb/stories/src/Breadcrumb/BreadcrumbWithOverflow.stories.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,9 +240,11 @@ const BreadcrumbOverflowExample = () => {
240240
maxDisplayedItems: 5,
241241
});
242242

243+
const hasHiddenItems = overflowItems && overflowItems.length > 0;
244+
243245
return (
244246
<div className={styles.example}>
245-
<Overflow>
247+
<Overflow hasHiddenItems={hasHiddenItems}>
246248
<Breadcrumb>
247249
{startDisplayedItems.map((item: Item) => renderBreadcrumbItem(item, false))}
248250
<OverflowMenu

packages/react-components/react-overflow/library/src/components/Overflow.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export interface OnOverflowChangeData extends OverflowState {}
2424
* Overflow Props
2525
*/
2626
export type OverflowProps = Partial<
27-
Pick<ObserveOptions, 'overflowAxis' | 'overflowDirection' | 'padding' | 'minimumVisible'>
27+
Pick<ObserveOptions, 'overflowAxis' | 'overflowDirection' | 'padding' | 'minimumVisible' | 'hasHiddenItems'>
2828
> & {
2929
children: React.ReactElement;
3030

@@ -39,7 +39,15 @@ export type OverflowProps = Partial<
3939
export const Overflow = React.forwardRef((props: OverflowProps, ref) => {
4040
const styles = useOverflowStyles();
4141

42-
const { children, minimumVisible, overflowAxis = 'horizontal', overflowDirection, padding, onOverflowChange } = props;
42+
const {
43+
children,
44+
minimumVisible,
45+
overflowAxis = 'horizontal',
46+
overflowDirection,
47+
padding,
48+
onOverflowChange,
49+
hasHiddenItems,
50+
} = props;
4351

4452
const [overflowState, setOverflowState] = React.useState<OverflowState>({
4553
hasOverflow: false,
@@ -73,6 +81,7 @@ export const Overflow = React.forwardRef((props: OverflowProps, ref) => {
7381
overflowAxis,
7482
padding,
7583
minimumVisible,
84+
hasHiddenItems,
7685
onUpdateItemVisibility: updateVisibilityAttribute,
7786
},
7887
);

packages/react-components/react-overflow/library/src/useOverflowContainer.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ describe('useOverflowContainer', () => {
7373
Array [
7474
<div />,
7575
Object {
76+
"hasHiddenItems": false,
7677
"minimumVisible": 0,
7778
"onUpdateItemVisibility": [Function],
7879
"onUpdateOverflow": [Function],

packages/react-components/react-overflow/library/src/useOverflowContainer.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export const useOverflowContainer = <TElement extends HTMLElement>(
3636
padding = 10,
3737
minimumVisible = 0,
3838
onUpdateItemVisibility = noop,
39+
hasHiddenItems = false,
3940
} = options;
4041

4142
const onUpdateOverflow = useEventCallback(update);
@@ -48,8 +49,17 @@ export const useOverflowContainer = <TElement extends HTMLElement>(
4849
minimumVisible,
4950
onUpdateItemVisibility,
5051
onUpdateOverflow,
52+
hasHiddenItems,
5153
}),
52-
[minimumVisible, onUpdateItemVisibility, overflowAxis, overflowDirection, padding, onUpdateOverflow],
54+
[
55+
minimumVisible,
56+
onUpdateItemVisibility,
57+
overflowAxis,
58+
overflowDirection,
59+
padding,
60+
onUpdateOverflow,
61+
hasHiddenItems,
62+
],
5363
);
5464

5565
const firstMount = useFirstMount();

0 commit comments

Comments
 (0)