Newer
Older
import { Injectable } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { JoyrideService } from 'ngx-joyride';
import { LocalStorageService } from './local-storage.service';
import { HeaderService } from './header.service';
import { FunctionsService } from './functions.service';
import { Router } from '@angular/router';
import { HttpClient } from '@angular/common/http';
import { catchError, tap } from 'rxjs/operators';
import { of } from 'rxjs';
import { NotificationService } from './notification/notification.service';
@Injectable({
providedIn: 'root'
})
export class FeatureTourService {
currentStepType: string = '';
{
type: 'welcome',
stepId: 'welcome',
title: `<i class="far fa-question-circle" color="primary"></i> <b color="primary">${this.translate.instant('lang.welcomeTourTitle')}</b>`,
description: this.translate.instant('lang.welcomeTourDescription'),
stepId: 'admin_email_server@administration',
title: `<i class="far fa-question-circle" color="primary"></i> <b color="primary">${this.translate.instant('lang.admin_email_serverTitle')}</b>`,
description: this.translate.instant('lang.admin_email_serverTour'),
},
{
type: 'email',
stepId: 'emailTour@administration/sendmail',
title: `<i class="far fa-question-circle" color="primary"></i> <b color="primary">${this.translate.instant('lang.emailTourTitle')}</b>`,
description: this.translate.instant('lang.emailTourDescription'),
},
{
type: 'email',
stepId: 'emailTour2@administration/sendmail',
title: `<i class="far fa-question-circle" color="primary"></i> <b color="primary">${this.translate.instant('lang.emailTour2Title')}</b>`,
description: this.translate.instant('lang.emailTour2Description'),
title: `<i class="far fa-question-circle" color="primary"></i> <b color="primary">${this.translate.instant('lang.admin_notifTitle')}</b>`,
description: this.translate.instant('lang.admin_notifTour'),
stepId: 'BASKETS_Tour@administration/notifications',
title: `<i class="far fa-question-circle" color="primary"></i> <b color="primary">${this.translate.instant('lang.notifTour2Title')}</b>`,
description: this.translate.instant('lang.notifTour2Description'),
stepId: 'createScriptTour@administration/notifications/4',
title: `<i class="far fa-question-circle" color="primary"></i> <b color="primary">${this.translate.instant('lang.createScriptTourTitle')}</b>`,
description: this.translate.instant('lang.createScriptTourDescription'),
redirectToAdmin: false,
},
{
type: 'notification',
stepId: 'notifTour@administration/notifications',
title: `<i class="far fa-question-circle" color="primary"></i> <b color="primary">${this.translate.instant('lang.notifTourTitle')}</b>`,
description: this.translate.instant('lang.notifTourDescription'),
},
{
type: 'notification',
stepId: 'notifTour3@administration/notifications',
title: `<i class="far fa-question-circle" color="primary"></i> <b color="primary">${this.translate.instant('lang.notifTour3Title')}</b>`,
description: this.translate.instant('lang.notifTour3Description'),
},
{
type: 'notification',
stepId: 'notifTour4@administration/notifications',
title: `<i class="far fa-question-circle" color="primary"></i> <b color="primary">${this.translate.instant('lang.notifTour4Title')}</b>`,
description: this.translate.instant('lang.notifTour4Description'),
},
];
featureTourEnd: any[] = [];
constructor(
public translate: TranslateService,
private readonly joyrideService: JoyrideService,
private localStorage: LocalStorageService,
private headerService: HeaderService,
private functionService: FunctionsService,
private router: Router,
private http: HttpClient,
private notify: NotificationService,
) {
this.getCurrentStepType();
}
init() {
if (!this.functionService.empty(this.currentStepType)) {
const steps = this.tour.filter(step => step.type === this.currentStepType).map(step => step.stepId);
this.joyrideService.startTour(
{
customTexts: {
next: '>>',
prev: '<<',
done: this.translate.instant('lang.getIt')
steps: steps,
waitingTime: 500
}
).subscribe(
step => {
/*Do something*/
this.currentTour = this.tour.filter((item: any) => item.stepId.split('@')[0] === step.name)[0];
const containerElement = document.getElementsByClassName('joyride-step__container') as HTMLCollectionOf<HTMLElement>
containerElement[0].style.width = 'auto';
containerElement[0].style.height = 'auto';
document.getElementsByClassName('joyride-step__header')[0].innerHTML = `${this.currentTour.title}`;
document.getElementsByClassName('joyride-step__body')[0].innerHTML = `${this.currentTour.description}`;
},
error => {
/*handle error*/
},
() => {
if (this.currentTour.redirectToAdmin) {
this.router.navigate(['/administration']);
}
}
getCurrentStepType() {
if (this.headerService.user.userId !== null) {
this.featureTourEnd = this.headerService.user.featureTour;
}
const unique = [...new Set(this.tour.map(item => item.type))];
this.currentStepType = unique.filter(stepType => this.featureTourEnd.indexOf(stepType) === -1)[0];
}
endTour() {
console.log(this.currentStepType);
this.featureTourEnd.push(this.currentStepType);
this.http.put('../rest/currentUser/profile/featureTour', {featureTour : this.featureTourEnd}).pipe(
catchError((err: any) => {
this.notify.handleSoftErrors(err);
return of(false);
})
).subscribe();
this.getCurrentStepType();
}
}