1
mirror of https://github.com/home-assistant/frontend synced 2024-09-28 00:43:28 +02:00

Generalize errors (#2275)

This commit is contained in:
Paulus Schoutsen 2018-12-12 09:47:32 +01:00 committed by GitHub
parent a6f3684846
commit d277571735
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 65 additions and 39 deletions

View File

@ -9,6 +9,9 @@ const ENTITIES = [
getEntity("light", "kitchen_lights", "on", { getEntity("light", "kitchen_lights", "on", {
friendly_name: "Kitchen Lights", friendly_name: "Kitchen Lights",
}), }),
getEntity("light", "bed_light", "on", {
friendly_name: "Bed Lights",
}),
getEntity("device_tracker", "demo_paulus", "work", { getEntity("device_tracker", "demo_paulus", "work", {
source_type: "gps", source_type: "gps",
latitude: 32.877105, latitude: 32.877105,

View File

@ -9,6 +9,18 @@ interface Config extends LovelaceCardConfig {
origConfig: LovelaceCardConfig; origConfig: LovelaceCardConfig;
} }
export const createErrorCardElement = (config) => {
const el = document.createElement("hui-error-card");
el.setConfig(config);
return el;
};
export const createErrorCardConfig = (error, origConfig) => ({
type: "error",
error,
origConfig,
});
class HuiErrorCard extends LitElement implements LovelaceCard { class HuiErrorCard extends LitElement implements LovelaceCard {
private _config?: Config; private _config?: Config;

View File

@ -17,7 +17,10 @@ import applyThemesOnElement from "../../../common/dom/apply_themes_on_element";
import computeStateName from "../../../common/entity/compute_state_name"; import computeStateName from "../../../common/entity/compute_state_name";
import { LovelaceCard, LovelaceCardEditor } from "../types"; import { LovelaceCard, LovelaceCardEditor } from "../types";
import createErrorCardConfig from "../common/create-error-card-config"; import {
createErrorCardConfig,
createErrorCardElement,
} from "./hui-error-card";
export interface SeverityConfig { export interface SeverityConfig {
green?: number; green?: number;
@ -94,14 +97,8 @@ class HuiGaugeCard extends LitElement implements LovelaceCard {
} }
if (error) { if (error) {
const errorConfig = createErrorCardConfig(
"Entity not Found!",
this._config
);
const element = document.createElement("hui-error-card");
element.setConfig(errorConfig);
return html` return html`
${element} ${createErrorCardElement(createErrorCardConfig(error, this._config))}
`; `;
} }

View File

@ -1,4 +1,4 @@
import createErrorCardConfig from "../common/create-error-card-config"; import { createErrorCardConfig } from "./hui-error-card";
import computeDomain from "../../../common/entity/compute_domain"; import computeDomain from "../../../common/entity/compute_domain";
export default class LegacyWrapperCard extends HTMLElement { export default class LegacyWrapperCard extends HTMLElement {

View File

@ -16,6 +16,10 @@ import { LovelaceCardConfig, ActionConfig } from "../../../data/lovelace";
import { LovelaceCard } from "../types"; import { LovelaceCard } from "../types";
import { handleClick } from "../common/handle-click"; import { handleClick } from "../common/handle-click";
import { UNAVAILABLE } from "../../../data/entity"; import { UNAVAILABLE } from "../../../data/entity";
import {
createErrorCardElement,
createErrorCardConfig,
} from "./hui-error-card";
interface Config extends LovelaceCardConfig { interface Config extends LovelaceCardConfig {
entity: string; entity: string;
@ -62,11 +66,25 @@ class HuiPictureEntityCard extends hassLocalizeLitMixin(LitElement)
} }
protected render(): TemplateResult { protected render(): TemplateResult {
if (!this._config || !this.hass || !this.hass.states[this._config.entity]) { if (!this._config || !this.hass) {
return html``; return html``;
} }
const stateObj = this.hass.states[this._config.entity]; const stateObj = this.hass.states[this._config.entity];
if (!stateObj) {
return html`
${
createErrorCardElement(
createErrorCardConfig(
`Entity not found: ${this._config.entity}`,
this._config
)
)
}
`;
}
const name = this._config.name || computeStateName(stateObj); const name = this._config.name || computeStateName(stateObj);
const state = computeStateDisplay( const state = computeStateDisplay(
this.localize, this.localize,

View File

@ -5,7 +5,10 @@ import "../cards/hui-conditional-card";
import "../cards/hui-entities-card"; import "../cards/hui-entities-card";
import "../cards/hui-entity-button-card"; import "../cards/hui-entity-button-card";
import "../cards/hui-entity-filter-card"; import "../cards/hui-entity-filter-card";
import "../cards/hui-error-card"; import {
createErrorCardElement,
createErrorCardConfig,
} from "../cards/hui-error-card";
import "../cards/hui-glance-card"; import "../cards/hui-glance-card";
import "../cards/hui-history-graph-card"; import "../cards/hui-history-graph-card";
import "../cards/hui-horizontal-stack-card"; import "../cards/hui-horizontal-stack-card";
@ -26,8 +29,6 @@ import "../cards/hui-thermostat-card";
import "../cards/hui-weather-forecast-card"; import "../cards/hui-weather-forecast-card";
import "../cards/hui-gauge-card"; import "../cards/hui-gauge-card";
import createErrorCardConfig from "./create-error-card-config";
const CARD_TYPES = new Set([ const CARD_TYPES = new Set([
"alarm-panel", "alarm-panel",
"conditional", "conditional",
@ -71,9 +72,8 @@ function _createElement(tag, config) {
return element; return element;
} }
function _createErrorElement(error, config) { const _createErrorElement = (error, config) =>
return _createElement("hui-error-card", createErrorCardConfig(error, config)); createErrorCardElement(createErrorCardConfig(error, config));
}
export default function createCardElement(config) { export default function createCardElement(config) {
if (!config || typeof config !== "object" || !config.type) { if (!config || typeof config !== "object" || !config.type) {

View File

@ -1,7 +0,0 @@
export default function createErrorConfig(error, origConfig) {
return {
type: "error",
error,
origConfig,
};
}

View File

@ -6,7 +6,10 @@ import "../elements/hui-state-icon-element";
import "../elements/hui-state-label-element"; import "../elements/hui-state-label-element";
import { fireEvent } from "../../../common/dom/fire_event"; import { fireEvent } from "../../../common/dom/fire_event";
import createErrorCardConfig from "./create-error-card-config"; import {
createErrorCardElement,
createErrorCardConfig,
} from "../cards/hui-error-card";
const CUSTOM_TYPE_PREFIX = "custom:"; const CUSTOM_TYPE_PREFIX = "custom:";
const ELEMENT_TYPES = new Set([ const ELEMENT_TYPES = new Set([
@ -19,7 +22,7 @@ const ELEMENT_TYPES = new Set([
]); ]);
const TIMEOUT = 2000; const TIMEOUT = 2000;
function _createElement(tag, config) { const _createElement = (tag, config) => {
const element = document.createElement(tag); const element = document.createElement(tag);
try { try {
element.setConfig(config); element.setConfig(config);
@ -30,11 +33,10 @@ function _createElement(tag, config) {
return _createErrorElement(err.message, config); return _createErrorElement(err.message, config);
} }
return element; return element;
} };
function _createErrorElement(error, config) { const _createErrorElement = (error, config) =>
return _createElement("hui-error-card", createErrorCardConfig(error, config)); createErrorCardElement(createErrorCardConfig(error, config));
}
function _hideErrorElement(element) { function _hideErrorElement(element) {
element.style.display = "None"; element.style.display = "None";

View File

@ -1,5 +1,9 @@
import { fireEvent } from "../../../common/dom/fire_event"; import { fireEvent } from "../../../common/dom/fire_event";
import {
createErrorCardElement,
createErrorCardConfig,
} from "../cards/hui-error-card";
import "../entity-rows/hui-climate-entity-row"; import "../entity-rows/hui-climate-entity-row";
import "../entity-rows/hui-cover-entity-row"; import "../entity-rows/hui-cover-entity-row";
import "../entity-rows/hui-group-entity-row"; import "../entity-rows/hui-group-entity-row";
@ -19,8 +23,6 @@ import "../special-rows/hui-divider-row";
import "../special-rows/hui-section-row"; import "../special-rows/hui-section-row";
import "../special-rows/hui-weblink-row"; import "../special-rows/hui-weblink-row";
import createErrorCardConfig from "./create-error-card-config";
const CUSTOM_TYPE_PREFIX = "custom:"; const CUSTOM_TYPE_PREFIX = "custom:";
const SPECIAL_TYPES = new Set([ const SPECIAL_TYPES = new Set([
"call-service", "call-service",
@ -51,7 +53,7 @@ const DOMAIN_TO_ELEMENT_TYPE = {
}; };
const TIMEOUT = 2000; const TIMEOUT = 2000;
function _createElement(tag, config) { const _createElement = (tag, config) => {
const element = document.createElement(tag); const element = document.createElement(tag);
try { try {
if ("setConfig" in element) element.setConfig(config); if ("setConfig" in element) element.setConfig(config);
@ -63,18 +65,17 @@ function _createElement(tag, config) {
} }
return element; return element;
} };
function _createErrorElement(error, config) { const _createErrorElement = (error, config) =>
return _createElement("hui-error-card", createErrorCardConfig(error, config)); createErrorCardElement(createErrorCardConfig(error, config));
}
function _hideErrorElement(element) { const _hideErrorElement = (element) => {
element.style.display = "None"; element.style.display = "None";
return window.setTimeout(() => { return window.setTimeout(() => {
element.style.display = ""; element.style.display = "";
}, TIMEOUT); }, TIMEOUT);
} };
export default function createRowElement(config) { export default function createRowElement(config) {
let tag; let tag;

View File

@ -1,12 +1,12 @@
import "@polymer/paper-input/paper-textarea"; import "@polymer/paper-input/paper-textarea";
import createCardElement from "../../common/create-card-element"; import createCardElement from "../../common/create-card-element";
import createErrorCardConfig from "../../common/create-error-card-config";
import { HomeAssistant } from "../../../../types"; import { HomeAssistant } from "../../../../types";
import { LovelaceCardConfig } from "../../../../data/lovelace"; import { LovelaceCardConfig } from "../../../../data/lovelace";
import { LovelaceCard } from "../../types"; import { LovelaceCard } from "../../types";
import { ConfigError } from "../types"; import { ConfigError } from "../types";
import { getCardElementTag } from "../../common/get-card-element-tag"; import { getCardElementTag } from "../../common/get-card-element-tag";
import { createErrorCardConfig } from "../../cards/hui-error-card";
export class HuiCardPreview extends HTMLElement { export class HuiCardPreview extends HTMLElement {
private _hass?: HomeAssistant; private _hass?: HomeAssistant;