opf/openproject

View on GitHub
frontend/src/app/features/work-packages/components/wp-tabs/components/wp-tabs/wp-tabs.component.ts

Summary

Maintainability
A
1 hr
Test Coverage
import {
  ChangeDetectionStrategy, Component, Injector, Input, OnInit,
} from '@angular/core';
import { KeepTabService } from 'core-app/features/work-packages/components/wp-single-view-tabs/keep-tab/keep-tab.service';
import { StateService, UIRouterGlobals } from '@uirouter/core';
import { I18nService } from 'core-app/core/i18n/i18n.service';
import { TabDefinition } from 'core-app/shared/components/tabs/tab.interface';
import { WorkPackageTabsService } from 'core-app/features/work-packages/components/wp-tabs/services/wp-tabs/wp-tabs.service';
import { WorkPackageResource } from 'core-app/features/hal/resources/work-package-resource';

@Component({
  selector: 'op-wp-tabs',
  templateUrl: './wp-tabs.component.html',
  styleUrls: ['./wp-tabs.component.sass'],
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class WpTabsComponent implements OnInit {
  @Input() workPackage:WorkPackageResource;

  @Input() view:'full'|'split';

  public tabs:TabDefinition[];

  public uiSrefBase:string;

  public canViewWatchers = false;

  text = {
    details: {
      close: this.I18n.t('js.button_close_details'),
      goToFullScreen: this.I18n.t('js.button_show_fullscreen'),
    },
  };

  constructor(
    readonly wpTabsService:WorkPackageTabsService,
    readonly I18n:I18nService,
    readonly injector:Injector,
    readonly $state:StateService,
    readonly uiRouterGlobals:UIRouterGlobals,
    readonly keepTab:KeepTabService,
  ) {
  }

  ngOnInit():void {
    this.uiSrefBase = this.view === 'split' ? '' : 'work-packages.show';
    this.canViewWatchers = !!(this.workPackage && this.workPackage.watchers);
    this.tabs = this.getDisplayableTabs();
  }

  private getDisplayableTabs() {
    return this
      .wpTabsService
      .getDisplayableTabs(this.workPackage)
      .map((tab) => ({
        ...tab,
        route: `${this.uiSrefBase}.tabs`,
        routeParams: { workPackageId: this.workPackage.id, tabIdentifier: tab.id },
      }));
  }

  public switchToFullscreen():void {
    this.keepTab.goCurrentShowState();
  }

  public close():void {
    this.$state.go(
      this.uiRouterGlobals.current.data.baseRoute,
      this.uiRouterGlobals.params,
    );
  }
}