Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/panels/lovelace/cards/hui-entities-card.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { HomeAssistant } from "../../../types";
import { EntityConfig, EntityRow } from "../entity-rows/types";
import { LovelaceCard, LovelaceCardEditor } from "../types";
import { LovelaceCardConfig } from "../../../data/lovelace";
import processConfigEntities from "../common/process-config-entities";
import { processConfigEntities } from "../common/process-config-entities";
import createRowElement from "../common/create-row-element";
import computeDomain from "../../../common/entity/compute_domain";
import applyThemesOnElement from "../../../common/dom/apply_themes_on_element";
Expand Down
2 changes: 1 addition & 1 deletion src/panels/lovelace/cards/hui-entity-filter-card.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { PolymerElement } from "@polymer/polymer/polymer-element";

import createCardElement from "../common/create-card-element";
import processConfigEntities from "../common/process-config-entities";
import { processConfigEntities } from "../common/process-config-entities";

function getEntities(hass, filterState, entities) {
return entities.filter((entityConf) => {
Expand Down
4 changes: 2 additions & 2 deletions src/panels/lovelace/cards/hui-glance-card.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ import { LovelaceCardConfig } from "../../../data/lovelace";
import { longPress } from "../common/directives/long-press-directive";
import { EntityConfig } from "../entity-rows/types";
import { toggleEntity } from "../common/entity/toggle-entity";
import { processConfigEntities } from "../common/process-config-entities";

import computeStateDisplay from "../../../common/entity/compute_state_display";
import computeStateName from "../../../common/entity/compute_state_name";
import processConfigEntities from "../common/process-config-entities";
import applyThemesOnElement from "../../../common/dom/apply_themes_on_element";

import "../../../components/entity/state-badge";
Expand Down Expand Up @@ -68,7 +68,7 @@ export class HuiGlanceCard extends hassLocalizeLitMixin(LitElement)

public setConfig(config: Config): void {
this._config = { theme: "default", ...config };
const entities = processConfigEntities(config.entities);
const entities = processConfigEntities<ConfigEntity>(config.entities);

for (const entity of entities) {
if (
Expand Down
2 changes: 1 addition & 1 deletion src/panels/lovelace/cards/hui-history-graph-card.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import "../../../components/ha-card";
import "../../../components/state-history-charts";
import "../../../data/ha-state-history-data";

import processConfigEntities from "../common/process-config-entities";
import { processConfigEntities } from "../common/process-config-entities";

class HuiHistoryGraphCard extends PolymerElement {
static get template() {
Expand Down
2 changes: 1 addition & 1 deletion src/panels/lovelace/cards/hui-map-card.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import Leaflet from "leaflet";
import "../../map/ha-entity-marker";

import setupLeafletMap from "../../../common/dom/setup-leaflet-map";
import processConfigEntities from "../common/process-config-entities";
import { processConfigEntities } from "../common/process-config-entities";
import computeStateDomain from "../../../common/entity/compute_state_domain";
import computeStateName from "../../../common/entity/compute_state_name";
import debounce from "../../../common/util/debounce";
Expand Down
2 changes: 1 addition & 1 deletion src/panels/lovelace/cards/hui-picture-glance-card.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { toggleEntity } from "../common/entity/toggle-entity";

import computeStateDisplay from "../../../common/entity/compute_state_display";
import computeStateName from "../../../common/entity/compute_state_name";
import processConfigEntities from "../common/process-config-entities";
import { processConfigEntities } from "../common/process-config-entities";
import computeDomain from "../../../common/entity/compute_domain";
import stateIcon from "../../../common/entity/state_icon";

Expand Down
38 changes: 0 additions & 38 deletions src/panels/lovelace/common/process-config-entities.js

This file was deleted.

48 changes: 48 additions & 0 deletions src/panels/lovelace/common/process-config-entities.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// Parse array of entity objects from config
import isValidEntityId from "../../../common/entity/valid_entity_id";
import { EntityConfig } from "../entity-rows/types";

export const processConfigEntities = <T extends EntityConfig>(
entities: Array<T | string>
): T[] => {
if (!entities || !Array.isArray(entities)) {
throw new Error("Entities need to be an array");
}

return entities.map(
(entityConf, index): T => {
if (
typeof entityConf === "object" &&
!Array.isArray(entityConf) &&
entityConf.type
) {
return entityConf;
}

let config: T;

if (typeof entityConf === "string") {
// tslint:disable-next-line:no-object-literal-type-assertion
config = { entity: entityConf } as T;
} else if (typeof entityConf === "object" && !Array.isArray(entityConf)) {
if (!entityConf.entity) {
throw new Error(
`Entity object at position ${index} is missing entity field.`
);
}
} else {
throw new Error(`Invalid entity specified at position ${index}.`);
}

config = entityConf as T;

if (!isValidEntityId(config.entity)) {
throw new Error(
`Invalid entity ID at position ${index}: ${config.entity}`
);
}

return config;
}
);
};