Files
openproject/app/components/header/projects/node_component.html.erb
T
Henriette Darge 396de9362f [74625] Make project hierarchy collapsable in the global project selector (#23137)
* Use new async FilterableTreeView for global project selector

* Remove replaced angular component

* Fine tune sorting and expansion state of the new project selector

* Update primer to 0.86.1

* Add workspace information and filter results hierarchy information to project selector

* Include review feedback: Harmonize I18n keys, fix visible scope, use guarded local storage

* Add a turboFrame in the project select overlay to only load the projects when it is actually opened

* Restore BIM tab styles which were broken for a while already but the new project selector changes made it so bad that the test broke because the plus icon was overlapping the checkbox

* Clarify spec expectation
2026-06-08 08:14:47 +02:00

76 lines
2.5 KiB
Plaintext

<%#-- copyright
OpenProject is an open source project management software.
Copyright (C) the OpenProject GmbH
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 3.
OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
Copyright (C) 2006-2013 Jean-Philippe Lang
Copyright (C) 2010-2013 the ChiliProject Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
See COPYRIGHT and LICENSE files for more details.
++#%>
<% add_icons = ->(tree_node) do
if current?
tree_node.with_trailing_action_button(
icon: :"x-circle",
tag: :a,
href: home_path(jump: @jump),
show_tooltip: false,
aria: { label: t("header.project_select_component.leave_project") },
data: { test_selector: "op-header-project-select--remove-item" }
)
end
end %>
<% if children.any? %>
<% @component.with_sub_tree(
label:,
select_variant: :none,
current: current?,
expanded: expanded?,
href:,
disabled: !matches_query?,
data: { node_id: project.id, test_selector: "op-header-project-select--item" }
) do |sub| %>
<% add_icons.call(sub) %>
<% children.each do |child_node| %>
<%= render Header::Projects::NodeComponent.new(
component: sub,
node: child_node,
current_project_id: @current_project_id,
favorited_ids: @favorited_ids,
jump: @jump
) %>
<% end %>
<% end %>
<% else %>
<% @component.with_leaf(
label:,
select_variant: :none,
current: current?,
href:,
disabled: !matches_query?,
data: { node_id: project.id, test_selector: "op-header-project-select--item" }
) do |leaf| %>
<% add_icons.call(leaf) %>
<% end %>
<% end %>