first step for plr game platform
This commit is contained in:
94
src/app/dashboard/pages/rapport/rapport.ts
Normal file
94
src/app/dashboard/pages/rapport/rapport.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { ChangeDetectionStrategy, Component, signal, ViewChild } from '@angular/core';
|
||||
import { DataTable, TableColumn } from '@shared/components/data-table/data-table';
|
||||
import { ZardButtonComponent } from '@shared/components/button/button.component';
|
||||
import { ZardPaginationModule } from '@shared/components/pagination/pagination.module';
|
||||
import { ListParams, PagedResult } from '@shared/paging/paging';
|
||||
import { ResultatApiResponse } from 'src/app/core/interfaces/resultat';
|
||||
import { ResultatService } from 'src/app/core/services/resultat';
|
||||
|
||||
@Component({
|
||||
standalone: true,
|
||||
selector: 'app-rapport',
|
||||
templateUrl: './rapport.html',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
imports: [CommonModule, DataTable, ZardButtonComponent, ZardPaginationModule],
|
||||
})
|
||||
export class Rapport {
|
||||
rows = signal<ResultatApiResponse[]>([]);
|
||||
loading = signal(false);
|
||||
// Pagination state
|
||||
page = signal<number>(1);
|
||||
perPage = signal<number>(10);
|
||||
totalPages = signal<number>(1);
|
||||
totalElements = signal<number>(0);
|
||||
@ViewChild(DataTable) table?: DataTable<ResultatApiResponse>;
|
||||
|
||||
cols: TableColumn<ResultatApiResponse>[] = [
|
||||
{ key: 'courseNumero', label: 'N°' },
|
||||
{ key: 'hippodromeNom', label: 'Hippodrome' },
|
||||
{ key: 'courseNom', label: 'Course' },
|
||||
{ key: 'ordreArrivee', label: "Ordre d'arrivée", cell: (r) => String(r.ordreArrivee ?? '').replace(/,/g, ' - ') },
|
||||
{ key: 'statut', label: 'Statut', cell: (r)=>(r.statut.toString().toLowerCase().replace("_", " ")) },
|
||||
{ key: 'datePublication', label: 'Date pub.', cell: (r) => r.datePublication ?? r.createdAt ?? '—' },
|
||||
{ key: 'dateValidation', label: 'Date validation' },
|
||||
];
|
||||
|
||||
constructor(private api: ResultatService) {
|
||||
// initial load
|
||||
this.fetch();
|
||||
}
|
||||
private fetchPage(params?: Partial<ListParams>) {
|
||||
this.loading.set(true);
|
||||
const p: ListParams = { page: this.page(), size: this.perPage(), ...(params || {}) };
|
||||
this.api.listRawPaged(p).subscribe({
|
||||
next: (res: PagedResult<ResultatApiResponse>) => {
|
||||
const filtered = (res?.content || []).filter((r) => !!(r.ordreArrivee && String(r.ordreArrivee).trim()));
|
||||
this.rows.set(filtered);
|
||||
// normalize paging meta
|
||||
this.totalPages.set(res.totalPages ?? 1);
|
||||
this.totalElements.set(res.totalElements ?? (filtered.length || 0));
|
||||
// ensure local page is in sync with backend response
|
||||
if (res.pageable?.pageNumber) this.page.set(res.pageable.pageNumber);
|
||||
this.loading.set(false);
|
||||
},
|
||||
error: (err) => {
|
||||
console.error('Error fetching paged reports:', err);
|
||||
this.rows.set([]);
|
||||
this.loading.set(false);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
fetch() {
|
||||
this.fetchPage();
|
||||
}
|
||||
|
||||
onPageChange(nextPage: number) {
|
||||
this.page.set(nextPage);
|
||||
this.fetchPage();
|
||||
}
|
||||
|
||||
onPerPageChange(size: number) {
|
||||
this.perPage.set(size);
|
||||
this.page.set(1);
|
||||
this.fetchPage();
|
||||
}
|
||||
|
||||
// wrapper for template change event to avoid $event typing issues
|
||||
onPerPageChangeEvent(e: Event) {
|
||||
const v = (e.target as HTMLSelectElement)?.value;
|
||||
const size = Number(v) || 10;
|
||||
this.onPerPageChange(size);
|
||||
}
|
||||
|
||||
openReport(row: ResultatApiResponse) {
|
||||
try {
|
||||
// Open a per-result report URL in a new tab. Adjust path if your server uses another route.
|
||||
const url = `/rapport/${row.id}`;
|
||||
window.open(url, '_blank');
|
||||
} catch (err) {
|
||||
console.error('Failed to open report for', row, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user