| import { PluginApi } from '@gerritcodereview/typescript-api/plugin'; | |
| import { AuthInfo } from '@gerritcodereview/typescript-api/rest-api'; | |
| import { CSSResult, LitElement, css, html } from "lit"; | |
| import { customElement, property, query, state } from 'lit/decorators.js'; | |
| @customElement('gr-github-oauth-progress') | |
| export class GrGitHubOAuthProgress extends LitElement { | |
| @query('#gitHubOAuthProgress') | |
| gitHubOAuthProgress?: HTMLDialogElement; | |
| @property() plugin!: PluginApi; | |
| @state() authInfo?: AuthInfo | |
| @state() loggedIn?: boolean | |
| override connectedCallback() { | |
| super.connectedCallback(); | |
| const restApi = this.plugin.restApi(); | |
| if (!this.authInfo) { | |
| restApi.getConfig().then(config => this.authInfo = config?.auth); | |
| } | |
| restApi.getLoggedIn().then(loggedIn => this.loggedIn = loggedIn); | |
| } | |
| static override get styles() { | |
| return [ | |
| window.Gerrit.styles.spinner as CSSResult, | |
| window.Gerrit.styles.font as CSSResult, | |
| window.Gerrit.styles.modal as CSSResult, | |
| css` | |
| .loginButton { | |
| --gr-button-text-color: var(--header-text-color); | |
| color: var(--header-text-color); | |
| padding: var(--spacing-m) var(--spacing-l); | |
| } | |
| .loadingContainer { | |
| display: flex; | |
| gap: var(--spacing-s); | |
| align-items: baseline; | |
| padding: var(--spacing-xxl); | |
| } | |
| .loadingSpin { | |
| vertical-align: top; | |
| position: relative; | |
| top: 3px; | |
| } | |
| `]; | |
| } | |
| override render() { | |
| if (!this.authInfo || this.loggedIn !== false) { | |
| return | |
| } | |
| return html` | |
| <a class="loginButton" href=${this.authInfo.login_url} @click=${this.showModal}> | |
| ${this.authInfo.login_text} | |
| </a> | |
| <dialog id="gitHubOAuthProgress"> | |
| <div class="loadingContainer"> | |
| <span class="loadingSpin"></span> | |
| <span class="loadingText">Waiting for GitHub API response ...</span> | |
| </div> | |
| </dialog> | |
| ` | |
| } | |
| private showModal() { | |
| setTimeout(() => this.gitHubOAuthProgress?.showModal(), 550); | |
| } | |
| } |