Picture elements: add service-icon (#1439)

* Picture elements: add service-icon

* Default for servie_data

* Lint

* Remove file
This commit is contained in:
c727 2018-07-12 12:34:05 +02:00 committed by GitHub
parent 1b262f7cea
commit 6a35fc9eb5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -21,6 +21,7 @@ const VALID_TYPES = new Set([
'image', 'image',
'navigation', 'navigation',
'service-button', 'service-button',
'service-icon',
'state-badge', 'state-badge',
'state-icon', 'state-icon',
'state-label', 'state-label',
@ -139,6 +140,13 @@ class HuiPictureElementsCard extends NavigateMixin(EventsMixin(LocalizeMixin(Pol
el.innerText = element.title; el.innerText = element.title;
el.hass = this.hass; el.hass = this.hass;
break; break;
case 'service-icon':
el = document.createElement('ha-icon');
el.icon = element.icon;
el.title = element.title || '';
el.addEventListener('click', () => this._handleClick(element));
el.classList.add('clickable');
break;
case 'state-badge': case 'state-badge':
el = document.createElement('ha-state-label-badge'); el = document.createElement('ha-state-label-badge');
el.state = this.hass.states[entityId]; el.state = this.hass.states[entityId];
@ -232,16 +240,17 @@ class HuiPictureElementsCard extends NavigateMixin(EventsMixin(LocalizeMixin(Pol
} }
_handleClick(elementConfig) { _handleClick(elementConfig) {
const tapAction = elementConfig.tap_action || 'more_info'; const tapAction = elementConfig.tap_action || (elementConfig.type === 'service-icon' ?
'call-service' : 'more-info');
switch (tapAction) { switch (tapAction) {
case 'more_info': case 'more-info':
this.fire('hass-more-info', { entityId: elementConfig.entity }); this.fire('hass-more-info', { entityId: elementConfig.entity });
break; break;
case 'toggle': case 'toggle':
toggleEntity(this.hass, elementConfig.entity); toggleEntity(this.hass, elementConfig.entity);
break; break;
case 'call_service': { case 'call-service': {
const [domain, service] = elementConfig.service.split('.', 2); const [domain, service] = elementConfig.service.split('.', 2);
const serviceData = Object.assign( const serviceData = Object.assign(
{}, { entity_id: elementConfig.entity }, {}, { entity_id: elementConfig.entity },