From 3e7011e2c8bfc023bc4e3d7dd72dc0107d08a846 Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Fri, 30 Jan 2026 11:48:47 +0100 Subject: [PATCH] Fix demo because of new default panel (#29279) --- demo/src/ha-demo.ts | 6 ++++++ demo/src/stubs/frontend.ts | 21 +++++++++++++++++++++ demo/src/stubs/template.ts | 12 +++++++++++- src/fake_data/demo_panels.ts | 8 ++++++++ src/fake_data/provide_hass.ts | 6 ++++-- 5 files changed, 50 insertions(+), 3 deletions(-) diff --git a/demo/src/ha-demo.ts b/demo/src/ha-demo.ts index 3406e0270d..1d2a735279 100644 --- a/demo/src/ha-demo.ts +++ b/demo/src/ha-demo.ts @@ -9,11 +9,14 @@ import { selectedDemoConfig } from "./configs/demo-configs"; import { mockAreaRegistry } from "./stubs/area_registry"; import { mockAuth } from "./stubs/auth"; import { mockConfigEntries } from "./stubs/config_entries"; +import { mockDeviceRegistry } from "./stubs/device_registry"; import { mockEnergy } from "./stubs/energy"; import { energyEntities } from "./stubs/entities"; import { mockEntityRegistry } from "./stubs/entity_registry"; import { mockEvents } from "./stubs/events"; +import { mockFloorRegistry } from "./stubs/floor_registry"; import { mockFrontend } from "./stubs/frontend"; +import { mockLabelRegistry } from "./stubs/label_registry"; import { mockIcons } from "./stubs/icons"; import { mockHistory } from "./stubs/history"; import { mockLovelace } from "./stubs/lovelace"; @@ -60,6 +63,9 @@ export class HaDemo extends HomeAssistantAppEl { mockPersistentNotification(hass); mockConfigEntries(hass); mockAreaRegistry(hass); + mockDeviceRegistry(hass); + mockFloorRegistry(hass); + mockLabelRegistry(hass); mockEntityRegistry(hass, [ { config_entry_id: "co2signal", diff --git a/demo/src/stubs/frontend.ts b/demo/src/stubs/frontend.ts index 70a4d5a0d2..c4717bbbbe 100644 --- a/demo/src/stubs/frontend.ts +++ b/demo/src/stubs/frontend.ts @@ -27,4 +27,25 @@ export const mockFrontend = (hass: MockHomeAssistant) => { // eslint-disable-next-line @typescript-eslint/no-empty-function return () => {}; }); + hass.mockWS( + "frontend/subscribe_system_data", + (_msg, currentHass, onChange) => { + onChange?.({ + value: currentHass.systemData, + }); + // eslint-disable-next-line @typescript-eslint/no-empty-function + return () => {}; + } + ); + hass.mockWS("labs/subscribe", (_msg, _currentHass, onChange) => { + onChange?.({ + preview_feature: _msg.preview_feature, + domain: _msg.domain, + enabled: false, + is_built_in: true, + }); + // eslint-disable-next-line @typescript-eslint/no-empty-function + return () => {}; + }); + hass.mockWS("repairs/list_issues", () => ({ issues: [] })); }; diff --git a/demo/src/stubs/template.ts b/demo/src/stubs/template.ts index ca77017c1a..82608cae4e 100644 --- a/demo/src/stubs/template.ts +++ b/demo/src/stubs/template.ts @@ -7,8 +7,18 @@ export const mockTemplate = (hass: MockHomeAssistant) => { }) ); hass.mockWS("render_template", (msg, _hass, onChange) => { + let result = msg.template; + // Simple variable substitution for demo purposes + if (msg.variables) { + for (const [key, value] of Object.entries(msg.variables)) { + result = result.replace( + new RegExp(`\\{\\{\\s*${key}\\s*\\}\\}`, "g"), + String(value) + ); + } + } onChange!({ - result: msg.template, + result, listeners: { all: false, domains: [], entities: [], time: false }, }); // eslint-disable-next-line @typescript-eslint/no-empty-function diff --git a/src/fake_data/demo_panels.ts b/src/fake_data/demo_panels.ts index cf99cb94f1..a48754f4d0 100644 --- a/src/fake_data/demo_panels.ts +++ b/src/fake_data/demo_panels.ts @@ -8,6 +8,14 @@ export const demoPanels: Panels = { config: { mode: "storage" }, url_path: "lovelace", }, + home: { + component_name: "home", + icon: "mdi:home", + title: "home", + default_visible: false, + config: null, + url_path: "home", + }, "dev-state": { component_name: "dev-state", icon: null, diff --git a/src/fake_data/provide_hass.ts b/src/fake_data/provide_hass.ts index 5f7c5f1628..53c117b6c2 100644 --- a/src/fake_data/provide_hass.ts +++ b/src/fake_data/provide_hass.ts @@ -7,7 +7,6 @@ import { fireEvent } from "../common/dom/fire_event"; import { computeFormatFunctions } from "../common/translations/entity-state"; import { computeLocalize } from "../common/translations/localize"; import type { EntityRegistryDisplayEntry } from "../data/entity/entity_registry"; -import { DEFAULT_PANEL } from "../data/panel"; import { DateFormat, FirstWeekday, @@ -268,7 +267,9 @@ export const provideHass = ( name: "Demo User", }, panelUrl: "lovelace", - defaultPanel: DEFAULT_PANEL, + systemData: { + default_panel: "lovelace", + }, language: localLanguage, selectedLanguage: localLanguage, locale: { @@ -367,6 +368,7 @@ export const provideHass = ( areas: {}, devices: {}, entities: {}, + floors: {}, formatEntityState: (stateObj, state) => (state !== null ? state : stateObj.state) ?? "", formatEntityAttributeName: (_stateObj, attribute) => attribute,