@thi.ng/transducers-hdom
Version:
Transducer based UI updater for @thi.ng/hdom
30 lines (29 loc) • 832 B
JavaScript
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
};