mirror of
https://github.com/home-assistant/frontend.git
synced 2025-08-02 14:07:55 +00:00
Convert process-config-entities to TypeScript (#2113)
* Convert process-config-entities to TypeScript * Address review comments but have issues * Resolve merge conflicts * Address review comments Still a typing error which seems like it shouldn't exist * Hack to bypass type assertion
This commit is contained in:
parent
f461ad6d31
commit
5dc05129ef
@ -16,7 +16,7 @@ import { HomeAssistant } from "../../../types";
|
|||||||
import { EntityConfig, EntityRow } from "../entity-rows/types";
|
import { EntityConfig, EntityRow } from "../entity-rows/types";
|
||||||
import { LovelaceCard, LovelaceCardEditor } from "../types";
|
import { LovelaceCard, LovelaceCardEditor } from "../types";
|
||||||
import { LovelaceCardConfig } from "../../../data/lovelace";
|
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 createRowElement from "../common/create-row-element";
|
||||||
import computeDomain from "../../../common/entity/compute_domain";
|
import computeDomain from "../../../common/entity/compute_domain";
|
||||||
import applyThemesOnElement from "../../../common/dom/apply_themes_on_element";
|
import applyThemesOnElement from "../../../common/dom/apply_themes_on_element";
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||||
|
|
||||||
import createCardElement from "../common/create-card-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) {
|
function getEntities(hass, filterState, entities) {
|
||||||
return entities.filter((entityConf) => {
|
return entities.filter((entityConf) => {
|
||||||
|
@ -15,10 +15,10 @@ import { LovelaceCardConfig } from "../../../data/lovelace";
|
|||||||
import { longPress } from "../common/directives/long-press-directive";
|
import { longPress } from "../common/directives/long-press-directive";
|
||||||
import { EntityConfig } from "../entity-rows/types";
|
import { EntityConfig } from "../entity-rows/types";
|
||||||
import { toggleEntity } from "../common/entity/toggle-entity";
|
import { toggleEntity } from "../common/entity/toggle-entity";
|
||||||
|
import { processConfigEntities } from "../common/process-config-entities";
|
||||||
|
|
||||||
import computeStateDisplay from "../../../common/entity/compute_state_display";
|
import computeStateDisplay from "../../../common/entity/compute_state_display";
|
||||||
import computeStateName from "../../../common/entity/compute_state_name";
|
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 applyThemesOnElement from "../../../common/dom/apply_themes_on_element";
|
||||||
|
|
||||||
import "../../../components/entity/state-badge";
|
import "../../../components/entity/state-badge";
|
||||||
@ -71,7 +71,7 @@ export class HuiGlanceCard extends hassLocalizeLitMixin(LitElement)
|
|||||||
|
|
||||||
public setConfig(config: Config): void {
|
public setConfig(config: Config): void {
|
||||||
this._config = { theme: "default", ...config };
|
this._config = { theme: "default", ...config };
|
||||||
const entities = processConfigEntities(config.entities);
|
const entities = processConfigEntities<ConfigEntity>(config.entities);
|
||||||
|
|
||||||
for (const entity of entities) {
|
for (const entity of entities) {
|
||||||
if (
|
if (
|
||||||
|
@ -5,7 +5,7 @@ import "../../../components/ha-card";
|
|||||||
import "../../../components/state-history-charts";
|
import "../../../components/state-history-charts";
|
||||||
import "../../../data/ha-state-history-data";
|
import "../../../data/ha-state-history-data";
|
||||||
|
|
||||||
import processConfigEntities from "../common/process-config-entities";
|
import { processConfigEntities } from "../common/process-config-entities";
|
||||||
|
|
||||||
class HuiHistoryGraphCard extends PolymerElement {
|
class HuiHistoryGraphCard extends PolymerElement {
|
||||||
static get template() {
|
static get template() {
|
||||||
|
@ -6,7 +6,7 @@ import Leaflet from "leaflet";
|
|||||||
import "../../map/ha-entity-marker";
|
import "../../map/ha-entity-marker";
|
||||||
|
|
||||||
import setupLeafletMap from "../../../common/dom/setup-leaflet-map";
|
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 computeStateDomain from "../../../common/entity/compute_state_domain";
|
||||||
import computeStateName from "../../../common/entity/compute_state_name";
|
import computeStateName from "../../../common/entity/compute_state_name";
|
||||||
import debounce from "../../../common/util/debounce";
|
import debounce from "../../../common/util/debounce";
|
||||||
|
@ -14,7 +14,7 @@ import { toggleEntity } from "../common/entity/toggle-entity";
|
|||||||
|
|
||||||
import computeStateDisplay from "../../../common/entity/compute_state_display";
|
import computeStateDisplay from "../../../common/entity/compute_state_display";
|
||||||
import computeStateName from "../../../common/entity/compute_state_name";
|
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 computeDomain from "../../../common/entity/compute_domain";
|
||||||
import stateIcon from "../../../common/entity/state_icon";
|
import stateIcon from "../../../common/entity/state_icon";
|
||||||
|
|
||||||
|
@ -1,38 +0,0 @@
|
|||||||
// Parse array of entity objects from config
|
|
||||||
import isValidEntityId from "../../../common/entity/valid_entity_id";
|
|
||||||
|
|
||||||
export default function processConfigEntities(entities) {
|
|
||||||
if (!entities || !Array.isArray(entities)) {
|
|
||||||
throw new Error("Entities need to be an array");
|
|
||||||
}
|
|
||||||
|
|
||||||
return entities.map((entityConf, index) => {
|
|
||||||
if (
|
|
||||||
typeof entityConf === "object" &&
|
|
||||||
!Array.isArray(entityConf) &&
|
|
||||||
entityConf.type
|
|
||||||
) {
|
|
||||||
return entityConf;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof entityConf === "string") {
|
|
||||||
entityConf = { entity: entityConf };
|
|
||||||
} 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}.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isValidEntityId(entityConf.entity)) {
|
|
||||||
throw new Error(
|
|
||||||
`Invalid entity ID at position ${index}: ${entityConf.entity}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return entityConf;
|
|
||||||
});
|
|
||||||
}
|
|
48
src/panels/lovelace/common/process-config-entities.ts
Normal file
48
src/panels/lovelace/common/process-config-entities.ts
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user