From a6abc880074e33d868109d1f682837c57cf69ed6 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 25 May 2023 19:15:34 +0200 Subject: [PATCH] More foundations --- src/data/context.ts | 1 + src/data/device_registry.ts | 1 + src/data/entity_registry.ts | 3 +++ src/state/connection-mixin.ts | 10 ++++++++++ src/state/context-mixin.ts | 5 +++++ src/types.ts | 2 ++ 6 files changed, 22 insertions(+) diff --git a/src/data/context.ts b/src/data/context.ts index 7fbff9fd06..51f1e80c27 100644 --- a/src/data/context.ts +++ b/src/data/context.ts @@ -9,6 +9,7 @@ export const entitiesContext = export const devicesContext = createContext("devices"); export const areasContext = createContext("areas"); +export const labelsContext = createContext("labels"); export const localizeContext = createContext("localize"); export const localeContext = createContext("locale"); diff --git a/src/data/device_registry.ts b/src/data/device_registry.ts index 6995e4b924..7f7153d426 100644 --- a/src/data/device_registry.ts +++ b/src/data/device_registry.ts @@ -27,6 +27,7 @@ export interface DeviceRegistryEntry { entry_type: "service" | null; disabled_by: "user" | "integration" | "config_entry" | null; configuration_url: string | null; + labels: string[]; } export interface DeviceEntityDisplayLookup { diff --git a/src/data/entity_registry.ts b/src/data/entity_registry.ts index c55a09aaa3..ab321591cf 100644 --- a/src/data/entity_registry.ts +++ b/src/data/entity_registry.ts @@ -20,6 +20,7 @@ export interface EntityRegistryDisplayEntry { translation_key?: string; platform?: string; display_precision?: number; + labels?: string[]; } interface EntityRegistryDisplayEntryResponse { @@ -33,6 +34,7 @@ interface EntityRegistryDisplayEntryResponse { tk?: string; hb?: boolean; dp?: number; + lb?: string[]; }[]; entity_categories: Record; } @@ -54,6 +56,7 @@ export interface EntityRegistryEntry { unique_id: string; translation_key?: string; options: EntityRegistryOptions | null; + labels: string[]; } export interface ExtEntityRegistryEntry extends EntityRegistryEntry { diff --git a/src/state/connection-mixin.ts b/src/state/connection-mixin.ts index c3cced5705..9d4de317d7 100644 --- a/src/state/connection-mixin.ts +++ b/src/state/connection-mixin.ts @@ -14,6 +14,7 @@ import { subscribeAreaRegistry } from "../data/area_registry"; import { broadcastConnectionStatus } from "../data/connection-status"; import { subscribeDeviceRegistry } from "../data/device_registry"; import { subscribeEntityRegistryDisplay } from "../data/entity_registry"; +import { subscribeLabelRegistry } from "../data/label_registry"; import { subscribeFrontendUserData } from "../data/frontend"; import { forwardHaptic } from "../data/haptics"; import { DEFAULT_PANEL } from "../data/panel"; @@ -49,6 +50,7 @@ export const connectionMixin = >( entities: null as any, devices: null as any, areas: null as any, + labels: null as any, config: null as any, themes: null as any, selectedTheme: null, @@ -229,6 +231,7 @@ export const connectionMixin = >( name: entity.en, hidden: entity.hb, display_precision: entity.dp, + labels: entity.lb, }; } this._updateHass({ entities }); @@ -247,6 +250,13 @@ export const connectionMixin = >( } this._updateHass({ areas }); }); + subscribeLabelRegistry(conn, (labelReg) => { + const labels: HomeAssistant["labels"] = {}; + for (const label of labelReg) { + labels[label.label_id] = label; + } + this._updateHass({ labels }); + }); subscribeConfig(conn, (config) => { if (this.hass?.config?.time_zone !== config.time_zone) { import("../resources/intl-polyfill").then(() => { diff --git a/src/state/context-mixin.ts b/src/state/context-mixin.ts index d3bbc3ead6..44368e35c5 100644 --- a/src/state/context-mixin.ts +++ b/src/state/context-mixin.ts @@ -4,6 +4,7 @@ import { configContext, devicesContext, entitiesContext, + labelsContext, localeContext, localizeContext, panelsContext, @@ -42,6 +43,10 @@ export const contextMixin = >( context: areasContext, initialValue: this.hass ? this.hass.areas : this._pendingHass.areas, }), + labels: new ContextProvider(this, { + context: labelsContext, + initialValue: this.hass ? this.hass.labels : this._pendingHass.labels, + }), localize: new ContextProvider(this, { context: localizeContext, initialValue: this.hass diff --git a/src/types.ts b/src/types.ts index 8d0d37ee86..111fc0809a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -12,6 +12,7 @@ import { LocalizeFunc } from "./common/translations/localize"; import { AreaRegistryEntry } from "./data/area_registry"; import { DeviceRegistryEntry } from "./data/device_registry"; import { EntityRegistryDisplayEntry } from "./data/entity_registry"; +import { LabelRegistryEntry } from "./data/label_registry"; import { CoreFrontendUserData } from "./data/frontend"; import { FrontendLocaleData, getHassTranslations } from "./data/translation"; import { Themes } from "./data/ws-themes"; @@ -208,6 +209,7 @@ export interface HomeAssistant { entities: { [id: string]: EntityRegistryDisplayEntry }; devices: { [id: string]: DeviceRegistryEntry }; areas: { [id: string]: AreaRegistryEntry }; + labels: { [id: string]: LabelRegistryEntry }; services: HassServices; config: HassConfig; themes: Themes;