devextreme-angular
Version:
Angular UI and visualization components based on DevExtreme widgets
106 lines • 12.6 kB
JavaScript
/*!
* devextreme-angular
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 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 {
instance;
zone;
subscriptions = {};
events = {};
constructor(instance, zone) {
this.instance = instance;
this.zone = zone;
}
hasEvent(name) {
return this.getEmitter(name).observers.length !== 0;
}
fireEvent(name, args) {
const 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') {
const eventSubscriptions = this.subscriptions[name] || [];
const subcription = this.getEmitter(name).subscribe(handler?.bind(this.instance));
const unsubscribe = subcription.unsubscribe.bind(subcription);
eventSubscriptions.push({ handler, unsubscribe });
this.subscriptions[name] = eventSubscriptions;
}
else {
const handlersObj = name;
Object.keys(handlersObj).forEach((event) => this.on(event, handlersObj[event]));
}
}
off(name, handler) {
const eventSubscriptions = this.subscriptions[name] || [];
if (handler) {
eventSubscriptions.some((subscription, i) => {
if (subscription.handler === handler) {
subscription.unsubscribe();
eventSubscriptions.splice(i, 1);
return true;
}
return false;
});
}
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 {
zone;
component;
lockedValueChangeEvent = false;
constructor(zone, component) {
this.zone = zone;
this.component = component;
}
fireNgEvent(eventName, eventArgs) {
if (this.lockedValueChangeEvent && eventName === 'valueChange') {
return;
}
const 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZGlzdC9jb3JlL2V2ZW50cy1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFPckQsTUFBTSxPQUFPLGdCQUFnQjtJQUtFO0lBQWdDO0lBSnJELGFBQWEsR0FBNEMsRUFBRSxDQUFDO0lBRTVELE1BQU0sR0FBeUMsRUFBRSxDQUFDO0lBRTFELFlBQTZCLFFBQWEsRUFBbUIsSUFBWTtRQUE1QyxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQW1CLFNBQUksR0FBSixJQUFJLENBQVE7SUFBSSxDQUFDO0lBRTlFLFFBQVEsQ0FBQyxJQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNyRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUks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OUUsV0FBVyxDQUFDLFNBQWlCLEVBQUUsU0FBYztRQUMzQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxTQUFTLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDL0QsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWE7UUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGRldmV4dHJlbWUtYW5ndWxhclxuICogVmVyc2lvbjogMjQuMi42XG4gKiBCdWlsZCBkYXRlOiBNb24gTWFyIDE3IDIwMjVcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDI1IERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxuICpcbiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXNcbiAqIG9mIHRoZSBNSVQgbGljZW5zZS4gU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHByb2plY3QgZm9yIGRldGFpbHMuXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL0RldkV4cHJlc3MvZGV2ZXh0cmVtZS1hbmd1bGFyXG4gKi9cblxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRHhDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgSUV2ZW50U3Vic2NyaXB0aW9uIHtcclxuICBoYW5kbGVyOiBhbnk7XHJcbiAgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQ7XHJcbn1cclxuZXhwb3J0IGNsYXNzIE5nRXZlbnRzU3RyYXRlZ3kge1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogeyBba2V5OiBzdHJpbmddOiBJRXZlbnRTdWJzY3JpcHRpb25bXSB9ID0ge307XHJcblxyXG4gIHByaXZhdGUgZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IEV2ZW50RW1pdHRlcjxhbnk+IH0gPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbnN0YW5jZTogYW55LCBwcml2YXRlIHJlYWRvbmx5IHpvbmU6IE5nWm9uZSkgeyB9XHJcblxyXG4gIGhhc0V2ZW50KG5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RW1pdHRlcihuYW1lKS5vYnNlcnZlcnMubGVuZ3RoICE9PSAwO1xyXG4gIH1cclxuXHJcbiAgZmlyZUV2ZW50KG5hbWUsIGFyZ3MpIHtcclxuICAgIGNvbnN0IGVtaXR0ZXIgPSB0aGlzLmdldEVtaXR0ZXIobmFtZSk7XHJcbiAgICBpZiAoZW1pdHRlci5vYnNlcnZlcnMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGludGVybmFsU3VicyA9IHRoaXMuc3Vic2NyaXB0aW9uc1tuYW1lXSB8fCBbXTtcclxuICAgICAgaWYgKGludGVybmFsU3Vicy5sZW5ndGggPT09IGVtaXR0ZXIub2JzZXJ2ZXJzLmxlbmd0aCkge1xyXG4gICAgICAgIGVtaXR0ZXIubmV4dChhcmdzICYmIGFyZ3NbMF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gZW1pdHRlci5uZXh0KGFyZ3MgJiYgYXJnc1swXSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbihuYW1lOiBzdHJpbmcgfCBPYmplY3QsIGhhbmRsZXI/OiBGdW5jdGlvbikge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjb25zdCBldmVudFN1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnNbbmFtZV0gfHwgW107XHJcbiAgICAgIGNvbnN0IHN1YmNyaXB0aW9uID0gdGhpcy5nZXRFbWl0dGVyKG5hbWUpLnN1YnNjcmliZShoYW5kbGVyPy5iaW5kKHRoaXMuaW5zdGFuY2UpKTtcclxuICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBzdWJjcmlwdGlvbi51bnN1YnNjcmliZS5iaW5kKHN1YmNyaXB0aW9uKTtcclxuXHJcbiAgICAgIGV2ZW50U3Vic2NyaXB0aW9ucy5wdXNoKHsgaGFuZGxlciwgdW5zdWJzY3JpYmUgfSk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc1tuYW1lXSA9IGV2ZW50U3Vic2NyaXB0aW9ucztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGhhbmRsZXJzT2JqID0gbmFtZTtcclxuXHJcbiAgICAgIE9iamVjdC5rZXlzKGhhbmRsZXJzT2JqKS5mb3JFYWNoKChldmVudCkgPT4gdGhpcy5vbihldmVudCwgaGFuZGxlcnNPYmpbZXZlbnRdKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvZmYobmFtZSwgaGFuZGxlcikge1xyXG4gICAgY29uc3QgZXZlbnRTdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zW25hbWVdIHx8IFtdO1xyXG5cclxuICAgIGlmIChoYW5kbGVyKSB7XHJcbiAgICAgIGV2ZW50U3Vic2NyaXB0aW9ucy5zb21lKChzdWJzY3JpcHRpb24sIGkpID0+IHtcclxuICAgICAgICBpZiAoc3Vic2NyaXB0aW9uLmhhbmRsZXIgPT09IGhhbmRsZXIpIHtcclxuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgZXZlbnRTdWJzY3JpcHRpb25zLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXZlbnRTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4ge1xyXG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgZXZlbnRTdWJzY3JpcHRpb25zLnNwbGljZSgwLCBldmVudFN1YnNjcmlwdGlvbnMubGVuZ3RoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7fVxyXG5cclxuICBwdWJsaWMgYWRkRW1pdHRlcihldmVudE5hbWU6IHN0cmluZywgZW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4pIHtcclxuICAgIHRoaXMuZXZlbnRzW2V2ZW50TmFtZV0gPSBlbWl0dGVyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFbWl0dGVyKGV2ZW50TmFtZTogc3RyaW5nKTogRXZlbnRFbWl0dGVyPGFueT4ge1xyXG4gICAgaWYgKCF0aGlzLmV2ZW50c1tldmVudE5hbWVdKSB7XHJcbiAgICAgIHRoaXMuZXZlbnRzW2V2ZW50TmFtZV0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5ldmVudHNbZXZlbnROYW1lXTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFbWl0dGVySGVscGVyIHtcclxuICBsb2NrZWRWYWx1ZUNoYW5nZUV2ZW50ID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgem9uZTogTmdab25lLCBwcml2YXRlIGNvbXBvbmVudDogRHhDb21wb25lbnQpIHsgfVxyXG5cclxuICBmaXJlTmdFdmVudChldmVudE5hbWU6IHN0cmluZywgZXZlbnRBcmdzOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmxvY2tlZFZhbHVlQ2hhbmdlRXZlbnQgJiYgZXZlbnROYW1lID09PSAndmFsdWVDaGFuZ2UnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVtaXR0ZXIgPSB0aGlzLmNvbXBvbmVudFtldmVudE5hbWVdO1xyXG4gICAgaWYgKGVtaXR0ZXIgJiYgZW1pdHRlci5vYnNlcnZlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIGVtaXR0ZXIubmV4dChldmVudEFyZ3MgJiYgZXZlbnRBcmdzWzBdKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVFbWl0dGVycyhldmVudHM6IGFueVtdKSB7XHJcbiAgICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5jb21wb25lbnRbZXZlbnQuZW1pdF0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19