Refactor navigateToChange to take options

Instead of specifying 5 undefined parameters if we want to do a force
reload, specify the necessary parameter only.

Change-Id: Ibae0a57c29f115ef3fdb5c7d381ff1b350b2775d
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.ts b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.ts
index 2360312..5518767 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.ts
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.ts
@@ -185,13 +185,9 @@
             if (this._query.match(queryPattern)) {
               // "Back"/"Forward" buttons work correctly only with
               // opt_redirect options
-              GerritNav.navigateToChange(
-                changes[0],
-                undefined,
-                undefined,
-                undefined,
-                true
-              );
+              GerritNav.navigateToChange(changes[0], {
+                redirect: true,
+              });
               return;
             }
           }
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.js b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.js
index 86b2fd1..03b6858 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.js
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.js
@@ -181,9 +181,9 @@
           .returns(Promise.resolve([change]));
       const promise = mockPromise();
       sinon.stub(GerritNav, 'navigateToChange').callsFake(
-          (url, opt_patchNum, opt_basePatchNum, opt_isEdit, opt_redirect) => {
+          (url, opt) => {
             assert.equal(url, change);
-            assert.isTrue(opt_redirect);
+            assert.isTrue(opt.redirect);
             promise.resolve();
           });
 
@@ -197,9 +197,9 @@
           .returns(Promise.resolve([change]));
       const promise = mockPromise();
       sinon.stub(GerritNav, 'navigateToChange').callsFake(
-          (url, opt_patchNum, opt_basePatchNum, opt_isEdit, opt_redirect) => {
+          (url, opt) => {
             assert.equal(url, change);
-            assert.isTrue(opt_redirect);
+            assert.isTrue(opt.redirect);
             promise.resolve();
           });
 
@@ -213,9 +213,9 @@
           .returns(Promise.resolve([change]));
       const promise = mockPromise();
       sinon.stub(GerritNav, 'navigateToChange').callsFake(
-          (url, opt_patchNum, opt_basePatchNum, opt_isEdit, opt_redirect) => {
+          (url, opt) => {
             assert.equal(url, change);
-            assert.isTrue(opt_redirect);
+            assert.isTrue(opt.redirect);
             promise.resolve();
           });
 
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
index 8a28cb1..55c84c1 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
@@ -1593,7 +1593,9 @@
       fireAlert(this, 'Base is already selected.');
       return;
     }
-    GerritNav.navigateToChange(this._change, this._patchRange.patchNum);
+    GerritNav.navigateToChange(this._change, {
+      patchNum: this._patchRange.patchNum,
+    });
   }
 
   _handleDiffBaseAgainstLeft() {
@@ -1604,7 +1606,9 @@
       fireAlert(this, 'Left is already base.');
       return;
     }
-    GerritNav.navigateToChange(this._change, this._patchRange.basePatchNum);
+    GerritNav.navigateToChange(this._change, {
+      patchNum: this._patchRange.basePatchNum,
+    });
   }
 
   _handleDiffAgainstLatest() {
@@ -1616,11 +1620,10 @@
       fireAlert(this, 'Latest is already selected.');
       return;
     }
-    GerritNav.navigateToChange(
-      this._change,
-      latestPatchNum,
-      this._patchRange.basePatchNum
-    );
+    GerritNav.navigateToChange(this._change, {
+      patchNum: latestPatchNum,
+      basePatchNum: this._patchRange.basePatchNum,
+    });
   }
 
   _handleDiffRightAgainstLatest() {
@@ -1632,11 +1635,10 @@
       fireAlert(this, 'Right is already latest.');
       return;
     }
-    GerritNav.navigateToChange(
-      this._change,
-      latestPatchNum,
-      this._patchRange.patchNum as BasePatchSetNum
-    );
+    GerritNav.navigateToChange(this._change, {
+      patchNum: latestPatchNum,
+      basePatchNum: this._patchRange.patchNum as BasePatchSetNum,
+    });
   }
 
   _handleDiffBaseAgainstLatest() {
@@ -1651,7 +1653,7 @@
       fireAlert(this, 'Already diffing base against latest.');
       return;
     }
