Skip to content

Commit f80a42c

Browse files
authored
Merge pull request #337 from opf/bug/63777-breadcrumb-index-creates-unnecessary-navigation-buttons-on-mobile-web
[63777] Add option to skip indiviual items from mobile breadcrumb behaviour
2 parents 5df97d3 + afd57b3 commit f80a42c

File tree

4 files changed

+44
-3
lines changed

4 files changed

+44
-3
lines changed

.changeset/purple-paths-look.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@openproject/primer-view-components': patch
3+
---
4+
5+
Add the option to skip breadcrumb items for mobile

app/components/primer/open_project/page_header.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,11 +186,16 @@ class PageHeader < Primer::Component
186186
system_arguments[:classes] = class_names(system_arguments[:classes], "PageHeader-breadcrumbs")
187187
system_arguments[:display] ||= DEFAULT_BREADCRUMBS_DISPLAY
188188

189+
parent_item = nil
190+
189191
# show parent link if there is a parent for current page
190-
if items.length > 1
191-
link_arguments = {}
192-
parent_item = items[items.length - 2]
192+
items.reverse_each do |item|
193+
parent_item = item if item.is_a?(Hash) && item[:skip_for_mobile] != true
194+
break if parent_item.present?
195+
end
193196

197+
if parent_item.present? && parent_item[:href].present?
198+
link_arguments = {}
194199
link_arguments[:icon] = fetch_or_fallback(BACK_BUTTON_ICON_OPTIONS, DEFAULT_BACK_BUTTON_ICON)
195200
link_arguments[:href] = parent_item[:href]
196201
link_arguments[:target] = "_top"

previews/primer/open_project/page_header_preview.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,16 @@ def segmented_control_mobile_icons
256256
end
257257
end
258258
end
259+
260+
# @label With skipable breadcrumb items
261+
def skip_breadcrumb_item
262+
render(Primer::OpenProject::PageHeader.new) do |component|
263+
component.with_title { "Resize me to mobile screen size" }
264+
component.with_breadcrumbs([{ href: "/foo", text: "Foo" },
265+
{ href: "/bar", text: "Bar", skip_for_mobile: true },
266+
"Baz"])
267+
end
268+
end
259269
end
260270
end
261271
end

test/components/primer/open_project/page_header_test.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,27 @@ def test_renders_editable_title
269269
assert_selector(".FormField-input.Button--secondary")
270270
end
271271

272+
def test_skips_a_breadcrumb_item_for_mobile
273+
render_inline(Primer::OpenProject::PageHeader.new) do |header|
274+
header.with_title { "Hello" }
275+
header.with_breadcrumbs([{ href: "/foo", text: "Foo" },
276+
{ href: "/bar", text: "Bar", skip_for_mobile: true },
277+
"Baz"])
278+
end
279+
280+
assert_text("Hello")
281+
assert_selector(".PageHeader-title")
282+
assert_selector(".PageHeader-breadcrumbs")
283+
284+
# The direct parent is skipped for the mobile back button..
285+
assert_selector("a.PageHeader-parentLink[href='/foo']")
286+
287+
# .. but it is present in the normal desktop
288+
assert_selector("nav[aria-label='Breadcrumb'].PageHeader-breadcrumbs .breadcrumb-item a[href='/foo']")
289+
assert_selector("nav[aria-label='Breadcrumb'].PageHeader-breadcrumbs .breadcrumb-item a[href='/bar']")
290+
assert_selector("nav[aria-label='Breadcrumb'].PageHeader-breadcrumbs .breadcrumb-item.text-bold a[href='#']")
291+
end
292+
272293
private
273294

274295
def breadcrumb_elements

0 commit comments

Comments
 (0)