UNPKG

@thi.ng/transducers-hdom

Version:

Transducer based UI updater for @thi.ng/hdom

30 lines (29 loc) 832 B
import { DEFAULT_IMPL } from "@thi.ng/hdom/default"; import { resolveRoot } from "@thi.ng/hdom/resolve"; import { derefContext } from "@thi.ng/hiccup/deref"; import { scan } from "@thi.ng/transducers/scan"; const updateDOM = (opts = {}, impl = DEFAULT_IMPL) => { const _opts = { root: "app", ...opts }; const root = resolveRoot(_opts.root, impl); return scan([ () => [], (acc) => acc, (prev, curr) => { _opts.ctx = derefContext(opts.ctx, _opts.autoDerefKeys); curr = impl.normalizeTree(_opts, curr); if (curr != null) { if (_opts.hydrate) { impl.hydrateTree(_opts, root, curr); _opts.hydrate = false; } else { impl.diffTree(_opts, root, prev, curr, 0); } return curr; } return prev; } ]); }; export { updateDOM };