Don't show next arrow when there are not more changes on next page
The logic hiding the next arrow on the change list view was incorrect
when there was a full page of results, but no more to dipslay.
The API includes an attribute _more_changes on the last item of the
array to let the client know whether or not there should be another
page. This change uses _more_changes instead of comparing to
_changesPerPage to take this edge case into account.
Bug: Issue 5622
Change-Id: I17dba2c807d152485494405fb412a502ba666df6
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.html b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.html
index 9c9a31a..057dd1d 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.html
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.html
@@ -62,7 +62,7 @@
hidden$="[[_hidePrevArrow(_offset)]]" hidden>← Prev</a>
<a id="nextArrow"
href$="[[_computeNavLink(_query, _offset, 1, _changesPerPage)]]"
- hidden$="[[_hideNextArrow(_loading, _changesPerPage)]]" hidden>
+ hidden$="[[_hideNextArrow(_loading)]]" hidden>
Next →</a>
</nav>
</div>
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.js b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.js
index fa68bc8..fc9b26f 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.js
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.js
@@ -134,8 +134,9 @@
return offset === 0;
},
- _hideNextArrow: function(loading, changesPerPage) {
- return loading || !this._changes || this._changes.length < changesPerPage;
+ _hideNextArrow: function(loading) {
+ return loading || !this._changes || !this._changes.length ||
+ !this._changes[this._changes.length - 1]._more_changes;
},
_handleNextPage: function() {
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.html b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.html
index 376c6ea..d99f251 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.html
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.html
@@ -86,16 +86,21 @@
test('_hideNextArrow', function() {
var loading = true;
- var changesPerPage = 25;
- assert.isTrue(element._hideNextArrow(loading, changesPerPage));
+ assert.isTrue(element._hideNextArrow(loading));
loading = false;
- assert.isTrue(element._hideNextArrow(loading, changesPerPage));
+ assert.isTrue(element._hideNextArrow(loading));
+ element._changes = [];
+ assert.isTrue(element._hideNextArrow(loading));
element._changes =
- Array.apply(null, Array(5)).map(Number.prototype.valueOf, 0);
- assert.isTrue(element._hideNextArrow(loading, changesPerPage));
+ Array.apply(null, Array(5)).map(Object.prototype.valueOf, {});
+ assert.isTrue(element._hideNextArrow(loading));
element._changes =
- Array.apply(null, Array(25)).map(Number.prototype.valueOf, 0);
- assert.isFalse(element._hideNextArrow(loading, changesPerPage));
+ Array.apply(null, Array(25)).map(Object.prototype.valueOf,
+ {_more_changes: true});
+ assert.isFalse(element._hideNextArrow(loading));
+ element._changes =
+ Array.apply(null, Array(25)).map(Object.prototype.valueOf, {});
+ assert.isTrue(element._hideNextArrow(loading));
});
test('_handleNextPage', function() {