Optimize video update page load
authorChocobozzz <me@florianbigard.com>
Thu, 25 Apr 2019 08:51:52 +0000 (10:51 +0200)
committerChocobozzz <me@florianbigard.com>
Thu, 25 Apr 2019 08:52:11 +0000 (10:52 +0200)
client/src/app/videos/+video-edit/video-update.resolver.ts

index 269fe3684497f62b505d61ac071942a0da9e3c0f..384458127e79eb694baec3ff0b77d20e8ae0a648 100644 (file)
@@ -4,6 +4,7 @@ import { ActivatedRouteSnapshot, Resolve } from '@angular/router'
 import { map, switchMap } from 'rxjs/operators'
 import { VideoChannelService } from '@app/shared/video-channel/video-channel.service'
 import { VideoCaptionService } from '@app/shared/video-caption'
+import { forkJoin } from 'rxjs'
 
 @Injectable()
 export class VideoUpdateResolver implements Resolve<any> {
@@ -11,35 +12,35 @@ export class VideoUpdateResolver implements Resolve<any> {
     private videoService: VideoService,
     private videoChannelService: VideoChannelService,
     private videoCaptionService: VideoCaptionService
-  ) {}
+  ) {
+  }
 
   resolve (route: ActivatedRouteSnapshot) {
     const uuid: string = route.params[ 'uuid' ]
 
     return this.videoService.getVideo(uuid)
-        .pipe(
-          switchMap(video => {
-            return this.videoService
-                       .loadCompleteDescription(video.descriptionPath)
-                       .pipe(map(description => Object.assign(video, { description })))
-          }),
-          switchMap(video => {
-            return this.videoChannelService
-                       .listAccountVideoChannels(video.account)
-                       .pipe(
-                         map(result => result.data),
-                         map(videoChannels => videoChannels.map(c => ({ id: c.id, label: c.displayName, support: c.support }))),
-                         map(videoChannels => ({ video, videoChannels }))
-                       )
-          }),
-          switchMap(({ video, videoChannels }) => {
-            return this.videoCaptionService
-                       .listCaptions(video.id)
-                       .pipe(
-                         map(result => result.data),
-                         map(videoCaptions => ({ video, videoChannels, videoCaptions }))
-                       )
-          })
-        )
+               .pipe(
+                 switchMap(video => {
+                   return forkJoin([
+                     this.videoService
+                         .loadCompleteDescription(video.descriptionPath)
+                         .pipe(map(description => Object.assign(video, { description }))),
+
+                     this.videoChannelService
+                         .listAccountVideoChannels(video.account)
+                         .pipe(
+                           map(result => result.data),
+                           map(videoChannels => videoChannels.map(c => ({ id: c.id, label: c.displayName, support: c.support })))
+                         ),
+
+                     this.videoCaptionService
+                         .listCaptions(video.id)
+                         .pipe(
+                           map(result => result.data)
+                         )
+                   ])
+                 }),
+                 map(([ video, videoChannels, videoCaptions ]) => ({ video, videoChannels, videoCaptions }))
+               )
   }
 }