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                                      112x 2x 2x 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 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);
  }
}