kaiju
Version:
Virtual dom, observables and stateful components
66 lines (47 loc) • 1.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = connectToStore;
var _h = require('snabbdom/h');
var _h2 = _interopRequireDefault(_h);
var _component = require('./component');
var _component2 = _interopRequireDefault(_component);
var _message = require('./message');
var _message2 = _interopRequireDefault(_message);
var _util = require('./util');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function connectToStore() {
return function (baseComponent, mapStoreToProps) {
function initState() {
return {};
}
function connect(_ref) {
var on = _ref.on,
props = _ref.props,
state = _ref.state,
msg = _ref.msg;
var _props = props(),
store = _props.store;
on(props, function (externalProps) {
return (0, _util.assign)({}, state(), { externalProps: externalProps });
});
on(store.state, function (storeState) {
var mappedProps = mapStoreToProps(store);
return (0, _util.assign)({}, state(), { mappedProps: mappedProps });
});
on(_message2.default.unhandled, function (m) {
return msg.sendToParent(m);
});
}
function render(_ref2) {
var state = _ref2.state;
var props = (0, _util.assign)({}, state.externalProps, state.mappedProps);
return baseComponent(props);
}
return function connectComponent(props) {
var name = 'connect-' + (props.key === undefined ? baseComponent.name : props.key);
return (0, _component2.default)({ name: name, log: false, initState: initState, props: props, connect: connect, render: render });
};
};
}