UNPKG

@wizdm/teleport

Version:
64 lines 9.52 kB
import { Injectable, InjectionToken, Inject, Optional } from '@angular/core'; import { filter, map, scan, shareReplay, distinctUntilChanged } from 'rxjs/operators'; import { BehaviorSubject } from 'rxjs'; import * as i0 from "@angular/core"; export const TeleportConfigToken = new InjectionToken('wizdm.teleport.config'); export class TeleportService { constructor(config) { this.inner$ = new BehaviorSubject(null); this.beam$ = this.inner$.pipe(shareReplay((config === null || config === void 0 ? void 0 : config.bufferSize) || 1)); } /** Beam observable streaming the template to render as they occur */ beam(name) { return this.beam$.pipe( // Filters only those instances targetting the requested portal filter(payload => !payload || payload.target === name), // Buffers the requests scan((history, payload) => { // Clears all the history if (!payload || payload.action === 'clearAll') { return []; } // Seeks for the given template in the history first const index = history.findIndex(value => value.template === payload.template); // Removes the template from the history if (index >= 0 && payload.action === 'clear') { return history.splice(index, 1), history; } // Activates the new template if (payload.action === 'activate') { // If already existing, replaces the payload in place if (index >= 0) { return history.splice(index, 1, payload), history; } // Pushes the new template otherwise history.push(payload); } return history; }, []), // Emits the last template in history or null map(history => history[history.length - 1] || null), distinctUntilChanged()); } /** Activates the template at the given target portal */ activate(target, template, data) { this.inner$.next({ action: 'activate', target, template, data }); } /** Clears the template from the target portal */ clear(target, template) { this.inner$.next({ action: 'clear', target, template }); } /** Clear all the portals */ clearAll() { this.inner$.next({ action: 'clearAll' }); } } TeleportService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TeleportService_Factory() { return new TeleportService(i0.ɵɵinject(TeleportConfigToken, 8)); }, token: TeleportService, providedIn: "root" }); TeleportService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; TeleportService.ctorParameters = () => [ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [TeleportConfigToken,] }] } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RlbGVwb3J0L3NyYy9saWIvdGVsZXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFlLGNBQWMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQWMsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUVuRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FBaUIsdUJBQXVCLENBQUMsQ0FBQztBQWdCL0YsTUFBTSxPQUFPLGVBQWU7SUFLMUIsWUFBcUQsTUFBc0I7UUFIbkUsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFrQixJQUFJLENBQUMsQ0FBQztRQUsxRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFFLFdBQVcsQ0FBQyxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxVQUFVLEtBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQztJQUN4RSxDQUFDO0lBRUQscUVBQXFFO0lBQzlELElBQUksQ0FBQyxJQUFZO1FBRXRCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO1FBRXBCLCtEQUErRDtRQUMvRCxNQUFNLENBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBRTtRQUV4RCx1QkFBdUI7UUFDdkIsSUFBSSxDQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBRXpCLHlCQUF5QjtZQUN6QixJQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFO2dCQUFFLE9BQU8sRUFBRSxDQUFDO2FBQUU7WUFFNUQsb0RBQW9EO1lBQ3BELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUUsQ0FBQztZQUVoRix3Q0FBd0M7WUFDeEMsSUFBRyxLQUFLLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFO2dCQUFFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO2FBQUU7WUFFMUYsNkJBQTZCO1lBQzdCLElBQUcsT0FBTyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7Z0JBRWhDLHFEQUFxRDtnQkFDckQsSUFBRyxLQUFLLElBQUksQ0FBQyxFQUFFO29CQUFFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQztpQkFBRTtnQkFFckUsb0NBQW9DO2dCQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3ZCO1lBRUQsT0FBTyxPQUFPLENBQUM7UUFFakIsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUVOLDZDQUE2QztRQUM3QyxHQUFHLENBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUUsRUFBRSxvQkFBb0IsRUFBRSxDQUM5RSxDQUFDO0lBQ0osQ0FBQztJQUVELHdEQUF3RDtJQUNqRCxRQUFRLENBQUMsTUFBYyxFQUFFLFFBQWtDLEVBQUUsSUFBVTtRQUM1RSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxpREFBaUQ7SUFDMUMsS0FBSyxDQUFDLE1BQWMsRUFBRSxRQUFrQztRQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELDRCQUE0QjtJQUNyQixRQUFRO1FBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDOzs7O1lBakVGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQU1jLFFBQVEsWUFBSSxNQUFNLFNBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYsIEluamVjdGlvblRva2VuLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc2Nhbiwgc2hhcmVSZXBsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjb25zdCBUZWxlcG9ydENvbmZpZ1Rva2VuID0gbmV3IEluamVjdGlvblRva2VuPFRlbGVwb3J0Q29uZmlnPignd2l6ZG0udGVsZXBvcnQuY29uZmlnJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVsZXBvcnRDb25maWcge1xuICBidWZmZXJTaXplPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbGVwb3J0UGF5bG9hZCB7XG4gIGFjdGlvbjogJ2FjdGl2YXRlJ3wnY2xlYXInfCdjbGVhckFsbCc7ICBcbiAgdGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxPYmplY3R8bnVsbD47ICBcbiAgdGFyZ2V0Pzogc3RyaW5nO1xuICBkYXRhPzogYW55O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUZWxlcG9ydFNlcnZpY2Uge1xuXG4gIHByaXZhdGUgaW5uZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZWxlcG9ydFBheWxvYWQ+KG51bGwpO1xuICByZWFkb25seSBiZWFtJDogT2JzZXJ2YWJsZTxUZWxlcG9ydFBheWxvYWQ+O1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoVGVsZXBvcnRDb25maWdUb2tlbikgY29uZmlnOiBUZWxlcG9ydENvbmZpZykgeyBcblxuICAgIHRoaXMuYmVhbSQgPSB0aGlzLmlubmVyJC5waXBlKCBzaGFyZVJlcGxheShjb25maWc/LmJ1ZmZlclNpemUgfHwgMSkgKTtcbiAgfVxuXG4gIC8qKiBCZWFtIG9ic2VydmFibGUgc3RyZWFtaW5nIHRoZSB0ZW1wbGF0ZSB0byByZW5kZXIgYXMgdGhleSBvY2N1ciAqL1xuICBwdWJsaWMgYmVhbShuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRlbGVwb3J0UGF5bG9hZD4ge1xuICAgIFxuICAgIHJldHVybiB0aGlzLmJlYW0kLnBpcGUoIFxuICAgIFxuICAgICAgLy8gRmlsdGVycyBvbmx5IHRob3NlIGluc3RhbmNlcyB0YXJnZXR0aW5nIHRoZSByZXF1ZXN0ZWQgcG9ydGFsXG4gICAgICBmaWx0ZXIoIHBheWxvYWQgPT4gIXBheWxvYWQgfHwgcGF5bG9hZC50YXJnZXQgPT09IG5hbWUgKSxcblxuICAgICAgLy8gQnVmZmVycyB0aGUgcmVxdWVzdHNcbiAgICAgIHNjYW4oIChoaXN0b3J5LCBwYXlsb2FkKSA9PiB7XG5cbiAgICAgICAgLy8gQ2xlYXJzIGFsbCB0aGUgaGlzdG9yeVxuICAgICAgICBpZighcGF5bG9hZCB8fCBwYXlsb2FkLmFjdGlvbiA9PT0gJ2NsZWFyQWxsJykgeyByZXR1cm4gW107IH1cblxuICAgICAgICAvLyBTZWVrcyBmb3IgdGhlIGdpdmVuIHRlbXBsYXRlIGluIHRoZSBoaXN0b3J5IGZpcnN0XG4gICAgICAgIGNvbnN0IGluZGV4ID0gaGlzdG9yeS5maW5kSW5kZXgoIHZhbHVlID0+IHZhbHVlLnRlbXBsYXRlID09PSBwYXlsb2FkLnRlbXBsYXRlICk7XG5cbiAgICAgICAgLy8gUmVtb3ZlcyB0aGUgdGVtcGxhdGUgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICBpZihpbmRleCA+PSAwICYmIHBheWxvYWQuYWN0aW9uID09PSAnY2xlYXInKSB7IHJldHVybiBoaXN0b3J5LnNwbGljZShpbmRleCwgMSksIGhpc3Rvcnk7IH1cblxuICAgICAgICAvLyBBY3RpdmF0ZXMgdGhlIG5ldyB0ZW1wbGF0ZVxuICAgICAgICBpZihwYXlsb2FkLmFjdGlvbiA9PT0gJ2FjdGl2YXRlJykgeyBcbiAgICAgICAgXG4gICAgICAgICAgLy8gSWYgYWxyZWFkeSBleGlzdGluZywgcmVwbGFjZXMgdGhlIHBheWxvYWQgaW4gcGxhY2VcbiAgICAgICAgICBpZihpbmRleCA+PSAwKSB7IHJldHVybiBoaXN0b3J5LnNwbGljZShpbmRleCwgMSwgcGF5bG9hZCksIGhpc3Rvcnk7IH1cblxuICAgICAgICAgIC8vIFB1c2hlcyB0aGUgbmV3IHRlbXBsYXRlIG90aGVyd2lzZVxuICAgICAgICAgIGhpc3RvcnkucHVzaChwYXlsb2FkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoaXN0b3J5O1xuXG4gICAgICB9LCBbXSksXG5cbiAgICAgIC8vIEVtaXRzIHRoZSBsYXN0IHRlbXBsYXRlIGluIGhpc3Rvcnkgb3IgbnVsbFxuICAgICAgbWFwKCBoaXN0b3J5ID0+IGhpc3RvcnlbaGlzdG9yeS5sZW5ndGggLSAxXSB8fCBudWxsICksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBBY3RpdmF0ZXMgdGhlIHRlbXBsYXRlIGF0IHRoZSBnaXZlbiB0YXJnZXQgcG9ydGFsICovXG4gIHB1YmxpYyBhY3RpdmF0ZSh0YXJnZXQ6IHN0cmluZywgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPE9iamVjdHxudWxsPiwgZGF0YT86IGFueSkge1xuICAgIHRoaXMuaW5uZXIkLm5leHQoeyBhY3Rpb246ICdhY3RpdmF0ZScsIHRhcmdldCwgdGVtcGxhdGUsIGRhdGEgfSk7XG4gIH1cblxuICAvKiogQ2xlYXJzIHRoZSB0ZW1wbGF0ZSBmcm9tIHRoZSB0YXJnZXQgcG9ydGFsICovXG4gIHB1YmxpYyBjbGVhcih0YXJnZXQ6IHN0cmluZywgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPE9iamVjdHxudWxsPikge1xuICAgIHRoaXMuaW5uZXIkLm5leHQoeyBhY3Rpb246ICdjbGVhcicsIHRhcmdldCwgdGVtcGxhdGUgfSk7XG4gIH1cblxuICAvKiogQ2xlYXIgYWxsIHRoZSBwb3J0YWxzICovXG4gIHB1YmxpYyBjbGVhckFsbCgpIHsgXG4gICAgdGhpcy5pbm5lciQubmV4dCh7IGFjdGlvbjogJ2NsZWFyQWxsJyB9KTtcbiAgfVxufSJdfQ==