Link account chips to owner search rather than user dashboard

Before user dashboards were supported in PG, account links navigated to
an owner query. When user dashboard support was added, account links
started redirecting to the user's dashboard (or the owner query if the
user was logged out).

With this change, account links always link to the owner query, but the
user header that appears over the results shows a link to that user's
dashboard if the viewer is logged in.

Bug: Issue 8237
Change-Id: If0edfb886755c9ae0bb82d990169d04b96bcd57e
diff --git a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.html b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.html
index 9a7ca33..d3d0736 100644
--- a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.html
+++ b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.html
@@ -15,6 +15,7 @@
 -->
 
 <link rel="import" href="../../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../core/gr-navigation/gr-navigation.html">
 <link rel="import" href="../../shared/gr-avatar/gr-avatar.html">
 <link rel="import" href="../../shared/gr-date-formatter/gr-date-formatter.html">
 <link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
@@ -26,35 +27,36 @@
       :host {
         display: block;
         height: 9em;
-        position: relative;
         width: 100%;
       }
       gr-avatar {
+        display: inline-block;
         height: 7em;
         left: 1em;
-        position: absolute;
+        margin: 1em;
         top: 1em;
         width: 7em;
       }
       .info {
-        left: 9em;
-        position: absolute;
-        top: 1em;
+        display: inline-block;
+        padding: 1em;
+        vertical-align: top;
       }
       .info > div > span {
         display: inline-block;
         font-weight: bold;
         text-align: right;
-        width: 6em;
+        width: 4em;
       }
       .name {
-        margin-bottom: .25em;
+        display: inline-block;
       }
       .name hr {
         width: 100%;
       }
       .status.hide,
-      .name.hide {
+      .name.hide,
+      .dashboardLink.hide {
         display: none;
       }
     </style>
@@ -63,10 +65,10 @@
         image-size="100"
         aria-label="Account avatar"></gr-avatar>
     <div class="info">
-      <h1 class$="name">
+      <h1 class="name">
         [[_computeDetail(_accountDetails, 'name')]]
-        <hr/>
       </h1>
+      <hr/>
       <div class$="status [[_computeStatusClass(_accountDetails)]]">
         <span>Status:</span> [[_status]]
       </div>
@@ -82,6 +84,11 @@
         </gr-date-formatter>
       </div>
     </div>
+    <div class="info">
+      <div class$="[[_computeDashboardLinkClass(showDashboardLink, loggedIn)]]">
+        <a href$="[[_computeDashboardUrl(_accountDetails)]]">View dashboard</a>
+      </div>
+    </div>
     <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
   </template>
   <script src="gr-user-header.js"></script>
diff --git a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.js b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.js
index dd3512a..d09e865 100644
--- a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.js
+++ b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.js
@@ -23,6 +23,16 @@
         observer: '_accountChanged',
       },
 
+      showDashboardLink: {
+        type: Boolean,
+        value: false,
+      },
+
+      loggedIn: {
+        type: Boolean,
+        value: false,
+      },
+
       /**
        * @type {?{name: ?, email: ?, registered_on: ?}}
        */
@@ -64,5 +74,15 @@
     _computeStatusClass(accountDetails) {
       return this._computeDetail(accountDetails, 'status') ? '' : 'hide';
     },
+
+    _computeDashboardUrl(accountDetails) {
+      if (!accountDetails || !accountDetails.email) { return null; }
+      return Gerrit.Nav.getUrlForUserDashboard(accountDetails.email);
+    },
+
+    _computeDashboardLinkClass(showDashboardLink, loggedIn) {
+      return showDashboardLink && loggedIn ?
+          'dashboardLink' : 'dashboardLink hide';
+    },
   });
 })();
diff --git a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_test.html b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_test.html
index ab3b249..4ae8db4 100644
--- a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_test.html
+++ b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_test.html
@@ -68,5 +68,12 @@
         });
       });
     });
+
+    test('_computeDashboardLinkClass', () => {
+      assert.include(element._computeDashboardLinkClass(false, false), 'hide');
+      assert.include(element._computeDashboardLinkClass(true, false), 'hide');
+      assert.include(element._computeDashboardLinkClass(false, true), 'hide');
+      assert.notInclude(element._computeDashboardLinkClass(true, true), 'hide');
+    });
   });
 </script>