-    GerritNav.navigateToChange(this._change, latestPatchNum);
+    GerritNav.navigateToChange(this._change, {patchNum: latestPatchNum});
   }
 
   _handleToggleChangeStar() {
@@ -2055,14 +2057,9 @@
   loadData(isLocationChange?: boolean, clearPatchset?: boolean): Promise<void> {
     if (this.isChangeObsolete()) return Promise.resolve();
     if (clearPatchset && this._change) {
-      GerritNav.navigateToChange(
-        this._change,
-        undefined,
-        undefined,
-        undefined,
-        undefined,
-        true
-      );
+      GerritNav.navigateToChange(this._change, {
+        forceReload: true,
+      });
       return Promise.resolve();
     }
     this._loading = true;
@@ -2497,7 +2494,7 @@
     );
 
     if (editInfo) {
-      GerritNav.navigateToChange(this._change, EditPatchSetNum);
+      GerritNav.navigateToChange(this._change, {patchNum: EditPatchSetNum});
       return;
     }
 
@@ -2511,28 +2508,21 @@
     ) {
       patchNum = this._patchRange.patchNum;
     }
-    GerritNav.navigateToChange(
-      this._change,
+    GerritNav.navigateToChange(this._change, {
       patchNum,
-      undefined,
-      true,
-      undefined,
-      true
-    );
+      isEdit: true,
+      forceReload: true,
+    });
   }
 
   _handleStopEditTap() {
     assertIsDefined(this._change, '_change');
     if (!this._patchRange)
       throw new Error('missing required _patchRange property');
-    GerritNav.navigateToChange(
-      this._change,
-      this._patchRange.patchNum,
-      undefined,
-      undefined,
-      undefined,
-      true
-    );
+    GerritNav.navigateToChange(this._change, {
+      patchNum: this._patchRange.patchNum,
+      forceReload: true,
+    });
   }
 
   _resetReplyOverlayFocusStops() {
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
index 72cd91e..fbdef64 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
@@ -416,7 +416,7 @@
     assert(navigateToChangeStub.called);
     const args = navigateToChangeStub.getCall(0).args;
     assert.equal(args[0], element._change);
-    assert.equal(args[1], 3 as PatchSetNum);
+    assert.equal(args[1]!.patchNum, 3 as PatchSetNum);
   });
 
   test('_handleDiffAgainstLatest', () => {
@@ -432,8 +432,8 @@
     assert(navigateToChangeStub.called);
     const args = navigateToChangeStub.getCall(0).args;
     assert.equal(args[0], element._change);
-    assert.equal(args[1], 10 as PatchSetNum);
-    assert.equal(args[2], 1 as BasePatchSetNum);
+    assert.equal(args[1]!.patchNum, 10 as PatchSetNum);
+    assert.equal(args[1]!.basePatchNum, 1 as BasePatchSetNum);
   });
 
   test('_handleDiffBaseAgainstLeft', () => {
@@ -449,7 +449,7 @@
     assert(navigateToChangeStub.called);
     const args = navigateToChangeStub.getCall(0).args;
     assert.equal(args[0], element._change);
-    assert.equal(args[1], 1 as PatchSetNum);
+    assert.equal(args[1]!.patchNum, 1 as PatchSetNum);
   });
 
   test('_handleDiffRightAgainstLatest', () => {
@@ -464,8 +464,8 @@
     element._handleDiffRightAgainstLatest();
     assert(navigateToChangeStub.called);
     const args = navigateToChangeStub.getCall(0).args;
-    assert.equal(args[1], 10 as PatchSetNum);
-    assert.equal(args[2], 3 as BasePatchSetNum);
+    assert.equal(args[1]!.patchNum, 10 as PatchSetNum);
+    assert.equal(args[1]!.basePatchNum, 3 as BasePatchSetNum);
   });
 
   test('_handleDiffBaseAgainstLatest', () => {
@@ -480,8 +480,8 @@
     element._handleDiffBaseAgainstLatest();
     assert(navigateToChangeStub.called);
     const args = navigateToChangeStub.getCall(0).args;
-    assert.equal(args[1], 10 as PatchSetNum);
-    assert.isNotOk(args[2]);
+    assert.equal(args[1]!.patchNum, 10 as PatchSetNum);
+    assert.isNotOk(args[1]!.basePatchNum);
   });
 
   test('toggle attention set status', async () => {
@@ -2080,7 +2080,7 @@
       const promise = mockPromise();
       sinon.stub(GerritNav, 'navigateToChange').callsFake((...args) => {
         assert.equal(args.length, 2);
-        assert.equal(args[1], EditPatchSetNum); // patchNum
+        assert.equal(args[1]!.patchNum, EditPatchSetNum); // patchNum
         promise.resolve();
       });
 
@@ -2096,9 +2096,9 @@
     test('no edit exists in revisions, non-latest patchset', async () => {
       const promise = mockPromise();
       sinon.stub(GerritNav, 'navigateToChange').callsFake((...args) => {
-        assert.equal(args.length, 6);
-        assert.equal(args[1], 1 as PatchSetNum); // patchNum
-        assert.equal(args[3], true); // opt_isEdit
+        assert.equal(args.length, 2);
+        assert.equal(args[1]!.patchNum, 1 as PatchSetNum); // patchNum
+        assert.equal(args[1]!.isEdit, true); // opt_isEdit
         promise.resolve();
       });
 
@@ -2113,10 +2113,10 @@
     test('no edit exists in revisions, latest patchset', async () => {
       const promise = mockPromise();
       sinon.stub(GerritNav, 'navigateToChange').callsFake((...args) => {
-        assert.equal(args.length, 6);
+        assert.equal(args.length, 2);
         // No patch should be specified when patchNum == latest.
-        assert.isNotOk(args[1]); // patchNum
-        assert.equal(args[3], true); // opt_isEdit
+        assert.isNotOk(args[1]!.patchNum); // patchNum
+        assert.equal(args[1]!.isEdit, true); // opt_isEdit
         promise.resolve();
       });
 
@@ -2137,8 +2137,8 @@
     navigateToChangeStub.restore();
     const promise = mockPromise();
     sinon.stub(GerritNav, 'navigateToChange').callsFake((...args) => {
-      assert.equal(args.length, 6);
-      assert.equal(args[1], 1 as PatchSetNum); // patchNum
+      assert.equal(args.length, 2);
+      assert.equal(args[1]!.patchNum, 1 as PatchSetNum); // patchNum
       promise.resolve();
     });
 
diff --git a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.ts b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.ts
index 920844b..566df6a 100644
--- a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.ts
+++ b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.ts
@@ -175,7 +175,7 @@
     ) {
       return;
     }
-    GerritNav.navigateToChange(this.change, patchNum, basePatchNum);
+    GerritNav.navigateToChange(this.change, {patchNum, basePatchNum});
   }
 
   _handlePrefsTap(e: Event) {
diff --git a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header_test.js b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header_test.js
index 479a9a1..ac9e8c0 100644
--- a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header_test.js
+++ b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header_test.js
@@ -144,7 +144,7 @@
     element._handlePatchChange({detail: {basePatchNum: 1, patchNum: 3}});
     assert.equal(navigateToChangeStub.callCount, 1);
     assert.isTrue(navigateToChangeStub.lastCall
-        .calledWithExactly(element.change, 3, 1));
+        .calledWithExactly(element.change, {patchNum: 3, basePatchNum: 1}));
   });
 
   test('class is applied to file list on old patch set', () => {
diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts
index d02f09b..7b2688b 100644
--- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts
+++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts
@@ -1125,11 +1125,10 @@
 
   _handleShowParent1(): void {
     if (!this.change || !this.patchRange) return;
-    GerritNav.navigateToChange(
-      this.change,
-      this.patchRange.patchNum,
-      -1 as BasePatchSetNum // Parent 1
-    );
+    GerritNav.navigateToChange(this.change, {
+      patchNum: this.patchRange.patchNum,
+      basePatchNum: -1 as BasePatchSetNum, // Parent 1
+    });
   }
 
   @observe(
diff --git a/polygerrit-ui/app/elements/change/gr-message/gr-message.ts b/polygerrit-ui/app/elements/change/gr-message/gr-message.ts
index 95e4301..9ac6b24 100644
--- a/polygerrit-ui/app/elements/change/gr-message/gr-message.ts
+++ b/polygerrit-ui/app/elements/change/gr-message/gr-message.ts
@@ -333,7 +333,7 @@
       patchNum = computeLatestPatchNum(computeAllPatchSets(this.change))!;
       basePatchNum = computePredecessor(patchNum)!;
     }
-    GerritNav.navigateToChange(this.change, patchNum, basePatchNum);
+    GerritNav.navigateToChange(this.change, {patchNum, basePatchNum});
     // stop propagation to stop message expansion
     e.stopPropagation();
   }
diff --git a/polygerrit-ui/app/elements/change/gr-message/gr-message_test.ts b/polygerrit-ui/app/elements/change/gr-message/gr-message_test.ts
index f87c4c3..472e937 100644
--- a/polygerrit-ui/app/elements/change/gr-message/gr-message_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-message/gr-message_test.ts
@@ -285,11 +285,10 @@
         };
         element._handleViewPatchsetDiff(new MouseEvent('click'));
         assert.isTrue(
-          navStub.calledWithExactly(
-            element.change!,
-            1 as PatchSetNum,
-            'PARENT' as BasePatchSetNum
-          )
+          navStub.calledWithExactly(element.change!, {
+            patchNum: 1 as PatchSetNum,
+            basePatchNum: 'PARENT' as BasePatchSetNum,
+          })
         );
       });
 
