summaryrefslogtreecommitdiff
path: root/app/helpers/releases_helper.rb
blob: 50089c7edab2ea5e16914f8c5aed38e1d34d50ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# frozen_string_literal: true

module ReleasesHelper
  IMAGE_PATH = 'illustrations/releases.svg'
  DOCUMENTATION_PATH = 'user/project/releases/index'

  # This needs to be kept in sync with the constant in
  # app/assets/javascripts/releases/constants.js
  DEFAULT_SORT = 'RELEASED_AT_DESC'

  def illustration
    image_path(IMAGE_PATH)
  end

  def releases_help_page_path(anchor: nil)
    help_page_path(DOCUMENTATION_PATH, anchor: anchor)
  end

  def data_for_releases_page
    {
      project_id: @project.id,
      project_path: @project.full_path,
      illustration_path: illustration,
      documentation_path: releases_help_page_path
    }.tap do |data|
      if can?(current_user, :create_release, @project)
        data[:new_release_path] = new_project_release_path(@project)
      end
    end
  end

  # For simplicity, only optimize non-paginated requests
  def use_startup_query_for_index_page?
    params[:before].nil? && params[:after].nil?
  end

  def index_page_startup_query_variables
    {
      fullPath: @project.full_path,
      sort: DEFAULT_SORT,
      first: 1
    }
  end

  def data_for_show_page
    {
      project_id: @project.id,
      project_path: @project.full_path,
      tag_name: @release.tag
    }
  end

  def data_for_edit_release_page
    new_edit_pages_shared_data.merge(
      tag_name: @release.tag,
      releases_page_path: project_releases_path(@project, anchor: @release.tag),
      delete_release_docs_path: releases_help_page_path(anchor: 'delete-a-release')
    )
  end

  def data_for_new_release_page
    new_edit_pages_shared_data.merge(
      tag_name: params[:tag_name],
      default_branch: @project.default_branch,
      releases_page_path: project_releases_path(@project)
    )
  end

  def group_milestone_project_releases_available?(project)
    false
  end

  private

  def new_edit_pages_shared_data
    {
      project_id: @project.id,
      group_id: @project.group&.id,
      group_milestones_available: group_milestone_project_releases_available?(@project),
      project_path: @project.full_path,
      markdown_preview_path: preview_markdown_path(@project),
      markdown_docs_path: help_page_path('user/markdown'),
      release_assets_docs_path: releases_help_page_path(anchor: 'release-assets'),
      manage_milestones_path: project_milestones_path(@project),
      new_milestone_path: new_project_milestone_path(@project),
      edit_release_docs_path: releases_help_page_path(anchor: 'edit-a-release'),
      upcoming_release_docs_path: releases_help_page_path(anchor: 'upcoming-releases')
    }
  end
end

ReleasesHelper.prepend_mod_with('ReleasesHelper')