devextreme-angular
Version:
Angular UI and visualization components based on DevExtreme widgets
97 lines • 12.6 kB
JavaScript
/*!
* devextreme-angular
* Version: 20.2.5
* Build date: Fri Jan 15 2021
*
* Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file in the root of the project for details.
*
* https://github.com/DevExpress/devextreme-angular
*/
import { EventEmitter } from '@angular/core';
export class NgEventsStrategy {
constructor(instance, zone) {
this.instance = instance;
this.zone = zone;
this.subscriptions = {};
this.events = {};
}
hasEvent(name) {
return this.getEmitter(name).observers.length !== 0;
}
fireEvent(name, args) {
let emitter = this.getEmitter(name);
if (emitter.observers.length) {
const internalSubs = this.subscriptions[name] || [];
if (internalSubs.length === emitter.observers.length)
emitter.next(args && args[0]);
else
this.zone.run(() => emitter.next(args && args[0]));
}
}
on(name, handler) {
if (typeof name === 'string') {
let eventSubscriptions = this.subscriptions[name] || [], subcription = this.getEmitter(name).subscribe(handler.bind(this.instance)), unsubscribe = subcription.unsubscribe.bind(subcription);
eventSubscriptions.push({ handler, unsubscribe });
this.subscriptions[name] = eventSubscriptions;
}
else {
let handlersObj = name;
Object.keys(handlersObj).forEach(event => this.on(event, handlersObj[event]));
}
}
off(name, handler) {
let eventSubscriptions = this.subscriptions[name] || [];
if (handler) {
eventSubscriptions.some((subscription, i) => {
if (subscription.handler === handler) {
subscription.unsubscribe();
eventSubscriptions.splice(i, 1);
return true;
}
});
}
else {
eventSubscriptions.forEach(subscription => {
subscription.unsubscribe();
});
eventSubscriptions.splice(0, eventSubscriptions.length);
}
}
dispose() { }
addEmitter(eventName, emitter) {
this.events[eventName] = emitter;
}
getEmitter(eventName) {
if (!this.events[eventName]) {
this.events[eventName] = new EventEmitter();
}
return this.events[eventName];
}
}
export class EmitterHelper {
constructor(zone, component) {
this.zone = zone;
this.component = component;
this.lockedValueChangeEvent = false;
}
fireNgEvent(eventName, eventArgs) {
if (this.lockedValueChangeEvent && eventName === 'valueChange') {
return;
}
let emitter = this.component[eventName];
if (emitter && emitter.observers.length) {
this.zone.run(() => {
emitter.next(eventArgs && eventArgs[0]);
});
}
}
createEmitters(events) {
events.forEach(event => {
this.component[event.emit] = new EventEmitter();
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGV2ZXh0cmVtZS1hbmd1bGFyL2NvcmUvIiwic291cmNlcyI6WyJldmVudHMtc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBT3JELE1BQU0sT0FBTyxnQkFBZ0I7SUFJekIsWUFBb0IsUUFBYSxFQUFVLElBQVk7UUFBbkMsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUFVLFNBQUksR0FBSixJQUFJLENBQVE7UUFIL0Msa0JBQWEsR0FBNEMsRUFBRSxDQUFDO1FBQzVELFdBQU0sR0FBeUMsRUFBRSxDQUFDO0lBRUMsQ0FBQztJQUU1RCxRQUFRLENBQUMsSUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSTtRQUNoQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDMUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEQsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTTtnQkFDaEQsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O2dCQUU5QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMs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QU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFhO1FBQ3hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogZGV2ZXh0cmVtZS1hbmd1bGFyXG4gKiBWZXJzaW9uOiAyMC4yLjVcbiAqIEJ1aWxkIGRhdGU6IEZyaSBKYW4gMTUgMjAyMVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgbW9kaWZpZWQgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtc1xuICogb2YgdGhlIE1JVCBsaWNlbnNlLiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgcHJvamVjdCBmb3IgZGV0YWlscy5cbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vRGV2RXhwcmVzcy9kZXZleHRyZW1lLWFuZ3VsYXJcbiAqL1xuXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50JztcclxuXHJcbmludGVyZmFjZSBJRXZlbnRTdWJzY3JpcHRpb24ge1xyXG4gICAgaGFuZGxlcjogYW55O1xyXG4gICAgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQ7XHJcbn1cclxuZXhwb3J0IGNsYXNzIE5nRXZlbnRzU3RyYXRlZ3kge1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IElFdmVudFN1YnNjcmlwdGlvbltdIH0gPSB7fTtcclxuICAgIHByaXZhdGUgZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IEV2ZW50RW1pdHRlcjxhbnk+IH0gPSB7fTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluc3RhbmNlOiBhbnksIHByaXZhdGUgem9uZTogTmdab25lKSB7IH1cclxuXHJcbiAgICBoYXNFdmVudChuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbWl0dGVyKG5hbWUpLm9ic2VydmVycy5sZW5ndGggIT09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgZmlyZUV2ZW50KG5hbWUsIGFyZ3MpIHtcclxuICAgICAgICBsZXQgZW1pdHRlciA9IHRoaXMuZ2V0RW1pdHRlcihuYW1lKTtcclxuICAgICAgICBpZiAoZW1pdHRlci5vYnNlcnZlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVybmFsU3VicyA9IHRoaXMuc3Vic2NyaXB0aW9uc1tuYW1lXSB8fCBbXTtcclxuICAgICAgICAgICAgaWYgKGludGVybmFsU3Vicy5sZW5ndGggPT09IGVtaXR0ZXIub2JzZXJ2ZXJzLmxlbmd0aClcclxuICAgICAgICAgICAgICAgIGVtaXR0ZXIubmV4dChhcmdzICYmIGFyZ3NbMF0pO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IGVtaXR0ZXIubmV4dChhcmdzICYmIGFyZ3NbMF0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb24obmFtZTogc3RyaW5nIHwgT2JqZWN0LCBoYW5kbGVyPzogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGxldCBldmVudFN1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnNbbmFtZV0gfHwgW10sXHJcbiAgICAgICAgICAgICAgICBzdWJjcmlwdGlvbiA9IHRoaXMuZ2V0RW1pdHRlcihuYW1lKS5zdWJzY3JpYmUoaGFuZGxlci5iaW5kKHRoaXMuaW5zdGFuY2UpKSxcclxuICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gc3ViY3JpcHRpb24udW5zdWJzY3JpYmUuYmluZChzdWJjcmlwdGlvbik7XHJcblxyXG4gICAgICAgICAgICBldmVudFN1YnNjcmlwdGlvbnMucHVzaCh7IGhhbmRsZXIsIHVuc3Vic2NyaWJlIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnNbbmFtZV0gPSBldmVudFN1YnNjcmlwdGlvbnM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGhhbmRsZXJzT2JqID0gbmFtZTtcclxuXHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGhhbmRsZXJzT2JqKS5mb3JFYWNoKGV2ZW50ID0+IHRoaXMub24oZXZlbnQsIGhhbmRsZXJzT2JqW2V2ZW50XSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvZmYobmFtZSwgaGFuZGxlcikge1xyXG4gICAgICAgIGxldCBldmVudFN1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnNbbmFtZV0gfHwgW107XHJcblxyXG4gICAgICAgIGlmIChoYW5kbGVyKSB7XHJcbiAgICAgICAgICAgIGV2ZW50U3Vic2NyaXB0aW9ucy5zb21lKChzdWJzY3JpcHRpb24sIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb24uaGFuZGxlciA9PT0gaGFuZGxlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50U3Vic2NyaXB0aW9ucy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV2ZW50U3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGV2ZW50U3Vic2NyaXB0aW9ucy5zcGxpY2UoMCwgZXZlbnRTdWJzY3JpcHRpb25zLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpc3Bvc2UoKSB7fVxyXG5cclxuICAgIHB1YmxpYyBhZGRFbWl0dGVyKGV2ZW50TmFtZTogc3RyaW5nLCBlbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55Pikge1xyXG4gICAgICAgIHRoaXMuZXZlbnRzW2V2ZW50TmFtZV0gPSBlbWl0dGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RW1pdHRlcihldmVudE5hbWU6IHN0cmluZyk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZXZlbnRzW2V2ZW50TmFtZV0pIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudHNbZXZlbnROYW1lXSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzW2V2ZW50TmFtZV07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFbWl0dGVySGVscGVyIHtcclxuICAgIGxvY2tlZFZhbHVlQ2hhbmdlRXZlbnQgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSwgcHJpdmF0ZSBjb21wb25lbnQ6IER4Q29tcG9uZW50KSB7IH1cclxuXHJcbiAgICBmaXJlTmdFdmVudChldmVudE5hbWU6IHN0cmluZywgZXZlbnRBcmdzOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5sb2NrZWRWYWx1ZUNoYW5nZUV2ZW50ICYmIGV2ZW50TmFtZSA9PT0gJ3ZhbHVlQ2hhbmdlJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBlbWl0dGVyID0gdGhpcy5jb21wb25lbnRbZXZlbnROYW1lXTtcclxuICAgICAgICBpZiAoZW1pdHRlciAmJiBlbWl0dGVyLm9ic2VydmVycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbWl0dGVyLm5leHQoZXZlbnRBcmdzICYmIGV2ZW50QXJnc1swXSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVFbWl0dGVycyhldmVudHM6IGFueVtdKSB7XHJcbiAgICAgICAgZXZlbnRzLmZvckVhY2goZXZlbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFtldmVudC5lbWl0XSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuIl19