]> 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 e5526248c61904728074d8ee7f7b597e7f726e78..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'
@@ -14,19 +13,19 @@ export class AboutFollowsComponent implements OnInit {
   followers: string[] = []
   followings: 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 = {
@@ -34,8 +33,6 @@ export class AboutFollowsComponent implements OnInit {
     order: -1
   }
 
-  onDataSubject = new Subject<any[]>()
-
   constructor (
     private restService: RestService,
     private notifier: Notifier,
@@ -49,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
 
@@ -57,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
 
@@ -68,40 +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
+  }
+
+  canLoadMoreFollowings () {
+    return this.loadedAllFollowings || this.followingsPagination.totalItems > this.followingsPagination.itemsPerPage
+  }
+
+  private loadMoreFollowers (reset = false) {
+    const pagination = this.restService.componentToRestPagination(this.followersPagination)
+
+    this.followService.getFollowers({ pagination, sort: this.sort, state: 'accepted' })
+        .subscribe({
+          next: resultList => {
+            if (reset) this.followers = []
 
-    this.followService.getFollowers({ pagination: pagination, sort: this.sort, state: 'accepted' })
-        .subscribe(
-          resultList => {
             const newFollowers = resultList.data.map(r => r.follower.host)
             this.followers = this.followers.concat(newFollowers)
 
             this.followersPagination.totalItems = resultList.total
-
-            this.onDataSubject.next(newFollowers)
           },
 
-          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 => {
+        .subscribe({
+          next: resultList => {
+            if (reset) this.followings = []
+
             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)
+        })
   }
 
 }