UNPKG

@hakit/core

Version:

A collection of React hooks and helpers for Home Assistant to easily communicate with the Home Assistant WebSocket API.

3 lines (2 loc) 3.33 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("lodash");const u=require("../../../index-iGClY3ec.cjs"),h=require("../../utils/computeDomain.js");require("react");require("../useLocale/locales/index.js");require("home-assistant-js-websocket");const P=require("../../utils/string.js");require("../../utils/date.js");require("@iconify/react");require("use-debounce");const T=a=>{const s={};for(const i of a)i.device_id&&(i.device_id in s||(s[i.device_id]=[]),s[i.device_id].push(i));return s},U=(a,s)=>(i,p)=>{{const l=a?.[i],d=a?.[p];if(l&&d&&l.level!==d.level)return(d.level??-9999)-(l.level??-9999);const v=l?.name??i,j=d?.name??p;return P.stringCompare(v,j)}},E=a=>{const s={};for(const i of a)i.floor_id&&(i.floor_id in s||(s[i.floor_id]=[]),s[i.floor_id].push(i));return s},w=(a,s,i,p,l,d,v)=>{const{joinHassUrl:j}=u.useHass.getState().helpers,y=u.useHass(e=>e.entities),L=u.useHass(e=>e.entitiesRegistryDisplay),N=u.useHass(e=>e.devices),k=u.useHass(e=>e.areas),O=u.useHass(e=>e.floors),H=Object.values(O),S=Object.values(k),B=Object.values(N),A=Object.values(L);let f={},o,c;(a||s||i||p||l)&&(f=T(A),o=B,c=A.filter(e=>e.area_id),a&&(o=o.filter(e=>{const t=f[e.id];return!t||!t.length?!1:f[e.id].some(r=>a.includes(h.computeDomain(r.entity_id)))}),c=c.filter(e=>a.includes(h.computeDomain(e.entity_id)))),s&&(o=o.filter(e=>{const t=f[e.id];return!t||!t.length?!0:A.every(r=>!s.includes(h.computeDomain(r.entity_id)))}),c=c.filter(e=>!s.includes(h.computeDomain(e.entity_id)))),i&&(o=o.filter(e=>{const t=f[e.id];return!t||!t.length?!1:f[e.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(e=>{const t=y[e.entity_id];return t.attributes.device_class&&i.includes(t.attributes.device_class)})),p&&(o=o.filter(e=>p(e))),l&&(o=o.filter(e=>{const t=f[e.id];return!t||!t.length?!1:f[e.id].some(r=>{const n=y[r.entity_id];return n?l(n):!1})}),c=c.filter(e=>{const t=y[e.entity_id];return t?l(t):!1})));let _=S.map(e=>({...e,picture:e.picture?j(e.picture):e.picture})),m;o&&(m=o.filter(e=>e.area_id).map(e=>e.area_id)),c&&(m=(m??[]).concat(c.filter(e=>e.area_id).map(e=>e.area_id))),m&&(_=_.filter(e=>m.includes(e.area_id))),d&&(_=_.filter(e=>!d.includes(e.area_id))),v&&(_=_.filter(e=>!e.floor_id||!v.includes(e.floor_id)));const q=E(_),R=Object.values(_).filter(e=>!e.floor_id||!q[e.floor_id]),D=U(O),I=Object.entries(q).map(([e,t])=>[H.find(n=>n.floor_id===e),t]).sort(([e],[t])=>D(e.floor_id,t.floor_id)),b=[];return I.forEach(([e,t])=>{if(e){const r=u.computeFloorName(e),n=t.map(g=>{const M=u.computeAreaName(g)||g.area_id;return[g.area_id,M,...g.aliases]}).flat();b.push({id:["floor",e.floor_id].join("______"),type:"floor",primary:r,floor:e,icon:e.icon||void 0,search_labels:[e.floor_id,r,...e.aliases,...n]})}b.push(...t.map(r=>{const n=u.computeAreaName(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(...R.map(e=>{const t=u.computeAreaName(e)||e.area_id;return{id:["area",e.area_id].join("______"),type:"area",primary:t,area:e,icon:e.icon||void 0,search_labels:[e.area_id,t,...e.aliases]}})),b};exports.getFloorAreaLookup=E;exports.useAreas=w; //# sourceMappingURL=getFloorsAndAreas.js.map