@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
JavaScript
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