mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-12 20:06:33 +00:00
Redirect old backup links to backup integration for non supervised (#12183)
This commit is contained in:
parent
8baa0b2a9b
commit
0b47d2c687
@ -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();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user