51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
import { HassEntity } from 'home-assistant-js-websocket';
|
|
import { computeDomain } from './compute-domain.js';
|
|
import { Entity } from './registry/entity/types.js';
|
|
import { HomeAssistant } from './types.js';
|
|
|
|
/**
|
|
* Get the translation of an entity state. Inspired by:
|
|
* https://github.com/home-assistant/frontend/blob/dev/src/common/entity/compute_state_display.ts#L204-L218
|
|
*
|
|
* This may no longer be necessary to custom implement if `custom-card-helpers`
|
|
* is updated to reflect how the Home Assistant frontend now [as of 2023-03-04]
|
|
* computes state display (e.g. supports usage of `translation_key`).
|
|
*
|
|
* https://github.com/custom-cards/custom-card-helpers/blob/master/src/compute-state-display.ts
|
|
*
|
|
*/
|
|
export const getEntityStateTranslation = (
|
|
hass: HomeAssistant,
|
|
entityID: string,
|
|
options?: {
|
|
entity?: Entity;
|
|
state?: string;
|
|
},
|
|
): string | null => {
|
|
const stateObj: HassEntity | undefined = hass.states[entityID];
|
|
const state = options?.state ? options.state : stateObj ? stateObj.state : null;
|
|
|
|
if (!state) {
|
|
return null;
|
|
}
|
|
|
|
const domain = computeDomain(entityID);
|
|
const attributes = stateObj ? stateObj.attributes : null;
|
|
|
|
return (
|
|
// Return the translation_key translation.
|
|
(options?.entity?.translation_key &&
|
|
hass.localize(
|
|
`component.${options.entity.platform}.entity.${domain}` +
|
|
`.${options.entity.translation_key}.state.${state}`,
|
|
)) ||
|
|
// Return device class translation
|
|
(attributes?.device_class &&
|
|
hass.localize(`component.${domain}.state.${attributes.device_class}.${state}`)) ||
|
|
// Return default translation
|
|
hass.localize(`component.${domain}.state._.${state}`) ||
|
|
// We don't know! Return the raw state.
|
|
state
|
|
);
|
|
};
|