UNPKG

async-states

Version:

Core of async-states

61 lines (58 loc) 1.83 kB
import { isFunction, __DEV__ } from '../utils.js'; import devtools from '../devtools/Devtools.js'; function subscribeToInstance(instance, options) { let props = isFunction(options) ? { cb: options } : options; if (!isFunction(props.cb)) { return; } if (!instance.subsIndex) { instance.subsIndex = 0; } if (!instance.subscriptions) { instance.subscriptions = {}; } instance.subsIndex += 1; let subscriptionKey = props.key; if (subscriptionKey === undefined) { subscriptionKey = `$${instance.subsIndex}`; } function cleanup() { delete instance.subscriptions[subscriptionKey]; if (__DEV__) devtools.emitUnsub(instance, subscriptionKey); if (instance.config.resetStateOnDispose) { instance.actions.dispose(); } } instance.subscriptions[subscriptionKey] = { props, cleanup }; if (__DEV__) devtools.emitSub(instance, subscriptionKey); return cleanup; } function subscribeToInstanceEvent(instance, eventType, eventHandler) { if (!instance.events) { instance.events = {}; } if (!instance.events[eventType]) { instance.events[eventType] = {}; } let events = instance.events[eventType]; if (!instance.eventsIndex) { instance.eventsIndex = 0; } let index = ++instance.eventsIndex; events[index] = eventHandler; return function () { delete events[index]; }; } function notifySubscribers(instance) { if (!instance.subscriptions) { return; } Object.values(instance.subscriptions).forEach((subscription) => { subscription.props.cb(instance.state); }); } export { notifySubscribers, subscribeToInstance, subscribeToInstanceEvent }; //# sourceMappingURL=StateSubscription.js.map