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                                      92x       2x 2x 2x 2x 2x       2x     2x 2x 2x 2x   2x 2x       2x 2x         6x 6x 6x 6x                 4x 4x 4x   4x 4x     4x 2x 2x         2x 2x     4x                           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);
  }
}