react-native-web-headroom
Version:
React Native Web Headroom
41 lines (34 loc) • 1.01 kB
JavaScript
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;