ngrx-event-bus
Version:
Angular and RxJs event bus with Mediator Pattern
109 lines • 14.1 kB
JavaScript
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