Skip to content

Commit

Permalink
Button to copy service response as json for templates (#21226)
Browse files Browse the repository at this point in the history
* Button to copy service response as json for templates
  • Loading branch information
karwosts authored Jul 22, 2024
1 parent dd22ae4 commit 811c34b
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 7 deletions.
17 changes: 11 additions & 6 deletions src/components/ha-yaml-editor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -100,13 +102,16 @@ export class HaYamlEditor extends LitElement {
@value-changed=${this._onChange}
dir="ltr"
></ha-code-editor>
${this.copyClipboard
${this.copyClipboard || this.hasExtraActions
? html`<div class="card-actions">
<mwc-button @click=${this._copyYaml}>
${this.hass.localize(
"ui.components.yaml-editor.copy_to_clipboard"
)}
</mwc-button>
${this.copyClipboard
? html` <mwc-button @click=${this._copyYaml}>
${this.hass.localize(
"ui.components.yaml-editor.copy_to_clipboard"
)}
</mwc-button>`
: nothing}
<slot name="extra-actions"></slot>
</div>`
: nothing}
`;
Expand Down
21 changes: 20 additions & 1 deletion src/panels/developer-tools/action/developer-tools-action.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,8 +192,15 @@ class HaPanelDevAction extends LitElement {
copyClipboard
readOnly
autoUpdate
hasExtraActions
.value=${this._response}
></ha-yaml-editor>
>
<ha-button slot="extra-actions" @click=${this._copyTemplate}
>${this.hass.localize(
"ui.panel.developer-tools.tabs.actions.copy_clipboard_template"
)}</ha-button
>
</ha-yaml-editor>
</div>
</ha-card>
</div>`
Expand Down Expand Up @@ -292,6 +302,15 @@ class HaPanelDevAction extends LitElement {
`;
}

private async _copyTemplate(): Promise<void> {
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)
);
Expand Down
1 change: 1 addition & 0 deletions src/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down

0 comments on commit 811c34b

Please sign in to comment.