From aa97e30d5162cf7211be77734d9844d0fa705baf Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 26 Sep 2018 11:09:33 +0200 Subject: [PATCH] Add card for entities without devices (#1706) * Add card for entities without devices * Better empty check --- .../config-entries/ha-ce-entities-card.js | 74 +++++++++++++++++++ .../config-entries/ha-config-entry-page.js | 35 +++++++-- 2 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 src/panels/config/config-entries/ha-ce-entities-card.js diff --git a/src/panels/config/config-entries/ha-ce-entities-card.js b/src/panels/config/config-entries/ha-ce-entities-card.js new file mode 100644 index 0000000000..ec2af9ff97 --- /dev/null +++ b/src/panels/config/config-entries/ha-ce-entities-card.js @@ -0,0 +1,74 @@ +import '@polymer/paper-item/paper-icon-item.js'; +import '@polymer/paper-item/paper-item-body.js'; +import '@polymer/paper-card/paper-card.js'; +import { html } from '@polymer/polymer/lib/utils/html-tag.js'; +import { PolymerElement } from '@polymer/polymer/polymer-element.js'; + +import '../../../layouts/hass-subpage.js'; + +import EventsMixin from '../../../mixins/events-mixin.js'; +import computeStateName from '../../../common/entity/compute_state_name.js'; +import '../../../components/entity/state-badge.js'; + +function computeEntityName(hass, entity) { + if (entity.name) return entity.name; + const state = hass.states[entity.entity_id]; + return state ? computeStateName(state) : null; +} + +/* + * @appliesMixin EventsMixin + */ +class HaDeviceCard extends EventsMixin(PolymerElement) { + static get template() { + return html` + + + + + `; + } + + static get properties() { + return { + heading: String, + entities: Array, + hass: Object, + }; + } + + _computeStateObj(entity, hass) { + return hass.states[entity.entity_id]; + } + + _computeEntityName(entity, hass) { + return computeEntityName(hass, entity) || '(entity unavailable)'; + } + + _openMoreInfo(ev) { + this.fire('hass-more-info', { entityId: ev.model.entity.entity_id }); + } +} + +customElements.define('ha-ce-entities-card', HaDeviceCard); diff --git a/src/panels/config/config-entries/ha-config-entry-page.js b/src/panels/config/config-entries/ha-config-entry-page.js index f2c8e70d80..47a553f0dc 100644 --- a/src/panels/config/config-entries/ha-config-entry-page.js +++ b/src/panels/config/config-entries/ha-config-entry-page.js @@ -8,6 +8,7 @@ import '../../../components/entity/state-badge.js'; import compare from '../../../common/string/compare.js'; import './ha-device-card.js'; +import './ha-ce-entities-card.js'; import EventsMixin from '../../../mixins/events-mixin.js'; import NavigateMixin from '../../../mixins/navigate-mixin.js'; @@ -19,9 +20,8 @@ class HaConfigEntryPage extends NavigateMixin(EventsMixin(PolymerElement)) { display: flex; flex-wrap: wrap; padding: 4px; - justify-content: center; } - ha-device-card { + ha-device-card, ha-ce-entities-card { flex: 1; min-width: 300px; max-width: 300px; @@ -43,10 +43,10 @@ class HaConfigEntryPage extends NavigateMixin(EventsMixin(PolymerElement)) { on-click='_removeEntry' >
-