UNPKG

ngrx-event-bus

Version:

Angular and RxJs event bus with Mediator Pattern

109 lines 14.1 kB
import { Injectable } from '@angular/core'; import { BehaviorSubject, Subject } from 'rxjs'; import { EmitRecord } from '../interface/Event'; import * as i0 from "@angular/core"; export class NgRxEventBusService { constructor() { this.eventLastEmitted = {}; this.eventRegister = new Map(); } //#region Public /** * register event with or without default value. * @param event should be IEvent type. * @param defaultValue is option if data passed BehaviorSubject type has been considered else Subject type. */ registerEvent(event, defaultValue) { let eventRegister = this.eventRegister.get(event); if (eventRegister && eventRegister.unRegister === false) { throw `${event} event already registered`; } else if (eventRegister && eventRegister.unRegister) { eventRegister.unRegister = false; return; } eventRegister = { event: event, subject: defaultValue ? new BehaviorSubject(defaultValue) : new Subject() }; this.eventRegister.set(event, eventRegister); } /** * unregister the event. * @param event should be IEvent type. */ unregisterEvent(event, soft = false) { const eventRegister = this.eventRegister.get(event); if (eventRegister) { if (soft) { eventRegister.unRegister = true; } else { eventRegister.subject.unsubscribe(); this.eventRegister.delete(event); } return true; } return false; } /** * Binding function to subscribe the published event. * If event has not registered, it will register the same with default Subject type * @param event should be IEvent type. * @param action callback function when something event got publish. * @param emittedValue by the event based on selected enum. */ on(event, action, emittedValue) { let eventRegister = this.eventRegister.get(event); if (!eventRegister) { eventRegister = { event: event, subject: new Subject() }; this.eventRegister.set(event, eventRegister); } if (this.eventLastEmitted[event] && emittedValue) { let response; const eventName = event; switch (emittedValue) { case EmitRecord.First: response = this.eventLastEmitted[eventName][0]; break; case EmitRecord.Last: response = this.eventLastEmitted[eventName][this.eventLastEmitted[eventName].length - 1]; break; case EmitRecord.All: response = this.eventLastEmitted[eventName]; break; } setTimeout((data) => { eventRegister.subject.next(data); }, 0, response); } return eventRegister.subject.subscribe(action); } /** * Publish event using this function. * If event has not registered it will register it with default BehaviorSubject type * @param event should be EmitEvent type. */ emit(event) { let eventRegister = this.eventRegister.get(event.name); if (!eventRegister) { eventRegister = { event: event.name, subject: new BehaviorSubject(event.value) }; this.eventRegister.set(event.name, eventRegister); } else if (eventRegister.unRegister) { return; } eventRegister.subject.next(event.value); this.eventLastEmitted[event.name] = this.eventLastEmitted[event.name] || []; this.eventLastEmitted[event.name].push(event.value); } } NgRxEventBusService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: NgRxEventBusService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); NgRxEventBusService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: NgRxEventBusService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: NgRxEventBusService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdyeC1ldmVudC1idXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ncngtZXZlbnQtYnVzL3NyYy9saWIvc2VydmljZXMvbmdyeC1ldmVudC1idXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUc5RCxPQUFPLEVBQWEsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBSzNELE1BQU0sT0FBTyxtQkFBbUI7SUFJOUI7UUFEUSxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztJQUN6RCxDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCOzs7O1FBSUk7SUFDSixhQUFhLENBQUMsS0FBYSxFQUFFLFlBQXNCO1FBQ2pELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQ3ZELE1BQU0sR0FBRyxLQUFLLDJCQUEyQixDQUFDO1NBQzNDO2FBQUssSUFBRyxhQUFhLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBQztZQUNqRCxhQUFhLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNqQyxPQUFPO1NBQ1I7UUFDRCxhQUFhLEdBQUc7WUFDZCxLQUFLLEVBQUUsS0FBSztZQUNaLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRTtTQUMxRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxH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QyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUM7O2dIQWxHVSxtQkFBbUI7b0hBQW5CLG1CQUFtQixjQUZsQixNQUFNOzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJy4uL2ludGVyZmFjZS9JRXZlbnQnO1xyXG5pbXBvcnQgeyBJRXZlbnRSZWdpc3RlciB9IGZyb20gJy4uL2ludGVyZmFjZS9JRXZlbnRSZWdpc3Rlcic7XHJcbmltcG9ydCB7IEVtaXRFdmVudCwgRW1pdFJlY29yZCB9IGZyb20gJy4uL2ludGVyZmFjZS9FdmVudCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1J4RXZlbnRCdXNTZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBldmVudFJlZ2lzdGVyOiBNYXA8SUV2ZW50LCBJRXZlbnRSZWdpc3Rlcj47XHJcbiAgcHJpdmF0ZSBldmVudExhc3RFbWl0dGVkID0ge307XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmV2ZW50UmVnaXN0ZXIgPSBuZXcgTWFwPElFdmVudCwgSUV2ZW50UmVnaXN0ZXI+KCk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gUHVibGljXHJcbiAgLyoqXHJcbiAgICAqIHJlZ2lzdGVyIGV2ZW50IHdpdGggb3Igd2l0aG91dCBkZWZhdWx0IHZhbHVlLlxyXG4gICAgKiBAcGFyYW0gZXZlbnQgc2hvdWxkIGJlIElFdmVudCB0eXBlLlxyXG4gICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIGlzIG9wdGlvbiBpZiBkYXRhIHBhc3NlZCBCZWhhdmlvclN1YmplY3QgdHlwZSBoYXMgYmVlbiBjb25zaWRlcmVkIGVsc2UgU3ViamVjdCB0eXBlLlxyXG4gICAgKi9cclxuICByZWdpc3RlckV2ZW50KGV2ZW50OiBJRXZlbnQsIGRlZmF1bHRWYWx1ZT86IHVua25vd24pIHtcclxuICAgIGxldCBldmVudFJlZ2lzdGVyID0gdGhpcy5ldmVudFJlZ2lzdGVyLmdldChldmVudCk7XHJcbiAgICBpZiAoZXZlbnRSZWdpc3RlciAmJiBldmVudFJlZ2lzdGVyLnVuUmVnaXN0ZXIgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRocm93IGAke2V2ZW50fSBldmVudCBhbHJlYWR5IHJlZ2lzdGVyZWRgO1xyXG4gICAgfWVsc2UgaWYoZXZlbnRSZWdpc3RlciAmJiBldmVudFJlZ2lzdGVyLnVuUmVnaXN0ZXIpe1xyXG4gICAgICBldmVudFJlZ2lzdGVyLnVuUmVnaXN0ZXIgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZXZlbnRSZWdpc3RlciA9IHtcclxuICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICBzdWJqZWN0OiBkZWZhdWx0VmFsdWUgPyBuZXcgQmVoYXZpb3JTdWJqZWN0KGRlZmF1bHRWYWx1ZSkgOiBuZXcgU3ViamVjdCgpXHJcbiAgICB9O1xyXG4gICAgdGhpcy5ldmVudFJlZ2lzdGVyLnNldChldmVudCwgZXZlbnRSZWdpc3Rlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogdW5yZWdpc3RlciB0aGUgZXZlbnQuXHJcbiAgICAqIEBwYXJhbSBldmVudCBzaG91bGQgYmUgSUV2ZW50IHR5cGUuXHJcbiAgKi9cclxuICB1bnJlZ2lzdGVyRXZlbnQoZXZlbnQ6IElFdmVudCwgc29mdDogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBldmVudFJlZ2lzdGVyID0gdGhpcy5ldmVudFJlZ2lzdGVyLmdldChldmVudCk7XHJcbiAgICBpZiAoZXZlbnRSZWdpc3Rlcikge1xyXG4gICAgICBpZiAoc29mdCkge1xyXG4gICAgICAgIGV2ZW50UmVnaXN0ZXIudW5SZWdpc3RlciA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXZlbnRSZWdpc3Rlci5zdWJqZWN0LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgdGhpcy5ldmVudFJlZ2lzdGVyLmRlbGV0ZShldmVudCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICAqIEJpbmRpbmcgZnVuY3Rpb24gdG8gc3Vic2NyaWJlIHRoZSBwdWJsaXNoZWQgZXZlbnQuXHJcbiAgICAgKiBJZiBldmVudCBoYXMgbm90IHJlZ2lzdGVyZWQsIGl0IHdpbGwgcmVnaXN0ZXIgdGhlIHNhbWUgd2l0aCBkZWZhdWx0IFN1YmplY3QgdHlwZVxyXG4gICAgICogQHBhcmFtIGV2ZW50IHNob3VsZCBiZSBJRXZlbnQgdHlwZS5cclxuICAgICAqIEBwYXJhbSBhY3Rpb24gY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiBzb21ldGhpbmcgZXZlbnQgZ290IHB1Ymxpc2guXHJcbiAgICAgKiBAcGFyYW0gZW1pdHRlZFZhbHVlIGJ5IHRoZSBldmVudCBiYXNlZCBvbiBzZWxlY3RlZCBlbnVtLlxyXG4gICovXHJcbiAgb24oZXZlbnQ6IElFdmVudCwgYWN0aW9uOiBhbnksIGVtaXR0ZWRWYWx1ZT86IEVtaXRSZWNvcmQpOiBTdWJzY3JpcHRpb24ge1xyXG4gICAgbGV0IGV2ZW50UmVnaXN0ZXIgPSB0aGlzLmV2ZW50UmVnaXN0ZXIuZ2V0KGV2ZW50KTtcclxuICAgIGlmICghZXZlbnRSZWdpc3Rlcikge1xyXG4gICAgICBldmVudFJlZ2lzdGVyID0geyBldmVudDogZXZlbnQsIHN1YmplY3Q6IG5ldyBTdWJqZWN0KCkgfTtcclxuICAgICAgdGhpcy5ldmVudFJlZ2lzdGVyLnNldChldmVudCwgZXZlbnRSZWdpc3Rlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZXZlbnRMYXN0RW1pdHRlZFtldmVudCBhcyBzdHJpbmddICYmIGVtaXR0ZWRWYWx1ZSkge1xyXG4gICAgICBsZXQgcmVzcG9uc2U7XHJcbiAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGV2ZW50IGFzIHN0cmluZztcclxuICAgICAgc3dpdGNoIChlbWl0dGVkVmFsdWUpIHtcclxuICAgICAgICBjYXNlIEVtaXRSZWNvcmQuRmlyc3Q6XHJcbiAgICAgICAgICByZXNwb25zZSA9IHRoaXMuZXZlbnRMYXN0RW1pdHRlZFtldmVudE5hbWVdWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBFbWl0UmVjb3JkLkxhc3Q6XHJcbiAgICAgICAgICByZXNwb25zZSA9IHRoaXMuZXZlbnRMYXN0RW1pdHRlZFtldmVudE5hbWVdW3RoaXMuZXZlbnRMYXN0RW1pdHRlZFtldmVudE5hbWVdLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBFbWl0UmVjb3JkLkFsbDpcclxuICAgICAgICAgIHJlc3BvbnNlID0gdGhpcy5ldmVudExhc3RFbWl0dGVkW2V2ZW50TmFtZV07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBzZXRUaW1lb3V0KChkYXRhKSA9PiB7XHJcbiAgICAgICAgZXZlbnRSZWdpc3Rlci5zdWJqZWN0Lm5leHQoZGF0YSk7XHJcbiAgICAgIH0sIDAsIHJlc3BvbnNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBldmVudFJlZ2lzdGVyLnN1YmplY3Quc3Vic2NyaWJlKGFjdGlvbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICAqIFB1Ymxpc2ggZXZlbnQgdXNpbmcgdGhpcyBmdW5jdGlvbi5cclxuICAgICAqIElmIGV2ZW50IGhhcyBub3QgcmVnaXN0ZXJlZCBpdCB3aWxsIHJlZ2lzdGVyIGl0IHdpdGggZGVmYXVsdCBCZWhhdmlvclN1YmplY3QgdHlwZVxyXG4gICAgICogQHBhcmFtIGV2ZW50IHNob3VsZCBiZSBFbWl0RXZlbnQgdHlwZS5cclxuICAqL1xyXG4gIGVtaXQoZXZlbnQ6IEVtaXRFdmVudCkge1xyXG4gICAgbGV0IGV2ZW50UmVnaXN0ZXIgPSB0aGlzLmV2ZW50UmVnaXN0ZXIuZ2V0KGV2ZW50Lm5hbWUpO1xyXG4gICAgaWYgKCFldmVudFJlZ2lzdGVyKSB7XHJcbiAgICAgIGV2ZW50UmVnaXN0ZXIgPSB7IGV2ZW50OiBldmVudC5uYW1lLCBzdWJqZWN0OiBuZXcgQmVoYXZpb3JTdWJqZWN0KGV2ZW50LnZhbHVlKSB9O1xyXG4gICAgICB0aGlzLmV2ZW50UmVnaXN0ZXIuc2V0KGV2ZW50Lm5hbWUsIGV2ZW50UmVnaXN0ZXIpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudFJlZ2lzdGVyLnVuUmVnaXN0ZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZXZlbnRSZWdpc3Rlci5zdWJqZWN0Lm5leHQoZXZlbnQudmFsdWUpO1xyXG4gICAgdGhpcy5ldmVudExhc3RFbWl0dGVkW2V2ZW50Lm5hbWUgYXMgc3RyaW5nXSA9IHRoaXMuZXZlbnRMYXN0RW1pdHRlZFtldmVudC5uYW1lIGFzIHN0cmluZ10gfHwgW107XHJcbiAgICB0aGlzLmV2ZW50TGFzdEVtaXR0ZWRbZXZlbnQubmFtZSBhcyBzdHJpbmddLnB1c2goZXZlbnQudmFsdWUpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG5cclxuIl19