Skip to content

Commit

Permalink
Button to copy service response as json for templates
Browse files Browse the repository at this point in the history
  • Loading branch information
karwosts committed Jun 29, 2024
1 parent ccad1af commit 7e12f16
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/components/ha-yaml-editor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ export class HaYamlEditor extends LitElement {
"ui.components.yaml-editor.copy_to_clipboard"
)}
</mwc-button>
<slot name="extra-actions"></slot>
</div>`
: nothing}
`;
Expand Down
20 changes: 19 additions & 1 deletion src/panels/developer-tools/service/developer-tools-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -189,7 +192,13 @@ class HaPanelDevService extends LitElement {
readOnly
autoUpdate
.value=${this._response}
></ha-yaml-editor>
>
<ha-button slot="extra-actions" @click=${this._copyTemplate}
>${this.hass.localize(
"ui.panel.developer-tools.tabs.services.copy_clipboard_template"
)}</ha-button
>
</ha-yaml-editor>
</div>
</ha-card>
</div>`
Expand Down Expand Up @@ -291,6 +300,15 @@ class HaPanelDevService extends LitElement {
`;
}

private async _copyTemplate(): Promise<void> {
await copyToClipboard(
`{% set service_response = ${JSON.stringify(this._response)} %}`
);
showToast(this, {
message: this.hass.localize("ui.common.copied_clipboard"),
});
}

private _filterSelectorFields = memoizeOne((fields) =>
fields.filter((field) => !field.selector)
);
Expand Down
1 change: 1 addition & 0 deletions src/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -6689,6 +6689,7 @@
"all_parameters": "All available parameters",
"accepts_target": "This service 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 service selected, please select a service",
Expand Down

0 comments on commit 7e12f16

Please sign in to comment.