recompact
Version:
A set of React high order components based on Rx.
44 lines (34 loc) • 970 B
JavaScript
;
exports.__esModule = true;
var createChangeEmitter = function createChangeEmitter() {
var currentListeners = [];
var nextListeners = currentListeners;
function ensureCanMutateNextListeners() {
if (nextListeners === currentListeners) {
nextListeners = currentListeners.slice();
}
}
function listen(listener) {
var isSubscribed = true;
ensureCanMutateNextListeners();
nextListeners.push(listener);
return function () {
if (!isSubscribed) {
return;
}
isSubscribed = false;
ensureCanMutateNextListeners();
var index = nextListeners.indexOf(listener);
nextListeners.splice(index, 1);
};
}
function emit(value) {
currentListeners = nextListeners;
var listeners = currentListeners;
for (var i = 0; i < listeners.length; i += 1) {
listeners[i](value);
}
}
return { listen: listen, emit: emit };
};
exports.default = createChangeEmitter;