import { LitElement, html, CSSResultArray, css, TemplateResult, property, customElement, } from "lit-element"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-item/paper-item-body"; import { HassEntity } from "home-assistant-js-websocket"; import "../../../layouts/hass-tabs-subpage"; import { computeRTL } from "../../../common/util/compute_rtl"; import "../../../components/ha-card"; import "../../../components/ha-fab"; import "../ha-config-section"; import { computeStateName } from "../../../common/entity/compute_state_name"; import { haStyle } from "../../../resources/styles"; import { HomeAssistant, Route } from "../../../types"; import { triggerScript } from "../../../data/script"; import { showToast } from "../../../util/toast"; import { configSections } from "../ha-panel-config"; @customElement("ha-script-picker") class HaScriptPicker extends LitElement { @property() public hass!: HomeAssistant; @property() public scripts!: HassEntity[]; @property() public isWide!: boolean; @property() public narrow!: boolean; @property() public route!: Route; protected render(): TemplateResult { return html` ${this.hass.localize("ui.panel.config.script.picker.header")} ${this.hass.localize("ui.panel.config.script.picker.introduction")} ${this.hass.localize( "ui.panel.config.script.picker.learn_more" )} ${this.scripts.length === 0 ? html` ${this.hass.localize( "ui.panel.config.script.picker.no_scripts" )} ` : this.scripts.map( (script) => html` ${computeStateName(script)} ` )} `; } private async _runScript(ev) { const script = ev.currentTarget.script as HassEntity; await triggerScript(this.hass, script.entity_id); showToast(this, { message: this.hass.localize( "ui.notification_toast.triggered", "name", computeStateName(script) ), }); } static get styles(): CSSResultArray { return [ haStyle, css` :host { display: block; } ha-card { padding-bottom: 8px; margin-bottom: 56px; } .script { display: flex; flex-direction: horizontal; align-items: center; padding: 0 8px; margin: 4px 0; } .script > *:first-child { margin-right: 8px; } .script a[href], paper-icon-button { color: var(--primary-text-color); } .actions { display: flex; } ha-fab { position: fixed; bottom: 16px; right: 16px; z-index: 1; } ha-fab[is-wide] { bottom: 24px; right: 24px; } ha-fab[narrow] { bottom: 84px; } ha-fab[rtl] { right: auto; left: 16px; } ha-fab[rtl][is-wide] { bottom: 24px; right: auto; left: 24px; } a { color: var(--primary-color); } `, ]; } } declare global { interface HTMLElementTagNameMap { "ha-script-picker": HaScriptPicker; } }
${this.hass.localize( "ui.panel.config.script.picker.learn_more" )}
${this.hass.localize( "ui.panel.config.script.picker.no_scripts" )}