UNPKG

@blocklet/ui-react

Version:

Some useful front-end web components that can be used in Blocklets.

34 lines (33 loc) 1.16 kB
import { use as c } from "react"; import { WsClient as f } from "@arcblock/ws"; import { useCreation as u, usePrevious as m, useUnmount as a } from "ahooks"; import { SessionContext as l } from "@arcblock/did-connect-react/lib/Session"; import { joinURL as C } from "ufo"; import { BLOCKLET_SERVICE_PATH_PREFIX as d } from "@arcblock/ux/lib/Util/constant"; const e = {}; function w(t = "admin") { let r = "/"; !window?.blocklet && window?.env?.apiPrefix && (r = window.env.apiPrefix); const s = C(r, d, t); return new f(s, { heartbeatIntervalMs: 100 * 1e3 }); } function x(t = "admin") { return e[t] || (e[t] = w(t)), e[t]; } const L = (t = "admin") => { const r = c(l), { session: s } = r ?? {}, n = u(() => s.user?.did, [s.user]), o = m(n); return a(() => { Object.keys(e).forEach((i) => { e[i]?.isConnected() && e[i]?.disconnect(), delete e[i]; }); }), n ? (o && o !== n && Object.keys(e).forEach((i) => { e[i] && (e[i].isConnected() && e[i].disconnect(), e[i].connect()); }), !e[t] && s.user && (e[t] = x(t), e[t].connect()), e[t]) : null; }; export { w as create, x as default, L as useListenWsClient };