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

85.36% Statements 35/41
79.16% Branches 19/24
81.81% Functions 9/11
83.78% Lines 31/37

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                                      93x       2x 2x 2x 2x 2x       2x     2x 2x 2x 2x   2x 2x       2x 2x         5x 5x 5x 5x                 3x 3x 3x   3x 3x     3x 2x 2x         2x 2x     3x                           4x      
import { Component, OnInit } 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 { NgIf } from '@angular/common';
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, NgIf, TableModule, ButtonModule, RouterLink],
  templateUrl: './event-rules.component.html',
  styleUrl: './event-rules.component.scss'
})
export class EventRulesComponent implements OnInit {
 
  isLoading: boolean;
  eventRulesResponse: ListResponse<EventRule>;
  offset: number = 0;
  limit: number = 10;
  sortBy: string[] = ["name"];
  defaultRowOptions = [10, 20, 50];
  filteredRowsPerPageOptions: number[] = [];
 
  error: HttpErrorResponse;
 
  constructor(private twinpadApiService: TwinpadApiService, private route: ActivatedRoute, private router: Router){}
 
  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);
  }
}