;
+
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public lovelace?: Lovelace;
@@ -279,6 +287,10 @@ class HUIRoot extends LitElement {
const curViewConfig =
typeof this._curView === "number" ? views[this._curView] : undefined;
+ const dashboardTitle = this.panel
+ ? getPanelTitle(this.hass, this.panel)
+ : undefined;
+
return html`
- ${this.config.title ||
+ ${dashboardTitle ||
this.hass!.localize("ui.panel.lovelace.editor.header")}
${this._renderActionItems()}
@@ -360,9 +372,11 @@ class HUIRoot extends LitElement {
)}
`
- : html`
- ${this.config.title}
-
`}
+ : html`
+
+ ${views[0]?.title ?? dashboardTitle}
+
+ `}
${this._renderActionItems()}
`}
@@ -758,8 +772,41 @@ class HUIRoot extends LitElement {
this.lovelace!.setEditMode(false);
}
- private _editLovelace() {
- showEditLovelaceDialog(this, this.lovelace!);
+ private async _editDashboard() {
+ const urlPath = this.route?.prefix.slice(1);
+ await this.hass.loadFragmentTranslation("config");
+ const dashboards = await fetchDashboards(this.hass);
+ const dashboard = dashboards.find((d) => d.url_path === urlPath);
+
+ showDashboardDetailDialog(this, {
+ dashboard,
+ urlPath,
+ updateDashboard: async (values) => {
+ await updateDashboard(this.hass!, dashboard!.id, values);
+ },
+ removeDashboard: async () => {
+ const confirm = await showConfirmationDialog(this, {
+ title: this.hass!.localize(
+ "ui.panel.config.lovelace.dashboards.confirm_delete_title",
+ { dashboard_title: dashboard!.title }
+ ),
+ text: this.hass!.localize(
+ "ui.panel.config.lovelace.dashboards.confirm_delete_text"
+ ),
+ confirmText: this.hass!.localize("ui.common.delete"),
+ destructive: true,
+ });
+ if (!confirm) {
+ return false;
+ }
+ try {
+ await deleteDashboard(this.hass!, dashboard!.id);
+ return true;
+ } catch (err: any) {
+ return false;
+ }
+ },
+ });
}
private _navigateToView(path: string | number, replace?: boolean) {
diff --git a/src/panels/lovelace/strategies/iframe/iframe-dashboard-strategy.ts b/src/panels/lovelace/strategies/iframe/iframe-dashboard-strategy.ts
index 471823af8c..7fbf6d82e5 100644
--- a/src/panels/lovelace/strategies/iframe/iframe-dashboard-strategy.ts
+++ b/src/panels/lovelace/strategies/iframe/iframe-dashboard-strategy.ts
@@ -12,7 +12,6 @@ export class IframeDashboardStrategy extends ReactiveElement {
config: IframeDashboardStrategyConfig
): Promise {
return {
- title: config.title,
views: [
{
strategy: config,
diff --git a/src/panels/lovelace/strategies/map/map-dashboard-strategy.ts b/src/panels/lovelace/strategies/map/map-dashboard-strategy.ts
index 91c217ce08..edc5bb2609 100644
--- a/src/panels/lovelace/strategies/map/map-dashboard-strategy.ts
+++ b/src/panels/lovelace/strategies/map/map-dashboard-strategy.ts
@@ -1,7 +1,6 @@
import { ReactiveElement } from "lit";
import { customElement } from "lit/decorators";
import { LovelaceConfig } from "../../../../data/lovelace/config/types";
-import { HomeAssistant } from "../../../../types";
import { MapViewStrategyConfig } from "./map-view-strategy";
export type MapDashboardStrategyConfig = MapViewStrategyConfig;
@@ -9,11 +8,9 @@ export type MapDashboardStrategyConfig = MapViewStrategyConfig;
@customElement("map-dashboard-strategy")
export class MapDashboardStrategy extends ReactiveElement {
static async generate(
- config: MapDashboardStrategyConfig,
- hass: HomeAssistant
+ config: MapDashboardStrategyConfig
): Promise {
return {
- title: hass.localize("panel.map"),
views: [
{
strategy: config,
diff --git a/src/panels/lovelace/strategies/original-states/original-states-dashboard-strategy.ts b/src/panels/lovelace/strategies/original-states/original-states-dashboard-strategy.ts
index 3f7faae9f4..f1daa56edd 100644
--- a/src/panels/lovelace/strategies/original-states/original-states-dashboard-strategy.ts
+++ b/src/panels/lovelace/strategies/original-states/original-states-dashboard-strategy.ts
@@ -1,9 +1,8 @@
import { ReactiveElement } from "lit";
import { customElement } from "lit/decorators";
import { LovelaceConfig } from "../../../../data/lovelace/config/types";
-import { HomeAssistant } from "../../../../types";
-import { OriginalStatesViewStrategyConfig } from "./original-states-view-strategy";
import { LovelaceStrategyEditor } from "../types";
+import { OriginalStatesViewStrategyConfig } from "./original-states-view-strategy";
export type OriginalStatesDashboardStrategyConfig =
OriginalStatesViewStrategyConfig;
@@ -11,11 +10,9 @@ export type OriginalStatesDashboardStrategyConfig =
@customElement("original-states-dashboard-strategy")
export class OriginalStatesDashboardStrategy extends ReactiveElement {
static async generate(
- config: OriginalStatesDashboardStrategyConfig,
- hass: HomeAssistant
+ config: OriginalStatesDashboardStrategyConfig
): Promise {
return {
- title: hass.config.location_name,
views: [
{
strategy: config,
diff --git a/src/state/panel-title-mixin.ts b/src/state/panel-title-mixin.ts
index 9a5bdfe6de..a31e3f7744 100644
--- a/src/state/panel-title-mixin.ts
+++ b/src/state/panel-title-mixin.ts
@@ -1,4 +1,4 @@
-import { getPanelTitle } from "../data/panel";
+import { getPanelTitleFromUrlPath } from "../data/panel";
import { Constructor, HomeAssistant } from "../types";
import { HassBaseEl } from "./hass-base-mixin";
@@ -24,7 +24,7 @@ export const panelTitleMixin = >(
oldHass.panelUrl !== this.hass.panelUrl ||
oldHass.localize !== this.hass.localize
) {
- setTitle(getPanelTitle(this.hass));
+ setTitle(getPanelTitleFromUrlPath(this.hass, this.hass.panelUrl));
}
}
};