mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-28 19:56:42 +00:00
Use primary config entry for device (#21903)
* Use primary config entry for device * Fix types
This commit is contained in:
parent
618cd9d9e5
commit
cd74367acc
@ -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,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -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,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -232,6 +232,7 @@ const createDeviceRegistryEntries = (
|
|||||||
labels: [],
|
labels: [],
|
||||||
created_at: 0,
|
created_at: 0,
|
||||||
modified_at: 0,
|
modified_at: 0,
|
||||||
|
primary_config_entry: null,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -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);
|
|
||||||
};
|
};
|
||||||
|
@ -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 {
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user