@hakit/core
Version:
A collection of React hooks and helpers for Home Assistant to easily communicate with the Home Assistant WebSocket API.
110 lines (109 loc) • 4.17 kB
JavaScript
import "lodash";
import { X as p, r as w, t as O } from "../../../index-BDZyTvOW.js";
import { computeDomain as j } from "../../utils/computeDomain.js";
import "react";
import "../useLocale/locales/index.js";
import "home-assistant-js-websocket";
import { stringCompare as z } from "../../utils/string.js";
import "../../utils/date.js";
import "@iconify/react";
import "use-debounce";
const G = (a) => {
const o = {};
for (const i of a)
i.device_id && (i.device_id in o || (o[i.device_id] = []), o[i.device_id].push(i));
return o;
}, J = (a, o) => (i, u) => {
{
const f = a?.[i], d = a?.[u];
if (f && d && f.level !== d.level)
return (d.level ?? -9999) - (f.level ?? -9999);
const v = f?.name ?? i, g = d?.name ?? u;
return z(v, g);
}
}, K = (a) => {
const o = {};
for (const i of a)
i.floor_id && (i.floor_id in o || (o[i.floor_id] = []), o[i.floor_id].push(i));
return o;
}, D = (a, o, i, u, f, d, v) => {
const { joinHassUrl: g } = p.getState().helpers, y = p((t) => t.entities), k = p((t) => t.entitiesRegistryDisplay), N = p((t) => t.devices), B = p((t) => t.areas), A = p((t) => t.floors), H = Object.values(A), R = Object.values(B), S = Object.values(N), E = Object.values(k);
let l = {}, s, c;
(a || o || i || u || f) && (l = G(E), s = S, c = E.filter((t) => t.area_id), a && (s = s.filter((t) => {
const e = l[t.id];
return !e || !e.length ? !1 : l[t.id].some((r) => a.includes(j(r.entity_id)));
}), c = c.filter((t) => a.includes(j(t.entity_id)))), o && (s = s.filter((t) => {
const e = l[t.id];
return !e || !e.length ? !0 : E.every((r) => !o.includes(j(r.entity_id)));
}), c = c.filter((t) => !o.includes(j(t.entity_id)))), i && (s = s.filter((t) => {
const e = l[t.id];
return !e || !e.length ? !1 : l[t.id].some((r) => {
const n = y[r.entity_id];
return n ? n.attributes.device_class && i.includes(n.attributes.device_class) : !1;
});
}), c = c.filter((t) => {
const e = y[t.entity_id];
return e.attributes.device_class && i.includes(e.attributes.device_class);
})), u && (s = s.filter((t) => u(t))), f && (s = s.filter((t) => {
const e = l[t.id];
return !e || !e.length ? !1 : l[t.id].some((r) => {
const n = y[r.entity_id];
return n ? f(n) : !1;
});
}), c = c.filter((t) => {
const e = y[t.entity_id];
return e ? f(e) : !1;
})));
let _ = R.map((t) => ({
...t,
picture: t.picture ? g(t.picture) : t.picture
})), m;
s && (m = s.filter((t) => t.area_id).map((t) => t.area_id)), c && (m = (m ?? []).concat(c.filter((t) => t.area_id).map((t) => t.area_id))), m && (_ = _.filter((t) => m.includes(t.area_id))), d && (_ = _.filter((t) => !d.includes(t.area_id))), v && (_ = _.filter((t) => !t.floor_id || !v.includes(t.floor_id)));
const L = K(_), I = Object.values(_).filter((t) => !t.floor_id || !L[t.floor_id]), U = J(A), X = Object.entries(L).map(([t, e]) => [H.find((n) => n.floor_id === t), e]).sort(([t], [e]) => U(t.floor_id, e.floor_id)), b = [];
return X.forEach(([t, e]) => {
if (t) {
const r = w(t), n = e.map((h) => {
const q = O(h) || h.area_id;
return [h.area_id, q, ...h.aliases];
}).flat();
b.push({
id: ["floor", t.floor_id].join("______"),
type: "floor",
primary: r,
floor: t,
icon: t.icon || void 0,
search_labels: [t.floor_id, r, ...t.aliases, ...n]
});
}
b.push(
...e.map((r) => {
const n = O(r) || r.area_id;
return {
id: ["area", r.area_id].join("______"),
type: "area",
primary: n,
area: r,
icon: r.icon || void 0,
search_labels: [r.area_id, n, ...r.aliases]
};
})
);
}), b.push(
...I.map((t) => {
const e = O(t) || t.area_id;
return {
id: ["area", t.area_id].join("______"),
type: "area",
primary: e,
area: t,
icon: t.icon || void 0,
search_labels: [t.area_id, e, ...t.aliases]
};
})
), b;
};
export {
K as getFloorAreaLookup,
D as useAreas
};
//# sourceMappingURL=getFloorsAndAreas.js.map