]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/+about/about-follows/about-follows.component.ts
Fix video right check
[github/Chocobozzz/PeerTube.git] / client / src / app / +about / about-follows / about-follows.component.ts
index bdee5cf78a041334029e9881437d0340974899e1..84b47e96791ac1eab94108ed2e2582cf48260035 100644 (file)
@@ -1,5 +1,4 @@
 import { SortMeta } from 'primeng/api'
-import { Subject } from 'rxjs'
 import { Component, OnInit } from '@angular/core'
 import { ComponentPagination, hasMoreItems, Notifier, RestService } from '@app/core'
 import { InstanceFollowService } from '@app/shared/shared-instance'
@@ -13,22 +12,20 @@ import { InstanceFollowService } from '@app/shared/shared-instance'
 export class AboutFollowsComponent implements OnInit {
   followers: string[] = []
   followings: string[] = []
-  moreFollowers: string[] = []
-  moreFollowings: string[] = []
 
-  showMoreFollowers = false
-  showMoreFollowings = false
+  loadedAllFollowers = false
+  loadedAllFollowings = false
 
   followersPagination: ComponentPagination = {
     currentPage: 1,
     itemsPerPage: 20,
-    totalItems: null
+    totalItems: 0
   }
 
   followingsPagination: ComponentPagination = {
     currentPage: 1,
     itemsPerPage: 20,
-    totalItems: null
+    totalItems: 0
   }
 
   sort: SortMeta = {
@@ -36,8 +33,6 @@ export class AboutFollowsComponent implements OnInit {
     order: -1
   }
 
-  onDataSubject = new Subject<any[]>()
-
   constructor (
     private restService: RestService,
     private notifier: Notifier,
@@ -51,6 +46,13 @@ export class AboutFollowsComponent implements OnInit {
   }
 
   loadAllFollowings () {
+    if (this.loadedAllFollowings) return
+
+    this.loadedAllFollowings = true
+    this.followingsPagination.itemsPerPage = 100
+
+    this.loadMoreFollowings(true)
+
     while (hasMoreItems(this.followingsPagination)) {
       this.followingsPagination.currentPage += 1
 
@@ -59,6 +61,13 @@ export class AboutFollowsComponent implements OnInit {
   }
 
   loadAllFollowers () {
+    if (this.loadedAllFollowers) return
+
+    this.loadedAllFollowers = true
+    this.followersPagination.itemsPerPage = 100
+
+    this.loadMoreFollowers(true)
+
     while (hasMoreItems(this.followersPagination)) {
       this.followersPagination.currentPage += 1
 
@@ -70,44 +79,48 @@ export class AboutFollowsComponent implements OnInit {
     return window.location.protocol + '//' + host
   }
 
-  private loadMoreFollowers () {
-    const pagination = this.restService.componentPaginationToRestPagination(this.followersPagination)
+  canLoadMoreFollowers () {
+    return this.loadedAllFollowers || this.followersPagination.totalItems > this.followersPagination.itemsPerPage
+  }
 
-    this.followService.getFollowers({ pagination: pagination, sort: this.sort, state: 'accepted' })
-        .subscribe(
-          resultList => {
-            const newFollowers = resultList.data.map(r => r.follower.host)
-            if (this.followers.length === 0) this.followers = this.followers.concat(newFollowers)
+  canLoadMoreFollowings () {
+    return this.loadedAllFollowings || this.followingsPagination.totalItems > this.followingsPagination.itemsPerPage
+  }
 
-            else this.moreFollowers = this.moreFollowers.concat(newFollowers)
+  private loadMoreFollowers (reset = false) {
+    const pagination = this.restService.componentToRestPagination(this.followersPagination)
 
-            this.followersPagination.totalItems = resultList.total
+    this.followService.getFollowers({ pagination, sort: this.sort, state: 'accepted' })
+        .subscribe({
+          next: resultList => {
+            if (reset) this.followers = []
+
+            const newFollowers = resultList.data.map(r => r.follower.host)
+            this.followers = this.followers.concat(newFollowers)
 
-            this.onDataSubject.next(newFollowers)
+            this.followersPagination.totalItems = resultList.total
           },
 
-          err => this.notifier.error(err.message)
-        )
+          error: err => this.notifier.error(err.message)
+        })
   }
 
-  private loadMoreFollowings () {
-    const pagination = this.restService.componentPaginationToRestPagination(this.followingsPagination)
+  private loadMoreFollowings (reset = false) {
+    const pagination = this.restService.componentToRestPagination(this.followingsPagination)
 
     this.followService.getFollowing({ pagination, sort: this.sort, state: 'accepted' })
-        .subscribe(
-          resultList => {
-            const newFollowings = resultList.data.map(r => r.following.host)
-            if (this.followings.length === 0) this.followings = this.followings.concat(newFollowings)
+        .subscribe({
+          next: resultList => {
+            if (reset) this.followings = []
 
-            else this.moreFollowings = this.moreFollowings.concat(newFollowings)
+            const newFollowings = resultList.data.map(r => r.following.host)
+            this.followings = this.followings.concat(newFollowings)
 
             this.followingsPagination.totalItems = resultList.total
-
-            this.onDataSubject.next(newFollowings)
           },
 
-          err => this.notifier.error(err.message)
-        )
+          error: err => this.notifier.error(err.message)
+        })
   }
 
 }