mirror of https://github.com/Chocobozzz/PeerTube
Add list of instance follows in about page
parent
776ca9b1cc
commit
a6dbbf0386
|
@ -0,0 +1,22 @@
|
|||
<div class="row" myInfiniteScroller [autoInit]="true" (nearOfBottom)="onNearOfBottom()">
|
||||
<div class="col-xl-6 col-md-12">
|
||||
<div i18n class="subtitle">Followers</div>
|
||||
|
||||
<div i18n class="no-results" *ngIf="followersPagination.totalItems === 0">This instance does not have followers.</div>
|
||||
|
||||
<a *ngFor="let follower of followers" [href]="buildLink(follower)" target="_blank" rel="noopener noreferrer">
|
||||
{{ follower }}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-6 col-md-12">
|
||||
<div i18n class="subtitle">Followings</div>
|
||||
|
||||
<div i18n class="no-results" *ngIf="followingsPagination.totalItems === 0">This instance does not have followings.</div>
|
||||
|
||||
<a *ngFor="let following of followings" [href]="buildLink(following)" target="_blank" rel="noopener noreferrer">
|
||||
{{ following }}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
|
@ -0,0 +1,14 @@
|
|||
@import '_variables';
|
||||
@import '_mixins';
|
||||
|
||||
.subtitle {
|
||||
font-size: 18px;
|
||||
font-weight: $font-semibold;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
a {
|
||||
display: block;
|
||||
width: fit-content;
|
||||
margin-top: 3px;
|
||||
}
|
|
@ -0,0 +1,103 @@
|
|||
import { Component, OnInit } from '@angular/core'
|
||||
import { FollowService } from '@app/shared/instance/follow.service'
|
||||
import { ComponentPagination, hasMoreItems } from '@app/shared/rest/component-pagination.model'
|
||||
import { Notifier } from '@app/core'
|
||||
import { RestService } from '@app/shared'
|
||||
import { SortMeta } from 'primeng/api'
|
||||
|
||||
@Component({
|
||||
selector: 'my-about-follows',
|
||||
templateUrl: './about-follows.component.html',
|
||||
styleUrls: [ './about-follows.component.scss' ]
|
||||
})
|
||||
|
||||
export class AboutFollowsComponent implements OnInit {
|
||||
followers: string[] = []
|
||||
followings: string[] = []
|
||||
|
||||
followersPagination: ComponentPagination = {
|
||||
currentPage: 1,
|
||||
itemsPerPage: 40,
|
||||
totalItems: null
|
||||
}
|
||||
|
||||
followingsPagination: ComponentPagination = {
|
||||
currentPage: 1,
|
||||
itemsPerPage: 40,
|
||||
totalItems: null
|
||||
}
|
||||
|
||||
sort: SortMeta = {
|
||||
field: 'createdAt',
|
||||
order: -1
|
||||
}
|
||||
|
||||
constructor (
|
||||
private restService: RestService,
|
||||
private notifier: Notifier,
|
||||
private followService: FollowService
|
||||
) { }
|
||||
|
||||
ngOnInit () {
|
||||
this.loadMoreFollowers()
|
||||
|
||||
this.loadMoreFollowings()
|
||||
}
|
||||
|
||||
onNearOfBottom () {
|
||||
this.onNearOfFollowersBottom()
|
||||
|
||||
this.onNearOfFollowingsBottom()
|
||||
}
|
||||
|
||||
onNearOfFollowersBottom () {
|
||||
if (!hasMoreItems(this.followersPagination)) return
|
||||
|
||||
this.followersPagination.currentPage += 1
|
||||
this.loadMoreFollowers()
|
||||
}
|
||||
|
||||
onNearOfFollowingsBottom () {
|
||||
if (!hasMoreItems(this.followingsPagination)) return
|
||||
|
||||
this.followingsPagination.currentPage += 1
|
||||
this.loadMoreFollowings()
|
||||
}
|
||||
|
||||
buildLink (host: string) {
|
||||
return window.location.protocol + '//' + host
|
||||
}
|
||||
|
||||
private loadMoreFollowers () {
|
||||
const pagination = this.restService.componentPaginationToRestPagination(this.followersPagination)
|
||||
|
||||
this.followService.getFollowers(pagination, this.sort)
|
||||
.subscribe(
|
||||
resultList => {
|
||||
const newFollowers = resultList.data.map(r => r.follower.host)
|
||||
this.followers = this.followers.concat(newFollowers)
|
||||
|
||||
this.followersPagination.totalItems = resultList.total
|
||||
},
|
||||
|
||||
err => this.notifier.error(err.message)
|
||||
)
|
||||
}
|
||||
|
||||
private loadMoreFollowings () {
|
||||
const pagination = this.restService.componentPaginationToRestPagination(this.followingsPagination)
|
||||
|
||||
this.followService.getFollowing(pagination, this.sort)
|
||||
.subscribe(
|
||||
resultList => {
|
||||
const newFollowings = resultList.data.map(r => r.following.host)
|
||||
this.followings = this.followings.concat(newFollowings)
|
||||
|
||||
this.followingsPagination.totalItems = resultList.total
|
||||
},
|
||||
|
||||
err => this.notifier.error(err.message)
|
||||
)
|
||||
}
|
||||
|
||||
}
|
|
@ -4,6 +4,7 @@ import { MetaGuard } from '@ngx-meta/core'
|
|||
import { AboutComponent } from './about.component'
|
||||
import { AboutInstanceComponent } from '@app/+about/about-instance/about-instance.component'
|
||||
import { AboutPeertubeComponent } from '@app/+about/about-peertube/about-peertube.component'
|
||||
import { AboutFollowsComponent } from '@app/+about/about-follows/about-follows.component'
|
||||
|
||||
const aboutRoutes: Routes = [
|
||||
{
|
||||
|
@ -33,6 +34,15 @@ const aboutRoutes: Routes = [
|
|||
title: 'About PeerTube'
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'follows',
|
||||
component: AboutFollowsComponent,
|
||||
data: {
|
||||
meta: {
|
||||
title: 'About follows'
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -5,10 +5,12 @@
|
|||
<a i18n routerLink="instance" routerLinkActive="active" class="title-page">Instance</a>
|
||||
|
||||
<a i18n routerLink="peertube" routerLinkActive="active" class="title-page">PeerTube</a>
|
||||
|
||||
<a i18n routerLink="follows" routerLinkActive="active" class="title-page">Follows</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="margin-content">
|
||||
<router-outlet></router-outlet>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -6,6 +6,7 @@ import { SharedModule } from '../shared'
|
|||
import { AboutInstanceComponent } from '@app/+about/about-instance/about-instance.component'
|
||||
import { AboutPeertubeComponent } from '@app/+about/about-peertube/about-peertube.component'
|
||||
import { ContactAdminModalComponent } from '@app/+about/about-instance/contact-admin-modal.component'
|
||||
import { AboutFollowsComponent } from '@app/+about/about-follows/about-follows.component'
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
|
@ -17,6 +18,7 @@ import { ContactAdminModalComponent } from '@app/+about/about-instance/contact-a
|
|||
AboutComponent,
|
||||
AboutInstanceComponent,
|
||||
AboutPeertubeComponent,
|
||||
AboutFollowsComponent,
|
||||
ContactAdminModalComponent
|
||||
],
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ import { TableModule } from 'primeng/table'
|
|||
import { SharedModule } from '../shared'
|
||||
import { AdminRoutingModule } from './admin-routing.module'
|
||||
import { AdminComponent } from './admin.component'
|
||||
import { FollowersListComponent, FollowingAddComponent, FollowsComponent, FollowService } from './follows'
|
||||
import { FollowersListComponent, FollowingAddComponent, FollowsComponent } from './follows'
|
||||
import { FollowingListComponent } from './follows/following-list/following-list.component'
|
||||
import { UserCreateComponent, UserListComponent, UserPasswordComponent, UsersComponent, UserUpdateComponent } from './users'
|
||||
import {
|
||||
|
@ -66,7 +66,6 @@ import { DebugComponent, DebugService } from '@app/+admin/system/debug'
|
|||
],
|
||||
|
||||
providers: [
|
||||
FollowService,
|
||||
RedundancyService,
|
||||
JobService,
|
||||
LogsService,
|
||||
|
|
|
@ -3,7 +3,7 @@ import { ConfirmService, Notifier } from '@app/core'
|
|||
import { SortMeta } from 'primeng/primeng'
|
||||
import { ActorFollow } from '../../../../../../shared/models/actors/follow.model'
|
||||
import { RestPagination, RestTable } from '../../../shared'
|
||||
import { FollowService } from '../shared'
|
||||
import { FollowService } from '@app/shared/instance/follow.service'
|
||||
import { I18n } from '@ngx-translate/i18n-polyfill'
|
||||
|
||||
@Component({
|
||||
|
|
|
@ -3,7 +3,7 @@ import { Router } from '@angular/router'
|
|||
import { Notifier } from '@app/core'
|
||||
import { ConfirmService } from '../../../core'
|
||||
import { validateHost } from '../../../shared'
|
||||
import { FollowService } from '../shared'
|
||||
import { FollowService } from '@app/shared/instance/follow.service'
|
||||
import { I18n } from '@ngx-translate/i18n-polyfill'
|
||||
|
||||
@Component({
|
||||
|
|
|
@ -4,7 +4,7 @@ import { SortMeta } from 'primeng/primeng'
|
|||
import { ActorFollow } from '../../../../../../shared/models/actors/follow.model'
|
||||
import { ConfirmService } from '../../../core/confirm/confirm.service'
|
||||
import { RestPagination, RestTable } from '../../../shared'
|
||||
import { FollowService } from '../shared'
|
||||
import { FollowService } from '@app/shared/instance/follow.service'
|
||||
import { I18n } from '@ngx-translate/i18n-polyfill'
|
||||
|
||||
@Component({
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
export * from './following-add'
|
||||
export * from './followers-list'
|
||||
export * from './following-list'
|
||||
export * from './shared'
|
||||
export * from './follows.component'
|
||||
export * from './follows.routes'
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
export * from './follow.service'
|
|
@ -3,13 +3,13 @@ import { HttpClient, HttpParams } from '@angular/common/http'
|
|||
import { Injectable } from '@angular/core'
|
||||
import { SortMeta } from 'primeng/primeng'
|
||||
import { Observable } from 'rxjs'
|
||||
import { ActorFollow, ResultList } from '../../../../../../shared'
|
||||
import { environment } from '../../../../environments/environment'
|
||||
import { RestExtractor, RestPagination, RestService } from '../../../shared'
|
||||
import { ActorFollow, ResultList } from '@shared/index'
|
||||
import { environment } from '../../../environments/environment'
|
||||
import { RestExtractor, RestPagination, RestService } from '../rest'
|
||||
|
||||
@Injectable()
|
||||
export class FollowService {
|
||||
private static BASE_APPLICATION_URL = environment.apiUrl + '/api/v1/server'
|
||||
private static BASE_APPLICATION_URL = 'https://peertube2.cpy.re' + '/api/v1/server'
|
||||
|
||||
constructor (
|
||||
private authHttp: HttpClient,
|
|
@ -85,6 +85,7 @@ import { VideoBlacklistComponent } from '@app/shared/video/modals/video-blacklis
|
|||
import { VideoDownloadComponent } from '@app/shared/video/modals/video-download.component'
|
||||
import { VideoReportComponent } from '@app/shared/video/modals/video-report.component'
|
||||
import { ClipboardModule } from 'ngx-clipboard'
|
||||
import { FollowService } from '@app/shared/instance/follow.service'
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
|
@ -271,6 +272,8 @@ import { ClipboardModule } from 'ngx-clipboard'
|
|||
|
||||
UserNotificationService,
|
||||
|
||||
FollowService,
|
||||
|
||||
I18n
|
||||
]
|
||||
})
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
{{ getCurrentGroupedDateLabel(video) }}
|
||||
</div>
|
||||
|
||||
|
||||
<my-video-miniature
|
||||
[video]="video" [user]="user" [ownerDisplayType]="ownerDisplayType"
|
||||
[displayVideoActions]="displayVideoActions" [displayOptions]="displayOptions"
|
||||
|
|
Loading…
Reference in New Issue