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:
Paulus Schoutsen 2019-03-16 23:15:00 -07:00 committed by GitHub
parent 6ba77b4fa5
commit fb16156f8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 32 additions and 30 deletions

View File

@ -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();
} }

View File

@ -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),
}; };
} }

View File

@ -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);
}
} }
} }

View File

@ -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>

View File

@ -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),

View File

@ -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;

View File

@ -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>

View File

@ -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>

View File

@ -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);
} }
} }
); );

View File

@ -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>`);

View File

@ -0,0 +1,6 @@
export const removeInitSkeleton = () => {
const initEl = document.getElementById("ha-init-skeleton");
if (initEl) {
initEl.parentElement!.removeChild(initEl);
}
};