aconnect-UX/1576
#31
Merged
naeem.ullah
merged 2 commits from aconnect-UX/1576 into dev-pending-01-01-2026 3 weeks ago
@ -1,28 +1,116 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import { NgSelectModule } from '@ng-select/ng-select';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { pageSizeOptions } from '../utils/app.constants';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { pageSizeOptions, toDateAfterFromDateValidator } from '../utils/app.constants';
|
||||
import { CommonModule, DatePipe } from '@angular/common';
|
||||
import { HttpParams } from '@angular/common/http';
|
||||
import { URIKey } from '../utils/uri-enums';
|
||||
import { HttpURIService } from '../app.http.uri.service';
|
||||
import { LogsManagementResponse } from '../utils/app.interfaces';
|
||||
import { TableFilterPipe } from '../shared/pipes/table-filter.pipe';
|
||||
|
||||
@Component({
|
||||
selector: 'app-logging',
|
||||
imports: [TranslateModule, FormsModule, NgSelectModule, CommonModule, ReactiveFormsModule],
|
||||
imports: [ TranslateModule, FormsModule, NgSelectModule, CommonModule, ReactiveFormsModule,
|
||||
TableFilterPipe
|
||||
],
|
||||
providers: [ DatePipe ],
|
||||
templateUrl: './logging.component.html',
|
||||
styleUrl: './logging.component.scss'
|
||||
})
|
||||
export class LoggingComponent {
|
||||
export class LoggingComponent implements OnInit {
|
||||
currentPage: number = 1;
|
||||
pageSizeOptions = pageSizeOptions
|
||||
renewalDataExpanded: boolean = true
|
||||
itemsPerPage: number = 5;
|
||||
searchText: any;
|
||||
toggleCard(arg0: string) {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
nextPage() {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
logsForm: any;
|
||||
pageSizeOptions = pageSizeOptions
|
||||
logsDataExpanded: boolean = true
|
||||
itemsPerPage: number = 5;
|
||||
searchText: any = '';
|
||||
allItems: any[] = [];
|
||||
pagedItems: any[] = [];
|
||||
logsList: LogsManagementResponse[] = [];
|
||||
logsSearchForm!: FormGroup;
|
||||
isLoading: boolean = false;
|
||||
|
||||
constructor(
|
||||
private fb: FormBuilder,
|
||||
private httpService: HttpURIService,
|
||||
private datePipe: DatePipe
|
||||
) { }
|
||||
|
||||
ngOnInit() {
|
||||
this.initializeLogsSearchForm();
|
||||
}
|
||||
|
||||
initializeLogsSearchForm() {
|
||||
this.logsSearchForm = this.fb.group({
|
||||
fromDate: ['', Validators.required],
|
||||
toDate: ['', Validators.required]
|
||||
},
|
||||
{
|
||||
validators: toDateAfterFromDateValidator
|
||||
})
|
||||
}
|
||||
|
||||
getlogsData(){
|
||||
if(this.logsSearchForm.invalid)
|
||||
return;
|
||||
|
||||
let formValues = this.logsSearchForm.value;
|
||||
this.isLoading = true;
|
||||
|
||||
let fromDateTransformed = this.datePipe.transform(formValues.fromDate, "dd-MM-yyyy");
|
||||
let toDateTransformed = this.datePipe.transform(formValues.toDate, "dd-MM-yyyy");
|
||||
|
||||
const params = new HttpParams()
|
||||
.set('fromDate', fromDateTransformed!)
|
||||
.set('toDate', toDateTransformed!);
|
||||
|
||||
this.httpService.requestGET<LogsManagementResponse[]>(URIKey.LOGGER_MANAGER_URI, params).subscribe({
|
||||
next: (response) => {
|
||||
this.logsList = response;
|
||||
this.allItems = [...this.logsList];
|
||||
this.updatePagedItems();
|
||||
this.isLoading = false;
|
||||
},
|
||||
error: (err) => {
|
||||
console.error('Error fetching BOD data:', err);
|
||||
this.logsList = [];
|
||||
this.isLoading = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
updatePagedItems(): void {
|
||||
const startIndex = (this.currentPage - 1) * this.itemsPerPage;
|
||||
const endIndex = startIndex + this.itemsPerPage;
|
||||
this.pagedItems = this.allItems.slice(startIndex, endIndex);
|
||||
}
|
||||
|
||||
totalPages(): number {
|
||||
return Math.ceil(this.allItems.length / this.itemsPerPage);
|
||||
}
|
||||
|
||||
previousPage(): void {
|
||||
if (this.currentPage > 1) {
|
||||
this.currentPage--;
|
||||
this.updatePagedItems();
|
||||
}
|
||||
}
|
||||
|
||||
nextPage(): void {
|
||||
if (this.currentPage < this.totalPages()) {
|
||||
this.currentPage++;
|
||||
this.updatePagedItems();
|
||||
}
|
||||
}
|
||||
|
||||
itemsPerPageChanged(): void {
|
||||
this.currentPage = 1;
|
||||
this.updatePagedItems();
|
||||
}
|
||||
|
||||
toggleTableCard(){
|
||||
this.logsDataExpanded = !this.logsDataExpanded;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
import { Pipe, PipeTransform } from '@angular/core';
|
||||
|
||||
@Pipe({
|
||||
name: 'tableFilter',
|
||||
standalone: true
|
||||
})
|
||||
export class TableFilterPipe implements PipeTransform {
|
||||
transform(items: any[], searchText: string, filterProperties: string[]): any[] {
|
||||
if (!items) return [];
|
||||
if (!searchText.trim()) return items;
|
||||
|
||||
searchText = searchText.toLowerCase().trim();
|
||||
|
||||
return items.filter(item => {
|
||||
return filterProperties.some(prop => {
|
||||
const value = this.getNestedProperty(item, prop)?.toString().toLowerCase();
|
||||
return value?.includes(searchText);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private getNestedProperty(obj: any, path: string): any {
|
||||
return path.split('.').reduce((o, p) => o?.[p], obj);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
export interface PermissionNode {
|
||||
name: string;
|
||||
checked: boolean;
|
||||
expanded: boolean;
|
||||
children?: PermissionNode[];
|
||||
buttons?: PermissionNode[];
|
||||
}
|
||||
|
||||
export interface LogsManagementResponse {
|
||||
id: number,
|
||||
method: string,
|
||||
remoteIp: string,
|
||||
requestBody: string,
|
||||
requestUri: string,
|
||||
responseCode: number,
|
||||
userId: string,
|
||||
dateTime: string
|
||||
}
|
||||
Loading…
Reference in New Issue