X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2F%2Baccounts%2Faccounts.component.ts;h=cf66b817a64ab8a3316a47d515488f1994b3a103;hb=eaa529528cafcfb291009f9f99d296c81e792899;hp=c69b04a01bd301ce27419e43e6aded4c12535bb0;hpb=ad35265d743e621d86f3f0796dd9d8795c599dca;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/+accounts/accounts.component.ts b/client/src/app/+accounts/accounts.component.ts index c69b04a01..cf66b817a 100644 --- a/client/src/app/+accounts/accounts.component.ts +++ b/client/src/app/+accounts/accounts.component.ts @@ -1,7 +1,7 @@ import { Subscription } from 'rxjs' import { catchError, distinctUntilChanged, map, switchMap, tap } from 'rxjs/operators' import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core' -import { ActivatedRoute } from '@angular/router' +import { ActivatedRoute, Router } from '@angular/router' import { AuthService, MarkdownService, Notifier, RedirectService, RestExtractor, ScreenService, UserService } from '@app/core' import { Account, @@ -12,10 +12,8 @@ import { VideoChannelService, VideoService } from '@app/shared/shared-main' -import { AccountReportComponent } from '@app/shared/shared-moderation' -import { HttpStatusCode } from '@shared/core-utils/miscs/http-error-codes' -import { User, UserRight } from '@shared/models' -import { AccountSearchComponent } from './account-search/account-search.component' +import { AccountReportComponent, BlocklistService } from '@app/shared/shared-moderation' +import { HttpStatusCode, User, UserRight } from '@shared/models' @Component({ templateUrl: './accounts.component.html', @@ -24,8 +22,6 @@ import { AccountSearchComponent } from './account-search/account-search.componen export class AccountsComponent implements OnInit, OnDestroy { @ViewChild('accountReportModal') accountReportModal: AccountReportComponent - accountSearch: AccountSearchComponent - account: Account accountUser: User @@ -34,18 +30,17 @@ export class AccountsComponent implements OnInit, OnDestroy { links: ListOverflowItem[] = [] hideMenu = false - accountFollowerTitle = '' - accountVideosCount: number accountDescriptionHTML = '' accountDescriptionExpanded = false - prependModerationActions: DropdownAction[] + prependModerationActions: DropdownAction[] = [] private routeSub: Subscription constructor ( private route: ActivatedRoute, + private router: Router, private userService: UserService, private accountService: AccountService, private videoChannelService: VideoChannelService, @@ -55,6 +50,7 @@ export class AccountsComponent implements OnInit, OnDestroy { private authService: AuthService, private videoService: VideoService, private markdown: MarkdownService, + private blocklist: BlocklistService, private screenService: ScreenService ) { } @@ -62,7 +58,7 @@ export class AccountsComponent implements OnInit, OnDestroy { ngOnInit () { this.routeSub = this.route.params .pipe( - map(params => params[ 'accountId' ]), + map(params => params['accountId']), distinctUntilChanged(), switchMap(accountId => this.accountService.getAccount(accountId)), tap(account => this.onAccount(account)), @@ -72,11 +68,13 @@ export class AccountsComponent implements OnInit, OnDestroy { HttpStatusCode.NOT_FOUND_404 ])) ) - .subscribe( - videoChannels => this.videoChannels = videoChannels.data, + .subscribe({ + next: videoChannels => { + this.videoChannels = videoChannels.data + }, - err => this.notifier.error(err.message) - ) + error: err => this.notifier.error(err.message) + }) this.links = [ { label: $localize`CHANNELS`, routerLink: 'video-channels' }, @@ -121,22 +119,10 @@ export class AccountsComponent implements OnInit, OnDestroy { this.notifier.success($localize`Username copied`) } - subscribersDisplayFor (count: number) { - if (count === 1) return $localize`1 subscriber` - - return $localize`${count} subscribers` - } - - onOutletLoaded (component: Component) { - if (component instanceof AccountSearchComponent) { - this.accountSearch = component - } else { - this.accountSearch = undefined - } - } - searchChanged (search: string) { - if (this.accountSearch) this.accountSearch.updateSearch(search) + const queryParams = { search } + + this.router.navigate([ './videos' ], { queryParams, relativeTo: this.route, queryParamsHandling: 'merge' }) } onSearchInputDisplayChanged (displayed: boolean) { @@ -151,11 +137,11 @@ export class AccountsComponent implements OnInit, OnDestroy { return !this.accountDescriptionExpanded && this.accountDescriptionHTML.length > 100 } - private async onAccount (account: Account) { - this.accountFollowerTitle = $localize`${account.followersCount} direct account followers` - - this.prependModerationActions = undefined + isOnChannelPage () { + return this.route.children[0].snapshot.url[0].path === 'video-channels' + } + private async onAccount (account: Account) { this.accountDescriptionHTML = await this.markdown.textMarkdownToHTML(account.description) // After the markdown renderer to avoid layout changes @@ -164,10 +150,11 @@ export class AccountsComponent implements OnInit, OnDestroy { this.updateModerationActions() this.loadUserIfNeeded(account) this.loadAccountVideosCount() + this.loadAccountBlockStatus() } private showReportModal () { - this.accountReportModal.show() + this.accountReportModal.show(this.account) } private loadUserIfNeeded (account: Account) { @@ -175,15 +162,20 @@ export class AccountsComponent implements OnInit, OnDestroy { const user = this.authService.getUser() if (user.hasRight(UserRight.MANAGE_USERS)) { - this.userService.getUser(account.userId).subscribe( - accountUser => this.accountUser = accountUser, - - err => this.notifier.error(err.message) - ) + this.userService.getUser(account.userId) + .subscribe({ + next: accountUser => { + this.accountUser = accountUser + }, + + error: err => this.notifier.error(err.message) + }) } } private updateModerationActions () { + this.prependModerationActions = [] + if (!this.authService.isLoggedIn()) return this.authService.userInformationLoaded.subscribe( @@ -192,6 +184,10 @@ export class AccountsComponent implements OnInit, OnDestroy { // It's not our account, we can report it this.prependModerationActions = [ + { + label: $localize`Report`, + isHeader: true + }, { label: $localize`Report this account`, handler: () => this.showReportModal() @@ -209,6 +205,13 @@ export class AccountsComponent implements OnInit, OnDestroy { itemsPerPage: 0 }, sort: '-publishedAt' - }).subscribe(res => this.accountVideosCount = res.total) + }).subscribe(res => { + this.accountVideosCount = res.total + }) + } + + private loadAccountBlockStatus () { + this.blocklist.getStatus({ accounts: [ this.account.nameWithHostForced ], hosts: [ this.account.host ] }) + .subscribe(status => this.account.updateBlockStatus(status)) } }