UNPKG

@hakit/core

Version:

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

76 lines (75 loc) 2.27 kB
import { createContext as i } from "react"; import { isEmpty as a } from "lodash"; import { diff as d } from "deep-object-diff"; import { create as u } from "zustand"; const f = ["last_changed", "last_updated", "context"], l = (t, e = f) => Object.fromEntries( Object.entries(t).map(([n, s]) => [ n, Object.fromEntries(Object.entries(s).filter(([r]) => !e.includes(r))) ]) ), h = u((t) => ({ routes: [], setRoutes: (e) => t(() => ({ routes: e })), entities: {}, setHassUrl: (e) => t({ hassUrl: e }), hassUrl: null, hash: "", locales: null, setLocales: (e) => t({ locales: e }), setHash: (e) => t({ hash: e }), setPortalRoot: (e) => t({ portalRoot: e }), windowContext: window, setWindowContext: (e) => t({ windowContext: e }), setEntities: (e) => t((n) => { const s = d(l(n.entities), l(e)); if (!a(s)) { const r = Object.keys(s).reduce( (o, c) => ({ ...o, [c]: e[c] }), {} ); return Object.keys(r).forEach((o) => { n.entities[o] = { ...n.entities[o], ...e[o] }; }), n.ready ? { lastUpdated: /* @__PURE__ */ new Date(), entities: n.entities } : { ready: !0, lastUpdated: /* @__PURE__ */ new Date(), entities: n.entities }; } return n; }), connection: null, setConnection: (e) => t({ connection: e }), cannotConnect: !1, setCannotConnect: (e) => t({ cannotConnect: e }), ready: !1, setReady: (e) => t({ ready: e }), lastUpdated: /* @__PURE__ */ new Date(), setLastUpdated: (e) => t({ lastUpdated: e }), auth: null, setAuth: (e) => t({ auth: e }), config: null, setConfig: (e) => t({ config: e }), user: null, setUser: (e) => t({ user: e }), error: null, setError: (e) => t({ error: e }), globalComponentStyles: {}, setGlobalComponentStyles: (e) => t(() => ({ globalComponentStyles: e })), disconnectCallbacks: [], onDisconnect: (e) => t((n) => ({ disconnectCallbacks: [...n.disconnectCallbacks, e] })), triggerOnDisconnect: () => t((e) => (e.disconnectCallbacks.forEach((n) => n()), { disconnectCallbacks: [] })) })), g = i({}); export { g as HassContext, h as useStore }; //# sourceMappingURL=HassContext.js.map