Add service description in dev tools

This commit is contained in:
Paulus Schoutsen 2015-09-26 09:34:22 -07:00
parent 8c317b4c27
commit 72bceff0fc
4 changed files with 43 additions and 17 deletions

View File

@ -23,10 +23,10 @@
<template>
<ul>
<template is='dom-repeat' items="[[serviceDomains]]" as="domain">
<template is='dom-repeat' items="[[domain.services]]" as="service">
<template is='dom-repeat' items="[[computeDomains(serviceDomains)]]" as="domain">
<template is='dom-repeat' items="[[computeServices(serviceDomains, domain)]]" as="service">
<li><a href='#' on-click='serviceClicked'>
<span>[[domain.domain]]</span>/<span>[[service]]</span>
<span>[[domain]]</span>/<span>[[service]]</span>
</a></li>
</template>
</template>

View File

@ -13,21 +13,22 @@ export default new Polymer({
properties: {
serviceDomains: {
type: Array,
bindNuclear: [
serviceGetters.entityMap,
(map) => map.valueSeq().sortBy((domain) => domain.domain).toJS(),
],
bindNuclear: serviceGetters.entityMap,
},
},
computeServices(domain) {
return this.services.get(domain).toArray();
computeDomains(serviceDomains) {
return serviceDomains.valueSeq().map((domain) => domain.domain).sort().toJS();
},
computeServices(serviceDomains, domain) {
return serviceDomains.get(domain).get('services').keySeq().toArray();
},
serviceClicked(ev) {
ev.preventDefault();
this.fire(
'service-selected', {domain: ev.model.domain.domain,
'service-selected', {domain: ev.model.domain,
service: ev.model.service});
},
});

View File

@ -18,6 +18,11 @@
.ha-form {
margin-right: 16px;
}
.description {
margin-top: 24px;
white-space: pre-wrap;
}
</style>
<template>
<partial-base narrow="[[narrow]]" show-menu='[[showMenu]]'>
@ -29,13 +34,15 @@
</p>
<div class$='[[computeFormClasses(narrow)]]'>
<div class='ha-form flex'>
<paper-input label="Domain" autofocus value='{{domain}}'></paper-input>
<paper-input label="Service" value='{{service}}'></paper-input>
<paper-textarea label="Service Data (JSON, optional)" value='{{serviceData}}'></paper-textarea>
<paper-button on-click='callService' raised>Call Service</paper-button>
<div class='layout vertical flex'>
<div class='ha-form'>
<paper-input label="Domain" autofocus value='{{domain}}'></paper-input>
<paper-input label="Service" value='{{service}}'></paper-input>
<paper-textarea label="Service Data (JSON, optional)" value='{{serviceData}}'></paper-textarea>
<paper-button on-click='callService' raised>Call Service</paper-button>
</div>
<div class='description'>[[description]]</div>
</div>
<div>
<h4>Available services:</h4>
<services-list on-service-selected='serviceSelected'></services-list>

View File

@ -1,4 +1,8 @@
import { serviceActions } from '../util/home-assistant-js-instance';
import {
reactor,
serviceActions,
serviceGetters,
} from '../util/home-assistant-js-instance';
import Polymer from '../polymer';
@ -33,6 +37,20 @@ export default new Polymer({
type: String,
value: '',
},
description: {
type: String,
computed: 'computeDescription(domain, service)',
},
},
computeDescription(domain, service) {
return reactor.evaluate([
serviceGetters.entityMap,
map => map.has(domain) && map.get(domain).get('services').has(service) ?
JSON.stringify(map.get(domain).get('services').get(service).toJS(), null, 2) :
'No description available',
]);
},
serviceSelected(ev) {