@@ -300,11 +299,10 @@
         };
         element._handleViewPatchsetDiff(new MouseEvent('click'));
         assert.isTrue(
-          navStub.calledWithExactly(
-            element.change!,
-            2 as PatchSetNum,
-            1 as BasePatchSetNum
-          )
+          navStub.calledWithExactly(element.change!, {
+            patchNum: 2 as PatchSetNum,
+            basePatchNum: 1 as BasePatchSetNum,
+          })
         );
 
         element.message = {
@@ -313,11 +311,10 @@
         };
         element._handleViewPatchsetDiff(new MouseEvent('click'));
         assert.isTrue(
-          navStub.calledWithExactly(
-            element.change!,
-            200 as PatchSetNum,
-            199 as BasePatchSetNum
-          )
+          navStub.calledWithExactly(element.change!, {
+            patchNum: 200 as PatchSetNum,
+            basePatchNum: 199 as BasePatchSetNum,
+          })
         );
       });
 
@@ -328,11 +325,10 @@
         };
         element._handleViewPatchsetDiff(new MouseEvent('click'));
         assert.isTrue(
-          navStub.calledWithExactly(
-            element.change!,
-            4 as PatchSetNum,
-            3 as BasePatchSetNum
-          )
+          navStub.calledWithExactly(element.change!, {
+            patchNum: 4 as PatchSetNum,
+            basePatchNum: 3 as BasePatchSetNum,
+          })
         );
       });
 
