UNPKG

fluo

Version:

A prototype-based fork of the Reflux data flow library similar to Facebook Flux

46 lines (39 loc) 1.43 kB
var _ = require('./utils'); var Listener = require('./Listener'); module.exports = function(listenable, key, filterFunc) { filterFunc = _.isFunction(key) ? key : filterFunc; return { getInitialState: function() { if (!_.isFunction(listenable.getInitialState)) { return {}; } else if (_.isFunction(key)) { return filterFunc.call(this, listenable.getInitialState()); } else { // Filter initial payload from store. var result = filterFunc.call(this, listenable.getInitialState()); if (result) { return _.object([key], [result]); } else { return {}; } } }, componentDidMount: function() { this.__listener = new Listener(); _.link(this.__listener, this); var self = this; var cb = function (value) { if (_.isFunction(key)) { self.setState(filterFunc.call(self, value)); } else { var result = filterFunc.call(self, value); self.setState(_.object([key], [result])); } }; this.listenTo(listenable, cb); }, componentWillUnmount: function () { this.__listener.stopListeningToAll(); } }; };