diff options
Diffstat (limited to 'app/helpers/analytics_navbar_helper.rb')
-rw-r--r-- | app/helpers/analytics_navbar_helper.rb | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/app/helpers/analytics_navbar_helper.rb b/app/helpers/analytics_navbar_helper.rb new file mode 100644 index 00000000000..d9aadfaeb15 --- /dev/null +++ b/app/helpers/analytics_navbar_helper.rb @@ -0,0 +1,66 @@ +# frozen_string_literal: true + +module AnalyticsNavbarHelper + class NavbarSubItem + attr_reader :title, :path, :link, :link_to_options + + def initialize(title:, path:, link:, link_to_options: {}) + @title = title + @path = path + @link = link + @link_to_options = link_to_options.merge(title: title) + end + end + + def project_analytics_navbar_links(project, current_user) + [ + cycle_analytics_navbar_link(project, current_user), + repository_analytics_navbar_link(project, current_user), + ci_cd_analytics_navbar_link(project, current_user) + ].compact + end + + private + + def navbar_sub_item(args) + NavbarSubItem.new(args) + end + + def cycle_analytics_navbar_link(project, current_user) + return unless Feature.enabled?(:analytics_pages_under_project_analytics_sidebar, project) + return unless project_nav_tab?(:cycle_analytics) + + navbar_sub_item( + title: _('Cycle Analytics'), + path: 'cycle_analytics#show', + link: project_cycle_analytics_path(project), + link_to_options: { class: 'shortcuts-project-cycle-analytics' } + ) + end + + def repository_analytics_navbar_link(project, current_user) + return if Feature.disabled?(:analytics_pages_under_project_analytics_sidebar, project) + return if project.empty_repo? + + navbar_sub_item( + title: _('Repository Analytics'), + path: 'graphs#charts', + link: charts_project_graph_path(project, current_ref), + link_to_options: { class: 'shortcuts-repository-charts' } + ) + end + + def ci_cd_analytics_navbar_link(project, current_user) + return unless Feature.enabled?(:analytics_pages_under_project_analytics_sidebar, project) + return unless project_nav_tab?(:pipelines) + return unless project.feature_available?(:builds, current_user) || !project.empty_repo? + + navbar_sub_item( + title: _('CI / CD Analytics'), + path: 'pipelines#charts', + link: charts_project_pipelines_path(project) + ) + end +end + +AnalyticsNavbarHelper.prepend_if_ee('EE::AnalyticsNavbarHelper') |