diff options
author | Filipa Lacerda <filipa@gitlab.com> | 2019-02-27 12:44:45 +0300 |
---|---|---|
committer | Filipa Lacerda <filipa@gitlab.com> | 2019-02-27 12:44:45 +0300 |
commit | d6696f819b5b47752c6451f939d24f0f03054663 (patch) | |
tree | 3de24a3a8f5903add8ccee38f1ff42069bcac2d6 | |
parent | 079d471e8effe0e3b200cc7023dc81c0d155293a (diff) | |
parent | 43ac2a964ffe5f2713cb3093b4192216ec8525ad (diff) |
Merge branch 'sh-wip-fix-duplicate-env-xhr' into 'master'
Fix pagination and duplicate requests in environments page
Closes #58191
See merge request gitlab-org/gitlab-ce!25582
3 files changed, 34 insertions, 5 deletions
diff --git a/app/assets/javascripts/environments/mixins/environments_mixin.js b/app/assets/javascripts/environments/mixins/environments_mixin.js index e81a1525df0..9d83840c87c 100644 --- a/app/assets/javascripts/environments/mixins/environments_mixin.js +++ b/app/assets/javascripts/environments/mixins/environments_mixin.js @@ -43,7 +43,11 @@ export default { saveData(resp) { this.isLoading = false; - if (_.isEqual(resp.config.params, this.requestData)) { + // Prevent the absence of the nested flag from causing mismatches + const response = this.filterNilValues(resp.config.params); + const request = this.filterNilValues(this.requestData); + + if (_.isEqual(response, request)) { this.store.storeAvailableCount(resp.data.available_count); this.store.storeStoppedCount(resp.data.stopped_count); this.store.storeEnvironments(resp.data.environments); @@ -51,6 +55,10 @@ export default { } }, + filterNilValues(obj) { + return _.omit(obj, value => _.isUndefined(value) || _.isNull(value)); + }, + /** * Handles URL and query parameter changes. * When the user uses the pagination or the tabs, @@ -64,10 +72,9 @@ export default { // fetch new data return this.service .fetchEnvironments(this.requestData) - .then(response => this.successCallback(response)) - .then(() => { - // restart polling - this.poll.restart({ data: this.requestData }); + .then(response => { + this.successCallback(response); + this.poll.enable({ data: this.requestData, response }); }) .catch(() => { this.errorCallback(); diff --git a/changelogs/unreleased/sh-wip-fix-duplicate-env-xhr.yml b/changelogs/unreleased/sh-wip-fix-duplicate-env-xhr.yml new file mode 100644 index 00000000000..e7900e2230d --- /dev/null +++ b/changelogs/unreleased/sh-wip-fix-duplicate-env-xhr.yml @@ -0,0 +1,5 @@ +--- +title: Fix pagination and duplicate requests in environments page +merge_request: 25582 +author: +type: fixed diff --git a/spec/features/projects/environments/environments_spec.rb b/spec/features/projects/environments/environments_spec.rb index 0c517d5f490..66c6545204b 100644 --- a/spec/features/projects/environments/environments_spec.rb +++ b/spec/features/projects/environments/environments_spec.rb @@ -38,6 +38,23 @@ describe 'Environments page', :js do end end + describe 'with environments spanning multiple pages', :js do + before do + allow(Kaminari.config).to receive(:default_per_page).and_return(3) + create_list(:environment, 4, project: project, state: :available) + end + + it 'should render second page of pipelines' do + visit_environments(project, scope: 'available') + + find('.js-next-button').click + wait_for_requests + + expect(page).to have_selector('.gl-pagination .page', count: 2) + expect(find('.gl-pagination .page-item.active .page-link').text).to eq("2") + end + end + describe 'in stopped tab page' do it 'should show no environments' do visit_environments(project, scope: 'stopped') |