From cd33e2568ab7a409c717fe07e4712d4fb24c0513 Mon Sep 17 00:00:00 2001 From: c727 Date: Tue, 19 Jun 2018 04:18:20 +0200 Subject: [PATCH] Exp. UI: add support for "big" cards (#1296) * Exp. UI: add support for "big" cards * Lint * Requested changes * Revert outdated changes * ...2 * ...3 * Feedback --- .../hui-camera-preview-card.js | 74 +++++++++++++++++++ src/panels/experimental-ui/hui-error-card.js | 1 + .../experimental-ui/hui-history-graph-card.js | 74 +++++++++++++++++++ .../experimental-ui/hui-media-control-card.js | 74 +++++++++++++++++++ .../experimental-ui/hui-plant-status-card.js | 74 +++++++++++++++++++ src/panels/experimental-ui/hui-view.js | 15 +++- .../hui-weather-forecast-card.js | 74 +++++++++++++++++++ 7 files changed, 385 insertions(+), 1 deletion(-) create mode 100644 src/panels/experimental-ui/hui-camera-preview-card.js create mode 100644 src/panels/experimental-ui/hui-history-graph-card.js create mode 100644 src/panels/experimental-ui/hui-media-control-card.js create mode 100644 src/panels/experimental-ui/hui-plant-status-card.js create mode 100644 src/panels/experimental-ui/hui-weather-forecast-card.js diff --git a/src/panels/experimental-ui/hui-camera-preview-card.js b/src/panels/experimental-ui/hui-camera-preview-card.js new file mode 100644 index 0000000000..7dde9c2e4b --- /dev/null +++ b/src/panels/experimental-ui/hui-camera-preview-card.js @@ -0,0 +1,74 @@ +import { PolymerElement } from '@polymer/polymer/polymer-element.js'; + +import computeDomain from '../../common/entity/compute_domain.js'; + +import '../../cards/ha-camera-card.js'; +import './hui-error-card.js'; + +class HuiCameraPreviewCard extends PolymerElement { + static get properties() { + return { + hass: { + type: Object, + observer: '_hassChanged', + }, + config: { + type: Object, + observer: '_configChanged', + } + }; + } + + getCardSize() { + return 4; + } + + _configChanged(config) { + this._entityId = null; + if (this.lastChild) { + this.removeChild(this.lastChild); + } + + let error = null; + let cardConfig; + let tag; + + const entityId = config && config.entity; + if (entityId) { + if (computeDomain(entityId) === 'camera') { + this._entityId = entityId; + tag = 'ha-camera-card'; + cardConfig = config; + } else { + error = 'Entity domain must be "camera"'; + } + } else { + error = 'Entity not defined in card config'; + } + + if (error) { + tag = 'hui-error-card'; + cardConfig = { error }; + } + const element = document.createElement(tag); + + if (!error) { + element.stateObj = this.hass.states[entityId]; + element.hass = this.hass; + } + + element.config = cardConfig; + this.appendChild(element); + } + + _hassChanged(hass) { + if (this.lastChild && this._entityId) { + const element = this.childNodes[0]; + const stateObj = hass.states[this._entityId]; + element.stateObj = stateObj; + element.hass = hass; + } + } +} + +customElements.define('hui-camera-preview-card', HuiCameraPreviewCard); diff --git a/src/panels/experimental-ui/hui-error-card.js b/src/panels/experimental-ui/hui-error-card.js index b2eb430b34..729da50a03 100644 --- a/src/panels/experimental-ui/hui-error-card.js +++ b/src/panels/experimental-ui/hui-error-card.js @@ -6,6 +6,7 @@ class HuiErrorCard extends PolymerElement { return html`