@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
83 lines • 7.97 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
/**
* This class is a replacement for the remove Events class of @ionic/angular version ^5
* TODO use observable instead
*/
export class GlobalEventsService {
constructor() {
this._channels = [];
}
/**
* Subscribe to an event topic. Events that get posted to that topic will trigger the provided handler.
*
* @param topic the topic to subscribe to
* @param handler the event handler
*/
subscribe(topic, ...handlers) {
if (!this._channels[topic]) {
this._channels[topic] = [];
}
handlers.forEach((handler) => {
this._channels[topic].push(handler);
});
}
/**
* Unsubscribe from the given topic. Your handler will no longer receive events published to this topic.
*
* @param topic the topic to unsubscribe from
* @param handler the event handler
*
* @return true if a handler was removed
*/
unsubscribe(topic, handler) {
const t = this._channels[topic];
if (!t) {
// Wasn't found, wasn't removed
return false;
}
if (!handler) {
// Remove all handlers for this topic
delete this._channels[topic];
return true;
}
// We need to find and remove a specific handler
const i = t.indexOf(handler);
if (i < 0) {
// Wasn't found, wasn't removed
return false;
}
t.splice(i, 1);
// If the channel is empty now, remove it from the channel map
if (!t.length) {
delete this._channels[topic];
}
return true;
}
/**
* Publish an event to the given topic.
*
* @param topic the topic to publish to
* @param eventData the data to send as the event
*/
publish(topic, ...args) {
const t = this._channels[topic];
if (!t) {
return null;
}
const responses = [];
t.forEach((handler) => {
responses.push(handler(...args));
});
return responses;
}
}
/** @nocollapse */ GlobalEventsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GlobalEventsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
/** @nocollapse */ GlobalEventsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GlobalEventsService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GlobalEventsService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWV2ZW50cy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW90aXplLWlvbmljL3NyYy9saWIvbGliLWNvbW1vbi9nbG9iYWwtZXZlbnRzLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFM0M7OztHQUdHO0FBSUgsTUFBTSxPQUFPLG1CQUFtQjtJQUhoQztRQUlVLGNBQVMsR0FBUSxFQUFFLENBQUM7S0EwRTdCO0lBeEVDOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLEtBQWEsRUFBRSxHQUFHLFFBQW9CO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzVCO1FBQ0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxXQUFXLENBQUMsS0FBYSxFQUFFLE9BQWtCO1FBQzNDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNOLCtCQUErQjtZQUMvQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLHFDQUFxQztZQUNyQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELGdEQUFnRDtRQUNoRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNULCtCQUErQjtZQUMvQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFZiw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxLQUFhLEVBQUUsR0FBRyxJQUFXO1FBQ25DLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNOLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxNQUFNLFNBQVMsR0FBVSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO1lBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7O29JQTFFVSxtQkFBbUI7d0lBQW5CLG1CQUFtQixjQUZsQixNQUFNOzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyBhIHJlcGxhY2VtZW50IGZvciB0aGUgcmVtb3ZlIEV2ZW50cyBjbGFzcyBvZiBAaW9uaWMvYW5ndWxhciB2ZXJzaW9uIF41XG4gKiBUT0RPIHVzZSBvYnNlcnZhYmxlIGluc3RlYWRcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdsb2JhbEV2ZW50c1NlcnZpY2Uge1xuICBwcml2YXRlIF9jaGFubmVsczogYW55ID0gW107XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBhbiBldmVudCB0b3BpYy4gRXZlbnRzIHRoYXQgZ2V0IHBvc3RlZCB0byB0aGF0IHRvcGljIHdpbGwgdHJpZ2dlciB0aGUgcHJvdmlkZWQgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHRvcGljIHRoZSB0b3BpYyB0byBzdWJzY3JpYmUgdG9cbiAgICogQHBhcmFtIGhhbmRsZXIgdGhlIGV2ZW50IGhhbmRsZXJcbiAgICovXG4gIHN1YnNjcmliZSh0b3BpYzogc3RyaW5nLCAuLi5oYW5kbGVyczogRnVuY3Rpb25bXSkge1xuICAgIGlmICghdGhpcy5fY2hhbm5lbHNbdG9waWNdKSB7XG4gICAgICB0aGlzLl9jaGFubmVsc1t0b3BpY10gPSBbXTtcbiAgICB9XG4gICAgaGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbHNbdG9waWNdLnB1c2goaGFuZGxlcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgZ2l2ZW4gdG9waWMuIFlvdXIgaGFuZGxlciB3aWxsIG5vIGxvbmdlciByZWNlaXZlIGV2ZW50cyBwdWJsaXNoZWQgdG8gdGhpcyB0b3BpYy5cbiAgICpcbiAgICogQHBhcmFtIHRvcGljIHRoZSB0b3BpYyB0byB1bnN1YnNjcmliZSBmcm9tXG4gICAqIEBwYXJhbSBoYW5kbGVyIHRoZSBldmVudCBoYW5kbGVyXG4gICAqXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiBhIGhhbmRsZXIgd2FzIHJlbW92ZWRcbiAgICovXG4gIHVuc3Vic2NyaWJlKHRvcGljOiBzdHJpbmcsIGhhbmRsZXI/OiBGdW5jdGlvbikge1xuICAgIGNvbnN0IHQgPSB0aGlzLl9jaGFubmVsc1t0b3BpY107XG4gICAgaWYgKCF0KSB7XG4gICAgICAvLyBXYXNuJ3QgZm91bmQsIHdhc24ndCByZW1vdmVkXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAvLyBSZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGlzIHRvcGljXG4gICAgICBkZWxldGUgdGhpcy5fY2hhbm5lbHNbdG9waWNdO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gV2UgbmVlZCB0byBmaW5kIGFuZCByZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyXG4gICAgY29uc3QgaSA9IHQuaW5kZXhPZihoYW5kbGVyKTtcblxuICAgIGlmIChpIDwgMCkge1xuICAgICAgLy8gV2Fzbid0IGZvdW5kLCB3YXNuJ3QgcmVtb3ZlZFxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHQuc3BsaWNlKGksIDEpO1xuXG4gICAgLy8gSWYgdGhlIGNoYW5uZWwgaXMgZW1wdHkgbm93LCByZW1vdmUgaXQgZnJvbSB0aGUgY2hhbm5lbCBtYXBcbiAgICBpZiAoIXQubGVuZ3RoKSB7XG4gICAgICBkZWxldGUgdGhpcy5fY2hhbm5lbHNbdG9waWNdO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2ggYW4gZXZlbnQgdG8gdGhlIGdpdmVuIHRvcGljLlxuICAgKlxuICAgKiBAcGFyYW0gdG9waWMgdGhlIHRvcGljIHRvIHB1Ymxpc2ggdG9cbiAgICogQHBhcmFtIGV2ZW50RGF0YSB0aGUgZGF0YSB0byBzZW5kIGFzIHRoZSBldmVudFxuICAgKi9cbiAgcHVibGlzaCh0b3BpYzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGNvbnN0IHQgPSB0aGlzLl9jaGFubmVsc1t0b3BpY107XG4gICAgaWYgKCF0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZXM6IGFueVtdID0gW107XG4gICAgdC5mb3JFYWNoKChoYW5kbGVyOiBhbnkpID0+IHtcbiAgICAgIHJlc3BvbnNlcy5wdXNoKGhhbmRsZXIoLi4uYXJncykpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZXM7XG4gIH1cbn1cbiJdfQ==