Use primary config entry for device (#21903)

* Use primary config entry for device

* Fix types
This commit is contained in:
Paul Bottein 2024-09-06 13:43:29 +02:00 committed by GitHub
parent 618cd9d9e5
commit cd74367acc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 25 additions and 18 deletions

View File

@ -64,6 +64,7 @@ const DEVICES: DeviceRegistryEntry[] = [
labels: [], labels: [],
created_at: 0, created_at: 0,
modified_at: 0, modified_at: 0,
primary_config_entry: null,
}, },
{ {
area_id: "backyard", area_id: "backyard",
@ -86,6 +87,7 @@ const DEVICES: DeviceRegistryEntry[] = [
labels: [], labels: [],
created_at: 0, created_at: 0,
modified_at: 0, modified_at: 0,
primary_config_entry: null,
}, },
{ {
area_id: null, area_id: null,
@ -108,6 +110,7 @@ const DEVICES: DeviceRegistryEntry[] = [
labels: [], labels: [],
created_at: 0, created_at: 0,
modified_at: 0, modified_at: 0,
primary_config_entry: null,
}, },
]; ];

View File

@ -64,6 +64,7 @@ const DEVICES: DeviceRegistryEntry[] = [
labels: [], labels: [],
created_at: 0, created_at: 0,
modified_at: 0, modified_at: 0,
primary_config_entry: null,
}, },
{ {
area_id: "backyard", area_id: "backyard",
@ -86,6 +87,7 @@ const DEVICES: DeviceRegistryEntry[] = [
labels: [], labels: [],
created_at: 0, created_at: 0,
modified_at: 0, modified_at: 0,
primary_config_entry: null,
}, },
{ {
area_id: null, area_id: null,
@ -108,6 +110,7 @@ const DEVICES: DeviceRegistryEntry[] = [
labels: [], labels: [],
created_at: 0, created_at: 0,
modified_at: 0, modified_at: 0,
primary_config_entry: null,
}, },
]; ];

View File

@ -232,6 +232,7 @@ const createDeviceRegistryEntries = (
labels: [], labels: [],
created_at: 0, created_at: 0,
modified_at: 0, modified_at: 0,
primary_config_entry: null,
}, },
]; ];

View File

@ -1,6 +1,6 @@
import type { UnsubscribeFunc } from "home-assistant-js-websocket"; import type { UnsubscribeFunc } from "home-assistant-js-websocket";
import type { HomeAssistant } from "../types"; import type { HomeAssistant } from "../types";
import type { IntegrationManifest, IntegrationType } from "./integration"; import type { IntegrationType } from "./integration";
export interface ConfigEntry { export interface ConfigEntry {
entry_id: string; entry_id: string;
@ -149,20 +149,19 @@ export const enableConfigEntry = (hass: HomeAssistant, configEntryId: string) =>
export const sortConfigEntries = ( export const sortConfigEntries = (
configEntries: ConfigEntry[], configEntries: ConfigEntry[],
manifestLookup: { [domain: string]: IntegrationManifest } primaryConfigEntry: string | null
): ConfigEntry[] => { ): ConfigEntry[] => {
const sortedConfigEntries = [...configEntries]; if (!primaryConfigEntry) {
return configEntries;
const getScore = (entry: ConfigEntry) => { }
const manifest = manifestLookup[entry.domain] as const primaryEntry = configEntries.find(
| IntegrationManifest (e) => e.entry_id === primaryConfigEntry
| undefined; );
const isHelper = manifest?.integration_type === "helper"; if (!primaryEntry) {
return isHelper ? -1 : 1; return configEntries;
}; }
const otherEntries = configEntries.filter(
const configEntriesCompare = (a: ConfigEntry, b: ConfigEntry) => (e) => e.entry_id !== primaryConfigEntry
getScore(b) - getScore(a); );
return [primaryEntry, ...otherEntries];
return sortedConfigEntries.sort(configEntriesCompare);
}; };

View File

@ -33,6 +33,7 @@ export interface DeviceRegistryEntry extends RegistryEntry {
entry_type: "service" | null; entry_type: "service" | null;
disabled_by: "user" | "integration" | "config_entry" | null; disabled_by: "user" | "integration" | "config_entry" | null;
configuration_url: string | null; configuration_url: string | null;
primary_config_entry: string | null;
} }
export interface DeviceEntityDisplayLookup { export interface DeviceEntityDisplayLookup {

View File

@ -153,7 +153,7 @@ export class HaConfigDevicePage extends LitElement {
.filter((entId) => entId in entryLookup) .filter((entId) => entId in entryLookup)
.map((entry) => entryLookup[entry]); .map((entry) => entryLookup[entry]);
return sortConfigEntries(deviceEntries, manifestLookup); return sortConfigEntries(deviceEntries, device.primary_config_entry);
} }
); );

View File

@ -388,7 +388,7 @@ export class HaConfigDeviceDashboard extends SubscribeMixin(LitElement) {
device.config_entries device.config_entries
.filter((entId) => entId in entryLookup) .filter((entId) => entId in entryLookup)
.map((entId) => entryLookup[entId]), .map((entId) => entryLookup[entId]),
manifestLookup device.primary_config_entry
); );
const labels = labelReg && device?.labels; const labels = labelReg && device?.labels;