mirror of
https://github.com/home-assistant/frontend.git
synced 2025-08-01 13:37:47 +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 { 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";
|
||||
|
@ -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) => {
|
||||
|
@ -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";
|
||||
@ -71,7 +71,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 (
|
||||
|
@ -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() {
|
||||
|
@ -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";
|
||||
|
@ -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";
|
||||
|
||||
|
@ -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