From e86f0e76de5fb4f9ae2984bc28eedc784668ef47 Mon Sep 17 00:00:00 2001 From: Oleksii Kriuchykhin Date: Thu, 22 Jun 2023 15:41:37 +0200 Subject: [PATCH] Fix breadcrumbs for archived view mode [SCI-8710] --- app/controllers/concerns/breadcrumbs.rb | 12 +++++++++--- app/controllers/navigator/base_controller.rb | 16 ++++++++++------ .../navigator/experiments_controller.rb | 8 ++++---- .../navigator/my_modules_controller.rb | 6 +++--- .../navigator/project_folders_controller.rb | 4 ++-- app/controllers/navigator/projects_controller.rb | 6 +++--- app/controllers/repositories_controller.rb | 2 +- app/models/project_folder.rb | 7 +++++++ app/views/projects/index/_folder_card.html.erb | 2 +- 9 files changed, 40 insertions(+), 23 deletions(-) diff --git a/app/controllers/concerns/breadcrumbs.rb b/app/controllers/concerns/breadcrumbs.rb index 9ed0f1a5b..06e25d36d 100644 --- a/app/controllers/concerns/breadcrumbs.rb +++ b/app/controllers/concerns/breadcrumbs.rb @@ -12,17 +12,23 @@ module Breadcrumbs @breadcrumbs_items = [] folders = helpers.tree_ordered_parent_folders(current_folder) + archived_branch = project&.archived? || + current_folder&.archived? || + (!project && params[:view_mode] == 'archived') @breadcrumbs_items.push({ label: t('projects.index.breadcrumbs_root'), - url: projects_path(view_mode: project&.archived? ? :archived : :active), - archived: project&.archived? || (!project && params[:view_mode] == 'archived') + url: projects_path(view_mode: archived_branch ? :archived : :active), + archived: archived_branch }) folders&.each do |project_folder| + archived_branch = project_folder.archived_branch? @breadcrumbs_items.push({ label: project_folder.name, - url: project_folder_path(project_folder) + url: project_folder_path(project_folder, + view_mode: archived_branch ? :archived : :active), + archived: archived_branch }) end diff --git a/app/controllers/navigator/base_controller.rb b/app/controllers/navigator/base_controller.rb index 61bc14e2f..4e6fcf0ff 100644 --- a/app/controllers/navigator/base_controller.rb +++ b/app/controllers/navigator/base_controller.rb @@ -21,7 +21,7 @@ module Navigator { id: folder.code, name: folder.name, - url: projects_path(project_folder_id: folder.id, view_mode: archived ? 'archived' : 'active'), + url: project_folder_path(folder, view_mode: archived ? 'archived' : 'active'), archived: folder.archived, type: :folder, has_children: folder.has_children, @@ -173,27 +173,31 @@ module Navigator my_modules end - def build_folder_tree(folder, children, archived = false) + def build_folder_tree(folder, children) + archived = params[:archived] == 'true' tree = fetch_projects(folder.parent_folder, archived).map { |i| project_serializer(i, archived) } + fetch_project_folders(folder.parent_folder, archived).map { |i| folder_serializer(i, archived) } tree.find { |i| i[:id] == folder.code }[:children] = children - tree = build_folder_tree(folder.parent_folder, tree, archived) if folder.parent_folder.present? + tree = build_folder_tree(folder.parent_folder, tree) if folder.parent_folder.present? tree end - def project_level_branch(object = nil, archived = false) + def project_level_branch(object = nil) + archived = params[:archived] == 'true' fetch_projects(object, archived) .map { |i| project_serializer(i, archived) } + fetch_project_folders(object, archived) .map { |i| folder_serializer(i, archived) } end - def experiment_level_branch(object, archived = false) + def experiment_level_branch(object) + archived = params[:archived] == 'true' fetch_experiments(object, archived) .map { |i| experiment_serializer(i, archived) } end - def my_module_level_branch(experiment, archived = false) + def my_module_level_branch(experiment) + archived = params[:archived] == 'true' fetch_my_modules(experiment, archived) .map { |i| my_module_serializer(i, archived) } end diff --git a/app/controllers/navigator/experiments_controller.rb b/app/controllers/navigator/experiments_controller.rb index 0401c20e0..c9f15f6a4 100644 --- a/app/controllers/navigator/experiments_controller.rb +++ b/app/controllers/navigator/experiments_controller.rb @@ -6,16 +6,16 @@ module Navigator before_action :check_read_permissions def show - my_modules = my_module_level_branch(@experiment, params[:archived] == 'true') + my_modules = my_module_level_branch(@experiment) render json: { items: my_modules } end def tree - my_modules = my_module_level_branch(@experiment, params[:archived] == 'true') - experiments = experiment_level_branch(@experiment, params[:archived] == 'true') + my_modules = my_module_level_branch(@experiment) + experiments = experiment_level_branch(@experiment) experiments.find { |i| i[:id] == @experiment.code }[:children] = my_modules - tree = project_level_branch(@experiment.project, params[:archived] == 'true') + tree = project_level_branch(@experiment.project) tree.find { |i| i[:id] == @experiment.project.code }[:children] = experiments tree = build_folder_tree(@experiment.project.project_folder, tree) if @experiment.project.project_folder diff --git a/app/controllers/navigator/my_modules_controller.rb b/app/controllers/navigator/my_modules_controller.rb index a07d0caf0..381c0857e 100644 --- a/app/controllers/navigator/my_modules_controller.rb +++ b/app/controllers/navigator/my_modules_controller.rb @@ -6,11 +6,11 @@ module Navigator before_action :check_read_permissions def tree - my_modules = my_module_level_branch(@experiment, params[:archived] == 'true') - experiments = experiment_level_branch(@experiment, params[:archived] == 'true') + my_modules = my_module_level_branch(@experiment) + experiments = experiment_level_branch(@experiment) experiments.find { |i| i[:id] == @experiment.code }[:children] = my_modules - tree = project_level_branch(@experiment.project, params[:archived] == 'true') + tree = project_level_branch(@experiment.project) tree.find { |i| i[:id] == @experiment.project.code }[:children] = experiments tree = build_folder_tree(@experiment.project.project_folder, tree) if @experiment.project.project_folder diff --git a/app/controllers/navigator/project_folders_controller.rb b/app/controllers/navigator/project_folders_controller.rb index b126ac2a3..d53b4d22d 100644 --- a/app/controllers/navigator/project_folders_controller.rb +++ b/app/controllers/navigator/project_folders_controller.rb @@ -5,12 +5,12 @@ module Navigator before_action :load_project_folder def show - folder = project_level_branch(@project_folder, params[:archived] == 'true') + folder = project_level_branch(@project_folder) render json: { items: folder } end def tree - tree = project_level_branch(@project_folder, params[:archived] == 'true') + tree = project_level_branch(@project_folder) tree = build_folder_tree(@project_folder, tree) render json: { items: tree } end diff --git a/app/controllers/navigator/projects_controller.rb b/app/controllers/navigator/projects_controller.rb index 0d6659d7d..a2f3af48b 100644 --- a/app/controllers/navigator/projects_controller.rb +++ b/app/controllers/navigator/projects_controller.rb @@ -6,17 +6,17 @@ module Navigator before_action :check_read_permissions, except: :index def index - project_and_folders = project_level_branch(nil, params[:archived] == 'true') + project_and_folders = project_level_branch(nil) render json: { items: project_and_folders } end def show - experiments = experiment_level_branch(@project, params[:archived] == 'true') + experiments = experiment_level_branch(@project) render json: { items: experiments } end def tree - tree = project_level_branch(@project, params[:archived] == 'true') + tree = project_level_branch(@project) tree = build_folder_tree(@project.project_folder, tree) if @project.project_folder diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index c1def521a..8339dca33 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -571,7 +571,7 @@ class RepositoriesController < ApplicationController def set_breadcrumbs_items @breadcrumbs_items = [] - archived_branch = params[:archived] == 'true' || @repository&.archived? + archived_branch = @repository&.archived? || (!@repository && params[:archived] == 'true') @breadcrumbs_items.push({ label: t('breadcrumbs.inventories'), diff --git a/app/models/project_folder.rb b/app/models/project_folder.rb index 3f672700f..5f68c351b 100644 --- a/app/models/project_folder.rb +++ b/app/models/project_folder.rb @@ -97,6 +97,13 @@ class ProjectFolder < ApplicationRecord Project.where(project_folder: ProjectFolder.inner_folders(team, self) + [self]) end + def archived_branch? + return false if active? && parent_folder.blank? + return true if archived? + + parent_folder.present? && parent_folder.archived_branch? + end + private def inherit_team_from_parent_folder diff --git a/app/views/projects/index/_folder_card.html.erb b/app/views/projects/index/_folder_card.html.erb index 5eaeb7b5f..196694a06 100644 --- a/app/views/projects/index/_folder_card.html.erb +++ b/app/views/projects/index/_folder_card.html.erb @@ -12,7 +12,7 @@ - <%= link_to project_folder_path(folder), + <%= link_to folder.archived_branch? ? project_folder_path(folder, view_mode: :archived) : project_folder_path(folder), class: 'project-folder-link', data: { projects_cards_url: project_folder_cards_url(folder),