All files / projects/organization-management/src/app/services/organization-management-breadcrumb organization-management-breadcrumb.service.ts

94.44% Statements 34/36
87.5% Branches 35/40
100% Functions 5/5
94.28% Lines 33/35

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 10832x 32x 32x 32x   32x   32x   32x     32x   18x 18x 18x       17x         14x 1x 13x 1x 12x 1x       11x 1x 10x 1x       9x         9x 4x       4x                                     5x 1x       4x         4x 3x     3x                                   1x          
import { Injectable } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { EMPTY, Observable, of } from 'rxjs';
import { map, switchMap, withLatestFrom } from 'rxjs/operators';
 
import { AppFacade } from 'ish-core/facades/app.facade';
import { BreadcrumbItem } from 'ish-core/models/breadcrumb-item/breadcrumb-item.interface';
import { whenFalsy, whenTruthy } from 'ish-core/utils/operators';
 
import { OrganizationManagementFacade } from '../../facades/organization-management.facade';
 
@Injectable({ providedIn: 'root' })
export class OrganizationManagementBreadcrumbService {
  constructor(
    private appFacade: AppFacade,
    private organizationManagementFacade: OrganizationManagementFacade,
    private translateService: TranslateService
  ) {}
 
  breadcrumb$(prefix: string): Observable<BreadcrumbItem[]> {
    return this.appFacade.routingInProgress$.pipe(
      whenFalsy(),
      withLatestFrom(this.appFacade.path$.pipe(whenTruthy())),
      // eslint-disable-next-line complexity
      switchMap(([, path]) => {
        if (path.endsWith('users')) {
          return of([{ key: 'account.organization.user_management' }]);
        } else if (path.endsWith('settings')) {
          return of([{ key: 'account.organization.org_settings' }]);
        } else if (path.endsWith('settings/company')) {
          return of([
            { key: 'account.organization.org_settings', link: `${prefix}/settings` },
            { key: 'account.company_profile.heading' },
          ]);
        } else if (path.endsWith('cost-centers')) {
          return of([{ key: 'account.organization.cost_center_management' }]);
        } else if (path.endsWith('users/create')) {
          return of([
            { key: 'account.organization.user_management', link: `${prefix}/users` },
            { key: 'account.user.breadcrumbs.new_user.text' },
          ]);
        } else Iif (path.endsWith('users/import')) {
          return of([
            { key: 'account.organization.user_management', link: `${prefix}/users` },
            { key: 'account.user.import.breadcrumb' },
          ]);
        } else if (/users\/:B2BCustomerLogin(\/(profile|roles|budget))?$/.test(path)) {
          return this.organizationManagementFacade.selectedUser$.pipe(
            whenTruthy(),
            withLatestFrom(this.translateService.get('account.organization.user_management.user_detail.breadcrumb')),
            map(([user, translation]) =>
              path.endsWith('profile') || path.endsWith('roles') || path.endsWith('budget')
                ? // edit user detail
                  [
                    { key: 'account.organization.user_management', link: `${prefix}/users` },
                    {
                      text: `${translation} - ${user.firstName} ${user.lastName}`,
                      link: `${prefix}/users/${user.login}`,
                    },
                    {
                      key: `account.user.update_${path.substring(path.lastIndexOf('/') + 1)}.heading`,
                    },
                  ]
                : // user detail
                  [
                    { key: 'account.organization.user_management', link: `${prefix}/users` },
                    { text: `${translation} - ${user.firstName} ${user.lastName}` },
                  ]
            )
          );
        } else if (path.endsWith('cost-centers/create')) {
          return of([
            { key: 'account.organization.cost_center_management', link: `${prefix}/cost-centers` },
            { key: 'account.costcenter.create.heading' },
          ]);
        } else Iif (path.endsWith('cost-centers/import')) {
          return of([
            { key: 'account.organization.cost_center_management', link: `${prefix}/cost-centers` },
            { key: 'account.costcenter.import.breadcrumb' },
          ]);
        } else if (/cost-centers\/:CostCenterId(\/(edit|buyers))?$/.test(path)) {
          return this.organizationManagementFacade.selectedCostCenter$.pipe(
            whenTruthy(),
            map(cc =>
              path.endsWith('edit') || path.endsWith('buyers')
                ? [
                    { key: 'account.organization.cost_center_management', link: `${prefix}/cost-centers` },
                    {
                      text: `${cc.name}`,
                      link: `${prefix}/cost-centers/${cc.id}`,
                    },
                    {
                      key: `account.costcenter.details.${path.substring(path.lastIndexOf('/') + 1)}.heading`,
                    },
                  ]
                : [
                    { key: 'account.organization.cost_center_management', link: `${prefix}/cost-centers` },
                    { text: cc.name },
                  ]
            )
          );
        }
        return EMPTY;
      })
    );
  }
}