From d6b9b16f02c1628156fb5775b1d3275e75835b69 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 6 Dec 2021 18:02:32 +0100 Subject: [PATCH] Add toggle for camera view in area card (#10810) Co-authored-by: Zack Barett --- src/panels/lovelace/cards/hui-area-card.ts | 10 +++++--- src/panels/lovelace/cards/types.ts | 1 + .../config-elements/hui-area-card-editor.ts | 24 +++++++++++++++++-- .../lovelace/editor/get-card-stub-config.ts | 2 +- .../get-headerfooter-stub-config.ts | 2 +- src/panels/lovelace/editor/lovelace-cards.ts | 1 + src/translations/en.json | 3 ++- 7 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/panels/lovelace/cards/hui-area-card.ts b/src/panels/lovelace/cards/hui-area-card.ts index 617f6336fc..478201625d 100644 --- a/src/panels/lovelace/cards/hui-area-card.ts +++ b/src/panels/lovelace/cards/hui-area-card.ts @@ -25,6 +25,7 @@ import { computeDomain } from "../../../common/entity/compute_domain"; import { domainIcon } from "../../../common/entity/domain_icon"; import { navigate } from "../../../common/navigate"; import { formatNumber } from "../../../common/number/format_number"; +import { subscribeOne } from "../../../common/util/subscribe-one"; import "../../../components/entity/state-badge"; import "../../../components/ha-card"; import "../../../components/ha-icon-button"; @@ -83,8 +84,11 @@ export class HuiAreaCard return document.createElement("hui-area-card-editor"); } - public static getStubConfig(): AreaCardConfig { - return { type: "area", area: "" }; + public static async getStubConfig( + hass: HomeAssistant + ): Promise { + const areas = await subscribeOne(hass.connection, subscribeAreaRegistry); + return { type: "area", area: areas[0]?.area_id || "" }; } @property({ attribute: false }) public hass!: HomeAssistant; @@ -358,7 +362,7 @@ export class HuiAreaCard }); let cameraEntityId: string | undefined; - if ("camera" in entitiesByDomain) { + if (this._config.show_camera && "camera" in entitiesByDomain) { cameraEntityId = entitiesByDomain.camera[0].entity_id; } diff --git a/src/panels/lovelace/cards/types.ts b/src/panels/lovelace/cards/types.ts index cf5ecb5198..9762d85845 100644 --- a/src/panels/lovelace/cards/types.ts +++ b/src/panels/lovelace/cards/types.ts @@ -79,6 +79,7 @@ export interface EntitiesCardConfig extends LovelaceCardConfig { export interface AreaCardConfig extends LovelaceCardConfig { area: string; navigation_path?: string; + show_camera?: boolean; } export interface ButtonCardConfig extends LovelaceCardConfig { diff --git a/src/panels/lovelace/editor/config-elements/hui-area-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-area-card-editor.ts index b624018a5a..c2e9bb7564 100644 --- a/src/panels/lovelace/editor/config-elements/hui-area-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-area-card-editor.ts @@ -1,7 +1,7 @@ import "@polymer/paper-input/paper-input"; import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { assert, assign, object, optional, string } from "superstruct"; +import { assert, assign, boolean, object, optional, string } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-area-picker"; import { HomeAssistant } from "../../../../types"; @@ -11,6 +11,8 @@ import { LovelaceCardEditor } from "../../types"; import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { EditorTarget } from "../types"; import { configElementStyle } from "./config-elements-style"; +import "../../../../components/ha-formfield"; +import { computeRTLDirection } from "../../../../common/util/compute_rtl"; const cardConfigStruct = assign( baseLovelaceCardConfig, @@ -18,6 +20,7 @@ const cardConfigStruct = assign( area: optional(string()), navigation_path: optional(string()), theme: optional(string()), + show_camera: optional(boolean()), }) ); @@ -47,6 +50,10 @@ export class HuiAreaCardEditor return this._config!.theme || ""; } + get _show_camera(): boolean { + return this._config!.show_camera || false; + } + protected render(): TemplateResult { if (!this.hass || !this._config) { return html``; @@ -64,6 +71,18 @@ export class HuiAreaCardEditor )} @value-changed=${this._valueChanged} > + + +