Redirect old backup links to backup integration for non supervised (#12183)

This commit is contained in:
Joakim Sørensen 2022-04-01 17:05:53 +02:00 committed by GitHub
parent 8baa0b2a9b
commit 0b47d2c687
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -12,7 +12,12 @@ import "../../layouts/hass-error-screen";
import { HomeAssistant, Route } from "../../types"; import { HomeAssistant, Route } from "../../types";
import { documentationUrl } from "../../util/documentation-url"; import { documentationUrl } from "../../util/documentation-url";
const REDIRECTS: Redirects = { const getRedirect = (
path: string,
hasSupervisor: boolean
): Redirect | undefined =>
((
{
developer_states: { developer_states: {
redirect: "/developer-tools/state", redirect: "/developer-tools/state",
}, },
@ -117,10 +122,6 @@ const REDIRECTS: Redirects = {
component: "lovelace", component: "lovelace",
redirect: "/config/lovelace/resources", redirect: "/config/lovelace/resources",
}, },
backup: {
component: "backup",
redirect: "/config/backup",
},
people: { people: {
component: "person", component: "person",
redirect: "/config/person", redirect: "/config/person",
@ -163,7 +164,20 @@ const REDIRECTS: Redirects = {
component: "media_source", component: "media_source",
redirect: "/media-browser", redirect: "/media-browser",
}, },
}; backup: {
component: hasSupervisor ? "hassio" : "backup",
redirect: hasSupervisor ? "/hassio/backups" : "/config/backup",
},
supervisor_snapshots: {
component: hasSupervisor ? "hassio" : "backup",
redirect: hasSupervisor ? "/hassio/backups" : "/config/backup",
},
supervisor_backups: {
component: hasSupervisor ? "hassio" : "backup",
redirect: hasSupervisor ? "/hassio/backups" : "/config/backup",
},
} as Redirects
)[path]);
export type ParamType = "url" | "string"; export type ParamType = "url" | "string";
@ -184,19 +198,17 @@ class HaPanelMy extends LitElement {
@state() public _error?: string; @state() public _error?: string;
private _redirect?: Redirect;
connectedCallback() { connectedCallback() {
super.connectedCallback(); super.connectedCallback();
const path = this.route.path.substring(1); const path = this.route.path.substring(1);
const hasSupervisor = isComponentLoaded(this.hass, "hassio");
if (path === "backup" && isComponentLoaded(this.hass, "hassio")) { this._redirect = getRedirect(path, hasSupervisor);
navigate("/hassio/backups", {
replace: true,
});
return;
}
if (path.startsWith("supervisor")) { if (path.startsWith("supervisor") && this._redirect === undefined) {
if (!isComponentLoaded(this.hass, "hassio")) { if (!hasSupervisor) {
this._error = "no_supervisor"; this._error = "no_supervisor";
return; return;
} }
@ -206,16 +218,14 @@ class HaPanelMy extends LitElement {
return; return;
} }
const redirect = REDIRECTS[path]; if (!this._redirect) {
if (!redirect) {
this._error = "not_supported"; this._error = "not_supported";
return; return;
} }
if ( if (
redirect.component && this._redirect.component &&
!isComponentLoaded(this.hass, redirect.component) !isComponentLoaded(this.hass, this._redirect.component)
) { ) {
this._error = "no_component"; this._error = "no_component";
return; return;
@ -223,7 +233,7 @@ class HaPanelMy extends LitElement {
let url: string; let url: string;
try { try {
url = this._createRedirectUrl(redirect); url = this._createRedirectUrl();
} catch (err: any) { } catch (err: any) {
this._error = "url_error"; this._error = "url_error";
return; return;
@ -254,10 +264,16 @@ class HaPanelMy extends LitElement {
this.hass.localize( this.hass.localize(
"ui.panel.my.component_not_loaded", "ui.panel.my.component_not_loaded",
"integration", "integration",
domainToName( html`<a
this.hass.localize, target="_blank"
REDIRECTS[this.route.path.substr(1)].component! rel="noreferrer noopener"
) href=${documentationUrl(
this.hass,
`/integrations/${this._redirect!.component!}`
)}
>
${domainToName(this.hass.localize, this._redirect!.component!)}
</a>`
) || "This redirect is not supported."; ) || "This redirect is not supported.";
break; break;
case "no_supervisor": case "no_supervisor":
@ -280,18 +296,18 @@ class HaPanelMy extends LitElement {
return html``; return html``;
} }
private _createRedirectUrl(redirect: Redirect): string { private _createRedirectUrl(): string {
const params = this._createRedirectParams(redirect); const params = this._createRedirectParams();
return `${redirect.redirect}${params}`; return `${this._redirect!.redirect}${params}`;
} }
private _createRedirectParams(redirect: Redirect): string { private _createRedirectParams(): string {
const params = extractSearchParamsObject(); const params = extractSearchParamsObject();
if (!redirect.params && !Object.keys(params).length) { if (!this._redirect!.params && !Object.keys(params).length) {
return ""; return "";
} }
const resultParams = {}; const resultParams = {};
Object.entries(redirect.params || {}).forEach(([key, type]) => { Object.entries(this._redirect!.params || {}).forEach(([key, type]) => {
if (!params[key] || !this._checkParamType(type, params[key])) { if (!params[key] || !this._checkParamType(type, params[key])) {
throw Error(); throw Error();
} }