Merge "gr-related-changes-list: Use change-model for patchNum"
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 57a9afb..f68ba8b 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
@@ -1440,7 +1440,6 @@
               id="relatedChanges"
               .change=${this.change}
               .mergeable=${this.mergeable}
-              .patchNum=${computeLatestPatchNum(this.allPatchSets)}
             ></gr-related-changes-list>
           </div>
           <div class="emptySpace"></div>
diff --git a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list.ts b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list.ts
index cac9ae5..4aae939 100644
--- a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list.ts
+++ b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list.ts
@@ -16,7 +16,7 @@
 import {
   ChangeInfo,
   CommitId,
-  PatchSetNum,
+  PatchSetNumber,
   RelatedChangeAndCommitInfo,
   RelatedChangesInfo,
   RevisionPatchSetNum,
@@ -33,6 +33,9 @@
 } from '../../../utils/change-util';
 import {DEFALT_NUM_CHANGES_WHEN_COLLAPSED} from './gr-related-collapse';
 import {createChangeUrl} from '../../../models/views/change';
+import {subscribe} from '../../lit/subscription-controller';
+import {resolve} from '../../../models/dependency';
+import {changeModelToken} from '../../../models/change/change-model';
 
 export interface ChangeMarkersInList {
   showCurrentChangeArrow: boolean;
@@ -54,13 +57,13 @@
   @property({type: Object})
   change?: ParsedChangeInfo;
 
-  @property({type: String})
-  patchNum?: PatchSetNum;
-
   @property({type: Boolean})
   mergeable?: boolean;
 
   @state()
+  latestPatchNum?: PatchSetNumber;
+
+  @state()
   submittedTogether?: SubmittedTogetherInfo = {
     changes: [],
     non_visible_changes: 0,
@@ -80,6 +83,17 @@
 
   private readonly restApiService = getAppContext().restApiService;
 
+  private readonly getChangeModel = resolve(this, changeModelToken);
+
+  constructor() {
+    super();
+    subscribe(
+      this,
+      () => this.getChangeModel().latestPatchNum$,
+      x => (this.latestPatchNum = x)
+    );
+  }
+
   static override get styles() {
     return [
       sharedStyles,
@@ -197,7 +211,7 @@
     );
     const connectedRevisions = this._computeConnectedRevisions(
       this.change,
-      this.patchNum,
+      this.latestPatchNum,
       this.relatedChanges
     );
 
@@ -570,11 +584,12 @@
   reload(getRelatedChanges?: Promise<RelatedChangesInfo | undefined>) {
     const change = this.change;
     if (!change) return Promise.reject(new Error('change missing'));
-    if (!this.patchNum) return Promise.reject(new Error('patchNum missing'));
+    if (!this.latestPatchNum)
+      return Promise.reject(new Error('latestPatchNum missing'));
     if (!getRelatedChanges) {
       getRelatedChanges = this.restApiService.getRelatedChanges(
         change._number,
-        this.patchNum
+        this.latestPatchNum
       );
     }
     const promises: Array<Promise<void>> = [
@@ -652,15 +667,15 @@
    */
   _computeConnectedRevisions(
     change?: ParsedChangeInfo,
-    patchNum?: PatchSetNum,
+    latestPatchNum?: PatchSetNumber,
     relatedChanges?: RelatedChangeAndCommitInfo[]
   ) {
-    if (!patchNum || !relatedChanges || !change) {
+    if (!latestPatchNum || !relatedChanges || !change) {
       return [];
     }
 
     const connected: CommitId[] = [];
-    const changeRevision = getRevisionKey(change, patchNum);
+    const changeRevision = getRevisionKey(change, latestPatchNum);
     const commits = relatedChanges.map(c => c.commit);
     let pos = commits.length - 1;
 
diff --git a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.ts b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.ts
index 3e90145..571b5b5 100644
--- a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.ts
@@ -30,7 +30,7 @@
   ChangeInfo,
   CommitId,
   NumericChangeId,
-  PatchSetNum,
+  PatchSetNumber,
   RelatedChangeAndCommitInfo,
   RelatedChangesInfo,
   SubmittedTogetherInfo,
@@ -192,7 +192,7 @@
 
     setup(() => {
       element.change = createParsedChange();
-      element.patchNum = 1 as PatchSetNum;
+      element.latestPatchNum = 1 as PatchSetNumber;
     });
 
     test('render', async () => {
@@ -378,7 +378,7 @@
     });
 
     test('request conflicts if open and mergeable', () => {
-      element.patchNum = 7 as PatchSetNum;
+      element.latestPatchNum = 7 as PatchSetNumber;
       element.change = {
         ...createParsedChange(),
         change_id: '123' as ChangeId,
@@ -390,7 +390,7 @@
     });
 
     test('does not request conflicts if closed and mergeable', () => {
-      element.patchNum = 7 as PatchSetNum;
+      element.latestPatchNum = 7 as PatchSetNumber;
       element.change = {
         ...createParsedChange(),
         change_id: '123' as ChangeId,
@@ -401,7 +401,7 @@
     });
 
     test('does not request conflicts if open and not mergeable', () => {
-      element.patchNum = 7 as PatchSetNum;
+      element.latestPatchNum = 7 as PatchSetNumber;
       element.change = {
         ...createParsedChange(),
         change_id: '123' as ChangeId,
@@ -413,7 +413,7 @@
     });
 
     test('doesnt request conflicts if closed and not mergeable', () => {
-      element.patchNum = 7 as PatchSetNum;
+      element.latestPatchNum = 7 as PatchSetNumber;
       element.change = {
         ...createParsedChange(),
         change_id: '123' as ChangeId,
@@ -438,7 +438,7 @@
         '9e593f6dcc2c0785a2ad2c895a34ad2aa9a0d8b6': createRevision(4),
       },
     };
-    let patchNum = 7 as PatchSetNum;
+    let latestPatchNum = 7 as PatchSetNumber;
     let relatedChanges: RelatedChangeAndCommitInfo[] = [
       {
         ...createRelatedChangeAndCommitInfo(),
@@ -528,7 +528,7 @@
 
     let connectedChanges = element._computeConnectedRevisions(
       change,
-      patchNum,
+      latestPatchNum,
       relatedChanges
     );
     assert.deepEqual(connectedChanges, [
@@ -541,7 +541,7 @@
       '2cebeedfb1e80f4b872d0a13ade529e70652c0c8',
     ]);
 
-    patchNum = 4 as PatchSetNum;
+    latestPatchNum = 4 as PatchSetNumber;
     relatedChanges = [
       {
         ...createRelatedChangeAndCommitInfo(),
@@ -631,7 +631,7 @@
 
     connectedChanges = element._computeConnectedRevisions(
       change,
-      patchNum,
+      latestPatchNum,
       relatedChanges
     );
     assert.deepEqual(connectedChanges, [