Update Pipeline's badge count in Merge Request and Commits view to match real-time content
This commit is contained in:
parent
0618ad12e2
commit
706d99aed8
10 changed files with 94 additions and 18 deletions
|
@ -18,13 +18,26 @@ window.gl.CommitPipelinesTable = CommitPipelinesTable;
|
|||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const pipelineTableViewEl = document.querySelector('#commit-pipeline-table-view');
|
||||
|
||||
if (pipelineTableViewEl && pipelineTableViewEl.dataset.disableInitialization === undefined) {
|
||||
const table = new CommitPipelinesTable({
|
||||
propsData: {
|
||||
endpoint: pipelineTableViewEl.dataset.endpoint,
|
||||
helpPagePath: pipelineTableViewEl.dataset.helpPagePath,
|
||||
},
|
||||
}).$mount();
|
||||
pipelineTableViewEl.appendChild(table.$el);
|
||||
if (pipelineTableViewEl) {
|
||||
// Update MR and Commits tabs
|
||||
pipelineTableViewEl.addEventListener('update-pipelines-count', (event) => {
|
||||
if (event.detail.pipelines &&
|
||||
event.detail.pipelines.count &&
|
||||
event.detail.pipelines.count.all) {
|
||||
const badge = document.querySelector('.js-pipelines-mr-count');
|
||||
|
||||
badge.textContent = event.detail.pipelines.count.all;
|
||||
}
|
||||
});
|
||||
|
||||
if (pipelineTableViewEl.dataset.disableInitialization === undefined) {
|
||||
const table = new CommitPipelinesTable({
|
||||
propsData: {
|
||||
endpoint: pipelineTableViewEl.dataset.endpoint,
|
||||
helpPagePath: pipelineTableViewEl.dataset.helpPagePath,
|
||||
},
|
||||
}).$mount();
|
||||
pipelineTableViewEl.appendChild(table.$el);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -55,6 +55,17 @@
|
|||
// depending of the endpoint the response can either bring a `pipelines` key or not.
|
||||
const pipelines = response.pipelines || response;
|
||||
this.setCommonData(pipelines);
|
||||
|
||||
const updatePipelinesEvent = new CustomEvent('update-pipelines-count', {
|
||||
detail: {
|
||||
pipelines: response,
|
||||
},
|
||||
});
|
||||
|
||||
// notifiy to update the count in tabs
|
||||
if (this.$el.parentElement) {
|
||||
this.$el.parentElement.dispatchEvent(updatePipelinesEvent);
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
|
|
|
@ -38,9 +38,14 @@ class Projects::CommitController < Projects::ApplicationController
|
|||
format.json do
|
||||
Gitlab::PollingInterval.set_header(response, interval: 10_000)
|
||||
|
||||
render json: PipelineSerializer
|
||||
.new(project: @project, current_user: @current_user)
|
||||
.represent(@pipelines)
|
||||
render json: {
|
||||
pipelines: PipelineSerializer
|
||||
.new(project: @project, current_user: @current_user)
|
||||
.represent(@pipelines),
|
||||
count: {
|
||||
all: @pipelines.count
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -112,9 +112,14 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
|
|||
|
||||
Gitlab::PollingInterval.set_header(response, interval: 10_000)
|
||||
|
||||
render json: PipelineSerializer
|
||||
.new(project: @project, current_user: @current_user)
|
||||
.represent(@pipelines)
|
||||
render json: {
|
||||
pipelines: PipelineSerializer
|
||||
.new(project: @project, current_user: @current_user)
|
||||
.represent(@pipelines),
|
||||
count: {
|
||||
all: @pipelines.count
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def edit
|
||||
|
|
|
@ -7,4 +7,4 @@
|
|||
= nav_link(path: 'commit#pipelines') do
|
||||
= link_to pipelines_project_commit_path(@project, @commit.id) do
|
||||
Pipelines
|
||||
%span.badge= @commit.pipelines.size
|
||||
%span.badge.js-pipelines-mr-count= @commit.pipelines.size
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
%li.pipelines-tab
|
||||
= link_to pipelines_project_merge_request_path(@project, @merge_request), data: { target: '#pipelines', action: 'pipelines', toggle: 'tab' } do
|
||||
Pipelines
|
||||
%span.badge= @pipelines.size
|
||||
%span.badge.js-pipelines-mr-count= @pipelines.size
|
||||
%li.diffs-tab
|
||||
= link_to diffs_project_merge_request_path(@project, @merge_request), data: { target: 'div#diffs', action: 'diffs', toggle: 'tab' } do
|
||||
Changes
|
||||
|
|
5
changelogs/unreleased/34075-pipelines-count-mt.yml
Normal file
5
changelogs/unreleased/34075-pipelines-count-mt.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Update Pipeline's badge count in Merge Request and Commits view to match real-time
|
||||
content
|
||||
merge_request:
|
||||
author:
|
|
@ -343,7 +343,8 @@ describe Projects::CommitController do
|
|||
get_pipelines(id: commit.id, format: :json)
|
||||
|
||||
expect(response).to be_ok
|
||||
expect(JSON.parse(response.body)).not_to be_empty
|
||||
expect(JSON.parse(response.body)['pipelines']).not_to be_empty
|
||||
expect(JSON.parse(response.body)['count']['all']).to eq 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -481,7 +481,8 @@ describe Projects::MergeRequestsController do
|
|||
end
|
||||
|
||||
it 'responds with serialized pipelines' do
|
||||
expect(json_response).not_to be_empty
|
||||
expect(json_response['pipelines']).not_to be_empty
|
||||
expect(json_response['count']['all']).to eq 1
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -85,6 +85,41 @@ describe('Pipelines table in Commits and Merge requests', () => {
|
|||
}, 0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('pipeline badge counts', () => {
|
||||
const pipelinesResponse = (request, next) => {
|
||||
next(request.respondWith(JSON.stringify([pipeline]), {
|
||||
status: 200,
|
||||
}));
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
Vue.http.interceptors.push(pipelinesResponse);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
Vue.http.interceptors = _.without(Vue.http.interceptors, pipelinesResponse);
|
||||
this.component.$destroy();
|
||||
});
|
||||
|
||||
it('should receive update-pipelines-count event', (done) => {
|
||||
const element = document.createElement('div');
|
||||
document.body.appendChild(element);
|
||||
|
||||
element.addEventListener('update-pipelines-count', (event) => {
|
||||
expect(event.detail.pipelines).toEqual([pipeline]);
|
||||
done();
|
||||
});
|
||||
|
||||
this.component = new PipelinesTable({
|
||||
propsData: {
|
||||
endpoint: 'endpoint',
|
||||
helpPagePath: 'foo',
|
||||
},
|
||||
}).$mount();
|
||||
element.appendChild(this.component.$el);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('unsuccessfull request', () => {
|
||||
|
|
Loading…
Reference in a new issue