@@ -343,11 +339,10 @@
         };
         element._handleViewPatchsetDiff(new MouseEvent('click'));
         assert.isTrue(
-          navStub.calledWithExactly(
-            element.change!,
-            4 as PatchSetNum,
-            3 as BasePatchSetNum
-          )
+          navStub.calledWithExactly(element.change!, {
+            patchNum: 4 as PatchSetNum,
+            basePatchNum: 3 as BasePatchSetNum,
+          })
         );
       });
     });
diff --git a/polygerrit-ui/app/elements/core/gr-navigation/gr-navigation.ts b/polygerrit-ui/app/elements/core/gr-navigation/gr-navigation.ts
index fcc853d..2725664 100644
--- a/polygerrit-ui/app/elements/core/gr-navigation/gr-navigation.ts
+++ b/polygerrit-ui/app/elements/core/gr-navigation/gr-navigation.ts
@@ -439,6 +439,14 @@
   RESOLVE_CONFLICTS = 'resolve-conflicts',
 }
 
+interface NavigateToChangeParams {
+  patchNum?: PatchSetNum;
+  basePatchNum?: BasePatchSetNum;
+  isEdit?: boolean;
+  redirect?: boolean;
+  forceReload?: boolean;
+}
+
 // TODO(dmfilippov) Convert to class, extract consts, give better name and
 // expose as a service from appContext
 export const GerritNav = {
@@ -659,15 +667,11 @@
    *     of the view. In certain cases we want to force the view to reload
    *     and re-render everything.
    */
-  // TODO(dhruvsri): move the arguments into one options object
   navigateToChange(
     change: Pick<ChangeInfo, '_number' | 'project' | 'internalHost'>,
-    patchNum?: PatchSetNum,
-    basePatchNum?: BasePatchSetNum,
-    isEdit?: boolean,
-    redirect?: boolean,
-    forceReload?: boolean
+    options: NavigateToChangeParams = {}
   ) {
+    const {patchNum, basePatchNum, isEdit, forceReload, redirect} = options;
     this._navigate(
       this.getUrlForChange(
         change,
diff --git a/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog.ts b/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog.ts
index a6176e1..e05d194 100644
--- a/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog.ts
+++ b/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog.ts
@@ -293,11 +293,10 @@
       .applyFixSuggestion(changeNum, patchNum, this._currentFix.fix_id)
       .then(res => {
         if (res && res.ok) {
-          GerritNav.navigateToChange(
-            change,
-            EditPatchSetNum,
-            patchNum as BasePatchSetNum
-          );
+          GerritNav.navigateToChange(change, {
+            patchNum: EditPatchSetNum,
+            basePatchNum: patchNum as BasePatchSetNum,
+          });
           this._close(true);
         }
         this._isApplyFixLoading = false;
diff --git a/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog_test.ts b/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog_test.ts
index 94d37f5..e82ea89 100644
--- a/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog_test.ts
+++ b/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog_test.ts
@@ -277,12 +277,10 @@
       2 as PatchSetNum,
       '123'
     );
-    sinon.assert.calledWithExactly(
-      navigateToChangeStub,
-      element.change!,
-      EditPatchSetNum,
-      element.change!.revisions[2]._number as BasePatchSetNum
-    );
+    sinon.assert.calledWithExactly(navigateToChangeStub, element.change!, {
+      patchNum: EditPatchSetNum,
+      basePatchNum: element.change!.revisions[2]._number as BasePatchSetNum,
+    });
 
     sinon.assert.calledOnceWithExactly(
       closeFixPreviewEventSpy,
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
index 64186f4..8767924 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
@@ -1268,7 +1268,10 @@
   ) {
     if (!change) return;
     const range = this._getChangeUrlRange(patchRange, revisions);
-    GerritNav.navigateToChange(change, range.patchNum, range.basePatchNum);
+    GerritNav.navigateToChange(change, {
+      patchNum: range.patchNum,
+      basePatchNum: range.basePatchNum,
+    });
   }
 
   _computeChangePath(
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.js b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.js
index 5c04ab0..7fa7abb 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.js
@@ -728,8 +728,8 @@
       MockInteractions.pressAndReleaseKeyOn(element, 65, null, 'a');
       await flush();
       assert.isTrue(element.changeViewState.showReplyDialog);
-      assert(changeNavStub.lastCall.calledWithExactly(element._change, 10,
-          5), 'Should navigate to /c/42/5..10');
+      assert(changeNavStub.lastCall.calledWithExactly(element._change, {
+        patchNum: 10, basePatchNum: 5}), 'Should navigate to /c/42/5..10');
       assert.isFalse(loggedInErrorSpy.called);
     });
 
@@ -754,8 +754,8 @@
           MockInteractions.pressAndReleaseKeyOn(element, 65, null, 'a');
           await flush();
           assert.isTrue(element.changeViewState.showReplyDialog);
-          assert(changeNavStub.lastCall.calledWithExactly(element._change, 1,
-              PARENT), 'Should navigate to /c/42/1');
+          assert(changeNavStub.lastCall.calledWithExactly(element._change, {
+            patchNum: 1, basePatchNum: PARENT}), 'Should navigate to /c/42/1');
           assert.isFalse(loggedInErrorSpy.called);
         });
 
@@ -780,8 +780,8 @@
       const changeNavStub = sinon.stub(GerritNav, 'navigateToChange');
 
       MockInteractions.pressAndReleaseKeyOn(element, 85, null, 'u');
-      assert(changeNavStub.lastCall.calledWithExactly(element._change, 10,
-          5), 'Should navigate to /c/42/5..10');
+      assert(changeNavStub.lastCall.calledWithExactly(element._change,
+          {patchNum: 10, basePatchNum: 5}), 'Should navigate to /c/42/5..10');
 
       MockInteractions.pressAndReleaseKeyOn(element, 221, null, ']');
       assert.isTrue(element._loading);
@@ -810,8 +810,8 @@
 
       MockInteractions.pressAndReleaseKeyOn(element, 219, null, '[');
       assert.isTrue(element._loading);
-      assert(changeNavStub.lastCall.calledWithExactly(element._change, 10,
-          5),
+      assert(changeNavStub.lastCall.calledWithExactly(element._change,
+          {patchNum: 10, basePatchNum: 5}),
       'Should navigate to /c/42/5..10');
 
       assert.isUndefined(element.changeViewState.showDownloadDialog);
@@ -840,8 +840,8 @@
       const changeNavStub = sinon.stub(GerritNav, 'navigateToChange');
 
       MockInteractions.pressAndReleaseKeyOn(element, 85, null, 'u');
-      assert(changeNavStub.lastCall.calledWithExactly(element._change, 1,
-          PARENT), 'Should navigate to /c/42/1');
+      assert(changeNavStub.lastCall.calledWithExactly(element._change,
+          {patchNum: 1, basePatchNum: PARENT}), 'Should navigate to /c/42/1');
 
       MockInteractions.pressAndReleaseKeyOn(element, 221, null, ']');
       assert(diffNavStub.lastCall.calledWithExactly(element._change,
@@ -866,8 +866,8 @@
 
       changeNavStub.reset();
       MockInteractions.pressAndReleaseKeyOn(element, 219, null, '[');
-      assert(changeNavStub.lastCall.calledWithExactly(element._change, 1,
-          PARENT), 'Should navigate to /c/42/1');
+      assert(changeNavStub.lastCall.calledWithExactly(element._change,
+          {patchNum: 1, basePatchNum: PARENT}), 'Should navigate to /c/42/1');
       assert.isTrue(changeNavStub.calledOnce);
     });
 
diff --git a/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view.ts b/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view.ts
index a295588..0302d42 100644
--- a/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view.ts
+++ b/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view.ts
@@ -259,14 +259,10 @@
 
   _viewEditInChangeView() {
     if (this._change)
-      GerritNav.navigateToChange(
-        this._change,
-        undefined,
-        undefined,
-        true,
-        undefined,
-        true
-      );
+      GerritNav.navigateToChange(this._change, {
+        isEdit: true,
+        forceReload: true,
+      });
   }
 
   _getFileData(
diff --git a/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view_test.ts b/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view_test.ts
index f591ab2..dc6d8d5 100644
--- a/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view_test.ts
+++ b/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view_test.ts
@@ -366,8 +366,8 @@
     const navStub = sinon.stub(GerritNav, 'navigateToChange');
     element._patchNum = EditPatchSetNum;
     element._viewEditInChangeView();
-    assert.equal(navStub.lastCall.args[1], undefined);
-    assert.equal(navStub.lastCall.args[3], true);
+    assert.equal(navStub.lastCall.args[1]!.patchNum, undefined);
+    assert.equal(navStub.lastCall.args[1]!.isEdit, true);
   });
 
   suite('keyboard shortcuts', () => {