diff --git a/gallery/src/pages/components/ha-form.ts b/gallery/src/pages/components/ha-form.ts index ccc287fd85..e33b7f8780 100644 --- a/gallery/src/pages/components/ha-form.ts +++ b/gallery/src/pages/components/ha-form.ts @@ -64,6 +64,7 @@ const DEVICES: DeviceRegistryEntry[] = [ labels: [], created_at: 0, modified_at: 0, + primary_config_entry: null, }, { area_id: "backyard", @@ -86,6 +87,7 @@ const DEVICES: DeviceRegistryEntry[] = [ labels: [], created_at: 0, modified_at: 0, + primary_config_entry: null, }, { area_id: null, @@ -108,6 +110,7 @@ const DEVICES: DeviceRegistryEntry[] = [ labels: [], created_at: 0, modified_at: 0, + primary_config_entry: null, }, ]; diff --git a/gallery/src/pages/components/ha-selector.ts b/gallery/src/pages/components/ha-selector.ts index cb3a1f2f49..8230fceccf 100644 --- a/gallery/src/pages/components/ha-selector.ts +++ b/gallery/src/pages/components/ha-selector.ts @@ -64,6 +64,7 @@ const DEVICES: DeviceRegistryEntry[] = [ labels: [], created_at: 0, modified_at: 0, + primary_config_entry: null, }, { area_id: "backyard", @@ -86,6 +87,7 @@ const DEVICES: DeviceRegistryEntry[] = [ labels: [], created_at: 0, modified_at: 0, + primary_config_entry: null, }, { area_id: null, @@ -108,6 +110,7 @@ const DEVICES: DeviceRegistryEntry[] = [ labels: [], created_at: 0, modified_at: 0, + primary_config_entry: null, }, ]; diff --git a/gallery/src/pages/misc/integration-card.ts b/gallery/src/pages/misc/integration-card.ts index cab686e210..ac89788440 100644 --- a/gallery/src/pages/misc/integration-card.ts +++ b/gallery/src/pages/misc/integration-card.ts @@ -232,6 +232,7 @@ const createDeviceRegistryEntries = ( labels: [], created_at: 0, modified_at: 0, + primary_config_entry: null, }, ]; diff --git a/src/data/config_entries.ts b/src/data/config_entries.ts index 37af47885d..3558d6e109 100644 --- a/src/data/config_entries.ts +++ b/src/data/config_entries.ts @@ -1,6 +1,6 @@ import type { UnsubscribeFunc } from "home-assistant-js-websocket"; import type { HomeAssistant } from "../types"; -import type { IntegrationManifest, IntegrationType } from "./integration"; +import type { IntegrationType } from "./integration"; export interface ConfigEntry { entry_id: string; @@ -149,20 +149,19 @@ export const enableConfigEntry = (hass: HomeAssistant, configEntryId: string) => export const sortConfigEntries = ( configEntries: ConfigEntry[], - manifestLookup: { [domain: string]: IntegrationManifest } + primaryConfigEntry: string | null ): ConfigEntry[] => { - const sortedConfigEntries = [...configEntries]; - - const getScore = (entry: ConfigEntry) => { - const manifest = manifestLookup[entry.domain] as - | IntegrationManifest - | undefined; - const isHelper = manifest?.integration_type === "helper"; - return isHelper ? -1 : 1; - }; - - const configEntriesCompare = (a: ConfigEntry, b: ConfigEntry) => - getScore(b) - getScore(a); - - return sortedConfigEntries.sort(configEntriesCompare); + if (!primaryConfigEntry) { + return configEntries; + } + const primaryEntry = configEntries.find( + (e) => e.entry_id === primaryConfigEntry + ); + if (!primaryEntry) { + return configEntries; + } + const otherEntries = configEntries.filter( + (e) => e.entry_id !== primaryConfigEntry + ); + return [primaryEntry, ...otherEntries]; }; diff --git a/src/data/device_registry.ts b/src/data/device_registry.ts index f758f19b8d..2a1a334b2a 100644 --- a/src/data/device_registry.ts +++ b/src/data/device_registry.ts @@ -33,6 +33,7 @@ export interface DeviceRegistryEntry extends RegistryEntry { entry_type: "service" | null; disabled_by: "user" | "integration" | "config_entry" | null; configuration_url: string | null; + primary_config_entry: string | null; } export interface DeviceEntityDisplayLookup { diff --git a/src/panels/config/devices/ha-config-device-page.ts b/src/panels/config/devices/ha-config-device-page.ts index fb691cc7e0..7d54a6596b 100644 --- a/src/panels/config/devices/ha-config-device-page.ts +++ b/src/panels/config/devices/ha-config-device-page.ts @@ -153,7 +153,7 @@ export class HaConfigDevicePage extends LitElement { .filter((entId) => entId in entryLookup) .map((entry) => entryLookup[entry]); - return sortConfigEntries(deviceEntries, manifestLookup); + return sortConfigEntries(deviceEntries, device.primary_config_entry); } ); diff --git a/src/panels/config/devices/ha-config-devices-dashboard.ts b/src/panels/config/devices/ha-config-devices-dashboard.ts index d7cfd5498b..a4744166fd 100644 --- a/src/panels/config/devices/ha-config-devices-dashboard.ts +++ b/src/panels/config/devices/ha-config-devices-dashboard.ts @@ -388,7 +388,7 @@ export class HaConfigDeviceDashboard extends SubscribeMixin(LitElement) { device.config_entries .filter((entId) => entId in entryLookup) .map((entId) => entryLookup[entId]), - manifestLookup + device.primary_config_entry ); const labels = labelReg && device?.labels;