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",