mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-19 15:26:36 +00:00
Fix routetail + config subrouting (#2951)
* Fix routetail + config subrouting * Do not update panel when loading a new one * Fix init skeleton not removed during loading
This commit is contained in:
parent
6ba77b4fa5
commit
fb16156f8d
@ -8,6 +8,7 @@ import {
|
|||||||
CSSResult,
|
CSSResult,
|
||||||
css,
|
css,
|
||||||
} from "lit-element";
|
} from "lit-element";
|
||||||
|
import { removeInitSkeleton } from "../util/init-skeleton";
|
||||||
|
|
||||||
class HaInitPage extends LitElement {
|
class HaInitPage extends LitElement {
|
||||||
public error?: boolean;
|
public error?: boolean;
|
||||||
@ -35,6 +36,10 @@ class HaInitPage extends LitElement {
|
|||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected firstUpdated() {
|
||||||
|
removeInitSkeleton();
|
||||||
|
}
|
||||||
|
|
||||||
private _retry() {
|
private _retry() {
|
||||||
location.reload();
|
location.reload();
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,9 @@ export class HassRouterPage extends UpdatingElement {
|
|||||||
super.update(changedProps);
|
super.update(changedProps);
|
||||||
|
|
||||||
if (!changedProps.has("route")) {
|
if (!changedProps.has("route")) {
|
||||||
if (this.lastChild) {
|
// Do not update if we have a currentLoadProm, because that means
|
||||||
|
// that there is still an old panel shown and we're moving to a new one.
|
||||||
|
if (this.lastChild && !this._currentLoadProm) {
|
||||||
this.updatePageEl(this.lastChild, changedProps);
|
this.updatePageEl(this.lastChild, changedProps);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -214,11 +216,11 @@ export class HassRouterPage extends UpdatingElement {
|
|||||||
const dividerPos = route.path.indexOf("/", 1);
|
const dividerPos = route.path.indexOf("/", 1);
|
||||||
return dividerPos === -1
|
return dividerPos === -1
|
||||||
? {
|
? {
|
||||||
prefix: route.path,
|
prefix: route.prefix + route.path,
|
||||||
path: "",
|
path: "",
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
prefix: route.path.substr(0, dividerPos),
|
prefix: route.prefix + route.path.substr(0, dividerPos),
|
||||||
path: route.path.substr(dividerPos),
|
path: route.path.substr(dividerPos),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import {
|
|||||||
RouterOptions,
|
RouterOptions,
|
||||||
RouteOptions,
|
RouteOptions,
|
||||||
} from "./hass-router-page";
|
} from "./hass-router-page";
|
||||||
|
import { removeInitSkeleton } from "../util/init-skeleton";
|
||||||
|
|
||||||
const CACHE_COMPONENTS = ["lovelace", "states"];
|
const CACHE_COMPONENTS = ["lovelace", "states"];
|
||||||
const COMPONENTS = {
|
const COMPONENTS = {
|
||||||
@ -113,11 +114,7 @@ class PartialPanelResolver extends HassRouterPage {
|
|||||||
this.routerOptions = getRoutes(this.hass!.panels);
|
this.routerOptions = getRoutes(this.hass!.panels);
|
||||||
await this.rebuild();
|
await this.rebuild();
|
||||||
await this.pageRendered;
|
await this.pageRendered;
|
||||||
|
removeInitSkeleton();
|
||||||
const initEl = document.getElementById("ha-init-skeleton");
|
|
||||||
if (initEl) {
|
|
||||||
initEl.parentElement!.removeChild(initEl);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,13 +18,13 @@ class HaConfigAutomation extends PolymerElement {
|
|||||||
</style>
|
</style>
|
||||||
<app-route
|
<app-route
|
||||||
route="[[route]]"
|
route="[[route]]"
|
||||||
pattern="/automation/edit/:automation"
|
pattern="/edit/:automation"
|
||||||
data="{{_routeData}}"
|
data="{{_routeData}}"
|
||||||
active="{{_edittingAutomation}}"
|
active="{{_edittingAutomation}}"
|
||||||
></app-route>
|
></app-route>
|
||||||
<app-route
|
<app-route
|
||||||
route="[[route]]"
|
route="[[route]]"
|
||||||
pattern="/automation/new"
|
pattern="/new"
|
||||||
active="{{_creatingNew}}"
|
active="{{_creatingNew}}"
|
||||||
></app-route>
|
></app-route>
|
||||||
|
|
||||||
|
@ -11,12 +11,8 @@ import "./ha-config-cloud-login";
|
|||||||
import "./ha-config-cloud-register";
|
import "./ha-config-cloud-register";
|
||||||
import NavigateMixin from "../../../mixins/navigate-mixin";
|
import NavigateMixin from "../../../mixins/navigate-mixin";
|
||||||
|
|
||||||
const LOGGED_IN_URLS = ["/cloud/account"];
|
const LOGGED_IN_URLS = ["/account"];
|
||||||
const NOT_LOGGED_IN_URLS = [
|
const NOT_LOGGED_IN_URLS = ["/login", "/register", "/forgot-password"];
|
||||||
"/cloud/login",
|
|
||||||
"/cloud/register",
|
|
||||||
"/cloud/forgot-password",
|
|
||||||
];
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @appliesMixin NavigateMixin
|
* @appliesMixin NavigateMixin
|
||||||
@ -26,7 +22,7 @@ class HaConfigCloud extends NavigateMixin(PolymerElement) {
|
|||||||
return html`
|
return html`
|
||||||
<app-route
|
<app-route
|
||||||
route="[[route]]"
|
route="[[route]]"
|
||||||
pattern="/cloud/:page"
|
pattern="/:page"
|
||||||
data="{{_routeData}}"
|
data="{{_routeData}}"
|
||||||
tail="{{_routeTail}}"
|
tail="{{_routeTail}}"
|
||||||
></app-route>
|
></app-route>
|
||||||
@ -121,8 +117,6 @@ class HaConfigCloud extends NavigateMixin(PolymerElement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_checkRoute(route) {
|
_checkRoute(route) {
|
||||||
if (!route || route.path.substr(0, 6) !== "/cloud") return;
|
|
||||||
|
|
||||||
this._debouncer = Debouncer.debounce(
|
this._debouncer = Debouncer.debounce(
|
||||||
this._debouncer,
|
this._debouncer,
|
||||||
timeOut.after(0),
|
timeOut.after(0),
|
||||||
|
@ -121,7 +121,7 @@ class HaPanelConfig extends HassRouterPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected updatePageEl(el) {
|
protected updatePageEl(el) {
|
||||||
el.route = this.route;
|
el.route = this.routeTail;
|
||||||
el.hass = this.hass;
|
el.hass = this.hass;
|
||||||
el.isWide = this.hass.dockedSidebar ? this._wideSidebar : this._wide;
|
el.isWide = this.hass.dockedSidebar ? this._wideSidebar : this._wide;
|
||||||
el.cloudStatus = this._cloudStatus;
|
el.cloudStatus = this._cloudStatus;
|
||||||
|
@ -15,7 +15,7 @@ class HaConfigIntegrations extends NavigateMixin(PolymerElement) {
|
|||||||
return html`
|
return html`
|
||||||
<app-route
|
<app-route
|
||||||
route="[[route]]"
|
route="[[route]]"
|
||||||
pattern="/integrations/:page"
|
pattern="/:page"
|
||||||
data="{{_routeData}}"
|
data="{{_routeData}}"
|
||||||
tail="{{_routeTail}}"
|
tail="{{_routeTail}}"
|
||||||
></app-route>
|
></app-route>
|
||||||
|
@ -19,13 +19,13 @@ class HaConfigScript extends PolymerElement {
|
|||||||
</style>
|
</style>
|
||||||
<app-route
|
<app-route
|
||||||
route="[[route]]"
|
route="[[route]]"
|
||||||
pattern="/script/edit/:script"
|
pattern="/edit/:script"
|
||||||
data="{{_routeData}}"
|
data="{{_routeData}}"
|
||||||
active="{{_edittingScript}}"
|
active="{{_edittingScript}}"
|
||||||
></app-route>
|
></app-route>
|
||||||
<app-route
|
<app-route
|
||||||
route="[[route]]"
|
route="[[route]]"
|
||||||
pattern="/script/new"
|
pattern="/new"
|
||||||
active="{{_creatingNew}}"
|
active="{{_creatingNew}}"
|
||||||
></app-route>
|
></app-route>
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ class HaConfigUsers extends NavigateMixin(PolymerElement) {
|
|||||||
return html`
|
return html`
|
||||||
<app-route
|
<app-route
|
||||||
route="[[route]]"
|
route="[[route]]"
|
||||||
pattern="/users/:user"
|
pattern="/:user"
|
||||||
data="{{_routeData}}"
|
data="{{_routeData}}"
|
||||||
></app-route>
|
></app-route>
|
||||||
|
|
||||||
@ -72,8 +72,6 @@ class HaConfigUsers extends NavigateMixin(PolymerElement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_checkRoute(route) {
|
_checkRoute(route) {
|
||||||
if (!route || route.path.substr(0, 6) !== "/users") return;
|
|
||||||
|
|
||||||
// prevent list getting under toolbar
|
// prevent list getting under toolbar
|
||||||
fireEvent(this, "iron-resize");
|
fireEvent(this, "iron-resize");
|
||||||
|
|
||||||
@ -81,8 +79,8 @@ class HaConfigUsers extends NavigateMixin(PolymerElement) {
|
|||||||
this._debouncer,
|
this._debouncer,
|
||||||
timeOut.after(0),
|
timeOut.after(0),
|
||||||
() => {
|
() => {
|
||||||
if (route.path === "/users") {
|
if (route.path === "") {
|
||||||
this.navigate("/config/users/picker", true);
|
this.navigate(`${route.prefix}/picker`, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -38,7 +38,7 @@ class HaPanelCustom extends NavigateMixin(EventsMixin(PolymerElement)) {
|
|||||||
delete window.customPanel;
|
delete window.customPanel;
|
||||||
this._setProperties = null;
|
this._setProperties = null;
|
||||||
while (this.lastChild) {
|
while (this.lastChild) {
|
||||||
this.remove(this.lastChild);
|
this.removeChild(this.lastChild);
|
||||||
}
|
}
|
||||||
|
|
||||||
const config = panel.config._panel_custom;
|
const config = panel.config._panel_custom;
|
||||||
@ -95,7 +95,7 @@ It will have access to all data in Home Assistant.
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<iframe></iframe>
|
<iframe></iframe>
|
||||||
`;
|
`.trim();
|
||||||
const iframeDoc = this.querySelector("iframe").contentWindow.document;
|
const iframeDoc = this.querySelector("iframe").contentWindow.document;
|
||||||
iframeDoc.open();
|
iframeDoc.open();
|
||||||
iframeDoc.write(`<script src='${window.customPanelJS}'></script>`);
|
iframeDoc.write(`<script src='${window.customPanelJS}'></script>`);
|
||||||
|
6
src/util/init-skeleton.ts
Normal file
6
src/util/init-skeleton.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
export const removeInitSkeleton = () => {
|
||||||
|
const initEl = document.getElementById("ha-init-skeleton");
|
||||||
|
if (initEl) {
|
||||||
|
initEl.parentElement!.removeChild(initEl);
|
||||||
|
}
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user