Allow yaml in dev services (#3860)

* Allow yaml in dev services

* remove json
This commit is contained in:
Bram Kragten 2019-10-02 21:23:37 +02:00 committed by GitHub
parent 74d1de7313
commit 4cf9472bf4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -3,6 +3,8 @@ import "@polymer/paper-input/paper-textarea";
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
import yaml from "js-yaml";
import { ENTITY_COMPONENT_DOMAINS } from "../../../data/entity"; import { ENTITY_COMPONENT_DOMAINS } from "../../../data/entity";
import "../../../components/entity/ha-entity-picker"; import "../../../components/entity/ha-entity-picker";
import "../../../components/ha-service-picker"; import "../../../components/ha-service-picker";
@ -109,7 +111,7 @@ class HaPanelDevService extends PolymerElement {
</template> </template>
<paper-textarea <paper-textarea
always-float-label always-float-label
label="Service Data (JSON, optional)" label="Service Data (YAML, optional)"
value="{{serviceData}}" value="{{serviceData}}"
autocapitalize="none" autocapitalize="none"
autocomplete="off" autocomplete="off"
@ -119,7 +121,7 @@ class HaPanelDevService extends PolymerElement {
Call Service Call Service
</mwc-button> </mwc-button>
<template is="dom-if" if="[[!validJSON]]"> <template is="dom-if" if="[[!validJSON]]">
<span class="error">Invalid JSON</span> <span class="error">Invalid YAML</span>
</template> </template>
</div> </div>
@ -249,7 +251,7 @@ class HaPanelDevService extends PolymerElement {
_computeParsedServiceData(serviceData) { _computeParsedServiceData(serviceData) {
try { try {
return serviceData ? JSON.parse(serviceData) : {}; return serviceData ? yaml.safeLoad(serviceData) : {};
} catch (err) { } catch (err) {
return ERROR_SENTINEL; return ERROR_SENTINEL;
} }
@ -283,17 +285,24 @@ class HaPanelDevService extends PolymerElement {
_fillExampleData() { _fillExampleData() {
const example = {}; const example = {};
this._attributes.forEach((attribute) => { this._attributes.forEach((attribute) => {
example[attribute.key] = attribute.example; if (attribute.example) {
let value = "";
try {
value = yaml.safeLoad(attribute.example);
} catch (err) {
value = attribute.example;
}
example[attribute.key] = value;
}
}); });
this.serviceData = JSON.stringify(example, null, 2); this.serviceData = yaml.safeDump(example);
} }
_entityPicked(ev) { _entityPicked(ev) {
this.serviceData = JSON.stringify( this.serviceData = yaml.safeDump({
{ ...this.parsedJSON, entity_id: ev.target.value }, ...this.parsedJSON,
null, entity_id: ev.target.value,
2 });
);
} }
} }