From 0d404e0e37b8d0385ebb51e42696ca05b9806f4b Mon Sep 17 00:00:00 2001 From: Zack Arnett Date: Fri, 20 Mar 2020 07:41:28 -0400 Subject: [PATCH] Stub Configs: Add Type (#5206) * Add Type * Add return type * Lint * Fix map * map fix * Comments --- src/panels/lovelace/cards/hui-alarm-panel-card.ts | 3 ++- src/panels/lovelace/cards/hui-button-card.ts | 3 ++- src/panels/lovelace/cards/hui-conditional-card.ts | 5 +++-- src/panels/lovelace/cards/hui-entities-card.ts | 4 ++-- src/panels/lovelace/cards/hui-gauge-card.ts | 4 ++-- .../lovelace/cards/hui-history-graph-card.ts | 4 ++-- src/panels/lovelace/cards/hui-iframe-card.ts | 8 ++++++-- src/panels/lovelace/cards/hui-light-card.ts | 4 ++-- src/panels/lovelace/cards/hui-map-card.ts | 14 ++++++++++---- src/panels/lovelace/cards/hui-markdown-card.ts | 3 ++- .../lovelace/cards/hui-media-control-card.ts | 4 ++-- src/panels/lovelace/cards/hui-picture-card.ts | 3 ++- .../lovelace/cards/hui-picture-entity-card.ts | 3 ++- src/panels/lovelace/cards/hui-plant-status-card.ts | 4 ++-- src/panels/lovelace/cards/hui-sensor-card.ts | 4 ++-- .../lovelace/cards/hui-shopping-list-card.ts | 4 ++-- src/panels/lovelace/cards/hui-thermostat-card.ts | 4 ++-- .../lovelace/cards/hui-weather-forecast-card.ts | 4 ++-- src/panels/lovelace/cards/types.ts | 6 +++--- 19 files changed, 52 insertions(+), 36 deletions(-) diff --git a/src/panels/lovelace/cards/hui-alarm-panel-card.ts b/src/panels/lovelace/cards/hui-alarm-panel-card.ts index 66e11ab72b..85dceddccb 100644 --- a/src/panels/lovelace/cards/hui-alarm-panel-card.ts +++ b/src/panels/lovelace/cards/hui-alarm-panel-card.ts @@ -52,7 +52,7 @@ class HuiAlarmPanelCard extends LitElement implements LovelaceCard { hass: HomeAssistant, entities: string[], entitiesFallback: string[] - ) { + ): AlarmPanelCardConfig { const includeDomains = ["alarm_control_panel"]; const maxEntities = 1; const foundEntities = findEntities( @@ -64,6 +64,7 @@ class HuiAlarmPanelCard extends LitElement implements LovelaceCard { ); return { + type: "alarm-panel", states: ["arm_home", "arm_away"], entity: foundEntities[0] || "", }; diff --git a/src/panels/lovelace/cards/hui-button-card.ts b/src/panels/lovelace/cards/hui-button-card.ts index 7a988c30a3..976bb6bbe8 100644 --- a/src/panels/lovelace/cards/hui-button-card.ts +++ b/src/panels/lovelace/cards/hui-button-card.ts @@ -48,7 +48,7 @@ export class HuiButtonCard extends LitElement implements LovelaceCard { hass: HomeAssistant, entities: string[], entitiesFallback: string[] - ): object { + ): ButtonCardConfig { const maxEntities = 1; const foundEntities = findEntities( hass, @@ -59,6 +59,7 @@ export class HuiButtonCard extends LitElement implements LovelaceCard { ); return { + type: "button", tap_action: { action: "toggle" }, hold_action: { action: "more-info" }, show_icon: true, diff --git a/src/panels/lovelace/cards/hui-conditional-card.ts b/src/panels/lovelace/cards/hui-conditional-card.ts index f5e72e57b1..0dbe1aa687 100644 --- a/src/panels/lovelace/cards/hui-conditional-card.ts +++ b/src/panels/lovelace/cards/hui-conditional-card.ts @@ -15,10 +15,11 @@ class HuiConditionalCard extends HuiConditionalBase implements LovelaceCard { return document.createElement("hui-conditional-card-editor"); } - public static getStubConfig(): object { + public static getStubConfig(): ConditionalCardConfig { return { + type: "conditional", conditions: [], - card: {}, + card: { type: "" }, }; } diff --git a/src/panels/lovelace/cards/hui-entities-card.ts b/src/panels/lovelace/cards/hui-entities-card.ts index 5175d256dd..d738c4d2c4 100644 --- a/src/panels/lovelace/cards/hui-entities-card.ts +++ b/src/panels/lovelace/cards/hui-entities-card.ts @@ -42,7 +42,7 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard { hass: HomeAssistant, entities: string[], entitiesFallback: string[] - ) { + ): EntitiesCardConfig { const maxEntities = 3; const foundEntities = findEntities( hass, @@ -52,7 +52,7 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard { ["light", "switch", "sensor"] ); - return { title: "My Title", entities: foundEntities }; + return { type: "entities", title: "My Title", entities: foundEntities }; } @property() private _config?: EntitiesCardConfig; diff --git a/src/panels/lovelace/cards/hui-gauge-card.ts b/src/panels/lovelace/cards/hui-gauge-card.ts index b6a2cded8e..df0ac3dbb0 100644 --- a/src/panels/lovelace/cards/hui-gauge-card.ts +++ b/src/panels/lovelace/cards/hui-gauge-card.ts @@ -45,7 +45,7 @@ class HuiGaugeCard extends LitElement implements LovelaceCard { hass: HomeAssistant, entities: string[], entitiesFallback: string[] - ): object { + ): GaugeCardConfig { const includeDomains = ["sensor"]; const maxEntities = 1; const entityFilter = (stateObj: HassEntity): boolean => { @@ -61,7 +61,7 @@ class HuiGaugeCard extends LitElement implements LovelaceCard { entityFilter ); - return { entity: foundEntities[0] || "" }; + return { type: "gauge", entity: foundEntities[0] || "" }; } @property() public hass?: HomeAssistant; diff --git a/src/panels/lovelace/cards/hui-history-graph-card.ts b/src/panels/lovelace/cards/hui-history-graph-card.ts index 37a6705510..cd7d756fb1 100644 --- a/src/panels/lovelace/cards/hui-history-graph-card.ts +++ b/src/panels/lovelace/cards/hui-history-graph-card.ts @@ -35,7 +35,7 @@ export class HuiHistoryGraphCard extends LitElement implements LovelaceCard { hass: HomeAssistant, entities: string[], entitiesFallback: string[] - ): object { + ): HistoryGraphCardConfig { const includeDomains = ["sensor"]; const maxEntities = 1; const foundEntities = findEntities( @@ -46,7 +46,7 @@ export class HuiHistoryGraphCard extends LitElement implements LovelaceCard { includeDomains ); - return { entities: foundEntities }; + return { type: "history-graph", entities: foundEntities }; } @property() public hass?: HomeAssistant; diff --git a/src/panels/lovelace/cards/hui-iframe-card.ts b/src/panels/lovelace/cards/hui-iframe-card.ts index 8b00c34b09..7e804f0842 100644 --- a/src/panels/lovelace/cards/hui-iframe-card.ts +++ b/src/panels/lovelace/cards/hui-iframe-card.ts @@ -22,8 +22,12 @@ export class HuiIframeCard extends LitElement implements LovelaceCard { ); return document.createElement("hui-iframe-card-editor"); } - public static getStubConfig(): object { - return { url: "https://www.home-assistant.io", aspect_ratio: "50%" }; + public static getStubConfig(): IframeCardConfig { + return { + type: "iframe", + url: "https://www.home-assistant.io", + aspect_ratio: "50%", + }; } @property() protected _config?: IframeCardConfig; diff --git a/src/panels/lovelace/cards/hui-light-card.ts b/src/panels/lovelace/cards/hui-light-card.ts index c0d07f1042..7c01371fa3 100644 --- a/src/panels/lovelace/cards/hui-light-card.ts +++ b/src/panels/lovelace/cards/hui-light-card.ts @@ -45,7 +45,7 @@ export class HuiLightCard extends LitElement implements LovelaceCard { hass: HomeAssistant, entities: string[], entitiesFallback: string[] - ): object { + ): LightCardConfig { const includeDomains = ["light"]; const maxEntities = 1; const foundEntities = findEntities( @@ -56,7 +56,7 @@ export class HuiLightCard extends LitElement implements LovelaceCard { includeDomains ); - return { entity: foundEntities[0] || "" }; + return { type: "light", entity: foundEntities[0] || "" }; } @property() public hass?: HomeAssistant; diff --git a/src/panels/lovelace/cards/hui-map-card.ts b/src/panels/lovelace/cards/hui-map-card.ts index b6cbbe351c..ad1269d974 100644 --- a/src/panels/lovelace/cards/hui-map-card.ts +++ b/src/panels/lovelace/cards/hui-map-card.ts @@ -45,7 +45,7 @@ class HuiMapCard extends LitElement implements LovelaceCard { hass: HomeAssistant, entities: string[], entitiesFallback: string[] - ): object { + ): MapCardConfig { const includeDomains = ["device_tracker"]; const maxEntities = 2; const foundEntities = findEntities( @@ -56,7 +56,7 @@ class HuiMapCard extends LitElement implements LovelaceCard { includeDomains ); - return { entities: foundEntities }; + return { type: "map", entities: foundEntities }; } @property() public hass?: HomeAssistant; @@ -113,9 +113,10 @@ class HuiMapCard extends LitElement implements LovelaceCard { } public getCardSize(): number { - if (!this._config) { - return 3; + if (!this._config?.aspect_ratio) { + return 5; } + const ratio = parseAspectRatio(this._config.aspect_ratio); const ar = ratio && ratio.w > 0 && ratio.h > 0 @@ -206,6 +207,11 @@ class HuiMapCard extends LitElement implements LovelaceCard { this._attachObserver(); } + if (!this._config.aspect_ratio) { + root.style.paddingBottom = "100%"; + return; + } + const ratio = parseAspectRatio(this._config.aspect_ratio); root.style.paddingBottom = diff --git a/src/panels/lovelace/cards/hui-markdown-card.ts b/src/panels/lovelace/cards/hui-markdown-card.ts index 85b5045996..4ccdc3dbae 100644 --- a/src/panels/lovelace/cards/hui-markdown-card.ts +++ b/src/panels/lovelace/cards/hui-markdown-card.ts @@ -29,8 +29,9 @@ export class HuiMarkdownCard extends LitElement implements LovelaceCard { return document.createElement("hui-markdown-card-editor"); } - public static getStubConfig(): object { + public static getStubConfig(): MarkdownCardConfig { return { + type: "markdown", content: "The **Markdown** card allows you to write any text. You can style it **bold**, *italicized*, ~strikethrough~ etc. You can do images, links, and more.\n\nFor more information see the [Markdown Cheatsheet](https://commonmark.org/help).", }; diff --git a/src/panels/lovelace/cards/hui-media-control-card.ts b/src/panels/lovelace/cards/hui-media-control-card.ts index 28d04eeed1..63e16b9e16 100644 --- a/src/panels/lovelace/cards/hui-media-control-card.ts +++ b/src/panels/lovelace/cards/hui-media-control-card.ts @@ -177,7 +177,7 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard { hass: HomeAssistant, entities: string[], entitiesFallback: string[] - ): object { + ): MediaControlCardConfig { const includeDomains = ["media_player"]; const maxEntities = 1; const foundEntities = findEntities( @@ -188,7 +188,7 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard { includeDomains ); - return { entity: foundEntities[0] || "" }; + return { type: "media-control", entity: foundEntities[0] || "" }; } @property() public hass?: HomeAssistant; diff --git a/src/panels/lovelace/cards/hui-picture-card.ts b/src/panels/lovelace/cards/hui-picture-card.ts index aec27be4ac..8807c146c4 100644 --- a/src/panels/lovelace/cards/hui-picture-card.ts +++ b/src/panels/lovelace/cards/hui-picture-card.ts @@ -30,8 +30,9 @@ export class HuiPictureCard extends LitElement implements LovelaceCard { ); return document.createElement("hui-picture-card-editor"); } - public static getStubConfig(): object { + public static getStubConfig(): PictureCardConfig { return { + type: "picture", image: "https://demo.home-assistant.io/stub_config/t-shirt-promo.png", tap_action: { action: "none" }, hold_action: { action: "none" }, diff --git a/src/panels/lovelace/cards/hui-picture-entity-card.ts b/src/panels/lovelace/cards/hui-picture-entity-card.ts index 8d18cd79e3..f295f28d96 100644 --- a/src/panels/lovelace/cards/hui-picture-entity-card.ts +++ b/src/panels/lovelace/cards/hui-picture-entity-card.ts @@ -44,7 +44,7 @@ class HuiPictureEntityCard extends LitElement implements LovelaceCard { hass: HomeAssistant, entities: string[], entitiesFallback: string[] - ): object { + ): PictureEntityCardConfig { const maxEntities = 1; const foundEntities = findEntities( hass, @@ -55,6 +55,7 @@ class HuiPictureEntityCard extends LitElement implements LovelaceCard { ); return { + type: "picture-entity", entity: foundEntities[0] || "", image: "https://demo.home-assistant.io/stub_config/bedroom.png", }; diff --git a/src/panels/lovelace/cards/hui-plant-status-card.ts b/src/panels/lovelace/cards/hui-plant-status-card.ts index 074b6b7ec5..d1bcb57da8 100644 --- a/src/panels/lovelace/cards/hui-plant-status-card.ts +++ b/src/panels/lovelace/cards/hui-plant-status-card.ts @@ -45,7 +45,7 @@ class HuiPlantStatusCard extends LitElement implements LovelaceCard { hass: HomeAssistant, entities: string[], entitiesFallback: string[] - ): object { + ): PlantStatusCardConfig { const includeDomains = ["plant"]; const maxEntities = 1; const foundEntities = findEntities( @@ -56,7 +56,7 @@ class HuiPlantStatusCard extends LitElement implements LovelaceCard { includeDomains ); - return { entity: foundEntities[0] || "" }; + return { type: "plant-status", entity: foundEntities[0] || "" }; } @property() public hass?: HomeAssistant; diff --git a/src/panels/lovelace/cards/hui-sensor-card.ts b/src/panels/lovelace/cards/hui-sensor-card.ts index ed0548f7a3..2d5858d49f 100644 --- a/src/panels/lovelace/cards/hui-sensor-card.ts +++ b/src/panels/lovelace/cards/hui-sensor-card.ts @@ -180,7 +180,7 @@ class HuiSensorCard extends LitElement implements LovelaceCard { hass: HomeAssistant, entities: string[], entitiesFallback: string[] - ): object { + ): SensorCardConfig { const includeDomains = ["sensor"]; const maxEntities = 1; const entityFilter = (stateObj: HassEntity): boolean => { @@ -199,7 +199,7 @@ class HuiSensorCard extends LitElement implements LovelaceCard { entityFilter ); - return { entity: foundEntities[0] || "", graph: "line" }; + return { type: "sensor", entity: foundEntities[0] || "", graph: "line" }; } @property() public hass?: HomeAssistant; diff --git a/src/panels/lovelace/cards/hui-shopping-list-card.ts b/src/panels/lovelace/cards/hui-shopping-list-card.ts index 6e41e86c69..782707c8a4 100644 --- a/src/panels/lovelace/cards/hui-shopping-list-card.ts +++ b/src/panels/lovelace/cards/hui-shopping-list-card.ts @@ -37,8 +37,8 @@ class HuiShoppingListCard extends LitElement implements LovelaceCard { return document.createElement("hui-shopping-list-card-editor"); } - public static getStubConfig(): object { - return {}; + public static getStubConfig(): ShoppingListCardConfig { + return { type: "shopping-list" }; } @property() public hass?: HomeAssistant; diff --git a/src/panels/lovelace/cards/hui-thermostat-card.ts b/src/panels/lovelace/cards/hui-thermostat-card.ts index daa6a74860..fe8161ecc0 100644 --- a/src/panels/lovelace/cards/hui-thermostat-card.ts +++ b/src/panels/lovelace/cards/hui-thermostat-card.ts @@ -60,7 +60,7 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard { hass: HomeAssistant, entities: string[], entitiesFallback: string[] - ): object { + ): ThermostatCardConfig { const includeDomains = ["climate"]; const maxEntities = 1; const foundEntities = findEntities( @@ -71,7 +71,7 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard { includeDomains ); - return { entity: foundEntities[0] || "" }; + return { type: "thermostat", entity: foundEntities[0] || "" }; } @property() public hass?: HomeAssistant; diff --git a/src/panels/lovelace/cards/hui-weather-forecast-card.ts b/src/panels/lovelace/cards/hui-weather-forecast-card.ts index 0aa377518a..2e15f4cd90 100644 --- a/src/panels/lovelace/cards/hui-weather-forecast-card.ts +++ b/src/panels/lovelace/cards/hui-weather-forecast-card.ts @@ -77,7 +77,7 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard { hass: HomeAssistant, entities: string[], entitiesFallback: string[] - ): object { + ): WeatherForecastCardConfig { const includeDomains = ["weather"]; const maxEntities = 1; const foundEntities = findEntities( @@ -88,7 +88,7 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard { includeDomains ); - return { entity: foundEntities[0] || "" }; + return { type: "weather-forecast", entity: foundEntities[0] || "" }; } @property() public hass?: HomeAssistant; diff --git a/src/panels/lovelace/cards/types.ts b/src/panels/lovelace/cards/types.ts index 7bda4a1119..009616ddee 100644 --- a/src/panels/lovelace/cards/types.ts +++ b/src/panels/lovelace/cards/types.ts @@ -39,7 +39,7 @@ export interface EntitiesCardConfig extends LovelaceCardConfig { type: "entities"; show_header_toggle?: boolean; title?: string; - entities: EntitiesCardEntityConfig[]; + entities: Array; theme?: string; icon?: string; header?: LovelaceHeaderFooterConfig; @@ -135,8 +135,8 @@ export interface LightCardConfig extends LovelaceCardConfig { export interface MapCardConfig extends LovelaceCardConfig { type: "map"; - title: string; - aspect_ratio: string; + title?: string; + aspect_ratio?: string; default_zoom?: number; entities?: Array; geo_location_sources?: string[];