Use internal navigation instead of hard reload
If app changes window.location, browser redownload whole app and app
needs to initialize again. This takes in avg around 1s.
It's better to use internal navigation, that will resolve much faster.
Reload in reply dialog took 1sec before, now 200 ms.
Moving from query with 1 result to change pages took 3sec and now
it takes 1sec.
Change-Id: I724fe2d3c76fb55b81bd8990df3650bb7287e786
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 5035c92..b82593d 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
@@ -177,8 +177,7 @@
for (const query in LookupQueryPatterns) {
if (LookupQueryPatterns.hasOwnProperty(query) &&
this._query.match(LookupQueryPatterns[query])) {
- this._replaceCurrentLocation(
- Gerrit.Nav.getUrlForChange(changes[0]));
+ Gerrit.Nav.navigateToChange(changes[0]);
return;
}
}
@@ -200,10 +199,6 @@
});
}
- _replaceCurrentLocation(url) {
- window.location.replace(url);
- }
-
_getChanges() {
return this.$.restAPI.getChanges(this._changesPerPage, this._query,
this._offset);
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 0360d00..1d81ab7 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
@@ -198,7 +198,6 @@
suite('query based navigation', () => {
setup(() => {
- sandbox.stub(Gerrit.Nav, 'getUrlForChange', () => '/r/c/1');
});
teardown(done => {
@@ -209,10 +208,11 @@
});
test('Searching for a change ID redirects to change', done => {
+ const change = {_number: 1};
sandbox.stub(element, '_getChanges')
- .returns(Promise.resolve([{_number: 1}]));
- sandbox.stub(element, '_replaceCurrentLocation', url => {
- assert.equal(url, '/r/c/1');
+ .returns(Promise.resolve([change]));
+ sandbox.stub(Gerrit.Nav, 'navigateToChange', url => {
+ assert.equal(url, change);
done();
});
@@ -220,10 +220,11 @@
});
test('Searching for a change num redirects to change', done => {
+ const change = {_number: 1};
sandbox.stub(element, '_getChanges')
- .returns(Promise.resolve([{_number: 1}]));
- sandbox.stub(element, '_replaceCurrentLocation', url => {
- assert.equal(url, '/r/c/1');
+ .returns(Promise.resolve([change]));
+ sandbox.stub(Gerrit.Nav, 'navigateToChange', url => {
+ assert.equal(url, change);
done();
});
@@ -231,10 +232,11 @@
});
test('Commit hash redirects to change', done => {
+ const change = {_number: 1};
sandbox.stub(element, '_getChanges')
- .returns(Promise.resolve([{_number: 1}]));
- sandbox.stub(element, '_replaceCurrentLocation', url => {
- assert.equal(url, '/r/c/1');
+ .returns(Promise.resolve([change]));
+ sandbox.stub(Gerrit.Nav, 'navigateToChange', url => {
+ assert.equal(url, change);
done();
});
@@ -244,7 +246,7 @@
test('Searching for an invalid change ID searches', () => {
sandbox.stub(element, '_getChanges')
.returns(Promise.resolve([]));
- const stub = sandbox.stub(element, '_replaceCurrentLocation');
+ const stub = sandbox.stub(Gerrit.Nav, 'navigateToChange');
element.params = {view: Gerrit.Nav.View.SEARCH, query: CHANGE_ID};
flushAsynchronousOperations();
@@ -255,7 +257,7 @@
test('Change ID with multiple search results searches', () => {
sandbox.stub(element, '_getChanges')
.returns(Promise.resolve([{}, {}]));
- const stub = sandbox.stub(element, '_replaceCurrentLocation');
+ const stub = sandbox.stub(Gerrit.Nav, 'navigateToChange');
element.params = {view: Gerrit.Nav.View.SEARCH, query: CHANGE_ID};
flushAsynchronousOperations();
diff --git a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.js b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.js
index fac631b..dc7dde9 100644
--- a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.js
+++ b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.js
@@ -821,7 +821,8 @@
_reload() {
// Load the current change without any patch range.
- location.href = this.getBaseUrl() + '/c/' + this.change._number;
+ Gerrit.Nav.navigateToChange(this.change);
+ this.cancel();
}
_computeSendButtonLabel(canBeStarted) {