File tree Expand file tree Collapse file tree
app/components/primer/open_project
previews/primer/open_project
test/components/primer/open_project Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ ---
2+ ' @openproject/primer-view-components ' : minor
3+ ---
4+
5+ Truncate Pageheader breadcrumb items when they are too long
Original file line number Diff line number Diff line change @@ -23,6 +23,7 @@ class PageHeader < Primer::Component
2323 DEFAULT_LEADING_ACTION_DISPLAY = [ :none , :flex ] . freeze
2424 DEFAULT_BREADCRUMBS_DISPLAY = [ :none , :flex ] . freeze
2525 DEFAULT_PARENT_LINK_DISPLAY = [ :block , :none ] . freeze
26+ BREADCRUMB_TRUNCATE_AT = 135
2627
2728 STATE_DEFAULT = :show
2829 STATE_EDIT = :edit
@@ -222,9 +223,17 @@ class PageHeader < Primer::Component
222223 render ( Primer ::Beta ::Breadcrumbs . new ( **system_arguments ) ) do |breadcrumbs |
223224 items . each do |item |
224225 if item . is_a? ( String )
225- breadcrumbs . with_item ( href : "#" , font_weight : selected_item_font_weight ) { item }
226+ breadcrumbs . with_item ( href : "#" , font_weight : selected_item_font_weight ) do
227+ render ( Primer ::Beta ::Truncate . new ) do |truncate |
228+ truncate . with_item ( max_width : BREADCRUMB_TRUNCATE_AT ) { item }
229+ end
230+ end
226231 else
227- breadcrumbs . with_item ( href : item [ :href ] , target : "_top" ) { item [ :text ] }
232+ breadcrumbs . with_item ( href : item [ :href ] , target : "_top" ) do
233+ render ( Primer ::Beta ::Truncate . new ) do |truncate |
234+ truncate . with_item ( max_width : BREADCRUMB_TRUNCATE_AT ) { item [ :text ] }
235+ end
236+ end
228237 end
229238 end
230239 end
Original file line number Diff line number Diff line change @@ -191,6 +191,19 @@ def non_bold_breadcrumbs
191191 end
192192 end
193193
194+ # @label With truncated breadcrumbs
195+ # Long breadcrumb elements are truncated after 135px
196+ def truncated_breadcrumbs
197+ breadcrumb_items = [ { href : "/foo" , text : "OpenProject" } ,
198+ { href : "/bar" , text : "Stream Dream team" } ,
199+ { href : "/baz" , text : "A very long sub project that will be truncated" } ,
200+ "Hello" ]
201+ render ( Primer ::OpenProject ::PageHeader . new ) do |header |
202+ header . with_title { "A title" }
203+ header . with_breadcrumbs ( breadcrumb_items , selected_item_font_weight : :normal )
204+ end
205+ end
206+
194207 # @label Without breadcrumbs
195208 # A PageHeader example that renders without breadcrumbs.
196209 # This should only be done for *entry pages* (such as overview pages).
Original file line number Diff line number Diff line change @@ -215,6 +215,26 @@ def test_renders_non_bold_breadcrumbs
215215 assert_selector ( "nav[aria-label='Breadcrumb'].PageHeader-breadcrumbs .breadcrumb-item:not(.text-bold) a[href='#']" )
216216 end
217217
218+ def test_renders_truncated_breadcrumb
219+ breadcrumb_items = [ { href : "/foo" , text : "OpenProject" } ,
220+ { href : "/bar" , text : "Stream Dream team" } ,
221+ { href : "/baz" , text : "A very long sub project that will be truncated" } ,
222+ "Hello" ]
223+
224+ render_inline ( Primer ::OpenProject ::PageHeader . new ) do |header |
225+ header . with_title { "Hello" }
226+ header . with_breadcrumbs ( breadcrumb_items )
227+ end
228+
229+ assert_text ( "Hello" )
230+ assert_selector ( ".PageHeader-title" )
231+ assert_selector ( ".PageHeader-breadcrumbs" )
232+ assert_selector ( ".PageHeader-parentLink" )
233+
234+ assert_selector ( ".breadcrumb-item a[href='/baz'] .Truncate > .Truncate-text[style='max-width: 135px;']" ,
235+ text : "A very long sub project that will be truncated" )
236+ end
237+
218238 def test_renders_tab_nav
219239 render_inline ( Primer ::OpenProject ::PageHeader . new ) do |header |
220240 header . with_title { "Hello" }
You can’t perform that action at this time.
0 commit comments