From 811c34b489f25ba54cb1cef29b6d2b1d40365803 Mon Sep 17 00:00:00 2001 From: karwosts <32912880+karwosts@users.noreply.github.com> Date: Mon, 22 Jul 2024 09:06:48 -0700 Subject: [PATCH] Button to copy service response as json for templates (#21226) * Button to copy service response as json for templates --- src/components/ha-yaml-editor.ts | 17 +++++++++------ .../action/developer-tools-action.ts | 21 ++++++++++++++++++- src/translations/en.json | 1 + 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/components/ha-yaml-editor.ts b/src/components/ha-yaml-editor.ts index 882a12cd73a3..0d9d2c4b85c3 100644 --- a/src/components/ha-yaml-editor.ts +++ b/src/components/ha-yaml-editor.ts @@ -49,6 +49,8 @@ export class HaYamlEditor extends LitElement { @property({ type: Boolean }) public copyClipboard = false; + @property({ type: Boolean }) public hasExtraActions = false; + @state() private _yaml = ""; public setValue(value): void { @@ -100,13 +102,16 @@ export class HaYamlEditor extends LitElement { @value-changed=${this._onChange} dir="ltr" > - ${this.copyClipboard + ${this.copyClipboard || this.hasExtraActions ? html`
- - ${this.hass.localize( - "ui.components.yaml-editor.copy_to_clipboard" - )} - + ${this.copyClipboard + ? html` + ${this.hass.localize( + "ui.components.yaml-editor.copy_to_clipboard" + )} + ` + : nothing} +
` : nothing} `; diff --git a/src/panels/developer-tools/action/developer-tools-action.ts b/src/panels/developer-tools/action/developer-tools-action.ts index 497b47e4c204..2bbb69d5bf07 100644 --- a/src/panels/developer-tools/action/developer-tools-action.ts +++ b/src/panels/developer-tools/action/developer-tools-action.ts @@ -11,10 +11,13 @@ import { hasTemplate } from "../../../common/string/has-template"; import { extractSearchParam } from "../../../common/url/search-params"; import { HaProgressButton } from "../../../components/buttons/ha-progress-button"; import { LocalizeFunc } from "../../../common/translations/localize"; +import { showToast } from "../../../util/toast"; +import { copyToClipboard } from "../../../common/util/copy-clipboard"; import "../../../components/entity/ha-entity-picker"; import "../../../components/ha-card"; import "../../../components/ha-alert"; +import "../../../components/ha-button"; import "../../../components/ha-expansion-panel"; import "../../../components/ha-icon-button"; import "../../../components/ha-service-control"; @@ -189,8 +192,15 @@ class HaPanelDevAction extends LitElement { copyClipboard readOnly autoUpdate + hasExtraActions .value=${this._response} - > + > + ${this.hass.localize( + "ui.panel.developer-tools.tabs.actions.copy_clipboard_template" + )} + ` @@ -292,6 +302,15 @@ class HaPanelDevAction extends LitElement { `; } + private async _copyTemplate(): Promise { + await copyToClipboard( + `{% set action_response = ${JSON.stringify(this._response)} %}` + ); + showToast(this, { + message: this.hass.localize("ui.common.copied_clipboard"), + }); + } + private _filterSelectorFields = memoizeOne((fields) => fields.filter((field) => !field.selector) ); diff --git a/src/translations/en.json b/src/translations/en.json index 4f69e79e7918..df4945647e22 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -6771,6 +6771,7 @@ "all_parameters": "All available parameters", "accepts_target": "This action accepts a target, for example: `entity_id: light.bed_light`", "no_template_ui_support": "The UI does not support templates, you can still use the YAML editor.", + "copy_clipboard_template": "Copy to clipboard (template)", "errors": { "ui": { "no_service": "No action selected, please select an action",