From 6c79e9307e116d6115f6d76ac796176952fb83cd Mon Sep 17 00:00:00 2001 From: Heinrich Lee Yu Date: Tue, 27 Nov 2018 16:47:10 +0800 Subject: Refactor issuable sidebar to have extras option --- .../javascripts/sidebar/stores/sidebar_store.js | 2 +- app/helpers/issuables_helper.rb | 8 ++--- app/serializers/issuable_sidebar_entity.rb | 15 +++++---- app/serializers/issue_board_entity.rb | 2 +- app/serializers/issue_serializer.rb | 6 ++-- app/serializers/issue_sidebar_entity.rb | 4 ++- app/serializers/merge_request_basic_entity.rb | 2 +- app/serializers/merge_request_basic_serializer.rb | 5 --- app/serializers/merge_request_serializer.rb | 9 ++++-- app/serializers/merge_request_sidebar_entity.rb | 4 +++ .../projects/merge_requests/conflicts.html.haml | 36 ---------------------- 11 files changed, 34 insertions(+), 59 deletions(-) delete mode 100644 app/serializers/merge_request_basic_serializer.rb create mode 100644 app/serializers/merge_request_sidebar_entity.rb delete mode 100644 app/views/projects/merge_requests/conflicts.html.haml (limited to 'app') diff --git a/app/assets/javascripts/sidebar/stores/sidebar_store.js b/app/assets/javascripts/sidebar/stores/sidebar_store.js index f20cc6d8cca..7b8b4c5d856 100644 --- a/app/assets/javascripts/sidebar/stores/sidebar_store.js +++ b/app/assets/javascripts/sidebar/stores/sidebar_store.js @@ -71,7 +71,7 @@ export default class SidebarStore { } findAssignee(findAssignee) { - return this.assignees.filter(assignee => assignee.id === findAssignee.id)[0]; + return this.assignees.find(assignee => assignee.id === findAssignee.id); } removeAssignee(removeAssignee) { diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb index da991458ea7..ea861bd2fc4 100644 --- a/app/helpers/issuables_helper.rb +++ b/app/helpers/issuables_helper.rb @@ -50,13 +50,13 @@ module IssuablesHelper end end - def issuable_json_path(issuable) + def issuable_json_path(issuable, url_params = {}) project = issuable.project if issuable.is_a?(MergeRequest) - project_merge_request_path(project, issuable.iid, :json) + project_merge_request_path(project, issuable.iid, :json, url_params) else - project_issue_path(project, issuable.iid, :json) + project_issue_path(project, issuable.iid, :json, url_params) end end @@ -420,7 +420,7 @@ module IssuablesHelper def issuable_sidebar_options(issuable, can_edit_issuable) { - endpoint: "#{issuable_json_path(issuable)}?serializer=sidebar", + endpoint: issuable_json_path(issuable, serializer: 'sidebar_extras'), toggleSubscriptionEndpoint: toggle_subscription_path(issuable), moveIssueEndpoint: move_namespace_project_issue_path(namespace_id: issuable.project.namespace.to_param, project_id: issuable.project, id: issuable), projectsAutocompleteEndpoint: autocomplete_projects_path(project_id: @project.id), diff --git a/app/serializers/issuable_sidebar_entity.rb b/app/serializers/issuable_sidebar_entity.rb index 773d78d324c..9af2276b362 100644 --- a/app/serializers/issuable_sidebar_entity.rb +++ b/app/serializers/issuable_sidebar_entity.rb @@ -1,14 +1,17 @@ # frozen_string_literal: true class IssuableSidebarEntity < Grape::Entity - include TimeTrackableEntity include RequestAwareEntity - expose :participants, using: ::API::Entities::UserBasic do |issuable| - issuable.participants(request.current_user) - end + with_options if: { include_extras: true } do + include TimeTrackableEntity + + expose :participants, using: ::API::Entities::UserBasic do |issuable| + issuable.participants(request.current_user) + end - expose :subscribed do |issuable| - issuable.subscribed?(request.current_user, issuable.project) + expose :subscribed do |issuable| + issuable.subscribed?(request.current_user, issuable.project) + end end end diff --git a/app/serializers/issue_board_entity.rb b/app/serializers/issue_board_entity.rb index e3dc43240c6..f7719447b92 100644 --- a/app/serializers/issue_board_entity.rb +++ b/app/serializers/issue_board_entity.rb @@ -37,7 +37,7 @@ class IssueBoardEntity < Grape::Entity end expose :issue_sidebar_endpoint, if: -> (issue) { issue.project } do |issue| - project_issue_path(issue.project, issue, format: :json, serializer: 'sidebar') + project_issue_path(issue.project, issue, format: :json, serializer: 'sidebar_extras') end expose :toggle_subscription_endpoint, if: -> (issue) { issue.project } do |issue| diff --git a/app/serializers/issue_serializer.rb b/app/serializers/issue_serializer.rb index d66f0a5acb7..cdb386b83b9 100644 --- a/app/serializers/issue_serializer.rb +++ b/app/serializers/issue_serializer.rb @@ -2,12 +2,14 @@ class IssueSerializer < BaseSerializer # This overrided method takes care of which entity should be used - # to serialize the `issue` based on `basic` key in `opts` param. + # to serialize the `issue` based on `serializer` key in `opts` param. # Hence, `entity` doesn't need to be declared on the class scope. def represent(issue, opts = {}) entity = case opts[:serializer] - when 'sidebar' + when 'sidebar_extras' + opts[:include_basic] = false + opts[:include_extras] = true IssueSidebarEntity when 'board' IssueBoardEntity diff --git a/app/serializers/issue_sidebar_entity.rb b/app/serializers/issue_sidebar_entity.rb index 349ad9d1fef..1b73ead5cd7 100644 --- a/app/serializers/issue_sidebar_entity.rb +++ b/app/serializers/issue_sidebar_entity.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true class IssueSidebarEntity < IssuableSidebarEntity - expose :assignees, using: API::Entities::UserBasic + with_options if: { include_extras: true } do + expose :assignees, using: API::Entities::UserBasic + end end diff --git a/app/serializers/merge_request_basic_entity.rb b/app/serializers/merge_request_basic_entity.rb index f7eb74cf392..084627f9dbe 100644 --- a/app/serializers/merge_request_basic_entity.rb +++ b/app/serializers/merge_request_basic_entity.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class MergeRequestBasicEntity < IssuableSidebarEntity +class MergeRequestBasicEntity < Grape::Entity expose :assignee_id expose :merge_status expose :merge_error diff --git a/app/serializers/merge_request_basic_serializer.rb b/app/serializers/merge_request_basic_serializer.rb deleted file mode 100644 index a68b48b00db..00000000000 --- a/app/serializers/merge_request_basic_serializer.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -class MergeRequestBasicSerializer < BaseSerializer - entity MergeRequestBasicEntity -end diff --git a/app/serializers/merge_request_serializer.rb b/app/serializers/merge_request_serializer.rb index 1f8c830e1aa..e252d9a3501 100644 --- a/app/serializers/merge_request_serializer.rb +++ b/app/serializers/merge_request_serializer.rb @@ -7,9 +7,14 @@ class MergeRequestSerializer < BaseSerializer def represent(merge_request, opts = {}) entity = case opts[:serializer] - when 'basic', 'sidebar' + when 'sidebar_extras' + opts[:include_basic] = false + opts[:include_extras] = true + MergeRequestSidebarEntity + when 'basic' MergeRequestBasicEntity - else # It's 'widget' + else + # fallback to widget for old poll requests without `serializer` set MergeRequestWidgetEntity end diff --git a/app/serializers/merge_request_sidebar_entity.rb b/app/serializers/merge_request_sidebar_entity.rb new file mode 100644 index 00000000000..70607230642 --- /dev/null +++ b/app/serializers/merge_request_sidebar_entity.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +class MergeRequestSidebarEntity < IssuableSidebarEntity +end diff --git a/app/views/projects/merge_requests/conflicts.html.haml b/app/views/projects/merge_requests/conflicts.html.haml deleted file mode 100644 index a6e2565a485..00000000000 --- a/app/views/projects/merge_requests/conflicts.html.haml +++ /dev/null @@ -1,36 +0,0 @@ -- page_title "Merge Conflicts", "#{@merge_request.title} (#{@merge_request.to_reference}", "Merge Requests" -- content_for :page_specific_javascripts do - = page_specific_javascript_tag('lib/ace.js') -= render "projects/merge_requests/mr_title" - -.merge-request-details.issuable-details - = render "projects/merge_requests/mr_box" - -= render 'shared/issuable/sidebar', issuable: @merge_request - -#conflicts{ "v-cloak" => "true", data: { conflicts_path: conflicts_project_merge_request_path(@merge_request.project, @merge_request, format: :json), - resolve_conflicts_path: resolve_conflicts_project_merge_request_path(@merge_request.project, @merge_request) } } - .loading{ "v-if" => "isLoading" } - %i.fa.fa-spinner.fa-spin - - .nothing-here-block{ "v-if" => "hasError" } - {{conflictsData.errorMessage}} - - = render partial: "projects/merge_requests/conflicts/commit_stats" - - .files-wrapper{ "v-if" => "!isLoading && !hasError" } - .files - .diff-file.file-holder.conflict{ "v-for" => "file in conflictsData.files" } - .js-file-title.file-title - %i.fa.fa-fw{ ":class" => "file.iconClass" } - %strong {{file.filePath}} - = render partial: 'projects/merge_requests/conflicts/file_actions' - .diff-content.diff-wrap-lines - .diff-wrap-lines.code.file-content.js-syntax-highlight{ "v-show" => "!isParallel && file.resolveMode === 'interactive' && file.type === 'text'" } - = render partial: "projects/merge_requests/conflicts/components/inline_conflict_lines" - .diff-wrap-lines.code.file-content.js-syntax-highlight{ "v-show" => "isParallel && file.resolveMode === 'interactive' && file.type === 'text'" } - %parallel-conflict-lines{ ":file" => "file" } - %div{ "v-show" => "file.resolveMode === 'edit' || file.type === 'text-editor'" } - = render partial: "projects/merge_requests/conflicts/components/diff_file_editor" - - = render partial: "projects/merge_requests/conflicts/submit_form" -- cgit v1.2.3