ultradom-redux
Version:
Ultradom bindings for Redux
57 lines (52 loc) • 2.02 kB
JavaScript
(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