UNPKG

ultradom-redux

Version:

Ultradom bindings for Redux

57 lines (52 loc) 2.02 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('ultradom')) : typeof define === 'function' && define.amd ? define(['exports', 'ultradom'], factory) : (factory((global.ultradomRedux = {}),global.ultradom)); }(this, (function (exports,ultradom) { 'use strict'; /** * Function is using for the same as react-redux connect() function, but with different interface * @param {Function} mergeStateAndProps - merge store state and props that came from the top * @param {Object} options - options object * @param {String} options.connectRootTag - tag name of element outside of connected component * @param {String} options.componentRootTag - tag name of root element inside connected component */ function connect( mergeStateAndProps = (state, ownProps) => ({ ...ownProps, ...state }), options = {} ) { const { connectRootTag = "div", componentRootTag = "div" } = options; return Component => { let unsubscribe; let rootElement; return function ConnectedComponent(ownProps) { const { store } = ownProps; return ultradom.h(connectRootTag, { oncreate: element => { rootElement = document.createElement(componentRootTag); function patchRootElement() { ultradom.patch( ultradom.h(Component, mergeStateAndProps(store.getState(), ownProps)), rootElement ); } unsubscribe = store.subscribe(patchRootElement); element.appendChild(rootElement); patchRootElement(); }, ondestroy: element => { element.removeChild(rootElement); unsubscribe(); rootElement = null; unsubscribe = null; } }) } } } exports.connect = connect; Object.defineProperty(exports, '__esModule', { value: true }); }))); //# sourceMappingURL=index.js.map