@enact/core
Version:
Enact is an open source JavaScript framework containing everything you need to create a fast, scalable mobile or web application.
67 lines (66 loc) • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.Registry = void 0;
/**
* Allows components to register parents to cascade context changes and trigger functions
*
* @type Object
* @memberof core/Registry
* @private
*/
var Registry = exports.Registry = {
create: function create(handler) {
var instances = [];
var currentParent;
var registry = Object.freeze({
set parent(register) {
if (currentParent && currentParent.unregister) {
currentParent.unregister();
}
if (register && typeof register === 'function') {
currentParent = register(registry.notify);
}
},
notify: function notify(ev) {
var exclude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
return true;
};
instances.filter(exclude).forEach(function (f) {
return f(ev);
});
},
register: function register(instance) {
if (instances.indexOf(instance) === -1) {
instances.push(instance);
if (handler) {
handler({
action: 'register'
}, instance);
}
}
return {
notify: function notify(ev) {
if (handler) {
handler(ev, instance);
}
},
unregister: function unregister() {
var i = instances.indexOf(instance);
if (i >= 0) {
instances.splice(i, 1);
if (handler) {
handler({
action: 'register'
}, instance);
}
}
}
};
}
});
return registry;
}
};
var _default = exports["default"] = Registry;