scinote-web/app/controllers/concerns/breadcrumbs.rb
2023-05-24 02:54:05 +04:00

70 lines
2.1 KiB
Ruby

# frozen_string_literal: true
module Breadcrumbs
extend ActiveSupport::Concern
included do
def set_breadcrumbs_items
my_module = @my_module
experiment = my_module&.experiment || @experiment
project = experiment&.project || @project
current_folder = project&.project_folder || @current_folder
@breadcrumbs_items = []
folders = helpers.tree_ordered_parent_folders(current_folder)
@breadcrumbs_items.push({
label: t('projects.index.breadcrumbs_root'),
url: projects_path
})
folders&.each do |project_folder|
@breadcrumbs_items.push({
label: project_folder.name,
url: project_folder_path(project_folder)
})
end
include_project(project) if project
include_experiment(experiment) if experiment
include_my_module(my_module) if my_module
archived_exists = @breadcrumbs_items.any? { |item| item[:archived] == true }
if params[:view_mode] == 'archived' || archived_exists
@breadcrumbs_items.each do |item|
item[:label] = "(A) #{item[:label]}"
end
end
@breadcrumbs_items
end
end
private
def include_project(project)
@breadcrumbs_items.push({
label: project.name,
url: project_path(project),
archived: project.archived?
})
end
def include_experiment(experiment)
@breadcrumbs_items.push({
label: experiment.name,
url: my_modules_experiment_path(experiment),
archived: experiment.archived?
})
end
def include_my_module(my_module)
@breadcrumbs_items.push({
label: my_module.name,
url: my_module_path(my_module),
archived: my_module.archived?
})
end
end