Add View Diff button to comment context

Add a view diff button to comment context that navigates to the
original comment in the diff view.

Screenshot: https://imgur.com/a/RfI41La
Change-Id: I8cc162f01ac7428726f59907434aab33ec9c1e63
diff --git a/plugins/singleusergroup b/plugins/singleusergroup
index 3548ec8..09623b9 160000
--- a/plugins/singleusergroup
+++ b/plugins/singleusergroup
@@ -1 +1 @@
-Subproject commit 3548ec83c0c271a8768a6b03b0c28711521ed6cf
+Subproject commit 09623b9432d360060f88ae48fb3386e374ca29c0
diff --git a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
index ec7be4a..13ce69a 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
@@ -60,6 +60,7 @@
 import {KnownExperimentId} from '../../../services/flags/flags';
 import {DiffInfo, DiffPreferencesInfo} from '../../../types/diff';
 import {RenderPreferences} from '../../../api/diff';
+import {check, checkProperty} from '../../../utils/common-util';
 
 const UNRESOLVED_EXPAND_COUNT = 5;
 const NEWLINE_PATTERN = /\n/g;
@@ -321,6 +322,17 @@
     return this.comments?.[0]?.range;
   }
 
+  _getUrlForViewDiff(comments: UIComment[]) {
+    checkProperty(!!this.changeNum, 'changeNum');
+    checkProperty(!!this.projectName, 'projectName');
+    check(comments.length > 0, 'comment not found');
+    return GerritNav.getUrlForComment(
+      this.changeNum,
+      this.projectName,
+      comments[0].id!
+    );
+  }
+
   _getDiffUrlForComment(
     projectName?: RepoName,
     changeNum?: NumericChangeId,
diff --git a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts
index dfb0d45..76bbd67 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts
@@ -29,9 +29,6 @@
        * and hides our diff behind context control buttons.
        *  */
       --dark-add-highlight-color: white;
-      --diff-container-styles: {
-        border: 1px solid var(--border-color);
-      }
     }
     gr-button {
       margin-left: var(--spacing-m);
@@ -89,8 +86,15 @@
     .fileName {
       padding: var(--spacing-m) var(--spacing-s) var(--spacing-m);
     }
-    gr-diff {
+    .diff-container {
       margin-left: var(--spacing-l);
+      border: 1px solid var(--border-color);
+    }
+    .view-diff-container {
+      text-align: end;
+    }
+    .view-diff-button {
+      margin: var(--spacing-m);
     }
   </style>
 
@@ -184,16 +188,25 @@
       </div>
     </div>
     <template is="dom-if" if="[[_shouldShowCommentContext(_diff)]]">
-      <gr-diff
-        id="diff"
-        change-num="[[changeNum]]"
-        diff="[[_diff]]"
-        path="[[path]]"
-        prefs="[[_prefs]]"
-        render-prefs="[[_renderPrefs]]"
-        highlight-range="[[getHighlightRange(comments)]]"
-      >
-      </gr-diff>
+      <div class="diff-container">
+        <gr-diff
+          id="diff"
+          change-num="[[changeNum]]"
+          diff="[[_diff]]"
+          path="[[path]]"
+          prefs="[[_prefs]]"
+          render-prefs="[[_renderPrefs]]"
+          highlight-range="[[getHighlightRange(comments)]]"
+        >
+        </gr-diff>
+        <div class="view-diff-container">
+          <a href="[[_getUrlForViewDiff(comments)]]">
+            <gr-button link class="view-diff-button" on-click="_handleViewDiff">
+              View Diff
+            </gr-button>
+          </a>
+        </div>
+      </div>
     </template>
   </div>
 `;