@sourceloop/user-onboarding-client
Version:
Library for providing a smooth user onboarding
1 lines • 60.4 kB
Source Map (JSON)
{"version":3,"file":"sourceloop-user-onboarding-client.mjs","sources":["../../src/lib/user-onboarding-lib.module.ts","../../src/models/video-model.ts","../../src/models/status.ts","../../src/models/index.ts","../../src/models/constants.ts","../../src/commands/StateCommands.ts","../../src/commands/TourCommands.ts","../../src/lib/tour-store-service.service.ts","../../src/lib/tour-service.service.ts","../../src/commands/index.ts","../../src/public-api.ts","../../src/sourceloop-user-onboarding-client.ts"],"sourcesContent":["// Copyright (c) 2023 Sourcefuse Technologies\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\nimport { NgModule } from '@angular/core';\n\nimport { StorageServiceModule } from 'ngx-webstorage-service';\nimport {VgCoreModule} from '@videogular/ngx-videogular/core';\nimport {VgControlsModule} from '@videogular/ngx-videogular/controls';\nimport {VgOverlayPlayModule} from '@videogular/ngx-videogular/overlay-play';\nimport {VgBufferingModule} from '@videogular/ngx-videogular/buffering';\n\n@NgModule({\n declarations: [\n\n ],\n imports: [\n StorageServiceModule,\n VgCoreModule,\n VgControlsModule,\n VgOverlayPlayModule,\n VgBufferingModule\n ],\n exports: [\n ]\n})\nexport class UserOnboardingLibModule { }\n","// Copyright (c) 2023 Sourcefuse Technologies\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\nexport const prefix = `<vg-player><vg-overlay-play>\n</vg-overlay-play>\n<vg-buffering>\n</vg-buffering>\n<vg-scrub-bar>\n<vg-scrub-bar-current-time>\n</vg-scrub-bar-current-time>\n<vg-scrub-bar-buffering-time>\n</vg-scrub-bar-buffering-time>\n</vg-scrub-bar>\n<vg-controls><vg-play-pause>\n</vg-play-pause>\n <vg-playback-button>\n </vg-playback-button>\n <vg-time-display vgProperty=\"current\" vgFormat=\"mm:ss\">\n</vg-time-display>\n<vg-scrub-bar style=\"pointer-events: none;\">\n</vg-scrub-bar>\n<vg-time-display vgProperty=\"left\" vgFormat=\"mm:ss\">\n</vg-time-display>\n<vg-time-display vgProperty=\"total\" vgFormat=\"mm:ss\">\n</vg-time-display><vg-track-selector>\n</vg-track-selector>\n<vg-mute ></vg-mute>\n<vg-volume>\n</vg-volume>\n<vg-fullscreen>\n</vg-fullscreen>\n</vg-controls>\n<video width=\"100%\"\n controls disablepictureinpicture controlslist=\"nodownload\"\n [vgMedia]=\"$any(media)\"\n #media id= \"singleVideo\" \n preload=\"auto\" controls>\n <source src = \"`;\nexport const suffix =\n '\"type = video/webm type=\"video/mp4\"> </video></vg-player>';\n","// Copyright (c) 2023 Sourcefuse Technologies\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\nexport enum Status {\n InProgress = 'inProgress',\n Complete = 'complete',\n}\n","// Copyright (c) 2023 Sourcefuse Technologies\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\nexport * from './state-parameters';\nexport * from './tour';\nexport * from './tour-button';\nexport * from './tour-parameters';\nexport * from './tour-step';\nexport * from './parameter-model';\nexport * from './video-model';\nexport * from './filter-function';\nexport * from './props';\nexport * from './status';\nexport * from './tour-step-change';\nexport * from './tour-complete';\nexport * from './tour-cancel';\n","// Copyright (c) 2023 Sourcefuse Technologies\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\nexport const INTERVAL = 100;\nexport const DEFAULT_MAX_WAIT_TIME = 3000;\n","// CCopyright (c) 2023Sourcefuse Technologies\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\nimport {Observable, of} from 'rxjs';\nimport {\n DeleteStateParameters,\n LoadStateParameters,\n SaveStateParameters,\n TourState,\n} from '../models';\nimport {DeleteStateCommand, LoadStateCommand, SaveStateCommand} from './types';\nimport {StorageService} from 'ngx-webstorage-service';\n\nexport class SaveSCommand implements SaveStateCommand {\n constructor(private readonly storage: StorageService) {}\n public parameters: SaveStateParameters;\n execute(): Observable<TourState> {\n const newTourState = this.parameters.state;\n this.storage.set(\n `${newTourState.sessionId}_${this.parameters.tourId}`,\n newTourState,\n );\n return of(newTourState);\n }\n}\n\nexport class LoadSCommand implements LoadStateCommand {\n constructor(private readonly storage: StorageService) {}\n public parameters: LoadStateParameters;\n execute(): Observable<TourState> {\n const currentState = this.storage.get(\n `${this.parameters.sessionId}_${this.parameters.tourId}`,\n );\n return of(currentState);\n }\n}\n\nexport class DeleteSCommand implements DeleteStateCommand {\n constructor(private readonly storage: StorageService) {}\n public parameters: DeleteStateParameters;\n execute() {\n this.storage.remove(\n `${this.parameters.sessionId}_${this.parameters.tourId}`,\n );\n }\n}\n","// Copyright (c) 2023 Sourcefuse Technologies\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\nimport {Observable, of} from 'rxjs';\nimport {\n DeleteTourParameters,\n LoadTourParameters,\n SaveTourParameters,\n Tour,\n} from '../models';\nimport {DeleteTourCommand, LoadTourCommand, SaveTourCommand} from './types';\nimport {StorageService} from 'ngx-webstorage-service';\n\nexport class SaveTCommand implements SaveTourCommand {\n constructor(private readonly storage: StorageService) {}\n public parameters: SaveTourParameters;\n execute(): Observable<Tour> {\n const newTour: Tour = {\n tourId: this.parameters.tourId,\n tourSteps: this.parameters.tourSteps,\n styleSheet: this.parameters.styleSheet,\n };\n this.storage.set(this.parameters.tourId, newTour);\n return of(newTour);\n }\n}\n\nexport class LoadTCommand implements LoadTourCommand {\n constructor(private readonly storage: StorageService) {}\n public parameters: LoadTourParameters;\n execute(): Observable<Tour> {\n const existingTour = this.storage.get(this.parameters.tourId);\n return of(existingTour);\n }\n}\n\nexport class DeleteTCommand implements DeleteTourCommand {\n constructor(private readonly storage: StorageService) {}\n public parameters: DeleteTourParameters;\n execute(): void {\n this.storage.remove(this.parameters.tourId);\n }\n}\n","// Copyright (c) 2023 Sourcefuse Technologies\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\nimport {Inject, Injectable, Type} from '@angular/core';\nimport {\n DeleteStateParameters,\n DeleteTourParameters,\n LoadStateParameters,\n LoadTourParameters,\n SaveStateParameters,\n SaveTourParameters,\n Tour,\n TourState,\n} from '../models';\nimport {\n DeleteSCommand,\n LoadSCommand,\n SaveSCommand,\n} from '../commands/StateCommands';\nimport {\n DeleteTCommand,\n LoadTCommand,\n SaveTCommand,\n} from '../commands/TourCommands';\nimport {\n BaseCommand,\n DeleteStateCommand,\n DeleteTourCommand,\n LoadStateCommand,\n LoadTourCommand,\n SaveStateCommand,\n SaveTourCommand,\n} from '../commands/types';\nimport {LOCAL_STORAGE, StorageService} from 'ngx-webstorage-service';\nimport {Observable} from 'rxjs';\nimport {v4 as uuidv4} from 'uuid';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TourStoreServiceService {\n private readonly commandMap = new Map<string, BaseCommand>();\n private readonly functionMap = new Map();\n private readonly componentMap = new Map();\n private sessionId: string;\n private readonly defaultSSCommand = new SaveSCommand(this.storage);\n private readonly defaultSTCommand = new SaveTCommand(this.storage);\n private readonly defaultLSCommand = new LoadSCommand(this.storage);\n private readonly defaultLTCommand = new LoadTCommand(this.storage);\n private readonly defaultDSCommand = new DeleteSCommand(this.storage);\n private readonly defaultDTCommand = new DeleteTCommand(this.storage);\n private sessionGenerator: () => string = () => uuidv4();\n constructor(@Inject(LOCAL_STORAGE) private readonly storage: StorageService) {\n this.commandMap.set('SaveTourCommand', this.defaultSTCommand);\n this.commandMap.set('LoadTourCommand', this.defaultLTCommand);\n this.commandMap.set('SaveStateCommand', this.defaultSSCommand);\n this.commandMap.set('LoadStateCommand', this.defaultLSCommand);\n this.commandMap.set('DeleteStateCommand', this.defaultDSCommand);\n this.commandMap.set('DeleteTourCommand', this.defaultDTCommand);\n }\n registerSaveTourCommand(cmd): void {\n this.commandMap.set('SaveTourCommand', cmd);\n }\n registerLoadTourCommand(cmd): void {\n this.commandMap.set('LoadTourCommand', cmd);\n }\n registerSaveStateCommand(cmd): void {\n this.commandMap.set('SaveStateCommand', cmd);\n }\n registerLoadStateCommand(cmd): void {\n this.commandMap.set('LoadStateCommand', cmd);\n }\n registerDeleteStateCommand(cmd): void {\n this.commandMap.set('DeleteStateCommand', cmd);\n }\n registerDeleteTourCommand(cmd): void {\n this.commandMap.set('DeleteTourCommand', cmd);\n }\n\n public saveTour(parameters: SaveTourParameters): Observable<Tour> {\n const command = this.commandMap.get('SaveTourCommand') as SaveTourCommand;\n command.parameters = parameters;\n\n return command.execute();\n }\n\n public loadTour(parameters: LoadTourParameters): Observable<Tour> {\n const command = this.commandMap.get('LoadTourCommand') as LoadTourCommand;\n command.parameters = parameters;\n return command.execute();\n }\n\n public deleteTour(parameters: DeleteTourParameters): void {\n const command = this.commandMap.get(\n 'DeleteTourCommand',\n ) as DeleteTourCommand;\n command.parameters = parameters;\n return command.execute();\n }\n\n public saveState(parameters: SaveStateParameters): Observable<TourState> {\n const command = this.commandMap.get('SaveStateCommand') as SaveStateCommand;\n command.parameters = parameters;\n return command.execute();\n }\n\n public loadState(parameters: LoadStateParameters): Observable<TourState> {\n const command = this.commandMap.get('LoadStateCommand') as LoadStateCommand;\n command.parameters = parameters;\n return command.execute();\n }\n\n public deleteState(parameters: DeleteStateParameters): void {\n const command = this.commandMap.get(\n 'DeleteStateCommand',\n ) as DeleteStateCommand;\n command.parameters = parameters;\n return command.execute();\n }\n\n public registerFnRef(key, fn: () => void): void {\n this.functionMap.set(key, fn);\n }\n\n public registerComponent(key, component: Type<unknown>) {\n this.componentMap.set(key, component);\n }\n\n public getFnByKey(key): Function {\n return this.functionMap.get(key);\n }\n\n public getComponentByKey(key): Type<unknown> {\n return this.componentMap.get(key);\n }\n\n public generateSessionId(): void {\n this.sessionId = this.sessionGenerator();\n this.storage.set('TOUR_SESSION_ID', this.sessionId);\n }\n\n public getSessionId(): string {\n return this.storage.get('TOUR_SESSION_ID');\n }\n\n public setSessionIdGenerator(fn: () => string) {\n this.sessionGenerator = fn;\n }\n}\n","// Copyright (c) 2023 Sourcefuse Technologies\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\nimport {TourStoreServiceService} from './tour-store-service.service';\nimport {\n ApplicationRef,\n ComponentFactoryResolver,\n Injectable,\n Injector,\n} from '@angular/core';\nimport Shepherd from 'shepherd.js';\nimport {\n Tour,\n TourButton,\n TourStep,\n TourState,\n FilterFunction,\n Props,\n Status,\n TourStepChange,\n TourComplete,\n TourCancel,\n ComponentStep,\n} from '../models';\nimport {Router, NavigationEnd, Event as NavigationEvent} from '@angular/router';\nimport {Subject} from 'rxjs';\nimport {DEFAULT_MAX_WAIT_TIME, INTERVAL} from '../models/constants';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TourServiceService {\n private readonly tourComplete = new Subject<TourComplete>();\n tourComplete$ = this.tourComplete.asObservable();\n private readonly tourStepChange = new Subject<TourStepChange>();\n tourStepChange$ = this.tourStepChange.asObservable();\n private readonly tourCancel = new Subject<TourCancel>();\n tourCancel$ = this.tourCancel.asObservable();\n private readonly interval = INTERVAL;\n private _maxWaitTime = DEFAULT_MAX_WAIT_TIME;\n private _exitOnEsc = true;\n private readonly tourFailed = new Subject<{\n tourId: string;\n message: string;\n }>();\n tourFailed$ = this.tourFailed.asObservable();\n\n private tour: Shepherd.Tour;\n\n constructor(\n private readonly tourStoreService: TourStoreServiceService,\n private readonly router: Router,\n private readonly componentFactory: ComponentFactoryResolver,\n private readonly injector: Injector,\n private readonly appRef: ApplicationRef,\n ) {}\n\n public set maxWaitTime(maxTime: number) {\n if (maxTime > 0) {\n this._maxWaitTime = maxTime;\n }\n }\n\n public get maxWaitTime() {\n return this._maxWaitTime;\n }\n\n public set exitOnEsc(esc: boolean) {\n this._exitOnEsc = esc;\n }\n\n public get exitOnEsc() {\n return this._exitOnEsc;\n }\n private addRemovedSteps(removedSteps): void {\n const count = removedSteps.length;\n for (let i = 0; i < count; i++) {\n this.tour.steps.splice(0, 0, this.tour.steps.pop());\n }\n }\n\n getTour() {\n return this.tour;\n }\n\n private actionAssignment(\n e: TourStep,\n b: TourButton,\n wrapperNormalNext,\n wrapperNormalPrev,\n wrapperNext,\n wrapperPrev,\n func,\n tourId: string,\n props: Props,\n ): void {\n if (b.key === 'prevAction') {\n b.action =\n e.prevRoute === e.currentRoute ? wrapperNormalPrev : wrapperPrev;\n } else if (b.key === 'nextAction') {\n b.action =\n e.nextRoute === e.currentRoute ? wrapperNormalNext : wrapperNext;\n } else {\n b.action = func.bind({tour: this.tour, tourId, props});\n }\n }\n\n private waitForElement(\n tourStep: TourStep,\n tourId: string,\n ): Promise<Element | ''> {\n if (tourStep.attachTo === undefined) {\n return Promise.resolve('');\n } else {\n const startTime = new Date().getTime();\n return new Promise<Element | ''>((resolve, reject) => {\n const timer = setInterval(() => {\n const now = new Date().getTime();\n const element = this.checkElement(tourStep.attachTo);\n if (element) {\n clearInterval(timer);\n resolve(element);\n } else if (now - startTime >= this._maxWaitTime) {\n clearInterval(timer);\n reject({tourId, message: `Error in loading tour`});\n } else {\n // do nothing\n }\n }, this.interval);\n });\n }\n }\n\n private triggerTour(tourInstance: Tour, props: Props): void {\n let removedSteps: TourStep[] = [];\n const sessionId = this.tourStoreService.getSessionId();\n if (!sessionId) {\n this.tourStoreService.generateSessionId();\n }\n this.tourStoreService\n .loadState({tourId: tourInstance.tourId, sessionId})\n .subscribe(tourState => {\n if (tourState && Object.keys(tourState).length) {\n if (tourState.status === Status.Complete) {\n return;\n }\n removedSteps = this.getRemovedSteps(\n tourInstance.tourSteps,\n tourState,\n );\n tourInstance.tourSteps = this.getTourSteps(\n tourInstance.tourSteps,\n tourState,\n );\n } else {\n tourState = {\n sessionId: this.tourStoreService.getSessionId(),\n step: tourInstance.tourSteps[0].id,\n props,\n status: Status.InProgress,\n };\n this.tourStoreService\n .saveState({\n tourId: tourInstance.tourId,\n state: tourState,\n })\n .subscribe();\n }\n tourInstance.tourSteps.forEach((e, index) => {\n e.buttons.forEach(b => {\n const key = b.key;\n const func = this.tourStoreService.getFnByKey(key);\n const wrapperNext = () => {\n this.navigateAndMoveToNextStep(e, tourInstance, tourState, index);\n };\n const wrapperPrev = () => {\n this.navigateAndMoveToPrevStep(\n e,\n tourInstance,\n tourState,\n index,\n removedSteps,\n );\n };\n const wrapperNormalNext = () => {\n this.moveToNextStep(tourInstance, tourState, e, index);\n };\n const wrapperNormalPrev = () => {\n this.moveToPrevStep(\n tourInstance,\n tourState,\n e,\n index,\n removedSteps,\n );\n };\n this.actionAssignment(\n e,\n b,\n wrapperNormalNext,\n wrapperNormalPrev,\n wrapperNext,\n wrapperPrev,\n func,\n tourInstance.tourId,\n tourState.props,\n );\n });\n });\n this.tour.addSteps(tourInstance.tourSteps);\n this.waitForElement(\n tourInstance.tourSteps[0],\n tourInstance.tourId,\n ).then(\n element => {\n if (element) {\n element.scrollIntoView(true);\n }\n this.tour.start();\n if (removedSteps.length) {\n removedSteps.forEach((er, index) => {\n er.buttons.forEach(br => {\n const k = br.key;\n const funcRemoved = this.tourStoreService.getFnByKey(k);\n const wrapperNextRemoved = () => {\n this.navigateAndMoveToNextStepRemoved(\n er,\n tourInstance,\n tourState,\n index,\n removedSteps,\n );\n };\n const wrapperPrevRemoved = () => {\n this.navigateAndMoveToPrevStepRemoved(\n er,\n tourInstance,\n tourState,\n index,\n removedSteps,\n );\n };\n const wrapperNormalNextRemoved = () => {\n this.moveToNextStepRemoved(\n tourInstance,\n tourState,\n er,\n index,\n removedSteps,\n );\n };\n const wrapperNormalPrevRemoved = () => {\n this.moveToPrevStepRemoved(\n tourInstance,\n tourState,\n er,\n index,\n removedSteps,\n );\n };\n this.actionAssignment(\n er,\n br,\n wrapperNormalNextRemoved,\n wrapperNormalPrevRemoved,\n wrapperNextRemoved,\n wrapperPrevRemoved,\n funcRemoved,\n tourInstance.tourId,\n tourState.props,\n );\n });\n });\n this.tour.addSteps(removedSteps);\n this.addRemovedSteps(removedSteps);\n }\n },\n err => {\n this.tourFailed.next(err);\n },\n );\n });\n }\n\n public run(\n tourId: string,\n params?: {[key: string]: string},\n props?: Props,\n filterFn?: FilterFunction,\n inputs?: object,\n ): void {\n this.tourStoreService\n .loadTour({\n tourId,\n sessionId: this.tourStoreService.getSessionId(),\n })\n .subscribe(tourInstance => {\n this.checkAndThrowError(tourInstance);\n if (params) {\n let steps = JSON.stringify(tourInstance.tourSteps);\n\n Object.keys(params).forEach(key => {\n steps = steps.replace(\n new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`),\n params[key],\n );\n });\n tourInstance.tourSteps = JSON.parse(steps);\n }\n this.tour = new Shepherd.Tour({\n useModalOverlay: true,\n exitOnEsc: this._exitOnEsc,\n defaultStepOptions: {\n cancelIcon: {\n enabled: true,\n },\n scrollTo: {behavior: 'smooth', block: 'center'},\n },\n });\n this.tour.on('complete', (event: TourComplete) => {\n event.tourId = tourInstance.tourId;\n this.tourComplete.next(event);\n });\n\n // on pressing esc cancel event is emitted by shepherd\n this.tour.on('cancel', (event: TourCancel) => {\n event.tourId = tourInstance.tourId;\n this.tourCancel.next(event);\n });\n\n if (filterFn) {\n tourInstance.tourSteps = filterFn(tourInstance.tourSteps);\n }\n if (tourInstance.tourSteps[0].attachTo) {\n tourInstance.tourSteps[0].attachTo.scrollTo = false;\n }\n this.checkComponents(tourInstance, inputs).then(() => {\n this.triggerTour(tourInstance, props);\n });\n });\n }\n private async checkComponents(tourInstance: Tour, inputs: object) {\n for (const step of tourInstance.tourSteps) {\n if (typeof step.text !== 'string' && typeof step.text !== 'function') {\n const htmlStep = await this.parseComponent(\n {\n forStep: step.id,\n component: this.tourStoreService.getComponentByKey(\n step.text.component,\n ),\n },\n inputs,\n );\n step.text = htmlStep.html;\n }\n }\n }\n private checkElement(attachTo: TourStep['attachTo']) {\n switch (attachTo.type) {\n case 'string':\n return document.querySelector(attachTo.element as string);\n\n case 'element':\n return attachTo.element as Element;\n\n case 'function':\n const fn = this.tourStoreService.getFnByKey(attachTo.element);\n return fn() as Element;\n\n default:\n return false;\n }\n }\n private getRemovedSteps(tourSteps: TourStep[], tourState: TourState) {\n let f = true;\n return tourSteps.filter(e => {\n if (e.id === tourState.step || !f) {\n f = false;\n }\n return f;\n });\n }\n private getTourSteps(tourSteps: TourStep[], tourState: TourState) {\n let flag = false;\n return tourSteps.filter(e => {\n if (e.id === tourState.step || flag) {\n flag = true;\n }\n return flag;\n });\n }\n private pauseAllVideos() {\n document.querySelectorAll('video').forEach(vid => vid.pause());\n }\n setTourComplete(tourId: string, props: Props) {\n this.tourStoreService\n .saveState({\n tourId,\n state: {\n sessionId: this.tourStoreService.getSessionId(),\n step: '',\n props,\n status: Status.Complete,\n },\n })\n .subscribe();\n }\n private checkAndThrowError(tourInstance: Tour) {\n if (!tourInstance) {\n throw new Error(`No Tour Present`);\n } else if (tourInstance.tourSteps.length === 0) {\n throw new Error(`No Tour Steps Found`);\n } else if (tourInstance.tourSteps[0].buttons) {\n tourInstance.tourSteps[0].buttons.forEach(button => {\n if (button.key === `prevAction`) {\n throw new Error(`Step 1 can't have a previous button`);\n }\n });\n } else {\n //do nothing\n }\n }\n private moveToNextStep(\n tourInstance: Tour,\n tourState: TourState,\n step: TourStep,\n index: number,\n ) {\n if (index === tourInstance.tourSteps.length - 1) {\n this.setTourComplete(tourInstance.tourId, tourState.props);\n this.tour.next();\n } else {\n this.waitForElement(\n tourInstance.tourSteps[index + 1],\n tourInstance.tourId,\n ).then(\n () => {\n this.tourStoreService\n .saveState({\n tourId: tourInstance.tourId,\n state: {\n sessionId: this.tourStoreService.getSessionId(),\n step: step.nextStepId,\n props: tourState.props,\n status: Status.InProgress,\n },\n })\n .subscribe();\n\n this.tour.show(step.nextStepId);\n this.tourStepChange.next({\n tourId: tourInstance.tourId,\n currentStepId: step.nextStepId,\n previousStepId: step.id,\n moveForward: true,\n });\n this.pauseAllVideos();\n },\n err => {\n this.tourFailed.next(err);\n },\n );\n }\n }\n\n private moveToPrevStep(\n tourInstance: Tour,\n tourState: TourState,\n step: TourStep,\n index: number,\n removedSteps: TourStep[],\n ) {\n let waitForLastElementOfRemovedSteps = false;\n if (index === 0 && removedSteps.length) {\n waitForLastElementOfRemovedSteps = true;\n }\n this.waitForElement(\n waitForLastElementOfRemovedSteps\n ? removedSteps[removedSteps.length - 1]\n : tourInstance.tourSteps[index - 1],\n tourInstance.tourId,\n ).then(\n () => {\n this.tourStoreService\n .saveState({\n tourId: tourInstance.tourId,\n state: {\n sessionId: this.tourStoreService.getSessionId(),\n step: waitForLastElementOfRemovedSteps\n ? removedSteps[removedSteps.length - 1].id\n : step.prevStepId,\n props: tourState.props,\n status: Status.InProgress,\n },\n })\n .subscribe();\n if (waitForLastElementOfRemovedSteps) {\n this.tour.show(removedSteps[removedSteps.length - 1].id);\n } else {\n this.tour.show(step.prevStepId);\n }\n this.tourStepChange.next({\n tourId: tourInstance.tourId,\n currentStepId: waitForLastElementOfRemovedSteps\n ? removedSteps[removedSteps.length - 1].id\n : step.prevStepId,\n previousStepId: step.id,\n moveForward: false,\n });\n this.pauseAllVideos();\n },\n err => {\n this.tourFailed.next(err);\n },\n );\n }\n\n private moveToNextStepRemoved(\n tourInstance: Tour,\n tourState: TourState,\n step: TourStep,\n index: number,\n removedSteps: TourStep[],\n ) {\n let waitForFirstElementOfSteps = false;\n\n if (index === removedSteps.length - 1) {\n waitForFirstElementOfSteps = true;\n }\n this.waitForElement(\n waitForFirstElementOfSteps\n ? tourInstance.tourSteps[0]\n : removedSteps[index + 1],\n tourInstance.tourId,\n ).then(\n () => {\n this.tourStoreService\n .saveState({\n tourId: tourInstance.tourId,\n state: {\n sessionId: this.tourStoreService.getSessionId(),\n step: waitForFirstElementOfSteps\n ? tourInstance.tourSteps[0].id\n : step.nextStepId,\n props: tourState.props,\n status: Status.InProgress,\n },\n })\n .subscribe();\n if (waitForFirstElementOfSteps) {\n this.tour.show(tourInstance.tourSteps[0].id);\n } else {\n this.tour.show(step.nextStepId);\n }\n this.tourStepChange.next({\n tourId: tourInstance.tourId,\n currentStepId: waitForFirstElementOfSteps\n ? tourInstance.tourSteps[0].id\n : step.nextStepId,\n previousStepId: step.id,\n moveForward: true,\n });\n this.pauseAllVideos();\n },\n err => {\n this.tourFailed.next(err);\n },\n );\n }\n\n private moveToPrevStepRemoved(\n tourInstance: Tour,\n tourState: TourState,\n step: TourStep,\n index: number,\n removedSteps: TourStep[],\n ) {\n this.waitForElement(removedSteps[index - 1], tourInstance.tourId).then(\n () => {\n this.tourStoreService\n .saveState({\n tourId: tourInstance.tourId,\n state: {\n sessionId: this.tourStoreService.getSessionId(),\n step: step.prevStepId,\n props: tourState.props,\n status: Status.InProgress,\n },\n })\n .subscribe();\n this.tour.show(step.prevStepId);\n this.tourStepChange.next({\n tourId: tourInstance.tourId,\n currentStepId: step.prevStepId,\n previousStepId: step.id,\n moveForward: false,\n });\n this.pauseAllVideos();\n },\n err => {\n this.tourFailed.next(err);\n },\n );\n }\n private navigateAndMoveToNextStep(\n currentStep: TourStep,\n tourInstance: Tour,\n tourState: TourState,\n index: number,\n ) {\n if (index < tourInstance.tourSteps.length - 1) {\n this.router.navigate([currentStep.nextRoute]);\n this.router.events.subscribe((event: NavigationEvent) => {\n const nextStep = tourInstance.tourSteps.filter(\n ts => ts.id === currentStep.nextStepId,\n )[0];\n if (\n event instanceof NavigationEnd &&\n event.url === nextStep.currentRoute\n ) {\n this.moveToNextStep(tourInstance, tourState, currentStep, index);\n }\n });\n } else {\n this.moveToNextStep(tourInstance, tourState, currentStep, index);\n }\n }\n private navigateAndMoveToPrevStep(\n currentStep: TourStep,\n tourInstance: Tour,\n tourState: TourState,\n index: number,\n removedSteps: TourStep[],\n ) {\n let moveToLastRemovedStep = false;\n if (index === 0 && removedSteps.length) {\n moveToLastRemovedStep = true;\n }\n const prevRoute = moveToLastRemovedStep\n ? removedSteps[removedSteps.length - 1].prevRoute\n : currentStep.prevRoute;\n this.router.navigate([prevRoute]);\n this.router.events.subscribe((event: NavigationEvent) => {\n let prevStep: TourStep;\n if (moveToLastRemovedStep) {\n prevStep = removedSteps[removedSteps.length - 1];\n } else {\n prevStep = tourInstance.tourSteps.filter(\n ts => ts.id === currentStep.prevStepId,\n )[0];\n }\n\n if (\n event instanceof NavigationEnd &&\n event.url === prevStep.currentRoute\n ) {\n this.moveToPrevStep(\n tourInstance,\n tourState,\n currentStep,\n index,\n removedSteps,\n );\n }\n });\n }\n private navigateAndMoveToNextStepRemoved(\n currentStep: TourStep,\n tourInstance: Tour,\n tourState: TourState,\n index: number,\n removedSteps: TourStep[],\n ) {\n let moveToFirstStep = false;\n\n if (index === removedSteps.length - 1) {\n moveToFirstStep = true;\n }\n const nextRoute = moveToFirstStep\n ? tourInstance.tourSteps[0].nextRoute\n : currentStep.nextRoute;\n this.router.navigate([nextRoute]);\n this.router.events.subscribe((event: NavigationEvent) => {\n let nextStep: TourStep;\n if (moveToFirstStep) {\n nextStep = tourInstance.tourSteps[0];\n } else {\n nextStep = tourInstance.tourSteps.filter(\n ts => ts.id === currentStep.nextStepId,\n )[0];\n }\n\n if (\n event instanceof NavigationEnd &&\n event.url === nextStep.currentRoute\n ) {\n this.moveToNextStepRemoved(\n tourInstance,\n tourState,\n currentStep,\n index,\n removedSteps,\n );\n }\n });\n }\n private navigateAndMoveToPrevStepRemoved(\n currentStep: TourStep,\n tourInstance: Tour,\n tourState: TourState,\n index: number,\n removedSteps: TourStep[],\n ) {\n this.router.navigate([currentStep.prevRoute]);\n this.router.events.subscribe((event: NavigationEvent) => {\n const prevStep = tourInstance.tourSteps.filter(\n ts => ts.id === currentStep.prevStepId,\n )[0];\n if (\n event instanceof NavigationEnd &&\n event.url === prevStep.currentRoute\n ) {\n this.moveToPrevStepRemoved(\n tourInstance,\n tourState,\n currentStep,\n index,\n removedSteps,\n );\n }\n });\n }\n private parseComponent(step: ComponentStep, input: object) {\n return Promise.resolve({\n forStep: step.forStep,\n html: () => {\n const factory = this.componentFactory.resolveComponentFactory(\n step.component,\n );\n const constructedComponent = factory.create(this.injector);\n Object.keys(input ?? {}).forEach(k => {\n constructedComponent.instance[k] = input[k];\n });\n constructedComponent.instance['tour'] = this.tour;\n this.appRef.attachView(constructedComponent.hostView);\n return constructedComponent.location.nativeElement;\n },\n });\n }\n}\n","// Copyright (c) 2023 Sourcefuse Technologies\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\nexport * from './types';\n","// Copyright (c) 2023 Sourcefuse Technologies\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\n/*\n * Public API Surface of user-onboarding-lib\n */\nexport * from './lib/user-onboarding-lib.module';\nexport * from './lib/tour-service.service';\nexport * from './lib/tour-store-service.service';\nexport * from './commands';\nexport * from './models';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuidv4","i1.TourStoreServiceService"],"mappings":"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