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) 2.27 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),R=require("./logbook.js");require("lodash");require("../../utils/light/index.js");require("../useLocale/locales/index.js");require("../../../index-DKqwfDib.cjs");require("../../HassConnect/HassContext.js");require("@iconify/react");const D=require("../useStore/index.js");require("home-assistant-js-websocket");const L=require("use-debounce"),O=24,d=(l,o)=>new Date(l.getTime()-o*1e3).getTime()/1e3;function P(l,o){const[g,k]=t.useState(void 0),b=D.useStore(e=>e.connection),[m,i]=t.useState([]),n=t.useRef([]),f=t.useRef(!1),a=t.useRef(void 0),s=t.useMemo(()=>{const e={};return o?.hoursToShow?e.recent=o.hoursToShow*60*60:o?.startTime&&o?.endTime?e.range=[o.startTime,o.endTime]:e.recent=O*60*60,e},[o]),h=t.useCallback(()=>{const e=new Date;if("range"in s)return{now:e,startTime:s.range[0],endTime:s.range[1],purgeBeforePythonTime:void 0};if("recent"in s){const u=d(e,s.recent);return{now:e,startTime:new Date(u*1e3),endTime:new Date(e.getTime()+86400*365*1e3),purgeBeforePythonTime:d(e,s.recent)}}throw new Error("Unexpected time specified")},[s]),w=t.useCallback(e=>n.current?e?n.current.filter(u=>u.when>e):n.current:[],[]),T=t.useCallback(e=>{const u=s&&"recent"in s?d(new Date,s.recent):void 0,r=[...e.events].reverse();if(!n.current.length){n.current=r,i(r);return}if(!r.length)return;const c=w(u);c.length?r[r.length-1].when>c[0].when?(n.current=r.concat(c),i(n.current)):c[c.length-1].when>r[0].when?(n.current=c.concat(r),i(n.current)):(n.current=c.concat(r).sort((q,E)=>E.when-q.when),i(n.current)):(n.current=r,i(r))},[s,w]);t.useEffect(()=>()=>{f.current=!1,n.current=[],i([])},[]);const S=t.useCallback((e,u)=>R.subscribeLogbook(b,c=>{f.current&&T(c)},u.startTime.toISOString(),u.endTime.toISOString(),[e]).catch(c=>{f.current=!1,c instanceof Error&&k(c.message)}),[b,T]),_=L.useDebouncedCallback(async(e,u)=>{if(a.current){const r=await a.current;r&&await r(),a.current=void 0}f.current=!0,a.current=await S(e,u)},100,{leading:!0,trailing:!0});if(t.useEffect(()=>{const e=h();return _(l,e),()=>{f.current=!1,a.current&&a.current()}},[h,_,S,l]),g)throw new Error(g);return t.useMemo(()=>m,[m])}exports.useLogs=P; //# sourceMappingURL=index.js.map