From ec939abd97d6ef97db25b7eac6076851bd2b33be Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Fri, 25 Sep 2020 11:03:49 +0200 Subject: [PATCH 1/2] Bring back lazy load more info + helper --- gallery/src/components/more-info-content.ts | 2 +- src/common/entity/state_more_info_type.ts | 15 ------ src/dialogs/more-info/ha-more-info-dialog.ts | 31 +++--------- .../more-info/state_more_info_control.ts | 50 +++++++++++++++++++ src/panels/lovelace/custom-card-helpers.ts | 1 + .../entity/state_more_info_type_test.ts | 2 +- 6 files changed, 59 insertions(+), 42 deletions(-) delete mode 100644 src/common/entity/state_more_info_type.ts create mode 100644 src/dialogs/more-info/state_more_info_control.ts diff --git a/gallery/src/components/more-info-content.ts b/gallery/src/components/more-info-content.ts index 6d7271155eca..549ac4fa2d2e 100644 --- a/gallery/src/components/more-info-content.ts +++ b/gallery/src/components/more-info-content.ts @@ -1,7 +1,7 @@ import { HassEntity } from "home-assistant-js-websocket"; import { property, PropertyValues, UpdatingElement } from "lit-element"; import dynamicContentUpdater from "../../../src/common/dom/dynamic_content_updater"; -import { stateMoreInfoType } from "../../../src/common/entity/state_more_info_type"; +import { stateMoreInfoType } from "../../../src/dialogs/more-info/state_more_info_control"; import "../../../src/dialogs/more-info/controls/more-info-alarm_control_panel"; import "../../../src/dialogs/more-info/controls/more-info-automation"; import "../../../src/dialogs/more-info/controls/more-info-camera"; diff --git a/src/common/entity/state_more_info_type.ts b/src/common/entity/state_more_info_type.ts deleted file mode 100644 index 170b83052d11..000000000000 --- a/src/common/entity/state_more_info_type.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { HassEntity } from "home-assistant-js-websocket"; -import { DOMAINS_HIDE_MORE_INFO, DOMAINS_WITH_MORE_INFO } from "../const"; -import { computeStateDomain } from "./compute_state_domain"; - -export const stateMoreInfoType = (stateObj: HassEntity) => { - const domain = computeStateDomain(stateObj); - - if (DOMAINS_WITH_MORE_INFO.includes(domain)) { - return domain; - } - if (DOMAINS_HIDE_MORE_INFO.includes(domain)) { - return "hidden"; - } - return "default"; -}; diff --git a/src/dialogs/more-info/ha-more-info-dialog.ts b/src/dialogs/more-info/ha-more-info-dialog.ts index 7ff369db5521..a771fe9583e6 100644 --- a/src/dialogs/more-info/ha-more-info-dialog.ts +++ b/src/dialogs/more-info/ha-more-info-dialog.ts @@ -21,7 +21,10 @@ import { dynamicElement } from "../../common/dom/dynamic-element-directive"; import { fireEvent } from "../../common/dom/fire_event"; import { computeDomain } from "../../common/entity/compute_domain"; import { computeStateName } from "../../common/entity/compute_state_name"; -import { stateMoreInfoType } from "../../common/entity/state_more_info_type"; +import { + stateMoreInfoType, + importMoreInfoControl, +} from "./state_more_info_control"; import { navigate } from "../../common/navigate"; import "../../components/ha-dialog"; import "../../components/ha-header-bar"; @@ -35,29 +38,6 @@ import { showConfirmationDialog } from "../generic/show-dialog-box"; import "./ha-more-info-history"; import "./ha-more-info-logbook"; -import "./controls/more-info-alarm_control_panel"; -import "./controls/more-info-automation"; -import "./controls/more-info-camera"; -import "./controls/more-info-climate"; -import "./controls/more-info-configurator"; -import "./controls/more-info-counter"; -import "./controls/more-info-cover"; -import "./controls/more-info-fan"; -import "./controls/more-info-group"; -import "./controls/more-info-humidifier"; -import "./controls/more-info-input_datetime"; -import "./controls/more-info-light"; -import "./controls/more-info-lock"; -import "./controls/more-info-media_player"; -import "./controls/more-info-person"; -import "./controls/more-info-script"; -import "./controls/more-info-sun"; -import "./controls/more-info-timer"; -import "./controls/more-info-vacuum"; -import "./controls/more-info-water_heater"; -import "./controls/more-info-weather"; -import "./controls/more-info-default"; - const DOMAINS_NO_INFO = ["camera", "configurator"]; const EDITABLE_DOMAINS_WITH_ID = ["scene", "automation"]; const EDITABLE_DOMAINS = ["script"]; @@ -104,7 +84,8 @@ export class MoreInfoDialog extends LitElement { this._moreInfoType = stateObj.attributes.custom_ui_more_info; } else { const type = stateMoreInfoType(stateObj); - this._moreInfoType = `more-info-${type}`; + importMoreInfoControl(type); + this._moreInfoType = type === "hidden" ? undefined : `more-info-${type}`; } } diff --git a/src/dialogs/more-info/state_more_info_control.ts b/src/dialogs/more-info/state_more_info_control.ts new file mode 100644 index 000000000000..27137092ae46 --- /dev/null +++ b/src/dialogs/more-info/state_more_info_control.ts @@ -0,0 +1,50 @@ +import { HassEntity } from "home-assistant-js-websocket"; +import { + DOMAINS_HIDE_MORE_INFO, + DOMAINS_WITH_MORE_INFO, +} from "../../common/const"; +import { computeStateDomain } from "../../common/entity/compute_state_domain"; +import "./controls/more-info-default"; + +const MORE_INFO_CONTROL_IMPORT = { + alarm_control_panel: () => import("./controls/more-info-alarm_control_panel"), + automation: () => import("./controls/more-info-automation"), + camera: () => import("./controls/more-info-camera"), + climate: () => import("./controls/more-info-climate"), + configurator: () => import("./controls/more-info-configurator"), + counter: () => import("./controls/more-info-counter"), + cover: () => import("./controls/more-info-cover"), + fan: () => import("./controls/more-info-fan"), + group: () => import("./controls/more-info-group"), + humidifier: () => import("./controls/more-info-humidifier"), + input_datetime: () => import("./controls/more-info-input_datetime"), + light: () => import("./controls/more-info-light"), + lock: () => import("./controls/more-info-lock"), + media_player: () => import("./controls/more-info-media_player"), + person: () => import("./controls/more-info-person"), + script: () => import("./controls/more-info-script"), + sun: () => import("./controls/more-info-sun"), + timer: () => import("./controls/more-info-timer"), + vacuum: () => import("./controls/more-info-vacuum"), + water_heater: () => import("./controls/more-info-water_heater"), + weather: () => import("./controls/more-info-weather"), +}; + +export const stateMoreInfoType = (stateObj: HassEntity): string => { + const domain = computeStateDomain(stateObj); + + if (DOMAINS_WITH_MORE_INFO.includes(domain)) { + return domain; + } + if (DOMAINS_HIDE_MORE_INFO.includes(domain)) { + return "hidden"; + } + return "default"; +}; + +export const importMoreInfoControl = (type: string) => { + if (!(type in MORE_INFO_CONTROL_IMPORT)) { + return; + } + MORE_INFO_CONTROL_IMPORT[type](); +}; diff --git a/src/panels/lovelace/custom-card-helpers.ts b/src/panels/lovelace/custom-card-helpers.ts index 2896d349b204..36efb72a7083 100644 --- a/src/panels/lovelace/custom-card-helpers.ts +++ b/src/panels/lovelace/custom-card-helpers.ts @@ -3,3 +3,4 @@ export { createCardElement } from "./create-element/create-card-element"; export { createHeaderFooterElement } from "./create-element/create-header-footer-element"; export { createHuiElement } from "./create-element/create-hui-element"; export { createRowElement } from "./create-element/create-row-element"; +export { importMoreInfoControl } from "../../dialogs/more-info/state_more_info_control"; diff --git a/test-mocha/common/entity/state_more_info_type_test.ts b/test-mocha/common/entity/state_more_info_type_test.ts index 4774fcf9517d..c89661d88cc6 100644 --- a/test-mocha/common/entity/state_more_info_type_test.ts +++ b/test-mocha/common/entity/state_more_info_type_test.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; -import { stateMoreInfoType } from "../../../src/common/entity/state_more_info_type"; +import { stateMoreInfoType } from "../../../src/dialogs/more-info/state_more_info_control"; describe("stateMoreInfoType", () => { it("Returns media_player for media_player states", () => { From 3fc4c52288e09ca0b4e4f7b64dfe96629ccceb0e Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Fri, 25 Sep 2020 11:51:36 +0200 Subject: [PATCH 2/2] Fix test --- src/dialogs/more-info/ha-more-info-dialog.ts | 1 + src/dialogs/more-info/state_more_info_control.ts | 9 ++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/dialogs/more-info/ha-more-info-dialog.ts b/src/dialogs/more-info/ha-more-info-dialog.ts index a771fe9583e6..9851cf2b5b2f 100644 --- a/src/dialogs/more-info/ha-more-info-dialog.ts +++ b/src/dialogs/more-info/ha-more-info-dialog.ts @@ -37,6 +37,7 @@ import { HomeAssistant } from "../../types"; import { showConfirmationDialog } from "../generic/show-dialog-box"; import "./ha-more-info-history"; import "./ha-more-info-logbook"; +import "./controls/more-info-default"; const DOMAINS_NO_INFO = ["camera", "configurator"]; const EDITABLE_DOMAINS_WITH_ID = ["scene", "automation"]; diff --git a/src/dialogs/more-info/state_more_info_control.ts b/src/dialogs/more-info/state_more_info_control.ts index 27137092ae46..c2b97d9c5931 100644 --- a/src/dialogs/more-info/state_more_info_control.ts +++ b/src/dialogs/more-info/state_more_info_control.ts @@ -1,12 +1,11 @@ -import { HassEntity } from "home-assistant-js-websocket"; +import type { HassEntity } from "home-assistant-js-websocket"; import { DOMAINS_HIDE_MORE_INFO, DOMAINS_WITH_MORE_INFO, } from "../../common/const"; import { computeStateDomain } from "../../common/entity/compute_state_domain"; -import "./controls/more-info-default"; -const MORE_INFO_CONTROL_IMPORT = { +const LAZY_LOADED_MORE_INFO_CONTROL = { alarm_control_panel: () => import("./controls/more-info-alarm_control_panel"), automation: () => import("./controls/more-info-automation"), camera: () => import("./controls/more-info-camera"), @@ -43,8 +42,8 @@ export const stateMoreInfoType = (stateObj: HassEntity): string => { }; export const importMoreInfoControl = (type: string) => { - if (!(type in MORE_INFO_CONTROL_IMPORT)) { + if (!(type in LAZY_LOADED_MORE_INFO_CONTROL)) { return; } - MORE_INFO_CONTROL_IMPORT[type](); + LAZY_LOADED_MORE_INFO_CONTROL[type](); };