diff --git a/src/components/ha-areas-display-editor.ts b/src/components/ha-areas-display-editor.ts index 443d7b057c..baf1d6c6d9 100644 --- a/src/components/ha-areas-display-editor.ts +++ b/src/components/ha-areas-display-editor.ts @@ -4,7 +4,6 @@ import { LitElement, html } from "lit"; import { customElement, property } from "lit/decorators"; import { fireEvent } from "../common/dom/fire_event"; import { getAreaContext } from "../common/entity/context/get_area_context"; -import { areaCompare } from "../data/area_registry"; import type { HomeAssistant } from "../types"; import "./ha-expansion-panel"; import "./ha-items-display-editor"; @@ -37,11 +36,7 @@ export class HaAreasDisplayEditor extends LitElement { public showNavigationButton = false; protected render(): TemplateResult { - const compare = areaCompare(this.hass.areas); - - const areas = Object.values(this.hass.areas).sort((areaA, areaB) => - compare(areaA.area_id, areaB.area_id) - ); + const areas = Object.values(this.hass.areas); const items: DisplayItem[] = areas.map((area) => { const { floor } = getAreaContext(area, this.hass.floors); diff --git a/src/components/ha-areas-floors-display-editor.ts b/src/components/ha-areas-floors-display-editor.ts index ca9743e9a4..29b6034346 100644 --- a/src/components/ha-areas-floors-display-editor.ts +++ b/src/components/ha-areas-floors-display-editor.ts @@ -7,7 +7,6 @@ import memoizeOne from "memoize-one"; import { fireEvent } from "../common/dom/fire_event"; import { computeFloorName } from "../common/entity/compute_floor_name"; import { getAreaContext } from "../common/entity/context/get_area_context"; -import { areaCompare } from "../data/area_registry"; import type { FloorRegistryEntry } from "../data/floor_registry"; import { getFloors } from "../panels/lovelace/strategies/areas/helpers/areas-strategy-helper"; import type { HomeAssistant } from "../types"; @@ -131,11 +130,8 @@ export class HaAreasFloorsDisplayEditor extends LitElement { // update items if floors change _hassFloors: HomeAssistant["floors"] ): Record => { - const compare = areaCompare(hassAreas); + const areas = Object.values(hassAreas); - const areas = Object.values(hassAreas).sort((areaA, areaB) => - compare(areaA.area_id, areaB.area_id) - ); const groupedItems: Record = areas.reduce( (acc, area) => { const { floor } = getAreaContext(area, this.hass.floors); diff --git a/src/data/area_registry.ts b/src/data/area_registry.ts index 915a26c005..15a0a19fff 100644 --- a/src/data/area_registry.ts +++ b/src/data/area_registry.ts @@ -1,4 +1,3 @@ -import { stringCompare } from "../common/string/compare"; import type { HomeAssistant } from "../types"; import type { DeviceRegistryEntry } from "./device_registry"; import type { @@ -105,22 +104,3 @@ export const getAreaDeviceLookup = ( } return areaDeviceLookup; }; - -export const areaCompare = - (entries?: HomeAssistant["areas"], order?: string[]) => - (a: string, b: string) => { - const indexA = order ? order.indexOf(a) : -1; - const indexB = order ? order.indexOf(b) : -1; - if (indexA === -1 && indexB === -1) { - const nameA = entries?.[a]?.name ?? a; - const nameB = entries?.[b]?.name ?? b; - return stringCompare(nameA, nameB); - } - if (indexA === -1) { - return 1; - } - if (indexB === -1) { - return -1; - } - return indexA - indexB; - }; diff --git a/src/panels/lovelace/common/generate-lovelace-config.ts b/src/panels/lovelace/common/generate-lovelace-config.ts index 0beee6292d..a4aeed8bb0 100644 --- a/src/panels/lovelace/common/generate-lovelace-config.ts +++ b/src/panels/lovelace/common/generate-lovelace-config.ts @@ -5,10 +5,9 @@ import { computeStateDomain } from "../../../common/entity/compute_state_domain" import { computeStateName } from "../../../common/entity/compute_state_name"; import { splitByGroups } from "../../../common/entity/split_by_groups"; import { stripPrefixFromEntityName } from "../../../common/entity/strip_prefix_from_entity_name"; -import { stringCompare } from "../../../common/string/compare"; +import { orderCompare, stringCompare } from "../../../common/string/compare"; import type { LocalizeFunc } from "../../../common/translations/localize"; import type { AreasDisplayValue } from "../../../components/ha-areas-display-editor"; -import { areaCompare } from "../../../data/area_registry"; import type { EnergyPreferences, GridSourceTypeEnergyPreference, @@ -572,13 +571,21 @@ export const generateDefaultViewConfig = ( const areaCards: LovelaceCardConfig[] = []; - const sortedAreas = Object.keys(splittedByAreaDevice.areasWithEntities).sort( - areaCompare(areaEntries, areasPrefs?.order) - ); + const areaIds = Object.keys(areaEntries); - for (const areaId of sortedAreas) { + if (areasPrefs?.order) { + const areaOrder = areasPrefs.order; + areaIds.sort(orderCompare(areaOrder)); + } + + for (const areaId of areaIds) { + // Skip areas with no entities + if (!(areaId in splittedByAreaDevice.areasWithEntities)) { + continue; + } const areaEntities = splittedByAreaDevice.areasWithEntities[areaId]; const area = areaEntries[areaId]; + areaCards.push( ...computeCards( hass, diff --git a/src/panels/lovelace/strategies/areas/helpers/areas-strategy-helper.ts b/src/panels/lovelace/strategies/areas/helpers/areas-strategy-helper.ts index 111df47497..e194e09ee1 100644 --- a/src/panels/lovelace/strategies/areas/helpers/areas-strategy-helper.ts +++ b/src/panels/lovelace/strategies/areas/helpers/areas-strategy-helper.ts @@ -5,7 +5,6 @@ import { generateEntityFilter } from "../../../../../common/entity/entity_filter import { stripPrefixFromEntityName } from "../../../../../common/entity/strip_prefix_from_entity_name"; import { orderCompare } from "../../../../../common/string/compare"; import type { AreaRegistryEntry } from "../../../../../data/area_registry"; -import { areaCompare } from "../../../../../data/area_registry"; import type { FloorRegistryEntry } from "../../../../../data/floor_registry"; import type { LovelaceCardConfig } from "../../../../../data/lovelace/config/card"; import type { HomeAssistant } from "../../../../../types"; @@ -287,7 +286,11 @@ export const getAreas = ( ? areas.filter((area) => !hiddenAreas!.includes(area.area_id)) : areas.concat(); - const compare = areaCompare(entries, areasOrder); + if (!areasOrder) { + return filteredAreas; + } + + const compare = orderCompare(areasOrder); const sortedAreas = filteredAreas.sort((areaA, areaB) => compare(areaA.area_id, areaB.area_id)