UNPKG

devextreme-angular

Version:

Angular UI and visualization components based on DevExtreme widgets

106 lines 12.6 kB
/*! * 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