]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/+videos/video-list/overview/video-overview.component.ts
Lazy load all routes
[github/Chocobozzz/PeerTube.git] / client / src / app / +videos / video-list / overview / video-overview.component.ts
CommitLineData
5c20a455 1import { Subject } from 'rxjs'
2d3741d6 2import { Component, OnInit } from '@angular/core'
67ed6552
C
3import { Notifier, ScreenService, User, UserService } from '@app/core'
4import { Video } from '@app/shared/shared-main'
5import { OverviewService } from './overview.service'
6import { VideosOverview } from './videos-overview.model'
2d3741d6
C
7
8@Component({
9 selector: 'my-video-overview',
10 templateUrl: './video-overview.component.html',
11 styleUrls: [ './video-overview.component.scss' ]
12})
13export class VideoOverviewComponent implements OnInit {
111fdc26
C
14 onDataSubject = new Subject<any>()
15
16 overviews: VideosOverview[] = []
2d3741d6
C
17 notResults = false
18
5c20a455
C
19 userMiniature: User
20
111fdc26
C
21 private loaded = false
22 private currentPage = 1
23 private maxPage = 20
24 private lastWasEmpty = false
25 private isLoading = false
26
2d3741d6 27 constructor (
f8b2c1b4 28 private notifier: Notifier,
5c20a455 29 private userService: UserService,
6eb62c33
C
30 private overviewService: OverviewService,
31 private screenService: ScreenService
2d3741d6
C
32 ) { }
33
2d3741d6 34 ngOnInit () {
111fdc26 35 this.loadMoreResults()
5c20a455
C
36
37 this.userService.getAnonymousOrLoggedUser()
38 .subscribe(user => this.userMiniature = user)
39
40 this.userService.listenAnonymousUpdate()
41 .subscribe(user => this.userMiniature = user)
2d3741d6
C
42 }
43
44 buildVideoChannelBy (object: { videos: Video[] }) {
45 return object.videos[0].byVideoChannel
46 }
1a471091
C
47
48 buildVideoChannelAvatarUrl (object: { videos: Video[] }) {
49 return object.videos[0].videoChannelAvatarUrl
50 }
6eb62c33
C
51
52 buildVideos (videos: Video[]) {
53 const numberOfVideos = this.screenService.getNumberOfAvailableMiniatures()
54
55 return videos.slice(0, numberOfVideos * 2)
56 }
111fdc26
C
57
58 onNearOfBottom () {
59 if (this.currentPage >= this.maxPage) return
60 if (this.lastWasEmpty) return
61 if (this.isLoading) return
62
63 this.currentPage++
64 this.loadMoreResults()
65 }
66
67 private loadMoreResults () {
68 this.isLoading = true
69
70 this.overviewService.getVideosOverview(this.currentPage)
71 .subscribe(
72 overview => {
73 this.isLoading = false
74
75 if (overview.tags.length === 0 && overview.channels.length === 0 && overview.categories.length === 0) {
76 this.lastWasEmpty = true
77 if (this.loaded === false) this.notResults = true
78
79 return
80 }
81
82 this.loaded = true
83 this.onDataSubject.next(overview)
84
85 this.overviews.push(overview)
86 },
87
88 err => {
89 this.notifier.error(err.message)
90 this.isLoading = false
91 }
92 )
93 }
2d3741d6 94}