aboutsummaryrefslogblamecommitdiffhomepage
path: root/client/src/app/shared/blocklist/account-blocklist.component.ts
blob: dc5ac40446e6d25cb8a3af018213bfb246c364dc (plain) (tree)














































































                                                                                                                            
import { OnInit } from '@angular/core'
import { Notifier } from '@app/core'
import { I18n } from '@ngx-translate/i18n-polyfill'
import { RestPagination, RestTable } from '@app/shared/rest'
import { SortMeta } from 'primeng/api'
import { AccountBlock } from './account-block.model'
import { BlocklistService, BlocklistComponentType } from './blocklist.service'
import { Actor } from '@app/shared/actor/actor.model'

export class GenericAccountBlocklistComponent extends RestTable implements OnInit {
  // @ts-ignore: "Abstract methods can only appear within an abstract class"
  abstract mode: BlocklistComponentType

  blockedAccounts: AccountBlock[] = []
  totalRecords = 0
  sort: SortMeta = { field: 'createdAt', order: -1 }
  pagination: RestPagination = { count: this.rowsPerPage, start: 0 }

  constructor (
    private notifier: Notifier,
    private blocklistService: BlocklistService,
    private i18n: I18n
  ) {
    super()
  }

  // @ts-ignore: "Abstract methods can only appear within an abstract class"
  abstract getIdentifier (): string

  ngOnInit () {
    this.initialize()
  }

  switchToDefaultAvatar ($event: Event) {
    ($event.target as HTMLImageElement).src = Actor.GET_DEFAULT_AVATAR_URL()
  }

  unblockAccount (accountBlock: AccountBlock) {
    const blockedAccount = accountBlock.blockedAccount
    const operation = this.mode === BlocklistComponentType.Account
      ? this.blocklistService.unblockAccountByUser(blockedAccount)
      : this.blocklistService.unblockAccountByInstance(blockedAccount)

    operation.subscribe(
      () => {
        this.notifier.success(
          this.mode === BlocklistComponentType.Account
            ? this.i18n('Account {{nameWithHost}} unmuted.', { nameWithHost: blockedAccount.nameWithHost })
            : this.i18n('Account {{nameWithHost}} unmuted by your instance.', { nameWithHost: blockedAccount.nameWithHost })
        )

        this.loadData()
      }
    )
  }

  protected loadData () {
    const operation = this.mode === BlocklistComponentType.Account
      ? this.blocklistService.getUserAccountBlocklist({
        pagination: this.pagination,
        sort: this.sort,
        search: this.search
      })
      : this.blocklistService.getInstanceAccountBlocklist({
        pagination: this.pagination,
        sort: this.sort,
        search: this.search
      })

    return operation.subscribe(
      resultList => {
        this.blockedAccounts = resultList.data
        this.totalRecords = resultList.total
      },

      err => this.notifier.error(err.message)
    )
  }
}