mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-25 18:26:35 +00:00
Show an error screen when panel cannot be resolved (#1303)
* Show an error screen when panel cannot be resolved * Lint
This commit is contained in:
parent
87bd9ed48a
commit
4acfa2ba88
@ -4,6 +4,7 @@ import { html } from '@polymer/polymer/lib/utils/html-tag.js';
|
|||||||
import { PolymerElement } from '@polymer/polymer/polymer-element.js';
|
import { PolymerElement } from '@polymer/polymer/polymer-element.js';
|
||||||
|
|
||||||
import './hass-loading-screen.js';
|
import './hass-loading-screen.js';
|
||||||
|
import './hass-error-screen.js';
|
||||||
import { importHref } from '../resources/html-import/import-href';
|
import { importHref } from '../resources/html-import/import-href';
|
||||||
|
|
||||||
import dynamicContentUpdater from '../common/dom/dynamic_content_updater.js';
|
import dynamicContentUpdater from '../common/dom/dynamic_content_updater.js';
|
||||||
@ -109,11 +110,19 @@ class PartialPanelResolver extends NavigateMixin(PolymerElement) {
|
|||||||
</style>
|
</style>
|
||||||
<app-route route="{{route}}" pattern="/:panel" data="{{routeData}}" tail="{{routeTail}}"></app-route>
|
<app-route route="{{route}}" pattern="/:panel" data="{{routeData}}" tail="{{routeTail}}"></app-route>
|
||||||
|
|
||||||
<template is="dom-if" if="[[!resolved]]">
|
<template is="dom-if" if="[[_equal(_state, 'loading')]]">
|
||||||
<hass-loading-screen narrow="[[narrow]]" show-menu="[[showMenu]]"></hass-loading-screen>
|
<hass-loading-screen narrow="[[narrow]]" show-menu="[[showMenu]]"></hass-loading-screen>
|
||||||
</template>
|
</template>
|
||||||
|
<template is="dom-if" if="[[_equal(_state, 'error')]]">
|
||||||
|
<hass-error-screen
|
||||||
|
title=''
|
||||||
|
error="Error while loading this panel."
|
||||||
|
narrow="[[narrow]]"
|
||||||
|
show-menu="[[showMenu]]"
|
||||||
|
></hass-error-screen>
|
||||||
|
</template>
|
||||||
|
|
||||||
<span id="panel" hidden$="[[!resolved]]"></span>
|
<span id="panel" hidden$="[[!_equal(_state, 'loaded')]]"></span>
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,9 +150,9 @@ class PartialPanelResolver extends NavigateMixin(PolymerElement) {
|
|||||||
type: Object,
|
type: Object,
|
||||||
observer: 'updateAttributes',
|
observer: 'updateAttributes',
|
||||||
},
|
},
|
||||||
resolved: {
|
_state: {
|
||||||
type: Boolean,
|
type: String,
|
||||||
value: false,
|
value: 'loading',
|
||||||
},
|
},
|
||||||
panel: {
|
panel: {
|
||||||
type: Object,
|
type: Object,
|
||||||
@ -161,7 +170,7 @@ class PartialPanelResolver extends NavigateMixin(PolymerElement) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.resolved = false;
|
this._state = 'loading';
|
||||||
|
|
||||||
let loadingProm;
|
let loadingProm;
|
||||||
if (panel.url) {
|
if (panel.url) {
|
||||||
@ -184,17 +193,9 @@ class PartialPanelResolver extends NavigateMixin(PolymerElement) {
|
|||||||
route: this.routeTail,
|
route: this.routeTail,
|
||||||
panel: panel,
|
panel: panel,
|
||||||
});
|
});
|
||||||
this.resolved = true;
|
this._state = 'loaded';
|
||||||
},
|
|
||||||
|
|
||||||
(err) => {
|
|
||||||
/* eslint-disable-next-line */
|
|
||||||
console.error('Error loading panel', err);
|
|
||||||
// a single retry of importHref in the error callback fixes a webkit refresh issue
|
|
||||||
if (!this.retrySetPanelForWebkit(panel)) {
|
|
||||||
this.panelLoadError(panel);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
() => { this._state = 'error'; },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,14 +203,6 @@ class PartialPanelResolver extends NavigateMixin(PolymerElement) {
|
|||||||
alert(`Failed to resolve panel ${panel.component_name}`);
|
alert(`Failed to resolve panel ${panel.component_name}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
retrySetPanelForWebkit(panel) {
|
|
||||||
if (this._retryingPanelChanged) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
this._retryingPanelChanged = true;
|
|
||||||
return this.panelChanged(panel);
|
|
||||||
}
|
|
||||||
|
|
||||||
updateAttributes() {
|
updateAttributes() {
|
||||||
var customEl = dom(this.$.panel).lastChild;
|
var customEl = dom(this.$.panel).lastChild;
|
||||||
if (!customEl) return;
|
if (!customEl) return;
|
||||||
@ -222,6 +215,10 @@ class PartialPanelResolver extends NavigateMixin(PolymerElement) {
|
|||||||
computeCurrentPanel(hass) {
|
computeCurrentPanel(hass) {
|
||||||
return hass.panels[hass.panelUrl];
|
return hass.panels[hass.panelUrl];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_equal(a, b) {
|
||||||
|
return a === b;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
customElements.define('partial-panel-resolver', PartialPanelResolver);
|
customElements.define('partial-panel-resolver', PartialPanelResolver);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user