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

100% Statements 31/31
91.66% Branches 33/36
100% Functions 5/5
100% Lines 31/31

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 9729x 29x 29x 29x   29x   29x   29x     29x   18x 18x 18x       17x       14x 1x 13x 1x 12x 1x       11x 1x 10x 1x       9x 4x       4x                                     5x 1x       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())),
      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 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 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;
      })
    );
  }
}