diff --git a/hassio/src/addon-view/hassio-addon-info.js b/hassio/src/addon-view/hassio-addon-info.js index 3a987088af..80db47a5ea 100644 --- a/hassio/src/addon-view/hassio-addon-info.js +++ b/hassio/src/addon-view/hassio-addon-info.js @@ -12,6 +12,7 @@ import "../../../src/resources/ha-style"; import EventsMixin from "../../../src/mixins/events-mixin"; import { navigate } from "../../../src/common/navigate"; +import { showHassioMarkdownDialog } from "../dialogs/markdown/show-dialog-hassio-markdown"; import "../components/hassio-card-content"; const PERMIS_DESC = { @@ -517,7 +518,7 @@ class HassioAddonInfo extends EventsMixin(PolymerElement) { showMoreInfo(e) { const id = e.target.getAttribute("id"); - this.fire("hassio-markdown-dialog", { + showHassioMarkdownDialog(this, { title: PERMIS_DESC[id].title, content: PERMIS_DESC[id].description, }); @@ -528,7 +529,7 @@ class HassioAddonInfo extends EventsMixin(PolymerElement) { .callApi("get", `hassio/addons/${this.addonSlug}/changelog`) .then((resp) => resp, () => "Error getting changelog") .then((content) => { - this.fire("hassio-markdown-dialog", { + showHassioMarkdownDialog(this, { title: "Changelog", content: content, }); diff --git a/hassio/src/addon-view/hassio-addon-view.js b/hassio/src/addon-view/hassio-addon-view.js index b4f1505b4d..ae4b1b6b29 100644 --- a/hassio/src/addon-view/hassio-addon-view.js +++ b/hassio/src/addon-view/hassio-addon-view.js @@ -1,14 +1,11 @@ import "@polymer/app-layout/app-header-layout/app-header-layout"; import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-toolbar/app-toolbar"; -import "@polymer/app-route/app-route"; import "@polymer/paper-icon-button/paper-icon-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; -import "../../../src/components/ha-menu-button"; import "../../../src/resources/ha-style"; -import "../hassio-markdown-dialog"; import "./hassio-addon-audio"; import "./hassio-addon-config"; import "./hassio-addon-info"; @@ -51,16 +48,9 @@ class HassioAddonView extends PolymerElement { } } - - - - `; } static get properties() { return { hass: Object, - route: Object, - routeData: { + route: { type: Object, observer: "routeDataChanged", }, - routeMatches: Boolean, - addon: Object, - - markdownTitle: String, - markdownContent: { + addonSlug: { type: String, - value: "", + computed: "_computeSlug(route)", }, + addon: Object, }; } ready() { super.ready(); this.addEventListener("hass-api-called", (ev) => this.apiCalled(ev)); - this.addEventListener("hassio-markdown-dialog", (ev) => - this.openMarkdown(ev) - ); } apiCalled(ev) { @@ -147,13 +125,13 @@ class HassioAddonView extends PolymerElement { if (path.substr(path.lastIndexOf("/") + 1) === "uninstall") { this.backTapped(); } else { - this.routeDataChanged(this.routeData); + this.routeDataChanged(this.route); } } routeDataChanged(routeData) { - if (!this.routeMatches || !routeData || !routeData.slug) return; - this.hass.callApi("get", `hassio/addons/${routeData.slug}/info`).then( + const addon = routeData.path.substr(1); + this.hass.callApi("get", `hassio/addons/${addon}/info`).then( (info) => { this.addon = info.data; }, @@ -167,12 +145,8 @@ class HassioAddonView extends PolymerElement { history.back(); } - openMarkdown(ev) { - this.setProperties({ - markdownTitle: ev.detail.title, - markdownContent: ev.detail.content, - }); - this.shadowRoot.querySelector("hassio-markdown-dialog").openDialog(); + _computeSlug(route) { + return route.path.substr(1); } } diff --git a/hassio/src/hassio-markdown-dialog.js b/hassio/src/dialogs/markdown/dialog-hassio-markdown.ts similarity index 79% rename from hassio/src/hassio-markdown-dialog.js rename to hassio/src/dialogs/markdown/dialog-hassio-markdown.ts index be7f2d000a..87eb12e765 100644 --- a/hassio/src/hassio-markdown-dialog.js +++ b/hassio/src/dialogs/markdown/dialog-hassio-markdown.ts @@ -4,10 +4,13 @@ import "@polymer/paper-icon-button/paper-icon-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; -import "../../src/components/ha-markdown"; -import "../../src/resources/ha-style"; -import "../../src/components/dialog/ha-paper-dialog"; +import "../../../../src/components/ha-markdown"; +import "../../../../src/resources/ha-style"; +import "../../../../src/components/dialog/ha-paper-dialog"; +import { customElement } from "lit-element"; +import { PaperDialogElement } from "@polymer/paper-dialog"; +@customElement("dialog-hassio-markdown") class HassioMarkdownDialog extends PolymerElement { static get template() { return html` @@ -72,8 +75,14 @@ class HassioMarkdownDialog extends PolymerElement { }; } - openDialog() { - this.$.dialog.open(); + public showDialog(params) { + this.setProperties(params); + (this.$.dialog as PaperDialogElement).open(); + } +} + +declare global { + interface HTMLElementTagNameMap { + "dialog-hassio-markdown": HassioMarkdownDialog; } } -customElements.define("hassio-markdown-dialog", HassioMarkdownDialog); diff --git a/hassio/src/dialogs/markdown/show-dialog-hassio-markdown.ts b/hassio/src/dialogs/markdown/show-dialog-hassio-markdown.ts new file mode 100644 index 0000000000..c3e9713689 --- /dev/null +++ b/hassio/src/dialogs/markdown/show-dialog-hassio-markdown.ts @@ -0,0 +1,18 @@ +import { fireEvent } from "../../../../src/common/dom/fire_event"; + +export interface HassioMarkdownDialogParams { + title: string; + content: string; +} + +export const showHassioMarkdownDialog = ( + element: HTMLElement, + dialogParams: HassioMarkdownDialogParams +): void => { + fireEvent(element, "show-dialog", { + dialogTag: "dialog-hassio-markdown", + dialogImport: () => + import(/* webpackChunkName: "dialog-hassio-markdown" */ "./dialog-hassio-markdown"), + dialogParams, + }); +}; diff --git a/hassio/src/snapshots/hassio-snapshot.js b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts similarity index 73% rename from hassio/src/snapshots/hassio-snapshot.js rename to hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts index 6ade909c43..a784ec21a4 100644 --- a/hassio/src/snapshots/hassio-snapshot.js +++ b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts @@ -6,12 +6,24 @@ import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; -import { getSignedPath } from "../../../src/auth/data"; +import { getSignedPath } from "../../../../src/auth/data"; -import "../../../src/resources/ha-style"; -import "../../../src/components/dialog/ha-paper-dialog"; +import "../../../../src/resources/ha-style"; +import "../../../../src/components/dialog/ha-paper-dialog"; +import { customElement } from "lit-element"; +import { HomeAssistant } from "../../../../src/types"; +import { PaperDialogElement } from "@polymer/paper-dialog"; +import { HassioSnapshotDialogParams } from "./show-dialog-hassio-snapshot"; + +@customElement("dialog-hassio-snapshot") +class HassioSnapshotDialog extends PolymerElement { + public hass!: HomeAssistant; + protected error?: string; + private snapshot?: any; + private dialogParams?: HassioSnapshotDialogParams; + private restoreHass!: boolean; + private snapshotPassword!: string; -class HassioSnapshot extends PolymerElement { static get template() { return html`