@sourceloop/user-onboarding-client
Version:
Library for providing a smooth user onboarding
113 lines • 16.4 kB
JavaScript
// Copyright (c) 2023 Sourcefuse Technologies
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
import { Inject, Injectable } from '@angular/core';
import { DeleteSCommand, LoadSCommand, SaveSCommand, } from '../commands/StateCommands';
import { DeleteTCommand, LoadTCommand, SaveTCommand, } from '../commands/TourCommands';
import { LOCAL_STORAGE } from 'ngx-webstorage-service';
import { v4 as uuidv4 } from 'uuid';
import * as i0 from "@angular/core";
export class TourStoreServiceService {
constructor(storage) {
this.storage = storage;
this.commandMap = new Map();
this.functionMap = new Map();
this.componentMap = new Map();
this.defaultSSCommand = new SaveSCommand(this.storage);
this.defaultSTCommand = new SaveTCommand(this.storage);
this.defaultLSCommand = new LoadSCommand(this.storage);
this.defaultLTCommand = new LoadTCommand(this.storage);
this.defaultDSCommand = new DeleteSCommand(this.storage);
this.defaultDTCommand = new DeleteTCommand(this.storage);
this.sessionGenerator = () => uuidv4();
this.commandMap.set('SaveTourCommand', this.defaultSTCommand);
this.commandMap.set('LoadTourCommand', this.defaultLTCommand);
this.commandMap.set('SaveStateCommand', this.defaultSSCommand);
this.commandMap.set('LoadStateCommand', this.defaultLSCommand);
this.commandMap.set('DeleteStateCommand', this.defaultDSCommand);
this.commandMap.set('DeleteTourCommand', this.defaultDTCommand);
}
registerSaveTourCommand(cmd) {
this.commandMap.set('SaveTourCommand', cmd);
}
registerLoadTourCommand(cmd) {
this.commandMap.set('LoadTourCommand', cmd);
}
registerSaveStateCommand(cmd) {
this.commandMap.set('SaveStateCommand', cmd);
}
registerLoadStateCommand(cmd) {
this.commandMap.set('LoadStateCommand', cmd);
}
registerDeleteStateCommand(cmd) {
this.commandMap.set('DeleteStateCommand', cmd);
}
registerDeleteTourCommand(cmd) {
this.commandMap.set('DeleteTourCommand', cmd);
}
saveTour(parameters) {
const command = this.commandMap.get('SaveTourCommand');
command.parameters = parameters;
return command.execute();
}
loadTour(parameters) {
const command = this.commandMap.get('LoadTourCommand');
command.parameters = parameters;
return command.execute();
}
deleteTour(parameters) {
const command = this.commandMap.get('DeleteTourCommand');
command.parameters = parameters;
return command.execute();
}
saveState(parameters) {
const command = this.commandMap.get('SaveStateCommand');
command.parameters = parameters;
return command.execute();
}
loadState(parameters) {
const command = this.commandMap.get('LoadStateCommand');
command.parameters = parameters;
return command.execute();
}
deleteState(parameters) {
const command = this.commandMap.get('DeleteStateCommand');
command.parameters = parameters;
return command.execute();
}
registerFnRef(key, fn) {
this.functionMap.set(key, fn);
}
registerComponent(key, component) {
this.componentMap.set(key, component);
}
getFnByKey(key) {
return this.functionMap.get(key);
}
getComponentByKey(key) {
return this.componentMap.get(key);
}
generateSessionId() {
this.sessionId = this.sessionGenerator();
this.storage.set('TOUR_SESSION_ID', this.sessionId);
}
getSessionId() {
return this.storage.get('TOUR_SESSION_ID');
}
setSessionIdGenerator(fn) {
this.sessionGenerator = fn;
}
}
TourStoreServiceService.ɵfac = function TourStoreServiceService_Factory(t) { return new (t || TourStoreServiceService)(i0.ɵɵinject(LOCAL_STORAGE)); };
TourStoreServiceService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TourStoreServiceService, factory: TourStoreServiceService.ɵfac, providedIn: 'root' });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TourStoreServiceService, [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [LOCAL_STORAGE]
}] }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci1zdG9yZS1zZXJ2aWNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RvdXItc3RvcmUtc2VydmljZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZDQUE2QztBQUM3QyxFQUFFO0FBQ0YsbURBQW1EO0FBQ25ELHNDQUFzQztBQUN0QyxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBTyxNQUFNLGVBQWUsQ0FBQztBQVd2RCxPQUFPLEVBQ0wsY0FBYyxFQUNkLFlBQVksRUFDWixZQUFZLEdBQ2IsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLFlBQVksRUFDWixZQUFZLEdBQ2IsTUFBTSwwQkFBMEIsQ0FBQztBQVVsQyxPQUFPLEVBQUMsYUFBYSxFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBRXJFLE9BQU8sRUFBQyxFQUFFLElBQUksTUFBTSxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUtsQyxNQUFNLE9BQU8sdUJBQXVCO0lBWWxDLFlBQW9ELE9BQXVCO1FBQXZCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBWDFELGVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztRQUM1QyxnQkFBVyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDeEIsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRXpCLHFCQUFnQixHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQscUJBQWdCLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELHFCQUFnQixHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxxQkFBZ0IsR0FB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QUcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxFQUFnQjtRQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQzdCLENBQUM7OzhGQTNHVSx1QkFBdUIsY0FZZCxhQUFhOzZFQVp0Qix1QkFBdUIsV0FBdkIsdUJBQXVCLG1CQUZ0QixNQUFNO3VGQUVQLHVCQUF1QjtjQUhuQyxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7O3NCQWFjLE1BQU07dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMyBTb3VyY2VmdXNlIFRlY2hub2xvZ2llc1xuLy9cbi8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLy8gaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERlbGV0ZVN0YXRlUGFyYW1ldGVycyxcbiAgRGVsZXRlVG91clBhcmFtZXRlcnMsXG4gIExvYWRTdGF0ZVBhcmFtZXRlcnMsXG4gIExvYWRUb3VyUGFyYW1ldGVycyxcbiAgU2F2ZVN0YXRlUGFyYW1ldGVycyxcbiAgU2F2ZVRvdXJQYXJhbWV0ZXJzLFxuICBUb3VyLFxuICBUb3VyU3RhdGUsXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuICBEZWxldGVTQ29tbWFuZCxcbiAgTG9hZFNDb21tYW5kLFxuICBTYXZlU0NvbW1hbmQsXG59IGZyb20gJy4uL2NvbW1hbmRzL1N0YXRlQ29tbWFuZHMnO1xuaW1wb3J0IHtcbiAgRGVsZXRlVENvbW1hbmQsXG4gIExvYWRUQ29tbWFuZCxcbiAgU2F2ZVRDb21tYW5kLFxufSBmcm9tICcuLi9jb21tYW5kcy9Ub3VyQ29tbWFuZHMnO1xuaW1wb3J0IHtcbiAgQmFzZUNvbW1hbmQsXG4gIERlbGV0ZVN0YXRlQ29tbWFuZCxcbiAgRGVsZXRlVG91ckNvbW1hbmQsXG4gIExvYWRTdGF0ZUNvbW1hbmQsXG4gIExvYWRUb3VyQ29tbWFuZCxcbiAgU2F2ZVN0YXRlQ29tbWFuZCxcbiAgU2F2ZVRvdXJDb21tYW5kLFxufSBmcm9tICcuLi9jb21tYW5kcy90eXBlcyc7XG5pbXBvcnQge0xPQ0FMX1NUT1JBR0UsIFN0b3JhZ2VTZXJ2aWNlfSBmcm9tICduZ3gtd2Vic3RvcmFnZS1zZXJ2aWNlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Y0IGFzIHV1aWR2NH0gZnJvbSAndXVpZCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUb3VyU3RvcmVTZXJ2aWNlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBCYXNlQ29tbWFuZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmdW5jdGlvbk1hcCA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRNYXAgPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNTQ29tbWFuZCA9IG5ldyBTYXZlU0NvbW1hbmQodGhpcy5zdG9yYWdlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0U1RDb21tYW5kID0gbmV3IFNhdmVUQ29tbWFuZCh0aGlzLnN0b3JhZ2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRMU0NvbW1hbmQgPSBuZXcgTG9hZFNDb21tYW5kKHRoaXMuc3RvcmFnZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdExUQ29tbWFuZCA9IG5ldyBMb2FkVENvbW1hbmQodGhpcy5zdG9yYWdlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0RFNDb21tYW5kID0gbmV3IERlbGV0ZVNDb21tYW5kKHRoaXMuc3RvcmFnZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdERUQ29tbWFuZCA9IG5ldyBEZWxldGVUQ29tbWFuZCh0aGlzLnN0b3JhZ2UpO1xuICBwcml2YXRlIHNlc3Npb25HZW5lcmF0b3I6ICgpID0+IHN0cmluZyA9ICgpID0+IHV1aWR2NCgpO1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KExPQ0FMX1NUT1JBR0UpIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZTogU3RvcmFnZVNlcnZpY2UpIHtcbiAgICB0aGlzLmNvbW1hbmRNYXAuc2V0KCdTYXZlVG91ckNvbW1hbmQnLCB0aGlzLmRlZmF1bHRTVENvbW1hbmQpO1xuICAgIHRoaXMuY29tbWFuZE1hcC5zZXQoJ0xvYWRUb3VyQ29tbWFuZCcsIHRoaXMuZGVmYXVsdExUQ29tbWFuZCk7XG4gICAgdGhpcy5jb21tYW5kTWFwLnNldCgnU2F2ZVN0YXRlQ29tbWFuZCcsIHRoaXMuZGVmYXVsdFNTQ29tbWFuZCk7XG4gICAgdGhpcy5jb21tYW5kTWFwLnNldCgnTG9hZFN0YXRlQ29tbWFuZCcsIHRoaXMuZGVmYXVsdExTQ29tbWFuZCk7XG4gICAgdGhpcy5jb21tYW5kTWFwLnNldCgnRGVsZXRlU3RhdGVDb21tYW5kJywgdGhpcy5kZWZhdWx0RFNDb21tYW5kKTtcbiAgICB0aGlzLmNvbW1hbmRNYXAuc2V0KCdEZWxldGVUb3VyQ29tbWFuZCcsIHRoaXMuZGVmYXVsdERUQ29tbWFuZCk7XG4gIH1cbiAgcmVnaXN0ZXJTYXZlVG91ckNvbW1hbmQoY21kKTogdm9pZCB7XG4gICAgdGhpcy5jb21tYW5kTWFwLnNldCgnU2F2ZVRvdXJDb21tYW5kJywgY21kKTtcbiAgfVxuICByZWdpc3RlckxvYWRUb3VyQ29tbWFuZChjbWQpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1hbmRNYXAuc2V0KCdMb2FkVG91ckNvbW1hbmQnLCBjbWQpO1xuICB9XG4gIHJlZ2lzdGVyU2F2ZVN0YXRlQ29tbWFuZChjbWQpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1hbmRNYXAuc2V0KCdTYXZlU3RhdGVDb21tYW5kJywgY21kKTtcbiAgfVxuICByZWdpc3RlckxvYWRTdGF0ZUNvbW1hbmQoY21kKTogdm9pZCB7XG4gICAgdGhpcy5jb21tYW5kTWFwLnNldCgnTG9hZFN0YXRlQ29tbWFuZCcsIGNtZCk7XG4gIH1cbiAgcmVnaXN0ZXJEZWxldGVTdGF0ZUNvbW1hbmQoY21kKTogdm9pZCB7XG4gICAgdGhpcy5jb21tYW5kTWFwLnNldCgnRGVsZXRlU3RhdGVDb21tYW5kJywgY21kKTtcbiAgfVxuICByZWdpc3RlckRlbGV0ZVRvdXJDb21tYW5kKGNtZCk6IHZvaWQge1xuICAgIHRoaXMuY29tbWFuZE1hcC5zZXQoJ0RlbGV0ZVRvdXJDb21tYW5kJywgY21kKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlVG91cihwYXJhbWV0ZXJzOiBTYXZlVG91clBhcmFtZXRlcnMpOiBPYnNlcnZhYmxlPFRvdXI+IHtcbiAgICBjb25zdCBjb21tYW5kID0gdGhpcy5jb21tYW5kTWFwLmdldCgnU2F2ZVRvdXJDb21tYW5kJykgYXMgU2F2ZVRvdXJDb21tYW5kO1xuICAgIGNvbW1hbmQucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cbiAgICByZXR1cm4gY29tbWFuZC5leGVjdXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbG9hZFRvdXIocGFyYW1ldGVyczogTG9hZFRvdXJQYXJhbWV0ZXJzKTogT2JzZXJ2YWJsZTxUb3VyPiB7XG4gICAgY29uc3QgY29tbWFuZCA9IHRoaXMuY29tbWFuZE1hcC5nZXQoJ0xvYWRUb3VyQ29tbWFuZCcpIGFzIExvYWRUb3VyQ29tbWFuZDtcbiAgICBjb21tYW5kLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgIHJldHVybiBjb21tYW5kLmV4ZWN1dGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVUb3VyKHBhcmFtZXRlcnM6IERlbGV0ZVRvdXJQYXJhbWV0ZXJzKTogdm9pZCB7XG4gICAgY29uc3QgY29tbWFuZCA9IHRoaXMuY29tbWFuZE1hcC5nZXQoXG4gICAgICAnRGVsZXRlVG91ckNvbW1hbmQnLFxuICAgICkgYXMgRGVsZXRlVG91ckNvbW1hbmQ7XG4gICAgY29tbWFuZC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICByZXR1cm4gY29tbWFuZC5leGVjdXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVN0YXRlKHBhcmFtZXRlcnM6IFNhdmVTdGF0ZVBhcmFtZXRlcnMpOiBPYnNlcnZhYmxlPFRvdXJTdGF0ZT4ge1xuICAgIGNvbnN0IGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRNYXAuZ2V0KCdTYXZlU3RhdGVDb21tYW5kJykgYXMgU2F2ZVN0YXRlQ29tbWFuZDtcbiAgICBjb21tYW5kLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgIHJldHVybiBjb21tYW5kLmV4ZWN1dGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkU3RhdGUocGFyYW1ldGVyczogTG9hZFN0YXRlUGFyYW1ldGVycyk6IE9ic2VydmFibGU8VG91clN0YXRlPiB7XG4gICAgY29uc3QgY29tbWFuZCA9IHRoaXMuY29tbWFuZE1hcC5nZXQoJ0xvYWRTdGF0ZUNvbW1hbmQnKSBhcyBMb2FkU3RhdGVDb21tYW5kO1xuICAgIGNvbW1hbmQucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgcmV0dXJuIGNvbW1hbmQuZXhlY3V0ZSgpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZVN0YXRlKHBhcmFtZXRlcnM6IERlbGV0ZVN0YXRlUGFyYW1ldGVycyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRNYXAuZ2V0KFxuICAgICAgJ0RlbGV0ZVN0YXRlQ29tbWFuZCcsXG4gICAgKSBhcyBEZWxldGVTdGF0ZUNvbW1hbmQ7XG4gICAgY29tbWFuZC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICByZXR1cm4gY29tbWFuZC5leGVjdXRlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJGblJlZihrZXksIGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5mdW5jdGlvbk1hcC5zZXQoa2V5LCBmbik7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJDb21wb25lbnQoa2V5LCBjb21wb25lbnQ6IFR5cGU8dW5rbm93bj4pIHtcbiAgICB0aGlzLmNvbXBvbmVudE1hcC5zZXQoa2V5LCBjb21wb25lbnQpO1xuICB9XG5cbiAgcHVibGljIGdldEZuQnlLZXkoa2V5KTogRnVuY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uTWFwLmdldChrZXkpO1xuICB9XG5cbiAgcHVibGljIGdldENvbXBvbmVudEJ5S2V5KGtleSk6IFR5cGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5nZXQoa2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZW5lcmF0ZVNlc3Npb25JZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlc3Npb25JZCA9IHRoaXMuc2Vzc2lvbkdlbmVyYXRvcigpO1xuICAgIHRoaXMuc3RvcmFnZS5zZXQoJ1RPVVJfU0VTU0lPTl9JRCcsIHRoaXMuc2Vzc2lvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldCgnVE9VUl9TRVNTSU9OX0lEJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0U2Vzc2lvbklkR2VuZXJhdG9yKGZuOiAoKSA9PiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlc3Npb25HZW5lcmF0b3IgPSBmbjtcbiAgfVxufVxuIl19