Add listeners to template helper preview (#17833)

This commit is contained in:
Bram Kragten 2023-09-06 09:37:38 +02:00 committed by GitHub
parent 29aed5371c
commit c1c05f8d22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 83 additions and 9 deletions

View File

@ -6,7 +6,7 @@ export interface RenderTemplateResult {
listeners: TemplateListeners; listeners: TemplateListeners;
} }
interface TemplateListeners { export interface TemplateListeners {
all: boolean; all: boolean;
domains: string[]; domains: string[];
entities: string[]; entities: string[];
@ -18,6 +18,7 @@ export type TemplatePreview = TemplatePreviewState | TemplatePreviewError;
interface TemplatePreviewState { interface TemplatePreviewState {
state: string; state: string;
attributes: Record<string, any>; attributes: Record<string, any>;
listeners: TemplateListeners;
} }
interface TemplatePreviewError { interface TemplatePreviewError {

View File

@ -1,9 +1,10 @@
import { HassEntity, UnsubscribeFunc } from "home-assistant-js-websocket"; import { HassEntity, UnsubscribeFunc } from "home-assistant-js-websocket";
import { LitElement, html } from "lit"; import { LitElement, html, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import { debounce } from "../../../common/util/debounce"; import { debounce } from "../../../common/util/debounce";
import { FlowType } from "../../../data/data_entry_flow"; import { FlowType } from "../../../data/data_entry_flow";
import { import {
TemplateListeners,
TemplatePreview, TemplatePreview,
subscribePreviewTemplate, subscribePreviewTemplate,
} from "../../../data/ws-templates"; } from "../../../data/ws-templates";
@ -27,6 +28,8 @@ class FlowPreviewTemplate extends LitElement {
@state() private _preview?: HassEntity; @state() private _preview?: HassEntity;
@state() private _listeners?: TemplateListeners;
@state() private _error?: string; @state() private _error?: string;
private _unsub?: Promise<UnsubscribeFunc>; private _unsub?: Promise<UnsubscribeFunc>;
@ -50,9 +53,69 @@ class FlowPreviewTemplate extends LitElement {
return html`<ha-alert alert-type="error">${this._error}</ha-alert>`; return html`<ha-alert alert-type="error">${this._error}</ha-alert>`;
} }
return html`<entity-preview-row return html`<entity-preview-row
.hass=${this.hass} .hass=${this.hass}
.stateObj=${this._preview} .stateObj=${this._preview}
></entity-preview-row>`; ></entity-preview-row>
${this._listeners?.time
? html`
<p>
${this.hass.localize("ui.dialogs.helper_settings.template.time")}
</p>
`
: nothing}
${!this._listeners
? nothing
: this._listeners.all
? html`
<p class="all_listeners">
${this.hass.localize(
"ui.dialogs.helper_settings.template.all_listeners"
)}
</p>
`
: this._listeners.domains.length || this._listeners.entities.length
? html`
<p>
${this.hass.localize(
"ui.dialogs.helper_settings.template.listeners"
)}
</p>
<ul>
${this._listeners.domains
.sort()
.map(
(domain) => html`
<li>
<b
>${this.hass.localize(
"ui.dialogs.helper_settings.template.domain"
)}</b
>: ${domain}
</li>
`
)}
${this._listeners.entities
.sort()
.map(
(entity_id) => html`
<li>
<b
>${this.hass.localize(
"ui.dialogs.helper_settings.template.entity"
)}</b
>: ${entity_id}
</li>
`
)}
</ul>
`
: !this._listeners.time
? html`<span class="all_listeners">
${this.hass.localize(
"ui.dialogs.helper_settings.template.no_listeners"
)}
</span>`
: nothing} `;
} }
private _setPreview = (preview: TemplatePreview) => { private _setPreview = (preview: TemplatePreview) => {
@ -62,13 +125,15 @@ class FlowPreviewTemplate extends LitElement {
return; return;
} }
this._error = undefined; this._error = undefined;
this._listeners = preview.listeners;
const now = new Date().toISOString(); const now = new Date().toISOString();
this._preview = { this._preview = {
entity_id: `${this.stepId}.flow_preview`, entity_id: `${this.stepId}.flow_preview`,
last_changed: now, last_changed: now,
last_updated: now, last_updated: now,
context: { id: "", parent_id: null, user_id: null }, context: { id: "", parent_id: null, user_id: null },
...preview, attributes: preview.attributes,
state: preview.state,
}; };
}; };

View File

@ -180,9 +180,9 @@ class HaPanelDevTemplate extends LitElement {
)} )}
</p> </p>
` `
: ""} : nothing}
${!this._templateResult?.listeners ${!this._templateResult?.listeners
? "" ? nothing
: this._templateResult.listeners.all : this._templateResult.listeners.all
? html` ? html`
<p class="all_listeners"> <p class="all_listeners">
@ -229,7 +229,7 @@ class HaPanelDevTemplate extends LitElement {
</ul> </ul>
` `
: !this._templateResult?.listeners.time : !this._templateResult?.listeners.time
? html` <span class="all_listeners"> ? html`<span class="all_listeners">
${this.hass.localize( ${this.hass.localize(
"ui.panel.developer-tools.tabs.templates.no_listeners" "ui.panel.developer-tools.tabs.templates.no_listeners"
)} )}

View File

@ -1280,6 +1280,14 @@
"schedule": { "schedule": {
"delete": "Delete item?", "delete": "Delete item?",
"confirm_delete": "Do you want to delete this item?" "confirm_delete": "Do you want to delete this item?"
},
"template": {
"time": "[%key:ui::panel::developer-tools::tabs::templates::time%]",
"all_listeners": "[%key:ui::panel::developer-tools::tabs::templates::all_listeners%]",
"no_listeners": "[%key:ui::panel::developer-tools::tabs::templates::no_listeners%]",
"listeners": "[%key:ui::panel::developer-tools::tabs::templates::listeners%]",
"entity": "[%key:ui::panel::developer-tools::tabs::templates::entity%]",
"domain": "[%key:ui::panel::developer-tools::tabs::templates::domain%]"
} }
}, },
"options_flow": { "options_flow": {