@livelike/react-native
Version:
LiveLike React Native package
43 lines (42 loc) • 1.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createStore = createStore;
function createStore(initialValue) {
const store = {
value: initialValue,
listeners: [],
set: updateValue => {
store.value = updateValue;
store.notify();
},
get: () => {
return store.value;
},
notify: () => {
if (store.listeners.length) {
const newValue = store.get();
try {
store.listeners.forEach(cb => cb(newValue));
} catch (error) {
console.error('Error while calling banner subscribers', error);
}
}
},
subscribe: cb => {
const cbIndex = store.listeners.findIndex(_cb => _cb === cb);
if (cbIndex < 0) {
store.listeners = [...store.listeners, cb];
} else {
store.listeners = [...store.listeners];
store.listeners.splice(cbIndex, 1, cb);
}
return () => {
store.listeners = store.listeners.filter(_cb => _cb !== cb);
};
}
};
return store;
}
//# sourceMappingURL=store.js.map