Repository URL to install this package:
|
Version:
1.2.6 ▾
|
@skava/modules
/
___dist
/
view-container
/
styles
/
styled-components
/
src
/
utils
/
create-broadcast.js
|
|---|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.createBroadcast = void 0;
/**
* @todo use the one in _forks ?
* Creates a broadcast that can be listened to, i.e. simple event emitter
* @see https://github.com/ReactTraining/react-broadcast
*/
const createBroadcast = initialState => {
const listeners = {};
let id = 0;
let state = initialState;
function publish(nextState) {
state = nextState; // eslint-disable-next-line guard-for-in, no-restricted-syntax
for (const key in listeners) {
const listener = listeners[key];
if (listener === undefined) {
// eslint-disable-next-line no-continue
continue;
}
listener(state);
}
}
function subscribe(listener) {
const currentId = id;
listeners[currentId] = listener;
id += 1;
listener(state);
return currentId;
}
function unsubscribe(unsubID) {
listeners[unsubID] = undefined;
}
return {
publish,
subscribe,
unsubscribe
};
};
exports.createBroadcast = createBroadcast;
var _default = createBroadcast;
exports.default = _default;