Skip to content

Commit 9e3fe4b

Browse files
authored
Breadcrumbs: Show only current page on narrow viewports with overflow menu (#7754)
Co-authored-by: liuliu-dev <6688812+liuliu-dev@users.noreply.github.com>
1 parent ed82a1e commit 9e3fe4b

6 files changed

Lines changed: 55 additions & 1 deletion

File tree

.changeset/fast-pugs-camp.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@primer/react': patch
3+
---
4+
5+
Breadcrumbs: On narrow viewports, only show the current page breadcrumb and the overflow menu when `overflow="menu"` is set.
4.75 KB
Loading
8.65 KB
Loading
9.22 KB
Loading

e2e/components/Breadcrumbs.test.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {test, expect} from '@playwright/test'
22
import {visit} from '../test-helpers/storybook'
33
import {themes} from '../test-helpers/themes'
4+
import {viewports} from '../test-helpers/viewports'
45

56
const stories = [
67
{
@@ -37,4 +38,44 @@ test.describe('Breadcrumbs', () => {
3738
}
3839
})
3940
}
41+
42+
test.describe('Overflow Menu', () => {
43+
test('narrow viewport @vrt', async ({page}) => {
44+
await visit(page, {
45+
id: 'components-breadcrumbs-features--overflow-menu',
46+
globals: {
47+
colorScheme: 'light',
48+
},
49+
})
50+
51+
await page.setViewportSize({width: viewports['primer.breakpoint.xs'] - 1, height: 768})
52+
await expect(page).toHaveScreenshot('Breadcrumbs.OverflowMenu.narrow.png')
53+
})
54+
55+
test('wide viewport @vrt', async ({page}) => {
56+
await visit(page, {
57+
id: 'components-breadcrumbs-features--overflow-menu',
58+
globals: {
59+
colorScheme: 'light',
60+
},
61+
})
62+
63+
await page.setViewportSize({width: viewports['primer.breakpoint.md'], height: 768})
64+
await expect(page).toHaveScreenshot('Breadcrumbs.OverflowMenu.wide.png')
65+
})
66+
})
67+
68+
test.describe('Overflow Menu With Root', () => {
69+
test('narrow viewport @vrt', async ({page}) => {
70+
await visit(page, {
71+
id: 'components-breadcrumbs-features--overflow-menu-with-root',
72+
globals: {
73+
colorScheme: 'light',
74+
},
75+
})
76+
77+
await page.setViewportSize({width: viewports['primer.breakpoint.xs'] - 1, height: 768})
78+
await expect(page).toHaveScreenshot('Breadcrumbs.OverflowMenuWithRoot.narrow.png')
79+
})
80+
})
4081
})

packages/react/src/Breadcrumbs/Breadcrumbs.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,15 @@ function Breadcrumbs({className, children, style, overflow = 'wrap', variant = '
189189
(availableWidth: number) => {
190190
let eHideRoot = effectiveHideRoot
191191
const MENU_BUTTON_WIDTH = menuButtonWidth
192-
const MIN_VISIBLE_ITEMS = !eHideRoot ? 3 : 4
192+
const NARROW_BREAKPOINT = 544
193+
const isNarrow = availableWidth < NARROW_BREAKPOINT
194+
195+
let MIN_VISIBLE_ITEMS = 4
196+
if (!eHideRoot) {
197+
MIN_VISIBLE_ITEMS = 3
198+
} else if (isNarrow) {
199+
MIN_VISIBLE_ITEMS = 1
200+
}
193201

194202
const calculateVisibleItemsWidth = (w: number[]) => {
195203
const widths = w.reduce((sum, width) => sum + width + 16, 0)

0 commit comments

Comments
 (0)