All files / src/app/components/event-rules event-rules.component.ts

85.71% Statements 36/42
79.16% Branches 19/24
80% Functions 8/10
85% Lines 34/40

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                                      111x 1x 1x 1x         1x 1x 1x 1x 1x         1x 1x 1x 1x   1x 1x       1x 1x         4x 4x 4x 4x                 3x 3x 3x   3x 3x     3x 2x 2x         2x 2x     3x                           2x 110x    
import { Component, OnInit, inject } from '@angular/core';
import { EventRule } from '../../models/events';
import { TwinpadApiService } from '../../services/twinpad-api.service';
import { ListResponse } from '../../models/response';
import { LoaderComponent } from '../loader/loader.component';
import { EmptyPlaceholderComponent } from '../empty-placeholder/empty-placeholder.component';
import { TableModule, TableLazyLoadEvent, TablePageEvent } from 'primeng/table';
 
import { ButtonModule } from 'primeng/button';
import { ActivatedRoute, Router, RouterLink } from '@angular/router';
import { HttpErrorResponse } from '@angular/common/http';
import { ErrorComponent } from '../error/error.component';
 
@Component({
  selector: 'app-event-rules',
  imports: [ErrorComponent, LoaderComponent, EmptyPlaceholderComponent, TableModule, ButtonModule, RouterLink],
  templateUrl: './event-rules.component.html',
  styleUrl: './event-rules.component.scss'
})
export class EventRulesComponent implements OnInit {
  private twinpadApiService = inject(TwinpadApiService);
  private route = inject(ActivatedRoute);
  private router = inject(Router);
 
 
  isLoading: boolean;
  eventRulesResponse: ListResponse<EventRule>;
  offset: number = 0;
  limit: number = 10;
  sortBy: string[] = ["name"];
  defaultRowOptions = [10, 20, 50];
  filteredRowsPerPageOptions: number[] = [];
 
  error: HttpErrorResponse;
 
  ngOnInit(): void {
    this.isLoading = true;
    this.route.queryParamMap.subscribe(params => {
      this.limit = Number(params.get('rows')) || 10;
      this.offset = Number(params.get('offset')) || 0;
 
      const newSortBy = params.get('sortBy');
      Iif (newSortBy){
        this.sortBy = newSortBy.split(',');
      }
 
      this.updateRowsPerPageOptions();
      this.getData();
    });
  }
 
  getData(){
    this.isLoading = true;
    this.twinpadApiService.getEventRules(this.limit, this.offset, this.sortBy).subscribe({next: (value) => {
      this.eventRulesResponse = value;
      this.isLoading = false;
    },
    error: (error)=>{
      this.error = error;
    }
    });
  }
 
  loadEventRules(event: TableLazyLoadEvent){
    this.isLoading = true;
    Eif (event.first !== null && event.first !== undefined){
      this.offset = event.first;
    }
    Eif (event.rows !== null && event.rows !== undefined){
      this.limit = event.rows;
    }
 
    if (event.sortField !== undefined && event.sortField !== null){
      Eif (typeof(event.sortField) === 'string'){
        this.sortBy = [event.sortField];
      }
      else{
        this.sortBy = event.sortField;
      }
      Eif (event.sortOrder != null){
          this.sortBy[0] += ':'+event.sortOrder;
      }
    }
    this.getData();
  }
 
  onTableEvent(event: TablePageEvent){
    this.offset = event.first;
    this.limit = event.rows;
 
    this.router.navigate([], {
      queryParams: { offset: this.offset, rows: this.limit },
      queryParamsHandling: 'merge'
    });
  }
 
  updateRowsPerPageOptions(){
    this.filteredRowsPerPageOptions = [...new Set([...this.defaultRowOptions, this.limit])].sort((a, b) => a - b);
  }
}