diff --git a/src/panels/lovelace/common/create-card-element.js b/src/panels/lovelace/common/create-card-element.js index 3f47536b93..cbeed6239b 100644 --- a/src/panels/lovelace/common/create-card-element.js +++ b/src/panels/lovelace/common/create-card-element.js @@ -41,8 +41,8 @@ const CARD_TYPES = new Set([ 'vertical-stack', 'weather-forecast' ]); - const CUSTOM_TYPE_PREFIX = 'custom:'; +const TIMEOUT = 2000; function _createElement(tag, config) { const element = document.createElement(tag); @@ -61,24 +61,29 @@ function _createErrorElement(error, config) { return _createElement('hui-error-card', createErrorCardConfig(error, config)); } -export default function createCardElement(config) { - let tag; +function _hideErrorElement(element) { + element.style.display = 'None'; + return window.setTimeout(() => { element.style.display = ''; }, TIMEOUT); +} +export default function createCardElement(config) { if (!config || typeof config !== 'object' || !config.type) { return _createErrorElement('No card type configured.', config); } if (config.type.startsWith(CUSTOM_TYPE_PREFIX)) { - tag = config.type.substr(CUSTOM_TYPE_PREFIX.length); + const tag = config.type.substr(CUSTOM_TYPE_PREFIX.length); if (customElements.get(tag)) { return _createElement(tag, config); } - const element = _createErrorElement(`Custom element doesn't exist: ${tag}.`, config); + const timer = _hideErrorElement(element); - customElements.whenDefined(tag) - .then(() => fireEvent(element, 'rebuild-view')); + customElements.whenDefined(tag).then(() => { + clearTimeout(timer); + fireEvent(element, 'rebuild-view'); + }); return element; } diff --git a/src/panels/lovelace/common/create-hui-element.js b/src/panels/lovelace/common/create-hui-element.js index b7bd4f9f2f..2d0c0e4cef 100644 --- a/src/panels/lovelace/common/create-hui-element.js +++ b/src/panels/lovelace/common/create-hui-element.js @@ -17,6 +17,7 @@ const ELEMENT_TYPES = new Set([ 'state-icon', 'state-label', ]); +const TIMEOUT = 2000; function _createElement(tag, config) { const element = document.createElement(tag); @@ -35,6 +36,11 @@ function _createErrorElement(error, config) { return _createElement('hui-error-card', createErrorCardConfig(error, config)); } +function _hideErrorElement(element) { + element.style.display = 'None'; + return window.setTimeout(() => { element.style.display = ''; }, TIMEOUT); +} + export default function createHuiElement(config) { if (!config || typeof config !== 'object' || !config.type) { return _createErrorElement('No element type configured.', config); @@ -46,11 +52,13 @@ export default function createHuiElement(config) { if (customElements.get(tag)) { return _createElement(tag, config); } - const element = _createErrorElement(`Custom element doesn't exist: ${tag}.`, config); + const timer = _hideErrorElement(element); - customElements.whenDefined(tag) - .then(() => fireEvent(element, 'rebuild-view')); + customElements.whenDefined(tag).then(() => { + clearTimeout(timer); + fireEvent(element, 'rebuild-view'); + }); return element; } diff --git a/src/panels/lovelace/common/create-row-element.js b/src/panels/lovelace/common/create-row-element.js index d4363295ca..1939e147f4 100644 --- a/src/panels/lovelace/common/create-row-element.js +++ b/src/panels/lovelace/common/create-row-element.js @@ -45,6 +45,7 @@ const DOMAIN_TO_ELEMENT_TYPE = { switch: 'toggle', vacuum: 'toggle' }; +const TIMEOUT = 2000; function _createElement(tag, config) { const element = document.createElement(tag); @@ -64,6 +65,11 @@ function _createErrorElement(error, config) { return _createElement('hui-error-card', createErrorCardConfig(error, config)); } +function _hideErrorElement(element) { + element.style.display = 'None'; + return window.setTimeout(() => { element.style.display = ''; }, TIMEOUT); +} + export default function createRowElement(config) { let tag; @@ -83,9 +89,12 @@ export default function createRowElement(config) { return _createElement(tag, config); } const element = _createErrorElement(`Custom element doesn't exist: ${tag}.`, config); + const timer = _hideErrorElement(element); - customElements.whenDefined(tag) - .then(() => fireEvent(element, 'rebuild-view')); + customElements.whenDefined(tag).then(() => { + clearTimeout(timer); + fireEvent(element, 'rebuild-view'); + }); return element; }