Skip to content
Snippets Groups Projects
unit-view.component.ts 2.88 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Component, OnDestroy, OnInit } from '@angular/core';
    import { Observable, Subject } from 'rxjs';
    
    import { take, takeUntil } from 'rxjs/operators';
    
    import { UnitService } from '../../unit.service';
    
    import { DialogService } from '../../dialog.service';
    
    import { SelectionService } from '../../selection.service';
    import { Unit } from '../../../../../common/unit';
    
    
    @Component({
      selector: 'app-unit-view',
      templateUrl: './unit-view.component.html',
      styles: [
    
        '.toolbox_drawer {width: 230px}',
    
        '.properties_drawer {width: 320px}',
    
        '.delete-page-button {min-width: 0; padding: 0;position: absolute; left: 130px; bottom: 6px; visibility: hidden}',
        '::ng-deep .mat-tab-label:hover .delete-page-button {visibility: visible;}',
    
        '.page-alwaysVisible-icon {position: absolute; left: 15px}',
    
        '.drawer-button {font-size: large;background-color: lightgray;min-width: 0;width: 2%;border: none;cursor: pointer}',
    
    rhenck's avatar
    rhenck committed
        '.show-elements-button span {transform: rotate(-90deg); display: inherit}',
        '.show-properties-button {padding-bottom: 140px}',
    
        '.show-properties-button span {transform: rotate(90deg); display: inherit;}',
        '::ng-deep .mat-drawer-content .mat-tab-body-wrapper {height: 100%}'
    
    export class UnitViewComponent implements OnInit, OnDestroy {
      unit!: Unit;
    
    rhenck's avatar
    rhenck committed
      private ngUnsubscribe = new Subject<void>();
    
      pagesLoaded = true;
    
      constructor(public selectionService: SelectionService,
                  public unitService: UnitService,
                  private dialogService: DialogService) { }
    
      ngOnInit(): void {
        this.unitService.unit
          .pipe(takeUntil(this.ngUnsubscribe))
          .subscribe((unit: Unit) => {
            this.unit = unit;
          });
    
        // The following is a hack. The tab element gets bugged when changing the underlying array.
        // With this we can temporarily remove it from the DOM and then add it again, re-initializing it.
        this.unitService.pageMoved
          .pipe(takeUntil(this.ngUnsubscribe))
          .subscribe(() => {
            this.pagesLoaded = false;
            setTimeout(() => {
              this.pagesLoaded = true;
            });
          });
    
      }
    
      selectPage(newIndex: number): void {
    
        this.selectionService.selectPageIndex(newIndex);
    
    
      addPage(): void {
    
        this.unitService.addPage();
    
        this.selectionService.selectPageIndex(this.unit.pages.length - 1);
    
      }
    
      deletePage(): void {
    
    rhenck's avatar
    rhenck committed
        this.showConfirmDialog().pipe(takeUntil(this.ngUnsubscribe)).subscribe((result: boolean) => {
    
          if (result) {
    
            this.selectionService.selectedPageIndex
              .pipe(take(1))
              .subscribe(index => {
                this.unitService.deletePage(index);
                this.selectionService.selectPageIndex(index - 1);
              }).unsubscribe();
    
      showConfirmDialog(): Observable<boolean> {
        return this.dialogService.showConfirmDialog();
    
    rhenck's avatar
    rhenck committed
      }
    
      ngOnDestroy(): void {
        this.ngUnsubscribe.next();
        this.ngUnsubscribe.complete();