From 7ab2d1496e3e5ed8d7fc73b3cae75a8ecb2ee35f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 4 Mar 2024 16:23:14 -0500 Subject: [PATCH] Run script in script editor open more info if fields (#19982) * Run script in script editor open more info if fields * Extract function --- src/data/script.ts | 9 +++++++++ src/panels/config/script/ha-script-editor.ts | 10 ++++++++++ .../lovelace/entity-rows/hui-script-entity-row.ts | 8 ++------ src/state-summary/state-card-script.ts | 9 ++------- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/data/script.ts b/src/data/script.ts index 0f585cf1e0..55e154a826 100644 --- a/src/data/script.ts +++ b/src/data/script.ts @@ -26,6 +26,7 @@ import { Trigger, } from "./automation"; import { BlueprintInput } from "./blueprint"; +import { computeObjectId } from "../common/entity/compute_object_id"; export const MODES = ["single", "restart", "queued", "parallel"] as const; export const MODES_MAX = ["queued", "parallel"] as const; @@ -404,3 +405,11 @@ export const getActionType = (action: Action): ActionType => { } return "unknown"; }; + +export const hasScriptFields = ( + hass: HomeAssistant, + entityId: string +): boolean => { + const fields = hass.services.script[computeObjectId(entityId)]?.fields; + return fields !== undefined && Object.keys(fields).length > 0; +}; diff --git a/src/panels/config/script/ha-script-editor.ts b/src/panels/config/script/ha-script-editor.ts index d5d5bb29d2..6b56d815b9 100644 --- a/src/panels/config/script/ha-script-editor.ts +++ b/src/panels/config/script/ha-script-editor.ts @@ -48,6 +48,7 @@ import { fetchScriptFileConfig, getScriptEditorInitData, getScriptStateConfig, + hasScriptFields, isMaxMode, showScriptEditor, triggerScript, @@ -62,6 +63,7 @@ import { showToast } from "../../../util/toast"; import "./blueprint-script-editor"; import "./manual-script-editor"; import type { HaManualScriptEditor } from "./manual-script-editor"; +import { showMoreInfoDialog } from "../../../dialogs/more-info/show-ha-more-info-dialog"; export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) { @property({ attribute: false }) public hass!: HomeAssistant; @@ -611,6 +613,14 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) { private async _runScript(ev: CustomEvent) { ev.stopPropagation(); + + if (hasScriptFields(this.hass, this._entityId!)) { + showMoreInfoDialog(this, { + entityId: this._entityId!, + }); + return; + } + await triggerScript(this.hass, this.scriptId!); showToast(this, { message: this.hass.localize("ui.notification_toast.triggered", { diff --git a/src/panels/lovelace/entity-rows/hui-script-entity-row.ts b/src/panels/lovelace/entity-rows/hui-script-entity-row.ts index 1147d405b4..87602c939f 100644 --- a/src/panels/lovelace/entity-rows/hui-script-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-script-entity-row.ts @@ -9,13 +9,12 @@ import { } from "lit"; import { customElement, property, state } from "lit/decorators"; import { isUnavailableState } from "../../../data/entity"; -import { canRun, ScriptEntity } from "../../../data/script"; +import { canRun, hasScriptFields, ScriptEntity } from "../../../data/script"; import { HomeAssistant } from "../../../types"; import { hasConfigOrEntityChanged } from "../common/has-changed"; import "../components/hui-generic-entity-row"; import { createEntityNotFoundWarning } from "../components/hui-warning"; import { ActionRowConfig, LovelaceRow } from "./types"; -import { computeObjectId } from "../../../common/entity/compute_object_id"; import { showMoreInfoDialog } from "../../../dialogs/more-info/show-ha-more-info-dialog"; @customElement("hui-script-entity-row") @@ -95,10 +94,7 @@ class HuiScriptEntityRow extends LitElement implements LovelaceRow { private _runScript(ev): void { ev.stopPropagation(); - const fields = - this.hass!.services.script[computeObjectId(this._config!.entity)]?.fields; - - if (fields && Object.keys(fields).length > 0) { + if (hasScriptFields(this.hass!, this._config!.entity)) { showMoreInfoDialog(this, { entityId: this._config!.entity }); } else { this._callService("turn_on"); diff --git a/src/state-summary/state-card-script.ts b/src/state-summary/state-card-script.ts index fc375d8d25..8b59c6726a 100644 --- a/src/state-summary/state-card-script.ts +++ b/src/state-summary/state-card-script.ts @@ -5,10 +5,9 @@ import { customElement, property } from "lit/decorators"; import "../components/entity/ha-entity-toggle"; import "../components/entity/state-info"; import { isUnavailableState } from "../data/entity"; -import { canRun, ScriptEntity } from "../data/script"; +import { canRun, hasScriptFields, ScriptEntity } from "../data/script"; import { haStyle } from "../resources/styles"; import { HomeAssistant } from "../types"; -import { computeObjectId } from "../common/entity/compute_object_id"; import { showMoreInfoDialog } from "../dialogs/more-info/show-ha-more-info-dialog"; @customElement("state-card-script") @@ -59,11 +58,7 @@ class StateCardScript extends LitElement { private _runScript(ev: Event) { ev.stopPropagation(); - const fields = - this.hass!.services.script[computeObjectId(this.stateObj.entity_id)] - ?.fields; - - if (fields && Object.keys(fields).length > 0) { + if (hasScriptFields(this.hass, this.stateObj.entity_id)) { showMoreInfoDialog(this, { entityId: this.stateObj.entity_id }); } else { this._callService("turn_on");