app/components/projects/index_page_header_component.html.erb
<%=
render(Primer::OpenProject::PageHeader.new) do |header|
if show_state?
header.with_title(data: { 'test-selector': 'project-query-name'}) { page_title }
header.with_breadcrumbs(breadcrumb_items)
if query_saveable?
header.with_action_text { t('lists.can_be_saved_as') }
header.with_action_link(mobile_icon: nil, # Do not show on mobile as it is already part of the menu
mobile_label: nil,
href: new_projects_query_path,
data: {
controller: "params-from-query",
'application-target': "dynamic",
'params-from-query-allowed-value': '["filters", "columns"]'
}) do
render(Primer::Beta::Octicon.new(icon: "op-save",
align_self: :center,
"aria-label": I18n.t("button_save_as"),
mr: 1)
) + content_tag(:span, t("button_save_as"))
end
end
header.with_action_menu(menu_arguments: {
anchor_align: :end
},
button_arguments: {
icon: "op-kebab-vertical",
"aria-label": t(:label_more),
data: { "test-selector": "project-more-dropdown-menu" }
}) do |menu|
if gantt_portfolio_project_ids.any?
menu.with_item(
tag: :a,
label: t('projects.index.open_as_gantt'),
href: gantt_portfolio_query_link,
id: 'projects-index-open-as-gantt',
content_arguments: { target: '_blank' }
) do |item|
item.with_leading_visual_icon(icon: 'op-view-timeline')
end
end
menu.with_item(
tag: :a,
label: t(:label_overall_activity),
href: activities_path
) do |item|
item.with_leading_visual_icon(icon: 'tasklist')
end
if query_saveable?
menu.with_item(
label: t('button_save_as'),
href: new_projects_query_path,
content_arguments: {
data: {
controller: "params-from-query",
'application-target': "dynamic",
'params-from-query-allowed-value': '["filters", "columns"]'
}
}
) do |item|
item.with_leading_visual_icon(icon: :'op-save')
end
end
menu.with_item(
label: t('js.label_export'),
content_arguments: { 'data-show-dialog-id': Projects::ExportListModalComponent::MODAL_ID }
) do |item|
item.with_leading_visual_icon(icon: 'sign-out')
end
menu.with_item(
label: t(:'queries.configure_view.heading'),
content_arguments: { 'data-show-dialog-id': Projects::ConfigureViewModalComponent::MODAL_ID }
) do |item|
item.with_leading_visual_icon(icon: :gear)
end
if query.persisted?
menu.with_item(
label: t(:button_delete),
scheme: :danger,
content_arguments: { 'data-show-dialog-id': Projects::DeleteListModalComponent::MODAL_ID }
) do |item|
item.with_leading_visual_icon(icon: 'trash')
end
end
end
else
header.with_title(data: { 'test-selector': 'project-query-name'}) do
primer_form_with(model: query,
url: projects_queries_path,
scope: 'query',
data: {
controller: "params-from-query",
'application-target': "dynamic",
'params-from-query-allowed-value': '["filters", "columns"]'
},
id: 'project-save-form') do |f|
render(Queries::Projects::Create.new(f))
end
end
header.with_breadcrumbs(breadcrumb_items)
end
end
%>
<% if show_state? %>
<%= render(Projects::ConfigureViewModalComponent.new(query:)) %>
<%= render(Projects::DeleteListModalComponent.new(query:)) if query.persisted? %>
<%= render(Projects::ExportListModalComponent.new(query:)) %>
<% end %>