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