UNPKG

devextreme-angular

Version:

Angular UI and visualization components based on DevExtreme widgets

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