Chocobozzz/PeerTube

View on GitHub
client/src/app/menu/notification-dropdown.component.html

Summary

Maintainability
Test Coverage
<ng-template #notificationNumber>
  <div *ngIf="unreadNotifications > 0 && unreadNotifications < 100" class="unread-notifications">{{ unreadNotifications }}</div>
  <div *ngIf="unreadNotifications >= 100" class="unread-notifications">99+</div>
</ng-template>

@if (isInMobileView) {
  <div i18n-title title="View your notifications" class="notification-inbox-link">
    <ng-container *ngTemplateOutlet="notificationNumber"></ng-container>

    <a routerLink="/my-account/notifications" routerLinkActive="active" #link (click)="onNavigate(link)">
      <my-global-icon iconName="bell"></my-global-icon>
    </a>
  </div>
} @else {
  <div
    ngbDropdown autoClose="outside" placement="bottom" container="body" dropdownClass="dropdown-notifications"
    #dropdown="ngbDropdown" (shown)="onDropdownShown()" (hidden)="onDropdownHidden()"
  >
    <button
      i18n-title title="View your notifications"
      class="border-0 text-start disable-dropdown-caret" [ngClass]="{ 'notification-inbox-dropdown': true, 'shown': opened, 'hidden': isInMobileView }"
      ngbDropdownToggle
    >
      <ng-container *ngTemplateOutlet="notificationNumber"></ng-container>

      <my-global-icon iconName="bell"></my-global-icon>
    </button>

    <div ngbDropdownMenu>
      <div class="content" [ngClass]="{ loaded: loaded }">
        <div class="notifications-header">
          <div i18n>Notifications</div>

          <div>
            <button
              *ngIf="unreadNotifications"
              i18n-title title="Mark all as read" class="me-2"
              (click)="markAllAsRead()"
            >
              <my-global-icon iconName="tick"></my-global-icon>
            </button>

            <a
              i18n-title title="Update your notification preferences"
              routerLink="/my-account/settings" fragment="notifications"
              #settingsNotifications (click)="onNavigate(settingsNotifications)"
            >
              <my-global-icon iconName="cog"></my-global-icon>
            </a>
          </div>
        </div>

        <div *ngIf="!loaded" class="loader mt-4">
          <my-loader size="xl" [loading]="!loaded"></my-loader>
        </div>

        <my-user-notifications
          [ignoreLoadingBar]="true" [infiniteScroll]="false" [itemsPerPage]="10"
          [markAllAsReadSubject]="markAllAsReadSubject" (notificationsLoaded)="onNotificationLoaded()"
        ></my-user-notifications>

        <a *ngIf="loaded" class="all-notifications" routerLink="/my-account/notifications" #notifications (click)="onNavigate(notifications)">
          <my-global-icon class="me-1" iconName="bell" aria-hidden="true"></my-global-icon>
          <span i18n>See all your notifications</span>
        </a>
      </div>
    </div>

  </div>
}