UNPKG

@atlaskit/editor-core

Version:

A package contains Atlassian editor core functionality

86 lines 2.7 kB
export { WithProviders } from './withProviders'; var findIndex = function (array, predicate) { var index = -1; array.some(function (item, i) { if (predicate(item)) { index = i; return true; } return false; }); return index; }; var ProviderFactory = (function () { function ProviderFactory() { this.providers = new Map(); this.subscribers = new Map(); } ProviderFactory.prototype.destroy = function () { this.providers.clear(); this.subscribers.clear(); }; ProviderFactory.prototype.isEmpty = function () { return !this.providers.size && !this.subscribers.size; }; ProviderFactory.prototype.setProvider = function (name, provider) { // Do not trigger notifyUpdate if provider is the same. if (provider && this.providers.get(name) === provider) { return; } if (provider) { this.providers.set(name, provider); } else { this.providers.delete(name); } this.notifyUpdated(name, provider); }; ProviderFactory.prototype.removeProvider = function (name) { this.providers.delete(name); this.notifyUpdated(name); }; ProviderFactory.prototype.subscribe = function (name, handler) { var handlers = this.subscribers.get(name) || []; handlers.push(handler); this.subscribers.set(name, handlers); var provider = this.providers.get(name); if (provider) { handler(name, provider); } }; ProviderFactory.prototype.unsubscribe = function (name, handler) { var handlers = this.subscribers.get(name); if (!handlers) { return; } var index = findIndex(handlers, function (h) { return h === handler; }); if (index !== -1) { handlers.splice(index, 1); } if (handlers.length === 0) { this.subscribers.delete(name); } else { this.subscribers.set(name, handlers); } }; ProviderFactory.prototype.unsubscribeAll = function (name) { var handlers = this.subscribers.get(name); if (!handlers) { return; } this.subscribers.delete(name); }; ProviderFactory.prototype.notifyUpdated = function (name, provider) { var handlers = this.subscribers.get(name); if (!handlers) { return; } handlers.forEach(function (handler) { handler(name, provider); }); }; return ProviderFactory; }()); export default ProviderFactory; //# sourceMappingURL=index.js.map