Allow account hovercard without change data
This restores the ability of plugins like code-owners to render account
chips with working hovercard even when they don't have change data,
which was broken by Change 339421.
https://imgur.com/a/x5ImHhr
Release-Notes: skip
Google-Bug-Id: b/244529582
Change-Id: I08a6e22676ec9162d6754a134e909433c555095e
diff --git a/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account.ts b/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account.ts
index 5a64b1d..048a699 100644
--- a/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account.ts
+++ b/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account.ts
@@ -157,8 +157,7 @@
}
private renderContent() {
- if (!this._isShowing || !this.change) return;
- const voteableText = computeVoteableText(this.change, this.account);
+ if (!this._isShowing) return;
return html`
<div class="top">
<div class="avatar">
@@ -170,7 +169,16 @@
</div>
</div>
${this.renderAccountStatusPlugins()} ${this.renderAccountStatus()}
- ${this.renderLinks()}
+ ${this.renderLinks()} ${this.renderChangeRelatedInfoAndActions()}
+ `;
+ }
+
+ private renderChangeRelatedInfoAndActions() {
+ if (this.change === undefined) {
+ return;
+ }
+ const voteableText = computeVoteableText(this.change, this.account);
+ return html`
${voteableText
? html`
<div class="voteable">
diff --git a/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_test.ts b/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_test.ts
index 20e9675..88c4081 100644
--- a/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_test.ts
+++ b/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_test.ts
@@ -95,6 +95,45 @@
);
});
+ test('renders without change data', async () => {
+ const elementWithoutChange = await fixture<GrHovercardAccount>(
+ html`<gr-hovercard-account class="hovered" .account=${ACCOUNT}>
+ </gr-hovercard-account>`
+ );
+ await elementWithoutChange.show({});
+ assert.shadowDom.equal(
+ elementWithoutChange,
+ /* HTML */ `
+ <div id="container" role="tooltip" tabindex="-1">
+ <div class="top">
+ <div class="avatar">
+ <gr-avatar hidden="" imagesize="56"> </gr-avatar>
+ </div>
+ <div class="account">
+ <h3 class="heading-3 name">Kermit The Frog</h3>
+ <div class="email">kermit@gmail.com</div>
+ </div>
+ </div>
+ <gr-endpoint-decorator name="hovercard-status">
+ <gr-endpoint-param name="account"> </gr-endpoint-param>
+ </gr-endpoint-decorator>
+ <div class="status">
+ <span class="title"> About me: </span>
+ <span class="value"> I am a frog </span>
+ </div>
+ <div class="links">
+ <gr-icon class="linkIcon" icon="link"> </gr-icon>
+ <a href=""> Changes </a>
+ ยท
+ <a href=""> Dashboard </a>
+ </div>
+ </div>
+ `
+ );
+ elementWithoutChange.mouseHide(new MouseEvent('click'));
+ await elementWithoutChange.updateComplete;
+ });
+
test('account name is shown', () => {
const name = queryAndAssert<HTMLHeadingElement>(element, '.name');
assert.equal(name.innerText, 'Kermit The Frog');