diff --git a/src/panels/lovelace/cards/hui-entities-card.ts b/src/panels/lovelace/cards/hui-entities-card.ts index 32cc353d7d..c443764501 100644 --- a/src/panels/lovelace/cards/hui-entities-card.ts +++ b/src/panels/lovelace/cards/hui-entities-card.ts @@ -69,11 +69,6 @@ class HuiEntitiesCard extends hassLocalizeLitMixin(LitElement) !entity.action_name) ) { throw new Error("Missing required property when type is call-service"); - } else if ( - entity.type === "weblink" && - (!entity.name || !entity.icon || !entity.url) - ) { - throw new Error("Missing required property when type is weblink"); } } diff --git a/src/panels/lovelace/common/create-row-element.js b/src/panels/lovelace/common/create-row-element.js index af3d91269f..28931e06de 100644 --- a/src/panels/lovelace/common/create-row-element.js +++ b/src/panels/lovelace/common/create-row-element.js @@ -17,7 +17,7 @@ import "../entity-rows/hui-toggle-entity-row.js"; import "../special-rows/hui-call-service-row.js"; import "../special-rows/hui-divider-row"; import "../special-rows/hui-section-row.js"; -import "../special-rows/hui-weblink-row.js"; +import "../special-rows/hui-weblink-row"; import createErrorCardConfig from "./create-error-card-config.js"; diff --git a/src/panels/lovelace/entity-rows/types.ts b/src/panels/lovelace/entity-rows/types.ts index f343d9c4e5..c4fcb7dc20 100644 --- a/src/panels/lovelace/entity-rows/types.ts +++ b/src/panels/lovelace/entity-rows/types.ts @@ -12,8 +12,8 @@ export interface SectionConfig { label: string; } export interface WeblinkConfig { - name: string; - icon: string; + name?: string; + icon?: string; url: string; } export type EntityRowConfig = diff --git a/src/panels/lovelace/special-rows/hui-weblink-row.js b/src/panels/lovelace/special-rows/hui-weblink-row.js deleted file mode 100644 index 91a6106df3..0000000000 --- a/src/panels/lovelace/special-rows/hui-weblink-row.js +++ /dev/null @@ -1,55 +0,0 @@ -import { html } from "@polymer/polymer/lib/utils/html-tag.js"; -import { PolymerElement } from "@polymer/polymer/polymer-element.js"; - -import "../../../components/ha-icon.js"; - -class HuiWeblinkRow extends PolymerElement { - static get template() { - return html` - ${this.styleTemplate} - - -
- [[_config.name]] -
-
- `; - } - - static get styleTemplate() { - return html` - - `; - } - - static get properties() { - return { - _config: Object, - }; - } - - setConfig(config) { - if (!config || !config.icon || !config.name || !config.url) { - throw new Error("Error in card configuration."); - } - this._config = config; - } -} -customElements.define("hui-weblink-row", HuiWeblinkRow); diff --git a/src/panels/lovelace/special-rows/hui-weblink-row.ts b/src/panels/lovelace/special-rows/hui-weblink-row.ts new file mode 100644 index 0000000000..e49690ece5 --- /dev/null +++ b/src/panels/lovelace/special-rows/hui-weblink-row.ts @@ -0,0 +1,75 @@ +import { html, LitElement } from "@polymer/lit-element"; +import { EntityRow, WeblinkConfig } from "../entity-rows/types"; +import { HomeAssistant } from "../../../types"; + +import "../../../components/ha-icon.js"; + +import { TemplateResult } from "lit-html"; + +class HuiWeblinkRow extends LitElement implements EntityRow { + public hass?: HomeAssistant; + private _config?: WeblinkConfig; + + static get properties() { + return { + _config: {}, + }; + } + + public setConfig(config: WeblinkConfig): void { + if (!config || !config.url) { + throw new Error("Invalid Configuration: 'url' required"); + } + + this._config = { + icon: "hass:link", + name: config.url, + ...config, + }; + } + + protected render(): TemplateResult { + if (!this._config) { + return html``; + } + + return html` + ${this.renderStyle()} + + +
${this._config.name}
+
+ `; + } + + private renderStyle(): TemplateResult { + return html` + + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "hui-weblink-row": HuiWeblinkRow; + } +} + +customElements.define("hui-weblink-row", HuiWeblinkRow);