| /** |
| * @license |
| * Copyright 2020 Google LLC |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| import '../gr-avatar/gr-avatar'; |
| import '../gr-button/gr-button'; |
| import '../gr-icon/gr-icon'; |
| import '../../plugins/gr-endpoint-decorator/gr-endpoint-decorator'; |
| import '../../plugins/gr-endpoint-param/gr-endpoint-param'; |
| import {customElement, property} from 'lit/decorators.js'; |
| import {AccountInfo, ChangeInfo} from '../../../types/common'; |
| import {html, LitElement} from 'lit'; |
| import {HovercardMixin} from '../../../mixins/hovercard-mixin/hovercard-mixin'; |
| import {when} from 'lit/directives/when.js'; |
| import './gr-hovercard-account-contents'; |
| |
| // This avoids JSC_DYNAMIC_EXTENDS_WITHOUT_JSDOC closure compiler error. |
| const base = HovercardMixin(LitElement); |
| |
| @customElement('gr-hovercard-account') |
| export class GrHovercardAccount extends base { |
| @property({type: Object}) |
| account!: AccountInfo; |
| |
| /** |
| * Optional ChangeInfo object, typically comes from the change page or |
| * from a row in a list of search results. This is needed for some change |
| * related features like adding the user as a reviewer. |
| */ |
| @property({type: Object}) |
| change?: ChangeInfo; |
| |
| /** |
| * Should attention set related features be shown in the component? Note |
| * that the information whether the user is in the attention set or not is |
| * part of the ChangeInfo object in the change property. |
| */ |
| @property({type: Boolean}) |
| highlightAttention = false; |
| |
| override render() { |
| return html` |
| <div id="container" role="tooltip" tabindex="-1"> |
| ${when( |
| this._isShowing, |
| () => |
| html`<gr-hovercard-account-contents |
| .account=${this.account} |
| .change=${this.change} |
| .highlightAttention=${this.highlightAttention} |
| @link-clicked=${this.forceHide} |
| @action-taken=${this.mouseHide} |
| @attention-set-updated=${this.redirectEventToTarget} |
| @hide-alert=${this.redirectEventToTarget} |
| @show-alert=${this.redirectEventToTarget} |
| @reload=${this.redirectEventToTarget} |
| ></gr-hovercard-account-contents>` |
| )} |
| </div> |
| `; |
| } |
| |
| private redirectEventToTarget(e: CustomEvent<unknown>) { |
| this.dispatchEventThroughTarget(e.type, e.detail); |
| } |
| } |
| |
| declare global { |
| interface HTMLElementTagNameMap { |
| 'gr-hovercard-account': GrHovercardAccount; |
| } |
| } |