UNPKG

@iotize/ionic

Version:

Iotize specific building blocks on top of @ionic/angular.

83 lines 7.97 kB
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==