mirror of
https://github.com/home-assistant/frontend.git
synced 2025-08-02 14:07:55 +00:00
Find Entites: Filter Unavailable - Used and unused entities required (#5208)
* Update Find Entities * lint * Filter until max - entitiesFill-> entitiesFallback * Comment - Move unav - unk filter to picker * lint * Var name update * remove unnessary check * add it back and fix logic * use typescript ? in condition * comments * lint * Compute used once * pass in hass * Return set * fix merge * Optimize unused entities in find
This commit is contained in:
parent
eacf58b5a5
commit
f4211e3fa3
@ -25,7 +25,6 @@ import { AlarmPanelCardConfig } from "./types";
|
|||||||
import { PaperInputElement } from "@polymer/paper-input/paper-input";
|
import { PaperInputElement } from "@polymer/paper-input/paper-input";
|
||||||
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
import { LovelaceConfig } from "../../../data/lovelace";
|
|
||||||
import { fireEvent } from "../../../common/dom/fire_event";
|
import { fireEvent } from "../../../common/dom/fire_event";
|
||||||
|
|
||||||
const ICONS = {
|
const ICONS = {
|
||||||
@ -51,18 +50,16 @@ class HuiAlarmPanelCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
) {
|
) {
|
||||||
const includeDomains = ["alarm_control_panel"];
|
const includeDomains = ["alarm_control_panel"];
|
||||||
const maxEntities = 1;
|
const maxEntities = 1;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
includeDomains
|
includeDomains
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ import { ButtonCardConfig } from "./types";
|
|||||||
import { actionHandler } from "../common/directives/action-handler-directive";
|
import { actionHandler } from "../common/directives/action-handler-directive";
|
||||||
import { hasAction } from "../common/has-action";
|
import { hasAction } from "../common/has-action";
|
||||||
import { handleAction } from "../common/handle-action";
|
import { handleAction } from "../common/handle-action";
|
||||||
import { ActionHandlerEvent, LovelaceConfig } from "../../../data/lovelace";
|
import { ActionHandlerEvent } from "../../../data/lovelace";
|
||||||
import { computeActiveState } from "../../../common/entity/compute_active_state";
|
import { computeActiveState } from "../../../common/entity/compute_active_state";
|
||||||
import { iconColorCSS } from "../../../common/style/icon_color_css";
|
import { iconColorCSS } from "../../../common/style/icon_color_css";
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
@ -46,17 +46,15 @@ export class HuiButtonCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): object {
|
): object {
|
||||||
const maxEntities = 1;
|
const maxEntities = 1;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
["light", "switch"]
|
["light", "switch"]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -27,7 +27,6 @@ import { createHeaderFooterElement } from "../create-element/create-header-foote
|
|||||||
import { LovelaceHeaderFooterConfig } from "../header-footer/types";
|
import { LovelaceHeaderFooterConfig } from "../header-footer/types";
|
||||||
import { DOMAINS_TOGGLE } from "../../../common/const";
|
import { DOMAINS_TOGGLE } from "../../../common/const";
|
||||||
import { computeDomain } from "../../../common/entity/compute_domain";
|
import { computeDomain } from "../../../common/entity/compute_domain";
|
||||||
import { LovelaceConfig } from "../../../data/lovelace";
|
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
|
|
||||||
@customElement("hui-entities-card")
|
@customElement("hui-entities-card")
|
||||||
@ -41,17 +40,15 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
) {
|
) {
|
||||||
const maxEntities = 3;
|
const maxEntities = 3;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
["light", "switch", "sensor"]
|
["light", "switch", "sensor"]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@ import { fireEvent } from "../../../common/dom/fire_event";
|
|||||||
import { hasConfigOrEntityChanged } from "../common/has-changed";
|
import { hasConfigOrEntityChanged } from "../common/has-changed";
|
||||||
import { LovelaceCard, LovelaceCardEditor } from "../types";
|
import { LovelaceCard, LovelaceCardEditor } from "../types";
|
||||||
import { GaugeCardConfig } from "./types";
|
import { GaugeCardConfig } from "./types";
|
||||||
import { LovelaceConfig } from "../../../data/lovelace";
|
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
import { HassEntity } from "home-assistant-js-websocket/dist/types";
|
import { HassEntity } from "home-assistant-js-websocket/dist/types";
|
||||||
|
|
||||||
@ -44,9 +43,8 @@ class HuiGaugeCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): object {
|
): object {
|
||||||
const includeDomains = ["sensor"];
|
const includeDomains = ["sensor"];
|
||||||
const maxEntities = 1;
|
const maxEntities = 1;
|
||||||
@ -56,10 +54,9 @@ class HuiGaugeCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
includeDomains,
|
includeDomains,
|
||||||
entityFilter
|
entityFilter
|
||||||
);
|
);
|
||||||
|
@ -27,7 +27,7 @@ import { processConfigEntities } from "../common/process-config-entities";
|
|||||||
import { GlanceCardConfig, GlanceConfigEntity } from "./types";
|
import { GlanceCardConfig, GlanceConfigEntity } from "./types";
|
||||||
import { actionHandler } from "../common/directives/action-handler-directive";
|
import { actionHandler } from "../common/directives/action-handler-directive";
|
||||||
import { hasAction } from "../common/has-action";
|
import { hasAction } from "../common/has-action";
|
||||||
import { ActionHandlerEvent, LovelaceConfig } from "../../../data/lovelace";
|
import { ActionHandlerEvent } from "../../../data/lovelace";
|
||||||
import { handleAction } from "../common/handle-action";
|
import { handleAction } from "../common/handle-action";
|
||||||
import { computeDomain } from "../../../common/entity/compute_domain";
|
import { computeDomain } from "../../../common/entity/compute_domain";
|
||||||
import { UNAVAILABLE, UNKNOWN } from "../../../data/entity";
|
import { UNAVAILABLE, UNKNOWN } from "../../../data/entity";
|
||||||
@ -44,18 +44,16 @@ export class HuiGlanceCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): GlanceCardConfig {
|
): GlanceCardConfig {
|
||||||
const includeDomains = ["sensor"];
|
const includeDomains = ["sensor"];
|
||||||
const maxEntities = 3;
|
const maxEntities = 3;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
includeDomains
|
includeDomains
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -20,7 +20,6 @@ import { HomeAssistant } from "../../../types";
|
|||||||
import { HistoryGraphCardConfig } from "./types";
|
import { HistoryGraphCardConfig } from "./types";
|
||||||
import { LovelaceCard } from "../types";
|
import { LovelaceCard } from "../types";
|
||||||
import { EntityConfig } from "../entity-rows/types";
|
import { EntityConfig } from "../entity-rows/types";
|
||||||
import { LovelaceConfig } from "../../../data/lovelace";
|
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
|
|
||||||
@customElement("hui-history-graph-card")
|
@customElement("hui-history-graph-card")
|
||||||
@ -34,18 +33,16 @@ export class HuiHistoryGraphCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): object {
|
): object {
|
||||||
const includeDomains = ["sensor"];
|
const includeDomains = ["sensor"];
|
||||||
const maxEntities = 1;
|
const maxEntities = 1;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
includeDomains
|
includeDomains
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -29,7 +29,6 @@ import { toggleEntity } from "../common/entity/toggle-entity";
|
|||||||
import { LightCardConfig } from "./types";
|
import { LightCardConfig } from "./types";
|
||||||
import { supportsFeature } from "../../../common/entity/supports-feature";
|
import { supportsFeature } from "../../../common/entity/supports-feature";
|
||||||
import { SUPPORT_BRIGHTNESS } from "../../../data/light";
|
import { SUPPORT_BRIGHTNESS } from "../../../data/light";
|
||||||
import { LovelaceConfig } from "../../../data/lovelace";
|
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
import { UNAVAILABLE } from "../../../data/entity";
|
import { UNAVAILABLE } from "../../../data/entity";
|
||||||
|
|
||||||
@ -44,18 +43,16 @@ export class HuiLightCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): object {
|
): object {
|
||||||
const includeDomains = ["light"];
|
const includeDomains = ["light"];
|
||||||
const maxEntities = 1;
|
const maxEntities = 1;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
includeDomains
|
includeDomains
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@ import { EntityConfig } from "../entity-rows/types";
|
|||||||
import { processConfigEntities } from "../common/process-config-entities";
|
import { processConfigEntities } from "../common/process-config-entities";
|
||||||
import { MapCardConfig } from "./types";
|
import { MapCardConfig } from "./types";
|
||||||
import { classMap } from "lit-html/directives/class-map";
|
import { classMap } from "lit-html/directives/class-map";
|
||||||
import { LovelaceConfig } from "../../../data/lovelace";
|
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
|
|
||||||
@customElement("hui-map-card")
|
@customElement("hui-map-card")
|
||||||
@ -44,18 +43,16 @@ class HuiMapCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): object {
|
): object {
|
||||||
const includeDomains = ["device_tracker"];
|
const includeDomains = ["device_tracker"];
|
||||||
const maxEntities = 2;
|
const maxEntities = 2;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
includeDomains
|
includeDomains
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@ import { stateIcon } from "../../../common/entity/state_icon";
|
|||||||
import { hasConfigOrEntityChanged } from "../common/has-changed";
|
import { hasConfigOrEntityChanged } from "../common/has-changed";
|
||||||
import { contrast } from "../common/color/contrast";
|
import { contrast } from "../common/color/contrast";
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
import { LovelaceConfig } from "../../../data/lovelace";
|
|
||||||
import { UNAVAILABLE, UNKNOWN } from "../../../data/entity";
|
import { UNAVAILABLE, UNKNOWN } from "../../../data/entity";
|
||||||
import {
|
import {
|
||||||
SUPPORT_PAUSE,
|
SUPPORT_PAUSE,
|
||||||
@ -176,18 +175,16 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): object {
|
): object {
|
||||||
const includeDomains = ["media_player"];
|
const includeDomains = ["media_player"];
|
||||||
const maxEntities = 1;
|
const maxEntities = 1;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
includeDomains
|
includeDomains
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -15,24 +15,21 @@ import { HomeAssistant } from "../../../types";
|
|||||||
import { LovelaceElementConfig, LovelaceElement } from "../elements/types";
|
import { LovelaceElementConfig, LovelaceElement } from "../elements/types";
|
||||||
import { PictureElementsCardConfig } from "./types";
|
import { PictureElementsCardConfig } from "./types";
|
||||||
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
||||||
import { LovelaceConfig } from "../../../data/lovelace";
|
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
|
|
||||||
@customElement("hui-picture-elements-card")
|
@customElement("hui-picture-elements-card")
|
||||||
class HuiPictureElementsCard extends LitElement implements LovelaceCard {
|
class HuiPictureElementsCard extends LitElement implements LovelaceCard {
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): PictureElementsCardConfig {
|
): PictureElementsCardConfig {
|
||||||
const maxEntities = 1;
|
const maxEntities = 1;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
["sensor", "binary_sensor"]
|
["sensor", "binary_sensor"]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ import { PictureEntityCardConfig } from "./types";
|
|||||||
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
||||||
import { actionHandler } from "../common/directives/action-handler-directive";
|
import { actionHandler } from "../common/directives/action-handler-directive";
|
||||||
import { hasAction } from "../common/has-action";
|
import { hasAction } from "../common/has-action";
|
||||||
import { ActionHandlerEvent, LovelaceConfig } from "../../../data/lovelace";
|
import { ActionHandlerEvent } from "../../../data/lovelace";
|
||||||
import { handleAction } from "../common/handle-action";
|
import { handleAction } from "../common/handle-action";
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
|
|
||||||
@ -42,17 +42,15 @@ class HuiPictureEntityCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): object {
|
): object {
|
||||||
const maxEntities = 1;
|
const maxEntities = 1;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
["light", "switch"]
|
["light", "switch"]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ import { hasConfigOrEntityChanged } from "../common/has-changed";
|
|||||||
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
||||||
import { actionHandler } from "../common/directives/action-handler-directive";
|
import { actionHandler } from "../common/directives/action-handler-directive";
|
||||||
import { hasAction } from "../common/has-action";
|
import { hasAction } from "../common/has-action";
|
||||||
import { ActionHandlerEvent, LovelaceConfig } from "../../../data/lovelace";
|
import { ActionHandlerEvent } from "../../../data/lovelace";
|
||||||
import { handleAction } from "../common/handle-action";
|
import { handleAction } from "../common/handle-action";
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
|
|
||||||
@ -46,17 +46,15 @@ class HuiPictureGlanceCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): PictureGlanceCardConfig {
|
): PictureGlanceCardConfig {
|
||||||
const maxEntities = 2;
|
const maxEntities = 2;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
["sensor", "binary_sensor"]
|
["sensor", "binary_sensor"]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@ import { hasConfigOrEntityChanged } from "../common/has-changed";
|
|||||||
import { PlantStatusCardConfig, PlantAttributeTarget } from "./types";
|
import { PlantStatusCardConfig, PlantAttributeTarget } from "./types";
|
||||||
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
||||||
import { actionHandler } from "../common/directives/action-handler-directive";
|
import { actionHandler } from "../common/directives/action-handler-directive";
|
||||||
import { LovelaceConfig } from "../../../data/lovelace";
|
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
|
|
||||||
const SENSORS = {
|
const SENSORS = {
|
||||||
@ -44,18 +43,16 @@ class HuiPlantStatusCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): object {
|
): object {
|
||||||
const includeDomains = ["plant"];
|
const includeDomains = ["plant"];
|
||||||
const maxEntities = 1;
|
const maxEntities = 1;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
includeDomains
|
includeDomains
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -26,7 +26,6 @@ import { fetchRecent } from "../../../data/history";
|
|||||||
import { SensorCardConfig } from "./types";
|
import { SensorCardConfig } from "./types";
|
||||||
import { hasConfigOrEntityChanged } from "../common/has-changed";
|
import { hasConfigOrEntityChanged } from "../common/has-changed";
|
||||||
import { actionHandler } from "../common/directives/action-handler-directive";
|
import { actionHandler } from "../common/directives/action-handler-directive";
|
||||||
import { LovelaceConfig } from "../../../data/lovelace";
|
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
import { HassEntity } from "home-assistant-js-websocket/dist/types";
|
import { HassEntity } from "home-assistant-js-websocket/dist/types";
|
||||||
|
|
||||||
@ -179,9 +178,8 @@ class HuiSensorCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): object {
|
): object {
|
||||||
const includeDomains = ["sensor"];
|
const includeDomains = ["sensor"];
|
||||||
const maxEntities = 1;
|
const maxEntities = 1;
|
||||||
@ -194,10 +192,9 @@ class HuiSensorCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
includeDomains,
|
includeDomains,
|
||||||
entityFilter
|
entityFilter
|
||||||
);
|
);
|
||||||
|
@ -34,7 +34,6 @@ import {
|
|||||||
} from "../../../data/climate";
|
} from "../../../data/climate";
|
||||||
import { HassEntity } from "home-assistant-js-websocket";
|
import { HassEntity } from "home-assistant-js-websocket";
|
||||||
import { actionHandler } from "../common/directives/action-handler-directive";
|
import { actionHandler } from "../common/directives/action-handler-directive";
|
||||||
import { LovelaceConfig } from "../../../data/lovelace";
|
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
import { UNAVAILABLE } from "../../../data/entity";
|
import { UNAVAILABLE } from "../../../data/entity";
|
||||||
|
|
||||||
@ -59,18 +58,16 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): object {
|
): object {
|
||||||
const includeDomains = ["climate"];
|
const includeDomains = ["climate"];
|
||||||
const maxEntities = 1;
|
const maxEntities = 1;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
includeDomains
|
includeDomains
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -24,7 +24,6 @@ import { fireEvent } from "../../../common/dom/fire_event";
|
|||||||
import { toggleAttribute } from "../../../common/dom/toggle_attribute";
|
import { toggleAttribute } from "../../../common/dom/toggle_attribute";
|
||||||
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
||||||
import { actionHandler } from "../common/directives/action-handler-directive";
|
import { actionHandler } from "../common/directives/action-handler-directive";
|
||||||
import { LovelaceConfig } from "../../../data/lovelace";
|
|
||||||
import { findEntities } from "../common/find-entites";
|
import { findEntities } from "../common/find-entites";
|
||||||
|
|
||||||
const cardinalDirections = [
|
const cardinalDirections = [
|
||||||
@ -76,18 +75,16 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
public static getStubConfig(
|
public static getStubConfig(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
): object {
|
): object {
|
||||||
const includeDomains = ["weather"];
|
const includeDomains = ["weather"];
|
||||||
const maxEntities = 1;
|
const maxEntities = 1;
|
||||||
const foundEntities = findEntities(
|
const foundEntities = findEntities(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
maxEntities,
|
maxEntities,
|
||||||
entities,
|
entities,
|
||||||
entitiesFill,
|
entitiesFallback,
|
||||||
includeDomains
|
includeDomains
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ const addEntities = (entities: Set<string>, obj) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const computeUsedEntities = (config) => {
|
export const computeUsedEntities = (config: LovelaceConfig): Set<string> => {
|
||||||
const entities = new Set<string>();
|
const entities = new Set<string>();
|
||||||
config.views.forEach((view) => addEntities(entities, view));
|
config.views.forEach((view) => addEntities(entities, view));
|
||||||
return entities;
|
return entities;
|
||||||
@ -70,13 +70,26 @@ export const computeUsedEntities = (config) => {
|
|||||||
export const computeUnusedEntities = (
|
export const computeUnusedEntities = (
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: LovelaceConfig
|
config: LovelaceConfig
|
||||||
): string[] => {
|
): Set<string> => {
|
||||||
const usedEntities = computeUsedEntities(config);
|
const usedEntities = computeUsedEntities(config);
|
||||||
return Object.keys(hass.states)
|
const unusedEntities = calcUnusedEntities(hass, usedEntities);
|
||||||
.filter(
|
return unusedEntities;
|
||||||
(entity) =>
|
};
|
||||||
|
|
||||||
|
export const calcUnusedEntities = (
|
||||||
|
hass: HomeAssistant,
|
||||||
|
usedEntities: Set<string>
|
||||||
|
): Set<string> => {
|
||||||
|
const unusedEntities: Set<string> = new Set();
|
||||||
|
|
||||||
|
for (const entity of Object.keys(hass.states)) {
|
||||||
|
if (
|
||||||
!usedEntities.has(entity) &&
|
!usedEntities.has(entity) &&
|
||||||
!EXCLUDED_DOMAINS.includes(entity.split(".", 1)[0])
|
!EXCLUDED_DOMAINS.includes(entity.split(".", 1)[0])
|
||||||
)
|
) {
|
||||||
.sort();
|
unusedEntities.add(entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return unusedEntities;
|
||||||
};
|
};
|
||||||
|
@ -1,59 +1,72 @@
|
|||||||
import {
|
|
||||||
computeUnusedEntities,
|
|
||||||
computeUsedEntities,
|
|
||||||
} from "./compute-unused-entities";
|
|
||||||
import { HomeAssistant } from "../../../types";
|
import { HomeAssistant } from "../../../types";
|
||||||
import { LovelaceConfig } from "../../../data/lovelace";
|
|
||||||
import { computeDomain } from "../../../common/entity/compute_domain";
|
import { computeDomain } from "../../../common/entity/compute_domain";
|
||||||
import { HassEntity } from "home-assistant-js-websocket";
|
import { HassEntity } from "home-assistant-js-websocket";
|
||||||
|
|
||||||
|
const arrayFilter = (
|
||||||
|
array: any[],
|
||||||
|
conditions: Array<(value: any) => boolean>,
|
||||||
|
maxSize: number
|
||||||
|
) => {
|
||||||
|
if (!maxSize || maxSize > array.length) {
|
||||||
|
maxSize = array.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
const filteredArray: any[] = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < array.length && filteredArray.length < maxSize; i++) {
|
||||||
|
let meetsConditions = true;
|
||||||
|
|
||||||
|
for (const condition of conditions) {
|
||||||
|
if (!condition(array[i])) {
|
||||||
|
meetsConditions = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (meetsConditions) {
|
||||||
|
filteredArray.push(array[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return filteredArray;
|
||||||
|
};
|
||||||
|
|
||||||
export const findEntities = (
|
export const findEntities = (
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
|
||||||
maxEntities: number,
|
maxEntities: number,
|
||||||
entities?: string[],
|
entities: string[],
|
||||||
entitiesFill?: string[],
|
entitiesFallback: string[],
|
||||||
includeDomains?: string[],
|
includeDomains?: string[],
|
||||||
entityFilter?: (stateObj: HassEntity) => boolean
|
entityFilter?: (stateObj: HassEntity) => boolean
|
||||||
) => {
|
) => {
|
||||||
let entityIds: string[];
|
let entityIds: string[];
|
||||||
|
|
||||||
entityIds = !entities?.length
|
const conditions: Array<(value: string) => boolean> = [];
|
||||||
? computeUnusedEntities(hass, lovelaceConfig)
|
|
||||||
: entities;
|
|
||||||
|
|
||||||
if (includeDomains && includeDomains.length) {
|
if (includeDomains?.length) {
|
||||||
entityIds = entityIds.filter((eid) =>
|
conditions.push((eid) => includeDomains!.includes(computeDomain(eid)));
|
||||||
includeDomains!.includes(computeDomain(eid))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entityFilter) {
|
if (entityFilter) {
|
||||||
entityIds = entityIds.filter(
|
conditions.push(
|
||||||
(eid) => hass.states[eid] && entityFilter(hass.states[eid])
|
(eid) => hass.states[eid] && entityFilter(hass.states[eid])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entityIds.length < (maxEntities || 1)) {
|
entityIds = arrayFilter(entities, conditions, maxEntities);
|
||||||
let fillEntityIds =
|
|
||||||
entitiesFill && entitiesFill.length
|
|
||||||
? entitiesFill
|
|
||||||
: [...computeUsedEntities(lovelaceConfig)];
|
|
||||||
|
|
||||||
if (includeDomains && includeDomains.length) {
|
if (entityIds.length < maxEntities && entitiesFallback.length) {
|
||||||
fillEntityIds = fillEntityIds.filter((eid) =>
|
const fallbackEntityIds = findEntities(
|
||||||
includeDomains!.includes(computeDomain(eid))
|
hass,
|
||||||
|
maxEntities - entityIds.length,
|
||||||
|
entitiesFallback,
|
||||||
|
[],
|
||||||
|
includeDomains,
|
||||||
|
entityFilter
|
||||||
);
|
);
|
||||||
|
|
||||||
|
entityIds.push(...fallbackEntityIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entityFilter) {
|
return entityIds;
|
||||||
fillEntityIds = fillEntityIds.filter(
|
|
||||||
(eid) => hass.states[eid] && entityFilter(hass.states[eid])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
entityIds = [...entityIds, ...fillEntityIds];
|
|
||||||
}
|
|
||||||
|
|
||||||
return entityIds.slice(0, maxEntities);
|
|
||||||
};
|
};
|
||||||
|
@ -19,9 +19,10 @@ import { fireEvent } from "../../../../common/dom/fire_event";
|
|||||||
import { createCardElement } from "../../create-element/create-card-element";
|
import { createCardElement } from "../../create-element/create-card-element";
|
||||||
import { getCardStubConfig } from "../get-card-stub-config";
|
import { getCardStubConfig } from "../get-card-stub-config";
|
||||||
import {
|
import {
|
||||||
computeUnusedEntities,
|
|
||||||
computeUsedEntities,
|
computeUsedEntities,
|
||||||
|
calcUnusedEntities,
|
||||||
} from "../../common/compute-unused-entities";
|
} from "../../common/compute-unused-entities";
|
||||||
|
import { UNKNOWN, UNAVAILABLE } from "../../../../data/entity";
|
||||||
|
|
||||||
const previewCards: string[] = [
|
const previewCards: string[] = [
|
||||||
"alarm-panel",
|
"alarm-panel",
|
||||||
@ -137,8 +138,22 @@ export class HuiCardPicker extends LitElement {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._unusedEntities = computeUnusedEntities(this.hass, this.lovelace);
|
const usedEntities = computeUsedEntities(this.lovelace);
|
||||||
this._usedEntities = [...computeUsedEntities(this.lovelace)];
|
const unusedEntities = calcUnusedEntities(this.hass, usedEntities);
|
||||||
|
|
||||||
|
this._usedEntities = [...usedEntities].filter(
|
||||||
|
(eid) =>
|
||||||
|
this.hass!.states[eid] &&
|
||||||
|
this.hass!.states[eid].state !== UNKNOWN &&
|
||||||
|
this.hass!.states[eid].state !== UNAVAILABLE
|
||||||
|
);
|
||||||
|
this._unusedEntities = [...unusedEntities].filter(
|
||||||
|
(eid) =>
|
||||||
|
this.hass!.states[eid] &&
|
||||||
|
this.hass!.states[eid].state !== UNKNOWN &&
|
||||||
|
this.hass!.states[eid].state !== UNAVAILABLE
|
||||||
|
);
|
||||||
|
|
||||||
this.requestUpdate();
|
this.requestUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,10 +256,9 @@ export class HuiCardPicker extends LitElement {
|
|||||||
if (this.hass && this.lovelace) {
|
if (this.hass && this.lovelace) {
|
||||||
cardConfig = await getCardStubConfig(
|
cardConfig = await getCardStubConfig(
|
||||||
this.hass,
|
this.hass,
|
||||||
this.lovelace,
|
|
||||||
type,
|
type,
|
||||||
this._unusedEntities,
|
this._unusedEntities!,
|
||||||
this._usedEntities
|
this._usedEntities!
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!noElement) {
|
if (!noElement) {
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
import { HomeAssistant } from "../../../types";
|
import { HomeAssistant } from "../../../types";
|
||||||
import { LovelaceCardConfig, LovelaceConfig } from "../../../data/lovelace";
|
import { LovelaceCardConfig } from "../../../data/lovelace";
|
||||||
import { getCardElementClass } from "../create-element/create-card-element";
|
import { getCardElementClass } from "../create-element/create-card-element";
|
||||||
|
|
||||||
export const getCardStubConfig = async (
|
export const getCardStubConfig = async (
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
|
||||||
type: string,
|
type: string,
|
||||||
entities?: string[],
|
entities: string[],
|
||||||
entitiesFill?: string[]
|
entitiesFallback: string[]
|
||||||
): Promise<LovelaceCardConfig> => {
|
): Promise<LovelaceCardConfig> => {
|
||||||
let cardConfig: LovelaceCardConfig = { type };
|
let cardConfig: LovelaceCardConfig = { type };
|
||||||
|
|
||||||
@ -16,9 +15,8 @@ export const getCardStubConfig = async (
|
|||||||
if (elClass && elClass.getStubConfig) {
|
if (elClass && elClass.getStubConfig) {
|
||||||
const classStubConfig = elClass.getStubConfig(
|
const classStubConfig = elClass.getStubConfig(
|
||||||
hass,
|
hass,
|
||||||
lovelaceConfig,
|
|
||||||
entities,
|
entities,
|
||||||
entitiesFill
|
entitiesFallback
|
||||||
);
|
);
|
||||||
|
|
||||||
cardConfig = { ...cardConfig, ...classStubConfig };
|
cardConfig = { ...cardConfig, ...classStubConfig };
|
||||||
|
@ -201,7 +201,8 @@ export class HuiUnusedEntities extends LitElement {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this._selectedEntities = [];
|
this._selectedEntities = [];
|
||||||
this._unusedEntities = computeUnusedEntities(this.hass, this._config!);
|
const unusedEntities = computeUnusedEntities(this.hass, this._config!);
|
||||||
|
this._unusedEntities = [...unusedEntities].sort();
|
||||||
}
|
}
|
||||||
|
|
||||||
private _handleSelectionChanged(
|
private _handleSelectionChanged(
|
||||||
|
@ -40,9 +40,8 @@ export interface LovelaceCard extends HTMLElement {
|
|||||||
export interface LovelaceCardConstructor extends Constructor<LovelaceCard> {
|
export interface LovelaceCardConstructor extends Constructor<LovelaceCard> {
|
||||||
getStubConfig?: (
|
getStubConfig?: (
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
lovelaceConfig: LovelaceConfig,
|
entities: string[],
|
||||||
entities?: string[],
|
entitiesFallback: string[]
|
||||||
entitiesFill?: string[]
|
|
||||||
) => LovelaceCardConfig;
|
) => LovelaceCardConfig;
|
||||||
getConfigElement?: () => LovelaceCardEditor;
|
getConfigElement?: () => LovelaceCardEditor;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user