Skip to content

Instantly share code, notes, and snippets.

@bloodyowl
Created October 1, 2014 15:40
Show Gist options
  • Save bloodyowl/f22950c3bd4dda5c8357 to your computer and use it in GitHub Desktop.
Save bloodyowl/f22950c3bd4dda5c8357 to your computer and use it in GitHub Desktop.
var merge = require("react/lib/merge")
var Store = require("../utils/store")
var AppDispatcher = require("../dispatcher")
var AppConstants = require("../constants")
var ActionTypes = AppConstants.ActionTypes
var API = require("../api")
var _store = {
value : null,
pending : true
}
var MyStore = merge(Store, {
getCurrent : function(){
return _store
},
dispatchToken : AppDispatcher.register(function(payload){
var action = payload.action
switch(action.type) {
case ActionTypes.STORENAME_API_RESPONDED:
_store.value = action.response
_store.pending = false
MyStore.emitChange()
break
case ActionTypes.STORENAME_FETCH
API.fetchFoo(action.name, action.params)
_store.pending = true
MyStore.emitChange()
break
}
})
})
module.exports = MyStore
var EventEmitter = require("events").EventEmitter
var merge = require("react/lib/merge")
var CHANGE_EVENT = "change"
var Store = merge(EventEmitter.prototype, {
emitChange : function(){
this.emit(CHANGE_EVENT)
},
addChangeListener: function(callback){
this.on(CHANGE_EVENT, callback)
},
removeChangeListener: function(callback){
this.removeListener(CHANGE_EVENT, callback)
},
dispatchToken : null
})
module.exports = Store
var merge = require("react/lib/merge")
module.exports = function StoreMixin(Store, specifics){
var defaults = {
getInitialState : function(){
return Store.getCurrent()
},
_onChange : function(){
this.setState(Store.getCurrent())
},
componentDidMount : function(){
Store.addChangeListener(this._onChange)
},
componentWillUnmount : function(){
Store.removeChangeListener(this._onChange)
}
}
if(specifics) {
return merge(defaults, specifics)
}
return defaults
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment