fluo
Version:
A prototype-based fork of the Reflux data flow library similar to Facebook Flux
39 lines (34 loc) • 1.17 kB
JavaScript
var _ = require('./utils');
var Listener = require('./Listener');
module.exports = function connect(listenable, key) {
return {
getInitialState: function () {
if (!_.isFunction(listenable.getInitialState)) {
return {};
} else if (typeof key === 'undefined') {
return listenable.getInitialState();
} else {
var state = {};
state[key] = listenable.getInitialState();
return state;
}
},
componentDidMount: function () {
this.__listener = new Listener();
_.link(this.__listener, this);
if (typeof key === 'undefined') {
this.listenTo(listenable, this.setState);
} else {
var self = this;
this.listenTo(listenable, function (state) {
var container = {};
container[key] = state;
self.setState(container);
});
}
},
componentWillUnmount: function () {
this.__listener.stopListeningToAll();
}
};
};