diff --git a/app/controllers/frames_controller.rb b/app/controllers/frames_controller.rb index c93856fb8..78c86807b 100644 --- a/app/controllers/frames_controller.rb +++ b/app/controllers/frames_controller.rb @@ -13,6 +13,7 @@ def index authorize! @frames = scoped_frames.includes(bay: { islet: :room }).references(bay: { islet: :room }) @filter = ProcessorFilter.new(@frames, params) @frames = @filter.results + @servers_per_frame = authorized_scope(Server.where(frame: @frames)).group_by(&:frame_id) end def show diff --git a/app/controllers/islets_controller.rb b/app/controllers/islets_controller.rb index b2c4f4f06..09748438a 100644 --- a/app/controllers/islets_controller.rb +++ b/app/controllers/islets_controller.rb @@ -14,6 +14,10 @@ def index authorize! @islets = scoped_islets.joins(room: :site).order("rooms.site_id asc, rooms.position asc, islets.name asc") @filter = ProcessorFilter.new(@islets, params) @islets = @filter.results + + @frames_per_islet = authorized_scope( + Frame.includes(:bay).where(bay: { islet_id: @islets.ids }), + ).group_by { |f| f.bay.islet_id } end def show diff --git a/app/views/frames/index.html.erb b/app/views/frames/index.html.erb index 87e245540..6fd6f60cb 100644 --- a/app/views/frames/index.html.erb +++ b/app/views/frames/index.html.erb @@ -79,7 +79,8 @@ <% end %> <% table.with_column(Frame.human_attribute_name(:servers)) do |frame| %> - <%= safe_join(authorized_scope(frame.servers).map { |s| link_to(s.name, s, data: { turbo_frame: :_top }) }, ", ") %> + <% servers = @servers_per_frame.fetch(frame.id, []) %> + <%= safe_join(servers.map { |s| link_to(s.name, s, data: { turbo_frame: :_top }) }, ", ") %> <% end %> <% table.with_column(Frame.human_attribute_name(:u), sort_by: :u) do |frame| %> diff --git a/app/views/islets/index.html.erb b/app/views/islets/index.html.erb index 014dfb270..cd490340c 100644 --- a/app/views/islets/index.html.erb +++ b/app/views/islets/index.html.erb @@ -75,7 +75,8 @@ <% table.with_column(Frame.model_name.human.pluralize) do |islet| %> <%= link_to frames_path(islet_ids: islet.id), data: { turbo_frame: :_top } do %> - <%= Islet.human_attribute_name(:frames_count, count: authorized_scope(islet.frames).count) %> + <% frames = @frames_per_islet.fetch(islet.id, []) %> + <%= Islet.human_attribute_name(:frames_count, count: frames.count) %> <% end %> <% end %> diff --git a/app/views/layouts/navigation/_visualization_dropdown.html.erb b/app/views/layouts/navigation/_visualization_dropdown.html.erb index da3109792..1cd14a6ea 100644 --- a/app/views/layouts/navigation/_visualization_dropdown.html.erb +++ b/app/views/layouts/navigation/_visualization_dropdown.html.erb @@ -17,16 +17,21 @@ <%= link_to t(".infrastructure"), visualization_infrastructure_path, class: "dropdown-item" %> <% end %> + <% sites = authorized_scope(Site.all).joins(:rooms).order(:position).distinct %> + <% all_rooms = authorized_scope(Room.where(site: sites.map(&:id)).sorted.distinct) %> + <% rooms_per_site = all_rooms.group_by(&:site_id) %> + <% islets_per_room = authorized_scope(Islet.where(room: all_rooms.map(&:id)).has_name.sorted.distinct).group_by(&:room_id) %> + <% sites.each do |site| %>
  • - <% rooms = authorized_scope(site.rooms).sorted.distinct %> + <% rooms = rooms_per_site.fetch(site.id, []) %> <% rooms.each do |room| %> - <% islets = authorized_scope(room.islets).sorted.has_name.distinct %> + <% islets = islets_per_room.fetch(room.id, []) %> <% if islets.size > 1 %> <% islets.each do |islet| %>