UNPKG

react-native-web-headroom

Version:
41 lines (34 loc) 1.01 kB
function createBroadcast (initialState) { var listeners = {}; var id = 1; var _state = initialState; function getState () { return _state } function setState (state) { _state = state; var keys = Object.keys(listeners); var i = 0; var len = keys.length; for (; i < len; i++) { // if a listener gets unsubscribed during setState we just skip it if (listeners[keys[i]]) { listeners[keys[i]](state); } } } // subscribe to changes and return the subscriptionId function subscribe (listener) { if (typeof listener !== 'function') { throw new Error('listener must be a function.') } var currentId = id; listeners[currentId] = listener; id += 1; return currentId } // remove subscription by removing the listener function function unsubscribe (id) { listeners[id] = undefined; } return { getState: getState, setState: setState, subscribe: subscribe, unsubscribe: unsubscribe } } module.exports = createBroadcast;