devextreme-angular
Version:
Angular UI and visualization components based on DevExtreme widgets
106 lines • 12.5 kB
JavaScript
/*!
* devextreme-angular
* Version: 25.1.3
* Build date: Wed Jun 25 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?.[0]);
}
else {
this.zone.run(() => emitter.next(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?.observers.length) {
this.zone.run(() => {
emitter.next(eventArgs?.[0]);
});
}
}
createEmitters(events) {
events.forEach((event) => {
this.component[event.emit] = new EventEmitter();
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZGlzdC9jb3JlL2V2ZW50cy1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFPckQsTUFBTSxPQUFPLGdCQUFnQjtJQUtFO0lBQWdDO0lBSnJELGFBQWEsR0FBNEMsRUFBRSxDQUFDO0lBRTVELE1BQU0sR0FBeUMsRUFBRSxDQUFDO0lBRTFELFlBQTZCLFFBQWEsRUFBbUIsSUFBWTtRQUE1QyxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQW1CLFNBQUksR0FBSixJQUFJLENBQVE7SUFBSSxDQUFDO0lBRTlFLFFBQVEsQ0FBQyxJQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNyRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMs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QUMsU0FBaUIsRUFBRSxTQUFjO1FBQzNDLElBQUksSUFBSSxDQUFDLHNCQUFzQixJQUFJLFNBQVMsS0FBSyxhQUFhLEVBQUUsQ0FBQztZQUMvRCxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsSUFBSSxPQUFPLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYTtRQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogZGV2ZXh0cmVtZS1hbmd1bGFyXG4gKiBWZXJzaW9uOiAyNS4xLjNcbiAqIEJ1aWxkIGRhdGU6IFdlZCBKdW4gMjUgMjAyNVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjUgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgbW9kaWZpZWQgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtc1xuICogb2YgdGhlIE1JVCBsaWNlbnNlLiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgcHJvamVjdCBmb3IgZGV0YWlscy5cbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vRGV2RXhwcmVzcy9kZXZleHRyZW1lLWFuZ3VsYXJcbiAqL1xuXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50JztcclxuXHJcbmludGVyZmFjZSBJRXZlbnRTdWJzY3JpcHRpb24ge1xyXG4gIGhhbmRsZXI6IGFueTtcclxuICB1bnN1YnNjcmliZTogKCkgPT4gdm9pZDtcclxufVxyXG5leHBvcnQgY2xhc3MgTmdFdmVudHNTdHJhdGVneSB7XHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IElFdmVudFN1YnNjcmlwdGlvbltdIH0gPSB7fTtcclxuXHJcbiAgcHJpdmF0ZSBldmVudHM6IHsgW2tleTogc3RyaW5nXTogRXZlbnRFbWl0dGVyPGFueT4gfSA9IHt9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGluc3RhbmNlOiBhbnksIHByaXZhdGUgcmVhZG9ubHkgem9uZTogTmdab25lKSB7IH1cclxuXHJcbiAgaGFzRXZlbnQobmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRFbWl0dGVyKG5hbWUpLm9ic2VydmVycy5sZW5ndGggIT09IDA7XHJcbiAgfVxyXG5cclxuICBmaXJlRXZlbnQobmFtZSwgYXJncykge1xyXG4gICAgY29uc3QgZW1pdHRlciA9IHRoaXMuZ2V0RW1pdHRlcihuYW1lKTtcclxuICAgIGlmIChlbWl0dGVyLm9ic2VydmVycy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgaW50ZXJuYWxTdWJzID0gdGhpcy5zdWJzY3JpcHRpb25zW25hbWVdIHx8IFtdO1xyXG4gICAgICBpZiAoaW50ZXJuYWxTdWJzLmxlbmd0aCA9PT0gZW1pdHRlci5vYnNlcnZlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgZW1pdHRlci5uZXh0KGFyZ3M/LlswXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiBlbWl0dGVyLm5leHQoYXJncz8uWzBdKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uKG5hbWU6IHN0cmluZyB8IG9iamVjdCwgaGFuZGxlcj86IEZ1bmN0aW9uKSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGNvbnN0IGV2ZW50U3Vic2NyaXB0aW9ucyA9IHRoaXMuc3Vic2NyaXB0aW9uc1tuYW1lXSB8fCBbXTtcclxuICAgICAgY29uc3Qgc3ViY3JpcHRpb24gPSB0aGlzLmdldEVtaXR0ZXIobmFtZSkuc3Vic2NyaWJlKGhhbmRsZXI/LmJpbmQodGhpcy5pbnN0YW5jZSkpO1xyXG4gICAgICBjb25zdCB1bnN1YnNjcmliZSA9IHN1YmNyaXB0aW9uLnVuc3Vic2NyaWJlLmJpbmQoc3ViY3JpcHRpb24pO1xyXG5cclxuICAgICAgZXZlbnRTdWJzY3JpcHRpb25zLnB1c2goeyBoYW5kbGVyLCB1bnN1YnNjcmliZSB9KTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zW25hbWVdID0gZXZlbnRTdWJzY3JpcHRpb25zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaGFuZGxlcnNPYmogPSBuYW1lO1xyXG5cclxuICAgICAgT2JqZWN0LmtleXMoaGFuZGxlcnNPYmopLmZvckVhY2goKGV2ZW50KSA9PiB0aGlzLm9uKGV2ZW50LCBoYW5kbGVyc09ialtldmVudF0pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9mZihuYW1lLCBoYW5kbGVyKSB7XHJcbiAgICBjb25zdCBldmVudFN1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnNbbmFtZV0gfHwgW107XHJcblxyXG4gICAgaWYgKGhhbmRsZXIpIHtcclxuICAgICAgZXZlbnRTdWJzY3JpcHRpb25zLnNvbWUoKHN1YnNjcmlwdGlvbiwgaSkgPT4ge1xyXG4gICAgICAgIGlmIChzdWJzY3JpcHRpb24uaGFuZGxlciA9PT0gaGFuZGxlcikge1xyXG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICBldmVudFN1YnNjcmlwdGlvbnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBldmVudFN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3Vic2NyaXB0aW9uKSA9PiB7XHJcbiAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBldmVudFN1YnNjcmlwdGlvbnMuc3BsaWNlKDAsIGV2ZW50U3Vic2NyaXB0aW9ucy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHt9XHJcblxyXG4gIHB1YmxpYyBhZGRFbWl0dGVyKGV2ZW50TmFtZTogc3RyaW5nLCBlbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55Pikge1xyXG4gICAgdGhpcy5ldmVudHNbZXZlbnROYW1lXSA9IGVtaXR0ZXI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEVtaXR0ZXIoZXZlbnROYW1lOiBzdHJpbmcpOiBFdmVudEVtaXR0ZXI8YW55PiB7XHJcbiAgICBpZiAoIXRoaXMuZXZlbnRzW2V2ZW50TmFtZV0pIHtcclxuICAgICAgdGhpcy5ldmVudHNbZXZlbnROYW1lXSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmV2ZW50c1tldmVudE5hbWVdO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVtaXR0ZXJIZWxwZXIge1xyXG4gIGxvY2tlZFZhbHVlQ2hhbmdlRXZlbnQgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmUsIHByaXZhdGUgY29tcG9uZW50OiBEeENvbXBvbmVudCkgeyB9XHJcblxyXG4gIGZpcmVOZ0V2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBldmVudEFyZ3M6IGFueSkge1xyXG4gICAgaWYgKHRoaXMubG9ja2VkVmFsdWVDaGFuZ2VFdmVudCAmJiBldmVudE5hbWUgPT09ICd2YWx1ZUNoYW5nZScpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZW1pdHRlciA9IHRoaXMuY29tcG9uZW50W2V2ZW50TmFtZV07XHJcbiAgICBpZiAoZW1pdHRlcj8ub2JzZXJ2ZXJzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICBlbWl0dGVyLm5leHQoZXZlbnRBcmdzPy5bMF0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZUVtaXR0ZXJzKGV2ZW50czogYW55W10pIHtcclxuICAgIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFtldmVudC5lbWl0XSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=