<div class="btn-group-subscribe btn-group"
- [ngClass]="{'subscribe-button': !isAllChannelsSubscribed(), 'unsubscribe-button': isAllChannelsSubscribed(), 'big': isBigButton() }">
+ [ngClass]="{'subscribe-button': !isAllChannelsSubscribed, 'unsubscribe-button': isAllChannelsSubscribed, 'big': isBigButton }">
<ng-template #userLoggedOut>
- <span [ngClass]="{ 'extra-text': isAtLeastOneChannelSubscribed() }">
+ <span [ngClass]="{ 'extra-text': isAtLeastOneChannelSubscribed }">
<ng-container *ngIf="account; then multiple; else single"></ng-container>
<ng-template i18n #single>Subscribe</ng-template>
<ng-template #multiple>
<span i18n>Subscribe to all channels</span>
- <span *ngIf="isAtLeastOneChannelSubscribed()">{{ subscribeStatus(true).length }}/{{ subscribed.size }}
+ <span *ngIf="isAtLeastOneChannelSubscribed">{{ subscribeStatus(true).length }}/{{ subscribed.size }}
<ng-container i18n>channels subscribed</ng-container>
</span>
</ng-template>
</span>
- <span *ngIf="!isBigButton() && displayFollowers && videoChannels.length > 1 && videoChannel.followersCount !== 0" class="followers-count">
+ <span *ngIf="!isBigButton && displayFollowers && videoChannels.length > 1 && videoChannel.followersCount !== 0" class="followers-count">
{{ videoChannels[0].followersCount | myNumberFormatter }}
</span>
</ng-template>
<ng-template #userLoggedIn>
- <button *ngIf="!isAllChannelsSubscribed()" type="button"
+ <button *ngIf="!isAllChannelsSubscribed" type="button"
class="btn btn-sm" role="button"
(click)="subscribe()">
<ng-template [ngTemplateOutlet]="userLoggedOut"></ng-template>
</button>
<button
- *ngIf="isAllChannelsSubscribed()" type="button"
+ *ngIf="isAllChannelsSubscribed" type="button"
class="btn btn-sm" role="button"
(click)="unsubscribe()">
<ng-container i18n>{account + "", select, undefined {Unsubscribe} other {Unsubscribe from all channels}}</ng-container>
-import { Component, Input, OnInit } from '@angular/core'
+import { Component, Input, OnInit, OnChanges } from '@angular/core'
import { Router } from '@angular/router'
import { AuthService, Notifier } from '@app/core'
import { UserSubscriptionService } from '@app/shared/user-subscription/user-subscription.service'
import { FeedFormat } from '../../../../../shared/models/feeds'
import { Account } from '@app/shared/account/account.model'
import { concat, forkJoin, merge } from 'rxjs'
-import { toArray } from 'rxjs/operators'
@Component({
selector: 'my-subscribe-button',
templateUrl: './subscribe-button.component.html',
styleUrls: [ './subscribe-button.component.scss' ]
})
-export class SubscribeButtonComponent implements OnInit {
+export class SubscribeButtonComponent implements OnInit, OnChanges {
/**
* SubscribeButtonComponent can be used with a single VideoChannel passed as [VideoChannel],
* or with an account and a full list of that account's videoChannels. The latter is intended
return this.videoChannels[0]
}
+ get isAllChannelsSubscribed () {
+ return this.subscribeStatus(true).length === this.videoChannels.length
+ }
+
+ get isAtLeastOneChannelSubscribed () {
+ return this.subscribeStatus(true).length > 0
+ }
+
+ get isBigButton () {
+ return this.isUserLoggedIn() && this.videoChannels.length > 1 && this.isAtLeastOneChannelSubscribed
+ }
+
ngOnInit () {
this.loadSubscribedStatus()
}
+ ngOnChanges () {
+ this.ngOnInit()
+ }
+
subscribe () {
if (this.isUserLoggedIn()) {
return this.localSubscribe()
return this.authService.isLoggedIn()
}
- isAllChannelsSubscribed () {
- return !Array.from(this.subscribed.values()).includes(false)
- }
-
- isAtLeastOneChannelSubscribed () {
- return this.subscribeStatus(true).length > 0
- }
-
- isBigButton () {
- return this.isUserLoggedIn() && this.videoChannels.length > 1 && this.isAtLeastOneChannelSubscribed()
- }
-
gotoLogin () {
this.router.navigate([ '/login' ])
}