import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; import { BehaviorSubject, Observable } from 'rxjs'; @Injectable() export class AcademyCourseService implements Resolve { onCourseChanged: BehaviorSubject; /** * Constructor * * @param {HttpClient} _httpClient */ constructor( private _httpClient: HttpClient ) { // Set the defaults this.onCourseChanged = new BehaviorSubject({}); } // ----------------------------------------------------------------------------------------------------- // @ Public methods // ----------------------------------------------------------------------------------------------------- /** * Resolver * * @param {ActivatedRouteSnapshot} route * @param {RouterStateSnapshot} state * @returns {Observable | Promise | any} */ resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | any { return new Promise((resolve, reject) => { Promise.all([ this.getCourse(route.params.courseId, route.params.courseSlug) ]).then( () => { resolve(); }, reject ); }); } /** * Get course * * @param courseId * @param courseSlug * @returns {Promise} */ getCourse(courseId, courseSlug): Promise { return new Promise((resolve, reject) => { this._httpClient.get('api/academy-course/' + courseId + '/' + courseSlug) .subscribe((response: any) => { this.onCourseChanged.next(response); resolve(response); }, reject); }); } }