Files
gerrit/polygerrit-ui/app/elements/shared/gr-list-view/gr-list-view.js
Becky Siegel 9f2f3a68f1 Fix list view so that it is not loaded twice
The list view listens for filterChanged, so in addition to the initial
load, upon element initialization, it was getting called, even when
the new & old values were falsy. Add a check that does not trigger a
reload when the filter changes between two falsy values.

Also fixes a small css issue in which the reload text had a grey
background.

Bug: Issue 6816
Change-Id: I301bea7b41adde58d875e6cac20290cb3d6b3ade
2017-07-21 14:24:32 -07:00

102 lines
2.5 KiB
JavaScript

// Copyright (C) 2017 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
(function() {
'use strict';
const REQUEST_DEBOUNCE_INTERVAL_MS = 200;
Polymer({
is: 'gr-list-view',
properties: {
createNew: Boolean,
items: Array,
itemsPerPage: Number,
filter: {
type: String,
observer: '_filterChanged',
},
offset: Number,
loading: Boolean,
path: String,
},
behaviors: [
Gerrit.BaseUrlBehavior,
Gerrit.URLEncodingBehavior,
],
listeners: {
'next-page': '_handleNextPage',
'previous-page': '_handlePreviousPage',
},
detached() {
this.cancelDebouncer('reload');
},
_filterChanged(newFilter, oldFilter) {
if (!newFilter && !oldFilter) {
return;
}
this._debounceReload(newFilter);
},
_debounceReload(filter) {
this.debounce('reload', () => {
if (filter) {
return page.show(`${this.path}/q/filter:` +
this.encodeURL(filter, false));
}
page.show(this.path);
}, REQUEST_DEBOUNCE_INTERVAL_MS);
},
_createNewItem() {
this.fire('create-clicked');
},
_computeNavLink(offset, direction, itemsPerPage, filter, path) {
// Offset could be a string when passed from the router.
offset = +(offset || 0);
const newOffset = Math.max(0, offset + (itemsPerPage * direction));
let href = this.getBaseUrl() + path;
if (filter) {
href += '/q/filter:' + filter;
}
if (newOffset > 0) {
href += ',' + newOffset;
}
return href;
},
_computeCreateClass(createNew) {
return createNew ? 'show' : '';
},
_hidePrevArrow(offset) {
return offset === 0;
},
_hideNextArrow(loading, items) {
let lastPage = false;
if (items.length < this.itemsPerPage + 1) {
lastPage = true;
}
return loading || lastPage || !items || !items.length;
},
});
})();