Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.53 KB | None | 0 0
  1. import { Injectable } from '@angular/core';
  2. import { ActivatedRouteSnapshot, Resolve } from '@angular/router';
  3. import { FeedbackApiService } from '@shared/services/feedback/feedback-api.service';
  4. import { UserService } from '@shared/services/user/user.service';
  5. import { User } from '@shared/models/user.model';
  6. // import { Feedback } from '@shared/models/feedback.model';
  7. import { merge, Observable, throwError, forkJoin, of } from 'rxjs';
  8. import { catchError, map, mergeMap, tap, concatMap } from 'rxjs/operators';
  9.  
  10. @Injectable()
  11. export class AssignedFeedbackResolver implements Resolve<Observable<any>> {
  12. constructor(private feedbackService: FeedbackApiService,
  13. private userService: UserService) {}
  14.  
  15. resolve(route: ActivatedRouteSnapshot): Observable<any> {
  16. const assignedFeedbackId = Number(route.paramMap.get('id'));
  17.  
  18. if (isNaN(assignedFeedbackId)) {
  19. return throwError('A feedback id parameter must be specified in URL');
  20. }
  21.  
  22. return this.getAssignedFeedback(assignedFeedbackId).pipe(
  23. concatMap(assignedFeedbackObj => forkJoin(this.getFeedbacksAndMap(assignedFeedbackObj), this.getQuestionsAndMap(assignedFeedbackObj)).pipe(
  24. map(([feedbacks, questions]) => {
  25.  
  26. assignedFeedbackObj.feedbackCycle.feedbacks = feedbacks;
  27. assignedFeedbackObj.feedbackCycle.questions = questions;
  28.  
  29. return assignedFeedbackObj;
  30. })
  31. )
  32. ));
  33. }
  34.  
  35. private getAssignedFeedback(assignedFeedbackId: any): Observable<any> {
  36.  
  37. return this.feedbackService.getAssignedUser(assignedFeedbackId)
  38. .pipe(
  39. mergeMap(assigned => this.getFeedbackCycleAndMap(assigned)),
  40. catchError(() => of(null))
  41. );
  42. }
  43.  
  44. private getFeedbackCycleAndMap(data: any): Observable<any> {
  45.  
  46.  
  47. return this.feedbackService
  48. .getFeedbackCycleWithMinimalRelations(data.feedbackCycle.id)
  49. .pipe(map(cycle => {
  50. data.feedbackCycle = cycle;
  51.  
  52. return data;
  53. }));
  54. }
  55.  
  56. private getFeedbacksAndMap(assignedFeedback: any): Observable<any[]> {
  57.  
  58. const cycleId = assignedFeedback.feedbackCycle.id;
  59.  
  60. return this.userService.getUserAuthenticated()
  61. .pipe(
  62. mergeMap((user: User) => this.feedbackService.getFeedbacksInFeedbackCycle(cycleId, {userReviewee: assignedFeedback.userReviewee.id, userReviewer: user.id})
  63. .pipe(
  64. tap(item => console.log(item)),
  65. mergeMap(feedbacks => this.getAnswersAndMap(feedbacks)),
  66. tap(item => console.log(item))
  67. )
  68. )
  69. );
  70. }
  71.  
  72. private getQuestionsAndMap(assignedFeedback: any): Observable<any[]> {
  73. const cycleId = assignedFeedback.feedbackCycle.id;
  74.  
  75. return this.feedbackService.getQuestionsOfFeedbackCycle(cycleId)
  76. .pipe(
  77. mergeMap(questions => this.getFeatScalesAndMap(questions))
  78. );
  79.  
  80. }
  81.  
  82. private getAnswersAndMap(feedbacks: any[]): Observable<any[]> {
  83. const feedbackStreams = feedbacks
  84. .map((feedback: any) => this.feedbackService
  85. .getAnswersOfFeedback(feedback.id)
  86. .pipe(map(answers => feedback.answers = answers))
  87. );
  88.  
  89.  
  90. return forkJoin(feedbackStreams).pipe(map(() => feedbacks));
  91. }
  92.  
  93. private getFeatScalesAndMap(questions: any[]): Observable<any[]> {
  94. const questionsStreams = questions
  95. .map((question: any) => this.feedbackService
  96. .getFeatScalesOfQuestion(question.id)
  97. .pipe(map(featScales => question.featScales = featScales))
  98. );
  99.  
  100. return forkJoin(questionsStreams).pipe(map(() => questions));
  101. }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement