diff --git a/modules/backlogs/app/components/backlogs/bucket_component.html.erb b/modules/backlogs/app/components/backlogs/bucket_component.html.erb index e9829d3d0e7c..0e06e97f1117 100644 --- a/modules/backlogs/app/components/backlogs/bucket_component.html.erb +++ b/modules/backlogs/app/components/backlogs/bucket_component.html.erb @@ -28,50 +28,52 @@ See COPYRIGHT and LICENSE files for more details. ++# %> <%= component_wrapper(tag: :section) do %> - <%= render( - Backlogs::WorkPackageCardListComponent.new( - work_packages:, - project:, - container: backlog_bucket, - drag_and_drop: { - target_id: "backlog_bucket:#{backlog_bucket.id}", - allowed_drag_type: "story" - }, - params: all_backlogs_params, - current_user:, - test_selector: "backlog-bucket-#{backlog_bucket.id}" - ) - ) do |list| %> - <% list.with_header(title: backlog_bucket.name) do |header| %> - <% if show_menu? %> - <% header.with_menu(button_aria_label: t(".label_actions")) do |menu| %> - <% with_item_group(menu) do %> - <% menu.with_item( - id: dom_target(backlog_bucket, :menu, :edit_backlog_bucket), - label: t(".action_menu.edit_backlog_bucket"), - href: edit_dialog_project_backlogs_backlog_bucket_path(project, backlog_bucket, all_backlogs_params), - content_arguments: { data: { controller: "async-dialog" } } - ) do |item| %> - <% item.with_leading_visual_icon(icon: :pencil) %> - <% end %> + <%= + render( + Backlogs::WorkPackageCardListComponent.new( + work_packages:, + project:, + container: backlog_bucket, + drag_and_drop: { + target_id: "backlog_bucket:#{backlog_bucket.id}", + allowed_drag_type: "story" + }, + params: all_backlogs_params, + current_user:, + test_selector: "backlog-bucket-#{backlog_bucket.id}" + ) + ) do |list| + list.with_header(title: backlog_bucket.name) do |header| + if show_menu? + header.with_menu(button_aria_label: t(".label_actions")) do |menu| + with_item_group(menu) do + menu.with_item( + id: dom_target(backlog_bucket, :menu, :edit_backlog_bucket), + label: t(".action_menu.edit_backlog_bucket"), + href: edit_dialog_project_backlogs_backlog_bucket_path(project, backlog_bucket, all_backlogs_params), + content_arguments: { data: { controller: "async-dialog" } } + ) do |item| + item.with_leading_visual_icon(icon: :pencil) + end - <% menu.with_item( - id: dom_target(backlog_bucket, :menu, :delete_backlog_bucket), - label: t(".action_menu.delete_backlog_bucket"), - scheme: :danger, - href: destroy_dialog_project_backlogs_backlog_bucket_path(project, backlog_bucket, all_backlogs_params), - content_arguments: { data: { controller: "async-dialog" } } - ) do |item| %> - <% item.with_leading_visual_icon(icon: :trash) %> - <% end %> - <% end %> - <% end %> - <% end %> - <% end %> + menu.with_item( + id: dom_target(backlog_bucket, :menu, :delete_backlog_bucket), + label: t(".action_menu.delete_backlog_bucket"), + scheme: :danger, + href: destroy_dialog_project_backlogs_backlog_bucket_path(project, backlog_bucket, all_backlogs_params), + content_arguments: { data: { controller: "async-dialog" } } + ) do |item| + item.with_leading_visual_icon(icon: :trash) + end + end + end + end + end - <% list.with_empty_state( - title: t(".blankslate_title"), - description: t(".blankslate_description") - ) %> - <% end %> + list.with_empty_state( + title: t(".blankslate_title"), + description: t(".blankslate_description") + ) + end + %> <% end %> diff --git a/modules/backlogs/app/components/backlogs/inbox_component.html.erb b/modules/backlogs/app/components/backlogs/inbox_component.html.erb index 8b1836112d8f..1ddebd3d00ca 100644 --- a/modules/backlogs/app/components/backlogs/inbox_component.html.erb +++ b/modules/backlogs/app/components/backlogs/inbox_component.html.erb @@ -28,65 +28,66 @@ See COPYRIGHT and LICENSE files for more details. ++# %> <%= component_wrapper(tag: :section) do %> - <% inbox_container = dom_target(:inbox, project) %> - <%= render( - OpenProject::Common::BorderBoxListComponent.new( - container: inbox_container, - current_user:, - interactive: true, - scheme: :transparent, - padding: :condensed, - header_padding: :default, - test_selector: "backlog-inbox", - data: { - generic_drag_and_drop_target: "container", - target_container_accessor: ":scope > ul", - target_id: "inbox", - target_allowed_drag_type: "story" - } - ) - ) do |list| %> - <% list.with_header(title: t(".title"), count: work_packages.size, title_arguments: { font_size: 4 }) %> + <%= + render( + OpenProject::Common::BorderBoxListComponent.new( + container: dom_target(:inbox, project), + current_user:, + interactive: true, + scheme: :transparent, + padding: :condensed, + header_padding: :default, + test_selector: "backlog-inbox", + data: { + generic_drag_and_drop_target: "container", + target_container_accessor: ":scope > ul", + target_id: "inbox", + target_allowed_drag_type: "story" + } + ) + ) do |list| + list.with_header(title: t(".title"), count: work_packages.size, title_arguments: { font_size: 4 }) - <% list.with_empty_state( - title: t(".blankslate_title"), - description: t(".blankslate_description"), - icon: :"op-backlogs", - spacious: true - ) %> + list.with_empty_state( + title: t(".blankslate_title"), + description: t(".blankslate_description"), + icon: :"op-backlogs", + spacious: true + ) - <% visible_work_packages.each.with_index do |work_package, index| %> - <% list.with_work_package_item( - work_package:, - project:, - params: all_backlogs_params, - component_klass: Backlogs::WorkPackageCardListItemComponent - ) %> + visible_work_packages.each.with_index do |work_package, index| + list.with_work_package_item( + work_package:, + project:, + params: all_backlogs_params, + component_klass: Backlogs::WorkPackageCardListItemComponent + ) - <% if truncated? && index == TRUNCATE_MIDDLE - 1 %> - <% list.with_item( - scheme: :neutral, - classes: "op-work-package-card-list--show-more-row", - data: { draggable_id: last_omitted_id } - ) do %> - <%= render( - Primer::Beta::Button.new( - id: show_more_id, - scheme: :link, - tag: :a, - size: :large, - block: true, - align_content: :start, - underline: true, - href: project_backlogs_backlog_path(project, all: 1), - data: { - turbo_frame: "backlogs_container", - turbo_action: :advance - } - ) - ) { show_more_label } %> - <% end %> - <% end %> - <% end %> - <% end %> + if truncated? && index == TRUNCATE_MIDDLE - 1 + list.with_item( + scheme: :neutral, + classes: "op-work-package-card-list--show-more-row", + data: { draggable_id: last_omitted_id } + ) do + render( + Primer::Beta::Button.new( + id: show_more_id, + scheme: :link, + tag: :a, + size: :large, + block: true, + align_content: :start, + underline: true, + href: project_backlogs_backlog_path(project, all: 1), + data: { + turbo_frame: "backlogs_container", + turbo_action: :advance + } + ) + ) { show_more_label } + end + end + end + end + %> <% end %> diff --git a/modules/backlogs/app/components/backlogs/sprint_component.html.erb b/modules/backlogs/app/components/backlogs/sprint_component.html.erb index 785f2061b216..410649bccca8 100644 --- a/modules/backlogs/app/components/backlogs/sprint_component.html.erb +++ b/modules/backlogs/app/components/backlogs/sprint_component.html.erb @@ -28,20 +28,22 @@ See COPYRIGHT and LICENSE files for more details. ++# %> <%= component_wrapper(tag: :section) do %> - <%= render( - Backlogs::WorkPackageCardListComponent.new( - work_packages:, - project:, - container: sprint, - drag_and_drop: { - target_id: "sprint:#{sprint.id}", - allowed_drag_type: "story" - }, - params: all_backlogs_params, - current_user:, - test_selector: "sprint-#{sprint.id}" - ) - ) do |list| %> + <%= + render( + Backlogs::WorkPackageCardListComponent.new( + work_packages:, + project:, + container: sprint, + drag_and_drop: { + target_id: "sprint:#{sprint.id}", + allowed_drag_type: "story" + }, + params: all_backlogs_params, + current_user:, + test_selector: "sprint-#{sprint.id}" + ) + ) do |list| + %> <% list.with_header(title: sprint.name) do |header| %> <% header.with_description(display: :flex, direction: :column, classes: "row-gap-2") do %> <%= render(Primer::Alpha::Stack.new(direction: :horizontal, align: :center)) do %> @@ -60,80 +62,84 @@ See COPYRIGHT and LICENSE files for more details. <% end %> <% end %> - <% if show_start_sprint_action? %> - <% header.with_action_button(**start_sprint_button_arguments) do |button| %> - <% button.with_leading_visual_icon(icon: :rocket) %> - <% if start_sprint_disabled_reason.present? %> - <% button.with_tooltip( - text: start_sprint_disabled_reason, - type: :description, - direction: :sw - ) %> - <% end %> - <%= t(".label_start_sprint") %> - <% end %> - <% elsif show_finish_sprint_action? %> - <% header.with_action_button(**finish_sprint_button_arguments) do |button| %> - <% button.with_leading_visual_icon(icon: :"op-flag") %> - <%= t(".label_complete_sprint") %> - <% end %> - <% end %> - - <% header.with_menu(button_aria_label: t(".label_actions")) do |menu| %> - <% with_item_group(menu) do %> - <% if user_allowed?(:create_sprints) %> - <% menu.with_item( - id: dom_target(sprint, :menu, :edit_sprint), - label: t(".action_menu.edit_sprint"), - href: edit_dialog_project_backlogs_sprint_path(project, sprint), - content_arguments: { data: { controller: "async-dialog" } } - ) do |item| %> - <% item.with_leading_visual_icon(icon: :pencil) %> - <% end %> - <% end %> - <% end %> - - <% with_item_group(menu) do %> - <% if user_allowed?(:manage_sprint_items) %> - <% menu.with_item( - id: dom_target(sprint, :menu, :new_story), - label: t(".action_menu.add_work_package"), - href: new_project_work_packages_dialog_path(project, sprint_id: sprint.id), - content_arguments: { data: { turbo_stream: true } } - ) do |item| %> - <% item.with_leading_visual_icon(icon: :plus) %> - <% end %> - <% end %> - <% end %> - - <% with_item_group(menu) do %> - <% if show_task_board_link? %> - <% menu.with_item( - label: t("backlogs.label_sprint_board"), - tag: :a, - href: project_backlogs_sprint_taskboard_path(project, sprint) - ) do |item| %> - <% item.with_leading_visual_icon(icon: :"op-view-cards") %> - <% end %> - <% end %> - - <% if show_burndown_link? %> - <% menu.with_item( - label: t("backlogs.label_burndown_chart"), - tag: :a, - href: project_backlogs_sprint_burndown_chart_path(project, sprint), - disabled: !sprint.date_range_set? - ) do |item| %> - <% item.with_leading_visual_icon(icon: :graph) %> - <% end %> - <% end %> - <% end %> - <% end %> + <% + if show_start_sprint_action? + header.with_action_button(**start_sprint_button_arguments) do |button| + button.with_leading_visual_icon(icon: :rocket) + if start_sprint_disabled_reason.present? + button.with_tooltip( + text: start_sprint_disabled_reason, + type: :description, + direction: :sw + ) + end + t(".label_start_sprint") + end + elsif show_finish_sprint_action? + header.with_action_button(**finish_sprint_button_arguments) do |button| + button.with_leading_visual_icon(icon: :"op-flag") + t(".label_complete_sprint") + end + end + + header.with_menu(button_aria_label: t(".label_actions")) do |menu| + with_item_group(menu) do + if user_allowed?(:create_sprints) + menu.with_item( + id: dom_target(sprint, :menu, :edit_sprint), + label: t(".action_menu.edit_sprint"), + href: edit_dialog_project_backlogs_sprint_path(project, sprint), + content_arguments: { data: { controller: "async-dialog" } } + ) do |item| + item.with_leading_visual_icon(icon: :pencil) + end + end + end + + with_item_group(menu) do + if user_allowed?(:manage_sprint_items) + menu.with_item( + id: dom_target(sprint, :menu, :new_story), + label: t(".action_menu.add_work_package"), + href: new_project_work_packages_dialog_path(project, sprint_id: sprint.id), + content_arguments: { data: { turbo_stream: true } } + ) do |item| + item.with_leading_visual_icon(icon: :plus) + end + end + end + + with_item_group(menu) do + if show_task_board_link? + menu.with_item( + label: t("backlogs.label_sprint_board"), + tag: :a, + href: project_backlogs_sprint_taskboard_path(project, sprint) + ) do |item| + item.with_leading_visual_icon(icon: :"op-view-cards") + end + end + + if show_burndown_link? + menu.with_item( + label: t("backlogs.label_burndown_chart"), + tag: :a, + href: project_backlogs_sprint_burndown_chart_path(project, sprint), + disabled: !sprint.date_range_set? + ) do |item| + item.with_leading_visual_icon(icon: :graph) + end + end + end + end + %> <% end %> - <% list.with_empty_state( - title: t(".blankslate_title", name: sprint.name), - description: t(".blankslate_description") - ) %> + <% + list.with_empty_state( + title: t(".blankslate_title", name: sprint.name), + description: t(".blankslate_description") + ) + %> <% end %> <% end %> diff --git a/modules/backlogs/app/components/backlogs/sprint_page_header_component.html.erb b/modules/backlogs/app/components/backlogs/sprint_page_header_component.html.erb index 7b8ba671461a..a7fa7ca2d67e 100644 --- a/modules/backlogs/app/components/backlogs/sprint_page_header_component.html.erb +++ b/modules/backlogs/app/components/backlogs/sprint_page_header_component.html.erb @@ -27,9 +27,11 @@ See COPYRIGHT and LICENSE files for more details. ++# %> -<%= render(@page_header) do |header| %> - <% header.with_title_content(@sprint.name) %> - <% header.with_description { format_date_range(date_range) } %> - <% header.with_breadcrumbs(breadcrumb_items) %> - <%= content %> -<% end %> +<%= + render(@page_header) do |header| + header.with_title_content(@sprint.name) + header.with_description { format_date_range(date_range) } + header.with_breadcrumbs(breadcrumb_items) + content + end +%>