From af0246cd27b414a78eeeb5e82cfab67dc9a216d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Sat, 12 Sep 2020 21:05:01 +0200 Subject: [PATCH] convert ha-refresh-tokens-card (#6962) --- .../ha-long-lived-access-tokens-card.ts | 18 ++- src/panels/profile/ha-refresh-tokens-card.js | 126 --------------- src/panels/profile/ha-refresh-tokens-card.ts | 150 ++++++++++++++++++ 3 files changed, 161 insertions(+), 133 deletions(-) delete mode 100644 src/panels/profile/ha-refresh-tokens-card.js create mode 100644 src/panels/profile/ha-refresh-tokens-card.ts diff --git a/src/panels/profile/ha-long-lived-access-tokens-card.ts b/src/panels/profile/ha-long-lived-access-tokens-card.ts index 8c8eb36d96..a12c1a7a20 100644 --- a/src/panels/profile/ha-long-lived-access-tokens-card.ts +++ b/src/panels/profile/ha-long-lived-access-tokens-card.ts @@ -1,4 +1,5 @@ -import "@material/mwc-button"; +import "@material/mwc-button/mwc-button"; +import { mdiDelete } from "@mdi/js"; import { css, CSSResultArray, @@ -12,8 +13,8 @@ import memoizeOne from "memoize-one"; import relativeTime from "../../common/datetime/relative_time"; import { fireEvent } from "../../common/dom/fire_event"; import "../../components/ha-card"; -import "../../components/ha-icon-button"; import "../../components/ha-settings-row"; +import "../../components/ha-svg-icon"; import { RefreshToken } from "../../data/refresh_token"; import { showAlertDialog, @@ -79,11 +80,14 @@ class HaLongLivedTokens extends LitElement { ) )} - + > + + ` )} @@ -178,8 +182,8 @@ class HaLongLivedTokens extends LitElement { a { color: var(--primary-color); } - ha-icon-button { - color: var(--primary-text-color); + mwc-button { + --mdc-theme-primary: var(--primary-color); } `, ]; diff --git a/src/panels/profile/ha-refresh-tokens-card.js b/src/panels/profile/ha-refresh-tokens-card.js deleted file mode 100644 index 9c4db68a7a..0000000000 --- a/src/panels/profile/ha-refresh-tokens-card.js +++ /dev/null @@ -1,126 +0,0 @@ -import "@polymer/paper-tooltip/paper-tooltip"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import { formatDateTime } from "../../common/datetime/format_date_time"; -import "../../components/ha-card"; -import "../../components/ha-icon-button"; -import "../../components/ha-settings-row"; -import { - showAlertDialog, - showConfirmationDialog, -} from "../../dialogs/generic/show-dialog-box"; -import { EventsMixin } from "../../mixins/events-mixin"; -import LocalizeMixin from "../../mixins/localize-mixin"; - -/* - * @appliesMixin EventsMixin - * @appliesMixin LocalizeMixin - */ -class HaRefreshTokens extends LocalizeMixin(EventsMixin(PolymerElement)) { - static get template() { - return html` - - -
- [[localize('ui.panel.profile.refresh_tokens.description')]] -
- -
- `; - } - - static get properties() { - return { - hass: Object, - refreshTokens: Array, - }; - } - - _computeTokens(refreshTokens) { - return refreshTokens.filter((tkn) => tkn.type === "normal").reverse(); - } - - _formatTitle(clientId) { - return this.localize( - "ui.panel.profile.refresh_tokens.token_title", - "clientId", - clientId - ); - } - - _formatCreatedAt(created) { - return this.localize( - "ui.panel.profile.refresh_tokens.created_at", - "date", - formatDateTime(new Date(created), this.hass.language) - ); - } - - _formatLastUsed(item) { - return item.last_used_at - ? this.localize( - "ui.panel.profile.refresh_tokens.last_used", - "date", - formatDateTime(new Date(item.last_used_at), this.hass.language), - "location", - item.last_used_ip - ) - : this.localize("ui.panel.profile.refresh_tokens.not_used"); - } - - async _handleDelete(ev) { - const token = ev.model.item; - if ( - !(await showConfirmationDialog(this, { - text: this.localize( - "ui.panel.profile.refresh_tokens.confirm_delete", - "name", - token.client_id - ), - })) - ) { - return; - } - try { - await this.hass.callWS({ - type: "auth/delete_refresh_token", - refresh_token_id: token.id, - }); - this.fire("hass-refresh-tokens"); - } catch (err) { - // eslint-disable-next-line - console.error(err); - showAlertDialog(this, { - text: this.localize("ui.panel.profile.refresh_tokens.delete_failed"), - }); - } - } -} - -customElements.define("ha-refresh-tokens-card", HaRefreshTokens); diff --git a/src/panels/profile/ha-refresh-tokens-card.ts b/src/panels/profile/ha-refresh-tokens-card.ts new file mode 100644 index 0000000000..fb8ab60587 --- /dev/null +++ b/src/panels/profile/ha-refresh-tokens-card.ts @@ -0,0 +1,150 @@ +import "@material/mwc-button/mwc-button"; +import { mdiDelete } from "@mdi/js"; +import "@polymer/paper-tooltip/paper-tooltip"; +import { + css, + CSSResultArray, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import memoizeOne from "memoize-one"; +import relativeTime from "../../common/datetime/relative_time"; +import { fireEvent } from "../../common/dom/fire_event"; +import "../../components/ha-card"; +import "../../components/ha-settings-row"; +import "../../components/ha-svg-icon"; +import { RefreshToken } from "../../data/refresh_token"; +import { + showAlertDialog, + showConfirmationDialog, +} from "../../dialogs/generic/show-dialog-box"; +import { haStyle } from "../../resources/styles"; +import { HomeAssistant } from "../../types"; + +@customElement("ha-refresh-tokens-card") +class HaRefreshTokens extends LitElement { + @property({ attribute: false }) public hass!: HomeAssistant; + + @property({ attribute: false }) public refreshTokens?: RefreshToken[]; + + private _refreshTokens = memoizeOne( + (refreshTokens: RefreshToken[]): RefreshToken[] => + refreshTokens?.filter((token) => token.type === "normal").reverse() + ); + + protected render(): TemplateResult { + const refreshTokens = this._refreshTokens(this.refreshTokens!); + return html` +
+ ${this.hass.localize("ui.panel.profile.refresh_tokens.description")} + ${refreshTokens?.length + ? refreshTokens!.map( + (token) => html` + ${this.hass.localize( + "ui.panel.profile.refresh_tokens.token_title", + "clientId", + token.client_id + )} + +
+ ${this.hass.localize( + "ui.panel.profile.refresh_tokens.created_at", + "date", + relativeTime(new Date(token.created_at), this.hass.localize) + )} +
+
+ ${token.last_used_at + ? this.hass.localize( + "ui.panel.profile.refresh_tokens.last_used", + "date", + relativeTime( + new Date(token.last_used_at), + this.hass.localize + ), + "location", + token.last_used_ip + ) + : this.hass.localize( + "ui.panel.profile.refresh_tokens.not_used" + )} +
+
+ ${token.is_current + ? html` + ${this.hass.localize( + "ui.panel.profile.refresh_tokens.current_token_tooltip" + )} + ` + : ""} + + + +
+
` + ) + : ""} +
+
`; + } + + private async _deleteToken(ev: Event): Promise { + const token = (ev.currentTarget as any).token; + if ( + !(await showConfirmationDialog(this, { + text: this.hass.localize( + "ui.panel.profile.refresh_tokens.confirm_delete", + "name", + token.client_name + ), + })) + ) { + return; + } + try { + await this.hass.callWS({ + type: "auth/delete_refresh_token", + refresh_token_id: token.id, + }); + fireEvent(this, "hass-refresh-tokens"); + } catch (err) { + await showAlertDialog(this, { + title: this.hass.localize( + "ui.panel.profile.refresh_tokens.delete_failed" + ), + text: err.message, + }); + } + } + + static get styles(): CSSResultArray { + return [ + haStyle, + css` + ha-settings-row { + padding: 0; + } + mwc-button { + --mdc-theme-primary: var(--primary-color); + } + `, + ]; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-refresh-tokens-card": HaRefreshTokens; + } +}