diff --git a/src/data/floor_registry.ts b/src/data/floor_registry.ts index a281223bb0..65cf336856 100644 --- a/src/data/floor_registry.ts +++ b/src/data/floor_registry.ts @@ -1,4 +1,3 @@ -import { stringCompare } from "../common/string/compare"; import type { HomeAssistant } from "../types"; import type { AreaRegistryEntry } from "./area_registry"; import type { RegistryEntry } from "./registry"; @@ -75,27 +74,3 @@ export const getFloorAreaLookup = ( } return floorAreaLookup; }; - -export const floorCompare = - (entries?: HomeAssistant["floors"], 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 floorA = entries?.[a]; - const floorB = entries?.[b]; - if (floorA && floorB && floorA.level !== floorB.level) { - return (floorB.level ?? -9999) - (floorA.level ?? -9999); - } - const nameA = floorA?.name ?? a; - const nameB = floorB?.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/strategies/areas/helpers/areas-strategy-helper.ts b/src/panels/lovelace/strategies/areas/helpers/areas-strategy-helper.ts index fadae61534..111df47497 100644 --- a/src/panels/lovelace/strategies/areas/helpers/areas-strategy-helper.ts +++ b/src/panels/lovelace/strategies/areas/helpers/areas-strategy-helper.ts @@ -7,7 +7,6 @@ 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 { floorCompare } from "../../../../../data/floor_registry"; import type { LovelaceCardConfig } from "../../../../../data/lovelace/config/card"; import type { HomeAssistant } from "../../../../../types"; import { supportsAlarmModesCardFeature } from "../../../card-features/hui-alarm-modes-card-feature"; @@ -302,7 +301,12 @@ export const getFloors = ( floorsOrder?: string[] ): FloorRegistryEntry[] => { const floors = Object.values(entries); - const compare = floorCompare(entries, floorsOrder); + + if (!floorsOrder) { + return floors; + } + + const compare = orderCompare(floorsOrder); return floors.sort((floorA, floorB) => compare(floorA.floor_id, floorB.floor_id) diff --git a/test/data/floor_registry.test.ts b/test/data/floor_registry.test.ts deleted file mode 100644 index abb14e89b0..0000000000 --- a/test/data/floor_registry.test.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { floorCompare } from "../../src/data/floor_registry"; -import type { FloorRegistryEntry } from "../../src/data/floor_registry"; - -describe("floorCompare", () => { - describe("floorCompare()", () => { - it("sorts by floor ID alphabetically", () => { - const floors = ["basement", "attic", "ground"]; - - expect(floors.sort(floorCompare())).toEqual([ - "attic", - "basement", - "ground", - ]); - }); - - it("handles numeric strings in natural order", () => { - const floors = ["floor10", "floor2", "floor1"]; - - expect(floors.sort(floorCompare())).toEqual([ - "floor1", - "floor2", - "floor10", - ]); - }); - }); - - describe("floorCompare(entries)", () => { - it("sorts by level descending (highest to lowest), then by name", () => { - const entries = { - floor1: { name: "Ground Floor", level: 0 } as FloorRegistryEntry, - floor2: { name: "First Floor", level: 1 } as FloorRegistryEntry, - floor3: { name: "Basement", level: -1 } as FloorRegistryEntry, - }; - const floors = ["floor1", "floor2", "floor3"]; - - expect(floors.sort(floorCompare(entries))).toEqual([ - "floor2", - "floor1", - "floor3", - ]); - }); - - it("treats null level as -9999, placing it at the end", () => { - const entries = { - floor1: { name: "Ground Floor", level: 0 } as FloorRegistryEntry, - floor2: { name: "First Floor", level: 1 } as FloorRegistryEntry, - floor3: { name: "Unassigned", level: null } as FloorRegistryEntry, - }; - const floors = ["floor2", "floor3", "floor1"]; - - expect(floors.sort(floorCompare(entries))).toEqual([ - "floor2", - "floor1", - "floor3", - ]); - }); - - it("sorts by name when levels are equal", () => { - const entries = { - floor1: { name: "Suite B", level: 1 } as FloorRegistryEntry, - floor2: { name: "Suite A", level: 1 } as FloorRegistryEntry, - }; - const floors = ["floor1", "floor2"]; - - expect(floors.sort(floorCompare(entries))).toEqual(["floor2", "floor1"]); - }); - - it("falls back to floor ID when entry not found", () => { - const entries = { - floor1: { name: "Ground Floor" } as FloorRegistryEntry, - }; - const floors = ["xyz", "floor1", "abc"]; - - expect(floors.sort(floorCompare(entries))).toEqual([ - "abc", - "floor1", - "xyz", - ]); - }); - }); - - describe("floorCompare(entries, order)", () => { - it("follows order array", () => { - const entries = { - basement: { name: "Basement" } as FloorRegistryEntry, - ground: { name: "Ground Floor" } as FloorRegistryEntry, - first: { name: "First Floor" } as FloorRegistryEntry, - }; - const order = ["first", "ground", "basement"]; - const floors = ["basement", "first", "ground"]; - - expect(floors.sort(floorCompare(entries, order))).toEqual([ - "first", - "ground", - "basement", - ]); - }); - - it("places items not in order array at the end, sorted by name", () => { - const entries = { - floor1: { name: "First Floor" } as FloorRegistryEntry, - floor2: { name: "Ground Floor" } as FloorRegistryEntry, - floor3: { name: "Basement" } as FloorRegistryEntry, - }; - const order = ["floor1"]; - const floors = ["floor3", "floor2", "floor1"]; - - expect(floors.sort(floorCompare(entries, order))).toEqual([ - "floor1", - "floor3", - "floor2", - ]); - }); - }); -});