UNPKG

devextreme-angular

Version:

Angular UI and visualization components based on DevExtreme widgets

99 lines 12.4 kB
/*! * devextreme-angular * Version: 22.1.14 * Build date: Mon Apr 29 2024 * * Copyright (c) 2012 - 2024 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZGlzdC9jb3JlL2V2ZW50cy1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFPckQsTUFBTSxPQUFPLGdCQUFnQjtJQUl6QixZQUFvQixRQUFhLEVBQVUsSUFBWTtRQUFuQyxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUgvQyxrQkFBYSxHQUE0QyxFQUFFLENBQUM7UUFDNUQsV0FBTSxHQUF5QyxFQUFFLENBQUM7SUFFQyxDQUFDO0lBRTVELFFBQVEsQ0FBQyxJQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJO1FBQ2hCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUMxQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xELE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNILElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENB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LE9BQU8sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYTtRQUN4QixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGRldmV4dHJlbWUtYW5ndWxhclxuICogVmVyc2lvbjogMjIuMS4xNFxuICogQnVpbGQgZGF0ZTogTW9uIEFwciAyOSAyMDI0XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyNCBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcbiAqXG4gKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBtb2RpZmllZCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zXG4gKiBvZiB0aGUgTUlUIGxpY2Vuc2UuIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBwcm9qZWN0IGZvciBkZXRhaWxzLlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9EZXZFeHByZXNzL2RldmV4dHJlbWUtYW5ndWxhclxuICovXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50JztcblxuaW50ZXJmYWNlIElFdmVudFN1YnNjcmlwdGlvbiB7XG4gICAgaGFuZGxlcjogYW55O1xuICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB2b2lkO1xufVxuZXhwb3J0IGNsYXNzIE5nRXZlbnRzU3RyYXRlZ3kge1xuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogeyBba2V5OiBzdHJpbmddOiBJRXZlbnRTdWJzY3JpcHRpb25bXSB9ID0ge307XG4gICAgcHJpdmF0ZSBldmVudHM6IHsgW2tleTogc3RyaW5nXTogRXZlbnRFbWl0dGVyPGFueT4gfSA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbnN0YW5jZTogYW55LCBwcml2YXRlIHpvbmU6IE5nWm9uZSkgeyB9XG5cbiAgICBoYXNFdmVudChuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW1pdHRlcihuYW1lKS5vYnNlcnZlcnMubGVuZ3RoICE9PSAwO1xuICAgIH1cblxuICAgIGZpcmVFdmVudChuYW1lLCBhcmdzKSB7XG4gICAgICAgIGxldCBlbWl0dGVyID0gdGhpcy5nZXRFbWl0dGVyKG5hbWUpO1xuICAgICAgICBpZiAoZW1pdHRlci5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcm5hbFN1YnMgPSB0aGlzLnN1YnNjcmlwdGlvbnNbbmFtZV0gfHwgW107XG4gICAgICAgICAgICBpZiAoaW50ZXJuYWxTdWJzLmxlbmd0aCA9PT0gZW1pdHRlci5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZW1pdHRlci5uZXh0KGFyZ3MgJiYgYXJnc1swXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gZW1pdHRlci5uZXh0KGFyZ3MgJiYgYXJnc1swXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb24obmFtZTogc3RyaW5nIHwgT2JqZWN0LCBoYW5kbGVyPzogRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbGV0IGV2ZW50U3Vic2NyaXB0aW9ucyA9IHRoaXMuc3Vic2NyaXB0aW9uc1tuYW1lXSB8fCBbXSxcbiAgICAgICAgICAgICAgICBzdWJjcmlwdGlvbiA9IHRoaXMuZ2V0RW1pdHRlcihuYW1lKS5zdWJzY3JpYmUoaGFuZGxlci5iaW5kKHRoaXMuaW5zdGFuY2UpKSxcbiAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSA9IHN1YmNyaXB0aW9uLnVuc3Vic2NyaWJlLmJpbmQoc3ViY3JpcHRpb24pO1xuXG4gICAgICAgICAgICBldmVudFN1YnNjcmlwdGlvbnMucHVzaCh7IGhhbmRsZXIsIHVuc3Vic2NyaWJlIH0pO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zW25hbWVdID0gZXZlbnRTdWJzY3JpcHRpb25zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGhhbmRsZXJzT2JqID0gbmFtZTtcblxuICAgICAgICAgICAgT2JqZWN0LmtleXMoaGFuZGxlcnNPYmopLmZvckVhY2goZXZlbnQgPT4gdGhpcy5vbihldmVudCwgaGFuZGxlcnNPYmpbZXZlbnRdKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvZmYobmFtZSwgaGFuZGxlcikge1xuICAgICAgICBsZXQgZXZlbnRTdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zW25hbWVdIHx8IFtdO1xuXG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgICBldmVudFN1YnNjcmlwdGlvbnMuc29tZSgoc3Vic2NyaXB0aW9uLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbi5oYW5kbGVyID09PSBoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICBldmVudFN1YnNjcmlwdGlvbnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV2ZW50U3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV2ZW50U3Vic2NyaXB0aW9ucy5zcGxpY2UoMCwgZXZlbnRTdWJzY3JpcHRpb25zLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkaXNwb3NlKCkge31cblxuICAgIHB1YmxpYyBhZGRFbWl0dGVyKGV2ZW50TmFtZTogc3RyaW5nLCBlbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55Pikge1xuICAgICAgICB0aGlzLmV2ZW50c1tldmVudE5hbWVdID0gZW1pdHRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVtaXR0ZXIoZXZlbnROYW1lOiBzdHJpbmcpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgICAgIGlmICghdGhpcy5ldmVudHNbZXZlbnROYW1lXSkge1xuICAgICAgICAgICAgdGhpcy5ldmVudHNbZXZlbnROYW1lXSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ldmVudHNbZXZlbnROYW1lXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbWl0dGVySGVscGVyIHtcbiAgICBsb2NrZWRWYWx1ZUNoYW5nZUV2ZW50ID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSwgcHJpdmF0ZSBjb21wb25lbnQ6IER4Q29tcG9uZW50KSB7IH1cblxuICAgIGZpcmVOZ0V2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBldmVudEFyZ3M6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5sb2NrZWRWYWx1ZUNoYW5nZUV2ZW50ICYmIGV2ZW50TmFtZSA9PT0gJ3ZhbHVlQ2hhbmdlJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbWl0dGVyID0gdGhpcy5jb21wb25lbnRbZXZlbnROYW1lXTtcbiAgICAgICAgaWYgKGVtaXR0ZXIgJiYgZW1pdHRlci5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBlbWl0dGVyLm5leHQoZXZlbnRBcmdzICYmIGV2ZW50QXJnc1swXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUVtaXR0ZXJzKGV2ZW50czogYW55W10pIHtcbiAgICAgICAgZXZlbnRzLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRbZXZlbnQuZW1pdF0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuIl19