fix pagination, bump version

This commit is contained in:
_Bastler
2025-11-09 02:54:26 +01:00
parent 1acaf07825
commit c0b9aac823
41 changed files with 459 additions and 375 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "we-bstly-angular", "name": "we-bstly-angular",
"version": "3.2.0", "version": "3.5.0",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
"start": "ng serve", "start": "ng serve",
@@ -7,36 +7,37 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!jitsiRooms) {
<table mat-table [dataSource]="dataSource"> <div>
<table mat-table [dataSource]="jitsiRooms.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="id"> <ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef> {{'admin.jitsi_rooms.id' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.jitsi_rooms.id' | i18n}} </th>
<td mat-cell *matCellDef="let room"> {{room.id}} </td> <td mat-cell *matCellDef="let room"> {{room.id}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="owner"> <ng-container matColumnDef="owner">
<th mat-header-cell *matHeaderCellDef> {{'admin.jitsi_rooms.owner' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.jitsi_rooms.owner' | i18n}} </th>
<td mat-cell *matCellDef="let room"> {{room.owner}} </td> <td mat-cell *matCellDef="let room"> {{room.owner}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="room"> <ng-container matColumnDef="room">
<th mat-header-cell *matHeaderCellDef> {{'admin.jitsi_rooms.room' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.jitsi_rooms.room' | i18n}} </th>
<td mat-cell *matCellDef="let room"> {{room.room}} </td> <td mat-cell *matCellDef="let room"> {{room.room}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="starts"> <ng-container matColumnDef="starts">
<th mat-header-cell *matHeaderCellDef> {{'admin.jitsi_rooms.starts' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.jitsi_rooms.starts' | i18n}} </th>
<td mat-cell *matCellDef="let room"> {{room.starts | date:'short'}} </td> <td mat-cell *matCellDef="let room"> {{room.starts | date:'short'}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="moderationStarts"> <ng-container matColumnDef="moderationStarts">
<th mat-header-cell *matHeaderCellDef> {{'admin.jitsi_rooms.moderation_starts' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.jitsi_rooms.moderation_starts' | i18n}} </th>
<td mat-cell *matCellDef="let room"> {{room.moderationStarts | date:'short'}} </td> <td mat-cell *matCellDef="let room"> {{room.moderationStarts | date:'short'}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="expires"> <ng-container matColumnDef="expires">
<th mat-header-cell *matHeaderCellDef> {{'admin.jitsi_rooms.expires' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.jitsi_rooms.expires' | i18n}} </th>
<td mat-cell *matCellDef="let room"> {{room.expires | date:'short'}} </td> <td mat-cell *matCellDef="let room"> {{room.expires | date:'short'}} </td>
</ng-container> </ng-container>
@@ -57,10 +58,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="jitsiRooms.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="jitsiRooms.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -16,11 +16,10 @@ import { AdminJitsiRoomEditDialog } from './jitsi-room.edit';
export class AdminJitsiRoomsComponent implements OnInit { export class AdminJitsiRoomsComponent implements OnInit {
displayedColumns: string[] = ['id', 'owner', 'room', 'starts', 'moderationStarts', 'expires', 'actions']; displayedColumns: string[] = ['id', 'owner', 'room', 'starts', 'moderationStarts', 'expires', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; jitsiRooms: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
@ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatPaginator) paginator: MatPaginator;
@@ -29,7 +28,6 @@ export class AdminJitsiRoomsComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
public dialog: MatDialog public dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource<any>([]);
} }
ngOnInit(): void { ngOnInit(): void {
@@ -37,11 +35,10 @@ export class AdminJitsiRoomsComponent implements OnInit {
} }
loadJitsiRooms(): void { loadJitsiRooms(): void {
this.jitsiRoomManagementService.getJitsiRooms(this.pageIndex, this.pageSize) this.jitsiRoomManagementService.getJitsiRooms(this.page.page, this.page.size)
.subscribe({ .subscribe({
next: (data: any) => { next: (data: any) => {
this.dataSource.data = data.content; this.jitsiRooms = data;
this.totalElements = data.totalElements;
}, },
error: (error) => { error: (error) => {
console.error('Error loading Jitsi rooms:', error); console.error('Error loading Jitsi rooms:', error);
@@ -49,9 +46,20 @@ export class AdminJitsiRoomsComponent implements OnInit {
}); });
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadJitsiRooms();
}
updateSort(sort: any): void {
if (sort.direction == "") {
this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadJitsiRooms(); this.loadJitsiRooms();
} }
@@ -7,21 +7,22 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!minetestAccounts) {
<table mat-table [dataSource]="dataSource"> <div>
<table mat-table [dataSource]="minetestAccounts.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="name"> <ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> {{'admin.minetest_accounts.name' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.minetest_accounts.name' | i18n}} </th>
<td mat-cell *matCellDef="let account"> {{account.name}} </td> <td mat-cell *matCellDef="let account"> {{account.name}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="owner"> <ng-container matColumnDef="owner">
<th mat-header-cell *matHeaderCellDef> {{'admin.minetest_accounts.owner' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.minetest_accounts.owner' | i18n}} </th>
<td mat-cell *matCellDef="let account"> {{account.owner}} </td> <td mat-cell *matCellDef="let account"> {{account.owner}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="created"> <ng-container matColumnDef="created">
<th mat-header-cell *matHeaderCellDef> {{'admin.minetest_accounts.created' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.minetest_accounts.created' | i18n}} </th>
<td mat-cell *matCellDef="let account"> {{account.created | date:'short'}} </td> <td mat-cell *matCellDef="let account"> {{account.created | date:'short'}} </td>
</ng-container> </ng-container>
@@ -42,10 +43,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="minetestAccounts.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="minetestAccounts.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -15,11 +15,10 @@ import { ConfirmDialog } from './../../../ui/confirm/confirm.component';
export class AdminMinetestAccountsComponent implements OnInit { export class AdminMinetestAccountsComponent implements OnInit {
displayedColumns: string[] = ['name', 'owner', 'created', 'actions']; displayedColumns: string[] = ['name', 'owner', 'created', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; minetestAccounts: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
@ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatPaginator) paginator: MatPaginator;
@@ -28,7 +27,6 @@ export class AdminMinetestAccountsComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
public dialog: MatDialog public dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource<any>([]);
} }
ngOnInit(): void { ngOnInit(): void {
@@ -36,11 +34,10 @@ export class AdminMinetestAccountsComponent implements OnInit {
} }
loadMinetestAccounts(): void { loadMinetestAccounts(): void {
this.minetestAccountManagementService.getMinetestAccounts(this.pageIndex, this.pageSize) this.minetestAccountManagementService.getMinetestAccounts(this.page.page, this.page.size)
.subscribe({ .subscribe({
next: (data: any) => { next: (data: any) => {
this.dataSource.data = data.content; this.minetestAccounts = data;
this.totalElements = data.totalElements;
}, },
error: (error) => { error: (error) => {
console.error('Error loading Minetest accounts:', error); console.error('Error loading Minetest accounts:', error);
@@ -48,9 +45,20 @@ export class AdminMinetestAccountsComponent implements OnInit {
}); });
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadMinetestAccounts();
}
updateSort(sort: any): void {
if (sort.direction == "") {
this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadMinetestAccounts(); this.loadMinetestAccounts();
} }
@@ -7,8 +7,9 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!oidcClients) {
<table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)"> <div>
<table mat-table [dataSource]="oidcClients.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="id"> <ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.oidc_clients.id' | i18n}}</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.oidc_clients.id' | i18n}}</th>
<td mat-cell *matCellDef="let client">{{client.id}}</td> <td mat-cell *matCellDef="let client">{{client.id}}</td>
@@ -44,10 +45,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="oidcClients.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="oidcClients.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -16,10 +16,10 @@ import { AdminOidcClientEditDialog } from './oidc-client.edit';
}) })
export class AdminOidcClientsComponent implements OnInit { export class AdminOidcClientsComponent implements OnInit {
displayedColumns: string[] = ['id', 'clientId', 'clientName', 'actions']; displayedColumns: string[] = ['id', 'clientId', 'clientName', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; oidcClients: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
@ViewChild(MatPaginator) paginator!: MatPaginator; @ViewChild(MatPaginator) paginator!: MatPaginator;
@ViewChild(MatSort) sort!: MatSort; @ViewChild(MatSort) sort!: MatSort;
@@ -29,7 +29,6 @@ export class AdminOidcClientsComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
private dialog: MatDialog private dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource();
} }
ngOnInit(): void { ngOnInit(): void {
@@ -37,10 +36,9 @@ export class AdminOidcClientsComponent implements OnInit {
} }
loadClients(): void { loadClients(): void {
this.oidcClientManagementService.getClients(this.pageIndex, this.pageSize).subscribe( this.oidcClientManagementService.getClients(this.page.page, this.page.size).subscribe(
(data: any) => { (data: any) => {
this.dataSource.data = data.content || data; this.oidcClients = data;
this.totalElements = data.totalElements || data.length;
}, },
error => { error => {
console.error('Error loading OIDC clients:', error); console.error('Error loading OIDC clients:', error);
@@ -48,15 +46,21 @@ export class AdminOidcClientsComponent implements OnInit {
); );
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadClients(); this.loadClients();
} }
onSortChange(sort: any): void { updateSort(sort: any): void {
// Sorting can be implemented when backend supports it if (sort.direction == "") {
console.log('Sort change:', sort); this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadClients();
} }
deleteClient(client: any): void { deleteClient(client: any): void {
@@ -7,8 +7,9 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!parteyMaps) {
<table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)"> <div>
<table mat-table [dataSource]="parteyMaps.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="id"> <ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header="id"> {{'admin.partey_maps.id' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header="id"> {{'admin.partey_maps.id' | i18n}} </th>
@@ -47,10 +48,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="parteyMaps.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="parteyMaps.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -16,13 +16,10 @@ import { ConfirmDialog } from './../../../ui/confirm/confirm.component';
export class AdminParteyMapsComponent implements OnInit { export class AdminParteyMapsComponent implements OnInit {
displayedColumns: string[] = ['id', 'name', 'policyType', 'tags', 'actions']; displayedColumns: string[] = ['id', 'name', 'policyType', 'tags', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; parteyMaps: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
sortField = 'id';
sortDescending = false;
@ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort; @ViewChild(MatSort) sort: MatSort;
@@ -32,7 +29,6 @@ export class AdminParteyMapsComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
public dialog: MatDialog public dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource<any>([]);
} }
ngOnInit(): void { ngOnInit(): void {
@@ -40,11 +36,10 @@ export class AdminParteyMapsComponent implements OnInit {
} }
loadParteyMaps(): void { loadParteyMaps(): void {
this.parteyMapManagementService.getParteyMaps(this.pageIndex, this.pageSize, this.sortField, this.sortDescending) this.parteyMapManagementService.getParteyMaps(this.page.page, this.page.size, this.page.sort, this.page.desc)
.subscribe({ .subscribe({
next: (data: any) => { next: (data: any) => {
this.dataSource.data = data.content; this.parteyMaps = data;
this.totalElements = data.totalElements;
}, },
error: (error) => { error: (error) => {
console.error('Error loading Partey maps:', error); console.error('Error loading Partey maps:', error);
@@ -52,15 +47,20 @@ export class AdminParteyMapsComponent implements OnInit {
}); });
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadParteyMaps(); this.loadParteyMaps();
} }
onSortChange(sort: any): void { updateSort(sort: any): void {
this.sortField = sort.active || 'id'; if (sort.direction == "") {
this.sortDescending = sort.direction === 'desc'; this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadParteyMaps(); this.loadParteyMaps();
} }
@@ -7,8 +7,9 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!parteyReports) {
<table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)"> <div>
<table mat-table [dataSource]="parteyReports.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="id"> <ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header="id"> {{'admin.partey_reports.id' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header="id"> {{'admin.partey_reports.id' | i18n}} </th>
@@ -52,10 +53,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="parteyReports.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="parteyReports.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -16,13 +16,10 @@ import { ConfirmDialog } from './../../../ui/confirm/confirm.component';
export class AdminParteyReportsComponent implements OnInit { export class AdminParteyReportsComponent implements OnInit {
displayedColumns: string[] = ['id', 'reporterUserUuid', 'reportedUserUuid', 'reportWorldSlug', 'created', 'actions']; displayedColumns: string[] = ['id', 'reporterUserUuid', 'reportedUserUuid', 'reportWorldSlug', 'created', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; parteyReports: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
sortField = 'id';
sortDescending = false;
@ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort; @ViewChild(MatSort) sort: MatSort;
@@ -32,7 +29,6 @@ export class AdminParteyReportsComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
public dialog: MatDialog public dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource<any>([]);
} }
ngOnInit(): void { ngOnInit(): void {
@@ -40,11 +36,10 @@ export class AdminParteyReportsComponent implements OnInit {
} }
loadParteyReports(): void { loadParteyReports(): void {
this.userReportManagementService.getParteyUserReports(this.pageIndex, this.pageSize, this.sortField, this.sortDescending) this.userReportManagementService.getParteyUserReports(this.page.page, this.page.size, this.page.sort, this.page.desc)
.subscribe({ .subscribe({
next: (data: any) => { next: (data: any) => {
this.dataSource.data = data.content; this.parteyReports = data;
this.totalElements = data.totalElements;
}, },
error: (error) => { error: (error) => {
console.error('Error loading Partey reports:', error); console.error('Error loading Partey reports:', error);
@@ -52,15 +47,20 @@ export class AdminParteyReportsComponent implements OnInit {
}); });
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadParteyReports(); this.loadParteyReports();
} }
onSortChange(sort: any): void { updateSort(sort: any): void {
this.sortField = sort.active || 'id'; if (sort.direction == "") {
this.sortDescending = sort.direction === 'desc'; this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadParteyReports(); this.loadParteyReports();
} }
@@ -7,8 +7,9 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!parteyTags) {
<table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)"> <div>
<table mat-table [dataSource]="parteyTags.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="id"> <ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header="id"> {{'admin.partey_tags.id' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header="id"> {{'admin.partey_tags.id' | i18n}} </th>
@@ -52,10 +53,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="parteyTags.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="parteyTags.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -16,13 +16,10 @@ import { ConfirmDialog } from './../../../ui/confirm/confirm.component';
export class AdminParteyTagsComponent implements OnInit { export class AdminParteyTagsComponent implements OnInit {
displayedColumns: string[] = ['id', 'target', 'name', 'starts', 'expires', 'actions']; displayedColumns: string[] = ['id', 'target', 'name', 'starts', 'expires', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; parteyTags: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "target", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
sortField = 'target';
sortDescending = false;
@ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort; @ViewChild(MatSort) sort: MatSort;
@@ -32,7 +29,6 @@ export class AdminParteyTagsComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
public dialog: MatDialog public dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource<any>([]);
} }
ngOnInit(): void { ngOnInit(): void {
@@ -40,11 +36,10 @@ export class AdminParteyTagsComponent implements OnInit {
} }
loadParteyTags(): void { loadParteyTags(): void {
this.userTagManagementService.getParteyUserTags(this.pageIndex, this.pageSize, this.sortField, this.sortDescending) this.userTagManagementService.getParteyUserTags(this.page.page, this.page.size, this.page.sort, this.page.desc)
.subscribe({ .subscribe({
next: (data: any) => { next: (data: any) => {
this.dataSource.data = data.content; this.parteyTags = data;
this.totalElements = data.totalElements;
}, },
error: (error) => { error: (error) => {
console.error('Error loading Partey tags:', error); console.error('Error loading Partey tags:', error);
@@ -52,15 +47,20 @@ export class AdminParteyTagsComponent implements OnInit {
}); });
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadParteyTags(); this.loadParteyTags();
} }
onSortChange(sort: any): void { updateSort(sort: any): void {
this.sortField = sort.active || 'target'; if (sort.direction == "") {
this.sortDescending = sort.direction === 'desc'; this.page.sort = "target";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadParteyTags(); this.loadParteyTags();
} }
@@ -7,8 +7,9 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!permissionMappings) {
<table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)"> <div>
<table mat-table [dataSource]="permissionMappings.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="id"> <ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.permission_mappings.id' | i18n}}</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.permission_mappings.id' | i18n}}</th>
<td mat-cell *matCellDef="let mapping">{{mapping.id}}</td> <td mat-cell *matCellDef="let mapping">{{mapping.id}}</td>
@@ -51,10 +52,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="permissionMappings.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="permissionMappings.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -16,10 +16,10 @@ import { AdminPermissionMappingEditDialog } from './permission-mapping.edit';
}) })
export class AdminPermissionMappingsComponent implements OnInit { export class AdminPermissionMappingsComponent implements OnInit {
displayedColumns: string[] = ['id', 'item', 'names', 'lifetime', 'product', 'actions']; displayedColumns: string[] = ['id', 'item', 'names', 'lifetime', 'product', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; permissionMappings: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
@ViewChild(MatPaginator) paginator!: MatPaginator; @ViewChild(MatPaginator) paginator!: MatPaginator;
@ViewChild(MatSort) sort!: MatSort; @ViewChild(MatSort) sort!: MatSort;
@@ -29,7 +29,6 @@ export class AdminPermissionMappingsComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
private dialog: MatDialog private dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource();
} }
ngOnInit(): void { ngOnInit(): void {
@@ -37,10 +36,9 @@ export class AdminPermissionMappingsComponent implements OnInit {
} }
loadMappings(): void { loadMappings(): void {
this.permissionMappingManagementService.getPermissionMappings(this.pageIndex, this.pageSize).subscribe( this.permissionMappingManagementService.getPermissionMappings(this.page.page, this.page.size).subscribe(
(data: any) => { (data: any) => {
this.dataSource.data = data.content || data; this.permissionMappings = data;
this.totalElements = data.totalElements || data.length;
}, },
error => { error => {
console.error('Error loading permission mappings:', error); console.error('Error loading permission mappings:', error);
@@ -48,15 +46,21 @@ export class AdminPermissionMappingsComponent implements OnInit {
); );
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadMappings(); this.loadMappings();
} }
onSortChange(sort: any): void { updateSort(sort: any): void {
// Sorting can be implemented when backend supports it if (sort.direction == "") {
console.log('Sort change:', sort); this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadMappings();
} }
createMapping(): void { createMapping(): void {
@@ -17,7 +17,7 @@
<div> <div>
@if (permissions.length > 0) { @if (permissions.length > 0) {
<div class="mat-elevation-z8"> <div>
<table mat-table [dataSource]="permissions"> <table mat-table [dataSource]="permissions">
<ng-container matColumnDef="id"> <ng-container matColumnDef="id">
@@ -7,8 +7,9 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!quotaMappings) {
<table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)"> <div>
<table mat-table [dataSource]="quotaMappings.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="id"> <ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.quota_mappings.id' | i18n}}</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.quota_mappings.id' | i18n}}</th>
<td mat-cell *matCellDef="let mapping">{{mapping.id}}</td> <td mat-cell *matCellDef="let mapping">{{mapping.id}}</td>
@@ -51,10 +52,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="quotaMappings.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="quotaMappings.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -16,10 +16,10 @@ import { AdminQuotaMappingEditDialog } from './quota-mapping.edit';
}) })
export class AdminQuotaMappingsComponent implements OnInit { export class AdminQuotaMappingsComponent implements OnInit {
displayedColumns: string[] = ['id', 'name', 'value', 'unit', 'items', 'actions']; displayedColumns: string[] = ['id', 'name', 'value', 'unit', 'items', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; quotaMappings: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
@ViewChild(MatPaginator) paginator!: MatPaginator; @ViewChild(MatPaginator) paginator!: MatPaginator;
@ViewChild(MatSort) sort!: MatSort; @ViewChild(MatSort) sort!: MatSort;
@@ -29,7 +29,6 @@ export class AdminQuotaMappingsComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
private dialog: MatDialog private dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource();
} }
ngOnInit(): void { ngOnInit(): void {
@@ -37,10 +36,9 @@ export class AdminQuotaMappingsComponent implements OnInit {
} }
loadMappings(): void { loadMappings(): void {
this.quotaMappingManagementService.getQuotaMappings(this.pageIndex, this.pageSize).subscribe( this.quotaMappingManagementService.getQuotaMappings(this.page.page, this.page.size).subscribe(
(data: any) => { (data: any) => {
this.dataSource.data = data.content || data; this.quotaMappings = data;
this.totalElements = data.totalElements || data.length;
}, },
error => { error => {
console.error('Error loading quota mappings:', error); console.error('Error loading quota mappings:', error);
@@ -48,15 +46,21 @@ export class AdminQuotaMappingsComponent implements OnInit {
); );
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadMappings(); this.loadMappings();
} }
onSortChange(sort: any): void { updateSort(sort: any): void {
// Sorting can be implemented when backend supports it if (sort.direction == "") {
console.log('Sort change:', sort); this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadMappings();
} }
createMapping(): void { createMapping(): void {
@@ -17,7 +17,7 @@
<div> <div>
@if (quotas.length > 0) { @if (quotas.length > 0) {
<div class="mat-elevation-z8"> <div>
<table mat-table [dataSource]="quotas"> <table mat-table [dataSource]="quotas">
<ng-container matColumnDef="id"> <ng-container matColumnDef="id">
@@ -7,26 +7,27 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!services) {
<table mat-table [dataSource]="dataSource"> <div>
<table mat-table [dataSource]="services.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="name"> <ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> {{'admin.services.name' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.services.name' | i18n}} </th>
<td mat-cell *matCellDef="let service"> {{service.name}} </td> <td mat-cell *matCellDef="let service"> {{service.name}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="url"> <ng-container matColumnDef="url">
<th mat-header-cell *matHeaderCellDef> {{'admin.services.url' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.services.url' | i18n}} </th>
<td mat-cell *matCellDef="let service"> {{service.url}} </td> <td mat-cell *matCellDef="let service"> {{service.url}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="category"> <ng-container matColumnDef="category">
<th mat-header-cell *matHeaderCellDef> {{'admin.services.category' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.services.category' | i18n}} </th>
<td mat-cell *matCellDef="let service"> {{service.category}} </td> <td mat-cell *matCellDef="let service"> {{service.category}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="permission"> <ng-container matColumnDef="permission">
<th mat-header-cell *matHeaderCellDef> {{'admin.services.permission' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.services.permission' | i18n}} </th>
<td mat-cell *matCellDef="let service"> {{service.permission}} </td> <td mat-cell *matCellDef="let service"> {{service.permission}} </td>
</ng-container> </ng-container>
@@ -47,10 +48,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="services.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="services.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -16,11 +16,10 @@ import { AdminServiceEditDialog } from './service.edit';
export class AdminServicesComponent implements OnInit { export class AdminServicesComponent implements OnInit {
displayedColumns: string[] = ['name', 'url', 'category', 'permission', 'actions']; displayedColumns: string[] = ['name', 'url', 'category', 'permission', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; services: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
@ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatPaginator) paginator: MatPaginator;
@@ -29,7 +28,6 @@ export class AdminServicesComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
public dialog: MatDialog public dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource<any>([]);
} }
ngOnInit(): void { ngOnInit(): void {
@@ -37,11 +35,10 @@ export class AdminServicesComponent implements OnInit {
} }
loadServices(): void { loadServices(): void {
this.serviceManagementService.getAllServices(this.pageIndex, this.pageSize) this.serviceManagementService.getAllServices(this.page.page, this.page.size)
.subscribe({ .subscribe({
next: (data: any) => { next: (data: any) => {
this.dataSource.data = data.content; this.services = data;
this.totalElements = data.totalElements;
}, },
error: (error) => { error: (error) => {
console.error('Error loading services:', error); console.error('Error loading services:', error);
@@ -49,9 +46,20 @@ export class AdminServicesComponent implements OnInit {
}); });
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadServices();
}
updateSort(sort: any): void {
if (sort.direction == "") {
this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadServices(); this.loadServices();
} }
@@ -24,26 +24,27 @@
<br> <br>
<div class="mat-elevation-z8"> @if (!!shortenedUrls) {
<table mat-table [dataSource]="dataSource"> <div>
<table mat-table [dataSource]="shortenedUrls.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="code"> <ng-container matColumnDef="code">
<th mat-header-cell *matHeaderCellDef> {{'admin.shortened_urls.code' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.shortened_urls.code' | i18n}} </th>
<td mat-cell *matCellDef="let url"> {{url.code}} </td> <td mat-cell *matCellDef="let url"> {{url.code}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="url"> <ng-container matColumnDef="url">
<th mat-header-cell *matHeaderCellDef> {{'admin.shortened_urls.url' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.shortened_urls.url' | i18n}} </th>
<td mat-cell *matCellDef="let url"> {{url.url}} </td> <td mat-cell *matCellDef="let url"> {{url.url}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="owner"> <ng-container matColumnDef="owner">
<th mat-header-cell *matHeaderCellDef> {{'admin.shortened_urls.owner' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.shortened_urls.owner' | i18n}} </th>
<td mat-cell *matCellDef="let url"> {{url.owner}} </td> <td mat-cell *matCellDef="let url"> {{url.owner}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="created"> <ng-container matColumnDef="created">
<th mat-header-cell *matHeaderCellDef> {{'admin.shortened_urls.created' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.shortened_urls.created' | i18n}} </th>
<td mat-cell *matCellDef="let url"> {{url.created | date:'short'}} </td> <td mat-cell *matCellDef="let url"> {{url.created | date:'short'}} </td>
</ng-container> </ng-container>
@@ -64,10 +65,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="shortenedUrls.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="shortenedUrls.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -17,12 +17,11 @@ import { AdminShortenedUrlEditDialog } from './shortened-url.edit';
export class AdminShortenedUrlsComponent implements OnInit { export class AdminShortenedUrlsComponent implements OnInit {
displayedColumns: string[] = ['code', 'url', 'owner', 'created', 'actions']; displayedColumns: string[] = ['code', 'url', 'owner', 'created', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; shortenedUrls: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0;
searchText: string = ''; searchText: string = '';
pageSizeOptions: number[] = [5, 10, 25, 50];
searchForm: FormGroup; searchForm: FormGroup;
@@ -34,7 +33,6 @@ export class AdminShortenedUrlsComponent implements OnInit {
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
public dialog: MatDialog public dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource<any>([]);
this.searchForm = this.formBuilder.group({ this.searchForm = this.formBuilder.group({
search: [''] search: ['']
}); });
@@ -45,11 +43,10 @@ export class AdminShortenedUrlsComponent implements OnInit {
} }
loadShortenedUrls(): void { loadShortenedUrls(): void {
this.shortenedUrlManagementService.getShortenedUrls(this.pageIndex, this.pageSize, this.searchText) this.shortenedUrlManagementService.getShortenedUrls(this.page.page, this.page.size, this.searchText)
.subscribe({ .subscribe({
next: (data: any) => { next: (data: any) => {
this.dataSource.data = data.content; this.shortenedUrls = data;
this.totalElements = data.totalElements;
}, },
error: (error) => { error: (error) => {
console.error('Error loading shortened URLs:', error); console.error('Error loading shortened URLs:', error);
@@ -57,15 +54,26 @@ export class AdminShortenedUrlsComponent implements OnInit {
}); });
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadShortenedUrls();
}
updateSort(sort: any): void {
if (sort.direction == "") {
this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadShortenedUrls(); this.loadShortenedUrls();
} }
onSearch(): void { onSearch(): void {
this.searchText = this.searchForm.value.search; this.searchText = this.searchForm.value.search;
this.pageIndex = 0; this.page.page = 0;
this.loadShortenedUrls(); this.loadShortenedUrls();
} }
@@ -7,8 +7,9 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!systemProfileFields) {
<table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)"> <div>
<table mat-table [dataSource]="systemProfileFields.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="name"> <ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.system_profile_fields.name' | i18n}}</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.system_profile_fields.name' | i18n}}</th>
<td mat-cell *matCellDef="let field">{{field.name}}</td> <td mat-cell *matCellDef="let field">{{field.name}}</td>
@@ -41,10 +42,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="systemProfileFields.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="systemProfileFields.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -16,10 +16,10 @@ import { AdminSystemProfileFieldEditDialog } from './system-profile-field.edit';
}) })
export class AdminSystemProfileFieldsComponent implements OnInit { export class AdminSystemProfileFieldsComponent implements OnInit {
displayedColumns: string[] = ['name', 'type', 'uniqueValue', 'actions']; displayedColumns: string[] = ['name', 'type', 'uniqueValue', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; systemProfileFields: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
@ViewChild(MatPaginator) paginator!: MatPaginator; @ViewChild(MatPaginator) paginator!: MatPaginator;
@ViewChild(MatSort) sort!: MatSort; @ViewChild(MatSort) sort!: MatSort;
@@ -29,7 +29,6 @@ export class AdminSystemProfileFieldsComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
private dialog: MatDialog private dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource();
} }
ngOnInit(): void { ngOnInit(): void {
@@ -37,10 +36,9 @@ export class AdminSystemProfileFieldsComponent implements OnInit {
} }
loadFields(): void { loadFields(): void {
this.systemProfileFieldManagementService.getSystemProfileFields(this.pageIndex, this.pageSize).subscribe( this.systemProfileFieldManagementService.getSystemProfileFields(this.page.page, this.page.size).subscribe(
(data: any) => { (data: any) => {
this.dataSource.data = data.content || data; this.systemProfileFields = data;
this.totalElements = data.totalElements || data.length;
}, },
error => { error => {
console.error('Error loading system profile fields:', error); console.error('Error loading system profile fields:', error);
@@ -48,15 +46,21 @@ export class AdminSystemProfileFieldsComponent implements OnInit {
); );
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadFields(); this.loadFields();
} }
onSortChange(sort: any): void { updateSort(sort: any): void {
// Sorting can be implemented when backend supports it if (sort.direction == "") {
console.log('Sort change:', sort); this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadFields();
} }
deleteField(field: any): void { deleteField(field: any): void {
@@ -10,8 +10,9 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!systemProperties) {
<table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)"> <div>
<table mat-table [dataSource]="systemProperties.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="key"> <ng-container matColumnDef="key">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.system_properties.key' | i18n}}</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.system_properties.key' | i18n}}</th>
<td mat-cell *matCellDef="let property">{{property.key}}</td> <td mat-cell *matCellDef="let property">{{property.key}}</td>
@@ -39,10 +40,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="systemProperties.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="systemProperties.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -16,10 +16,10 @@ import { AdminSystemPropertyEditDialog } from './system-property.edit';
}) })
export class AdminSystemPropertiesComponent implements OnInit { export class AdminSystemPropertiesComponent implements OnInit {
displayedColumns: string[] = ['key', 'value', 'actions']; displayedColumns: string[] = ['key', 'value', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; systemProperties: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
@ViewChild(MatPaginator) paginator!: MatPaginator; @ViewChild(MatPaginator) paginator!: MatPaginator;
@ViewChild(MatSort) sort!: MatSort; @ViewChild(MatSort) sort!: MatSort;
@@ -29,7 +29,6 @@ export class AdminSystemPropertiesComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
private dialog: MatDialog private dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource();
} }
ngOnInit(): void { ngOnInit(): void {
@@ -37,10 +36,9 @@ export class AdminSystemPropertiesComponent implements OnInit {
} }
loadProperties(): void { loadProperties(): void {
this.systemManagementService.getProperties(this.pageIndex, this.pageSize).subscribe( this.systemManagementService.getProperties(this.page.page, this.page.size).subscribe(
(data: any) => { (data: any) => {
this.dataSource.data = data.content || data; this.systemProperties = data;
this.totalElements = data.totalElements || data.length;
}, },
error => { error => {
console.error('Error loading system properties:', error); console.error('Error loading system properties:', error);
@@ -48,15 +46,21 @@ export class AdminSystemPropertiesComponent implements OnInit {
); );
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadProperties(); this.loadProperties();
} }
onSortChange(sort: any): void { updateSort(sort: any): void {
// Sorting can be implemented when backend supports it if (sort.direction == "") {
console.log('Sort change:', sort); this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadProperties();
} }
deleteProperty(property: any): void { deleteProperty(property: any): void {
@@ -53,8 +53,9 @@
<br> <br>
<div class="mat-elevation-z8"> @if (!!timeslots) {
<table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)"> <div>
<table mat-table [dataSource]="timeslots.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="id"> <ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header="id"> {{'admin.timeslots.id' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header="id"> {{'admin.timeslots.id' | i18n}} </th>
@@ -62,32 +63,32 @@
</ng-container> </ng-container>
<ng-container matColumnDef="owner"> <ng-container matColumnDef="owner">
<th mat-header-cell *matHeaderCellDef> {{'admin.timeslots.owner' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.timeslots.owner' | i18n}} </th>
<td mat-cell *matCellDef="let timeslot"> {{timeslot.owner}} </td> <td mat-cell *matCellDef="let timeslot"> {{timeslot.owner}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="title"> <ng-container matColumnDef="title">
<th mat-header-cell *matHeaderCellDef> {{'admin.timeslots.title' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.timeslots.title' | i18n}} </th>
<td mat-cell *matCellDef="let timeslot"> {{timeslot.title}} </td> <td mat-cell *matCellDef="let timeslot"> {{timeslot.title}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="type"> <ng-container matColumnDef="type">
<th mat-header-cell *matHeaderCellDef> {{'admin.timeslots.type' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.timeslots.type' | i18n}} </th>
<td mat-cell *matCellDef="let timeslot"> {{timeslot.type}} </td> <td mat-cell *matCellDef="let timeslot"> {{timeslot.type}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="visibility"> <ng-container matColumnDef="visibility">
<th mat-header-cell *matHeaderCellDef> {{'admin.timeslots.visibility' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.timeslots.visibility' | i18n}} </th>
<td mat-cell *matCellDef="let timeslot"> {{timeslot.visibility}} </td> <td mat-cell *matCellDef="let timeslot"> {{timeslot.visibility}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="start"> <ng-container matColumnDef="start">
<th mat-header-cell *matHeaderCellDef> {{'admin.timeslots.start' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.timeslots.start' | i18n}} </th>
<td mat-cell *matCellDef="let timeslot"> {{timeslot.start | date:'short'}} </td> <td mat-cell *matCellDef="let timeslot"> {{timeslot.start | date:'short'}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="end"> <ng-container matColumnDef="end">
<th mat-header-cell *matHeaderCellDef> {{'admin.timeslots.end' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> {{'admin.timeslots.end' | i18n}} </th>
<td mat-cell *matCellDef="let timeslot"> {{timeslot.end | date:'short'}} </td> <td mat-cell *matCellDef="let timeslot"> {{timeslot.end | date:'short'}} </td>
</ng-container> </ng-container>
@@ -108,10 +109,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="timeslots.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="timeslots.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -17,13 +17,10 @@ import { ConfirmDialog } from './../../../ui/confirm/confirm.component';
export class AdminTimeslotsComponent implements OnInit { export class AdminTimeslotsComponent implements OnInit {
displayedColumns: string[] = ['id', 'owner', 'title', 'type', 'visibility', 'start', 'end', 'actions']; displayedColumns: string[] = ['id', 'owner', 'title', 'type', 'visibility', 'start', 'end', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; timeslots: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
sortField = 'id';
sortDescending = false;
filterForm: FormGroup; filterForm: FormGroup;
@@ -36,7 +33,6 @@ export class AdminTimeslotsComponent implements OnInit {
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
public dialog: MatDialog public dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource<any>([]);
this.filterForm = this.formBuilder.group({ this.filterForm = this.formBuilder.group({
owner: [''], owner: [''],
type: [''], type: [''],
@@ -52,10 +48,10 @@ export class AdminTimeslotsComponent implements OnInit {
loadTimeslots(): void { loadTimeslots(): void {
const filters = this.filterForm.value; const filters = this.filterForm.value;
this.timeslotManagementService.getTimeslots( this.timeslotManagementService.getTimeslots(
this.pageIndex, this.page.page,
this.pageSize, this.page.size,
this.sortField, this.page.sort,
this.sortDescending, this.page.desc,
filters.owner || undefined, filters.owner || undefined,
undefined, undefined,
undefined, undefined,
@@ -64,8 +60,7 @@ export class AdminTimeslotsComponent implements OnInit {
filters.search || undefined filters.search || undefined
).subscribe({ ).subscribe({
next: (data: any) => { next: (data: any) => {
this.dataSource.data = data.content; this.timeslots = data;
this.totalElements = data.totalElements;
}, },
error: (error) => { error: (error) => {
console.error('Error loading timeslots:', error); console.error('Error loading timeslots:', error);
@@ -73,20 +68,25 @@ export class AdminTimeslotsComponent implements OnInit {
}); });
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadTimeslots(); this.loadTimeslots();
} }
onSortChange(sort: any): void { updateSort(sort: any): void {
this.sortField = sort.active || 'id'; if (sort.direction == "") {
this.sortDescending = sort.direction === 'desc'; this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadTimeslots(); this.loadTimeslots();
} }
applyFilter(): void { applyFilter(): void {
this.pageIndex = 0; this.page.page = 0;
this.loadTimeslots(); this.loadTimeslots();
} }
@@ -7,8 +7,9 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!userAliases) {
<table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)"> <div>
<table mat-table [dataSource]="userAliases.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="id"> <ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.user_aliases.id' | i18n}}</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.user_aliases.id' | i18n}}</th>
<td mat-cell *matCellDef="let alias">{{alias.id}}</td> <td mat-cell *matCellDef="let alias">{{alias.id}}</td>
@@ -20,12 +21,12 @@
</ng-container> </ng-container>
<ng-container matColumnDef="target"> <ng-container matColumnDef="target">
<th mat-header-cell *matHeaderCellDef>{{'admin.user_aliases.target' | i18n}}</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.user_aliases.target' | i18n}}</th>
<td mat-cell *matCellDef="let alias">{{alias.target}}</td> <td mat-cell *matCellDef="let alias">{{alias.target}}</td>
</ng-container> </ng-container>
<ng-container matColumnDef="visibility"> <ng-container matColumnDef="visibility">
<th mat-header-cell *matHeaderCellDef>{{'admin.user_aliases.visibility' | i18n}}</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.user_aliases.visibility' | i18n}}</th>
<td mat-cell *matCellDef="let alias">{{alias.visibility}}</td> <td mat-cell *matCellDef="let alias">{{alias.visibility}}</td>
</ng-container> </ng-container>
@@ -46,10 +47,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="userAliases.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="userAliases.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -16,10 +16,10 @@ import { AdminUserAliasEditDialog } from './user-alias.edit';
}) })
export class AdminUserAliasesComponent implements OnInit { export class AdminUserAliasesComponent implements OnInit {
displayedColumns: string[] = ['id', 'alias', 'target', 'visibility', 'actions']; displayedColumns: string[] = ['id', 'alias', 'target', 'visibility', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; userAliases: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
@ViewChild(MatPaginator) paginator!: MatPaginator; @ViewChild(MatPaginator) paginator!: MatPaginator;
@ViewChild(MatSort) sort!: MatSort; @ViewChild(MatSort) sort!: MatSort;
@@ -29,7 +29,6 @@ export class AdminUserAliasesComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
private dialog: MatDialog private dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource();
} }
ngOnInit(): void { ngOnInit(): void {
@@ -37,10 +36,9 @@ export class AdminUserAliasesComponent implements OnInit {
} }
loadAliases(): void { loadAliases(): void {
this.userAliasManagementService.getAliases(this.pageIndex, this.pageSize).subscribe( this.userAliasManagementService.getAliases(this.page.page, this.page.size).subscribe(
(data: any) => { (data: any) => {
this.dataSource.data = data.content || data; this.userAliases = data;
this.totalElements = data.totalElements || data.length;
}, },
error => { error => {
console.error('Error loading user aliases:', error); console.error('Error loading user aliases:', error);
@@ -48,15 +46,21 @@ export class AdminUserAliasesComponent implements OnInit {
); );
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadAliases(); this.loadAliases();
} }
onSortChange(sort: any): void { updateSort(sort: any): void {
// Sorting can be implemented when backend supports it if (sort.direction == "") {
console.log('Sort change:', sort); this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadAliases();
} }
deleteAlias(alias: any): void { deleteAlias(alias: any): void {
+10 -15
View File
@@ -7,8 +7,9 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!users) {
<table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)"> <div>
<table mat-table [dataSource]="users.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="id"> <ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header="id"> {{'admin.users.id' | i18n}} </th> <th mat-header-cell *matHeaderCellDef mat-sort-header="id"> {{'admin.users.id' | i18n}} </th>
@@ -25,21 +26,18 @@
<td mat-cell *matCellDef="let user"> {{user.status}} </td> <td mat-cell *matCellDef="let user"> {{user.status}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="created">
<th mat-header-cell *matHeaderCellDef mat-sort-header="created"> {{'admin.users.created' | i18n}} </th>
<td mat-cell *matCellDef="let user"> {{user.created | date:'short'}} </td>
</ng-container>
<ng-container matColumnDef="actions"> <ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef> {{'admin.actions' | i18n}} </th> <th mat-header-cell *matHeaderCellDef> {{'admin.actions' | i18n}} </th>
<td mat-cell *matCellDef="let user"> <td mat-cell *matCellDef="let user">
<button mat-icon-button (click)="editUser(user)" [title]="'admin.users.edit' | i18n"> <button mat-icon-button (click)="editUser(user)" [title]="'admin.users.edit' | i18n">
<mat-icon>edit</mat-icon> <mat-icon>edit</mat-icon>
</button> </button>
<button mat-icon-button [routerLink]="['/admin/permissions']" [queryParams]="{username: user.username}" [title]="'admin.users.view_permissions' | i18n"> <button mat-icon-button [routerLink]="['/admin/permissions']" [queryParams]="{username: user.username}"
[title]="'admin.users.view_permissions' | i18n">
<mat-icon>security</mat-icon> <mat-icon>security</mat-icon>
</button> </button>
<button mat-icon-button [routerLink]="['/admin/quotas']" [queryParams]="{username: user.username}" [title]="'admin.users.view_quotas' | i18n"> <button mat-icon-button [routerLink]="['/admin/quotas']" [queryParams]="{username: user.username}"
[title]="'admin.users.view_quotas' | i18n">
<mat-icon>data_usage</mat-icon> <mat-icon>data_usage</mat-icon>
</button> </button>
<button mat-icon-button (click)="deleteUser(user.username)" [title]="'admin.users.delete' | i18n"> <button mat-icon-button (click)="deleteUser(user.username)" [title]="'admin.users.delete' | i18n">
@@ -52,11 +50,8 @@
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr> <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table> </table>
<mat-paginator <mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="users.page.totalElements" [pageSize]="users.page.size"
[length]="totalElements" (page)="updatePages($event)" showFirstLastButtons>
[pageSize]="pageSize"
[pageSizeOptions]="[5, 10, 25, 50, 100]"
(page)="onPageChange($event)"
showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
+21 -22
View File
@@ -1,10 +1,9 @@
import { Component, OnInit, ViewChild } from '@angular/core'; import { Component, OnInit, ViewChild } from '@angular/core';
import { MatPaginator, PageEvent } from '@angular/material/paginator';
import { MatSort } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';
import { MatDialog } from '@angular/material/dialog'; import { MatDialog } from '@angular/material/dialog';
import { I18nService } from './../../../services/i18n.service'; import { MatPaginator, PageEvent } from '@angular/material/paginator';
import { MatSort, Sort } from '@angular/material/sort';
import { UserManagementService } from '../../../services/admin/user.management.service'; import { UserManagementService } from '../../../services/admin/user.management.service';
import { I18nService } from './../../../services/i18n.service';
import { ConfirmDialog } from './../../../ui/confirm/confirm.component'; import { ConfirmDialog } from './../../../ui/confirm/confirm.component';
import { AdminUserEditDialog } from './user.edit'; import { AdminUserEditDialog } from './user.edit';
@@ -16,14 +15,11 @@ import { AdminUserEditDialog } from './user.edit';
}) })
export class AdminUsersComponent implements OnInit { export class AdminUsersComponent implements OnInit {
displayedColumns: string[] = ['id', 'username', 'status', 'created', 'actions']; displayedColumns: string[] = ['id', 'username', 'status', 'actions'];
dataSource: MatTableDataSource<any>;
users: any;
totalElements = 0; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageSize = 10; pageSizeOptions: number[] = [5, 10, 25, 50];
pageIndex = 0;
sortField = 'username';
sortDescending = false;
@ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort; @ViewChild(MatSort) sort: MatSort;
@@ -33,7 +29,6 @@ export class AdminUsersComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
public dialog: MatDialog public dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource<any>([]);
} }
ngOnInit(): void { ngOnInit(): void {
@@ -41,11 +36,10 @@ export class AdminUsersComponent implements OnInit {
} }
loadUsers(): void { loadUsers(): void {
this.userManagementService.getUsers(this.pageIndex, this.pageSize, this.sortField, this.sortDescending) this.userManagementService.getUsers(this.page.page, this.page.size, this.page.sort, this.page.desc)
.subscribe({ .subscribe({
next: (data: any) => { next: (data: any) => {
this.dataSource.data = data.content; this.users = data;
this.totalElements = data.totalElements;
}, },
error: (error) => { error: (error) => {
console.error('Error loading users:', error); console.error('Error loading users:', error);
@@ -53,15 +47,20 @@ export class AdminUsersComponent implements OnInit {
}); });
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadUsers(); this.loadUsers();
} }
onSortChange(sort: any): void { updateSort(sort: Sort): void {
this.sortField = sort.active || 'username'; if (sort.direction == "") {
this.sortDescending = sort.direction === 'desc'; this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadUsers(); this.loadUsers();
} }
@@ -7,8 +7,9 @@
</button> </button>
</header> </header>
<div class="mat-elevation-z8"> @if (!!voucherMappings) {
<table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)"> <div>
<table mat-table [dataSource]="voucherMappings.content" matSort (matSortChange)="updateSort($event)">
<ng-container matColumnDef="id"> <ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.voucher_mappings.id' | i18n}}</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'admin.voucher_mappings.id' | i18n}}</th>
<td mat-cell *matCellDef="let mapping">{{mapping.id}}</td> <td mat-cell *matCellDef="let mapping">{{mapping.id}}</td>
@@ -51,10 +52,11 @@
</table> </table>
<mat-paginator <mat-paginator
[length]="totalElements" [pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize" [length]="voucherMappings.page.totalElements"
[pageSizeOptions]="[5, 10, 25, 50, 100]" [pageSize]="voucherMappings.page.size"
(page)="onPageChange($event)" (page)="updatePages($event)"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div> </div>
}
@@ -16,10 +16,10 @@ import { AdminVoucherMappingEditDialog } from './voucher-mapping.edit';
}) })
export class AdminVoucherMappingsComponent implements OnInit { export class AdminVoucherMappingsComponent implements OnInit {
displayedColumns: string[] = ['id', 'name', 'voucher', 'quota', 'free', 'actions']; displayedColumns: string[] = ['id', 'name', 'voucher', 'quota', 'free', 'actions'];
dataSource: MatTableDataSource<any>;
totalElements = 0; voucherMappings: any;
pageSize = 10; page: any = { page: 0, size: 10, sort: "id", desc: false };
pageIndex = 0; pageSizeOptions: number[] = [5, 10, 25, 50];
@ViewChild(MatPaginator) paginator!: MatPaginator; @ViewChild(MatPaginator) paginator!: MatPaginator;
@ViewChild(MatSort) sort!: MatSort; @ViewChild(MatSort) sort!: MatSort;
@@ -29,7 +29,6 @@ export class AdminVoucherMappingsComponent implements OnInit {
private i18n: I18nService, private i18n: I18nService,
private dialog: MatDialog private dialog: MatDialog
) { ) {
this.dataSource = new MatTableDataSource();
} }
ngOnInit(): void { ngOnInit(): void {
@@ -37,10 +36,9 @@ export class AdminVoucherMappingsComponent implements OnInit {
} }
loadMappings(): void { loadMappings(): void {
this.voucherMappingManagementService.getVoucherMappings(this.pageIndex, this.pageSize).subscribe( this.voucherMappingManagementService.getVoucherMappings(this.page.page, this.page.size).subscribe(
(data: any) => { (data: any) => {
this.dataSource.data = data.content || data; this.voucherMappings = data;
this.totalElements = data.totalElements || data.length;
}, },
error => { error => {
console.error('Error loading voucher mappings:', error); console.error('Error loading voucher mappings:', error);
@@ -48,15 +46,21 @@ export class AdminVoucherMappingsComponent implements OnInit {
); );
} }
onPageChange(event: PageEvent): void { updatePages(event: PageEvent): void {
this.pageIndex = event.pageIndex; this.page.page = event.pageIndex;
this.pageSize = event.pageSize; this.page.size = event.pageSize;
this.loadMappings(); this.loadMappings();
} }
onSortChange(sort: any): void { updateSort(sort: any): void {
// Sorting can be implemented when backend supports it if (sort.direction == "") {
console.log('Sort change:', sort); this.page.sort = "id";
this.page.desc = false;
} else {
this.page.sort = sort.active;
this.page.desc = sort.direction == "desc";
}
this.loadMappings();
} }
deleteMapping(mapping: any): void { deleteMapping(mapping: any): void {
@@ -62,7 +62,7 @@
<tr mat-header-row *matHeaderRowDef="borrowItemColumns"></tr> <tr mat-header-row *matHeaderRowDef="borrowItemColumns"></tr>
<tr mat-row *matRowDef="let myRowData; columns: borrowItemColumns"></tr> <tr mat-row *matRowDef="let myRowData; columns: borrowItemColumns"></tr>
</table> </table>
<mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="borrowItems.totalElements" [pageSize]="borrowItems.size" <mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="borrowItems.page.totalElements" [pageSize]="borrowItems.page.size"
(page)="updatePages($event)" showFirstLastButtons></mat-paginator> (page)="updatePages($event)" showFirstLastButtons></mat-paginator>
</div> </div>
} }
@@ -47,7 +47,7 @@
<tr mat-header-row *matHeaderRowDef="borrowRequestColumns"></tr> <tr mat-header-row *matHeaderRowDef="borrowRequestColumns"></tr>
<tr mat-row *matRowDef="let myRowData; columns: borrowRequestColumns"></tr> <tr mat-row *matRowDef="let myRowData; columns: borrowRequestColumns"></tr>
</table> </table>
<mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="borrowRequests.totalElements" <mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="borrowRequests.page.totalElements"
[pageSize]="borrowRequests.size" (page)="updatePages($event)" showFirstLastButtons></mat-paginator> [pageSize]="borrowRequests.page.size" (page)="updatePages($event)" showFirstLastButtons></mat-paginator>
</div> </div>
} }
+2 -2
View File
@@ -91,7 +91,7 @@
<tr mat-header-row *matHeaderRowDef="inviteColumns"></tr> <tr mat-header-row *matHeaderRowDef="inviteColumns"></tr>
<tr mat-row *matRowDef="let myRowData; columns: inviteColumns"></tr> <tr mat-row *matRowDef="let myRowData; columns: inviteColumns"></tr>
</table> </table>
<mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="invites.totalElements" [pageSize]="invites.size" <mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="invites.page.totalElements" [pageSize]="invites.page.size"
(page)="updatePages($event)" showFirstLastButtons></mat-paginator> (page)="updatePages($event)" showFirstLastButtons></mat-paginator>
</div> </div>
} }
@@ -176,7 +176,7 @@
<tr mat-header-row *matHeaderRowDef="otherColumns"></tr> <tr mat-header-row *matHeaderRowDef="otherColumns"></tr>
<tr mat-row *matRowDef="let myRowData; columns: otherColumns"></tr> <tr mat-row *matRowDef="let myRowData; columns: otherColumns"></tr>
</table> </table>
<mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="others.totalElements" [pageSize]="others.size" <mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="others.page.totalElements" [pageSize]="others.page.size"
(page)="updateOthers($event)" showFirstLastButtons></mat-paginator> (page)="updateOthers($event)" showFirstLastButtons></mat-paginator>
</div> </div>
} }
+1 -1
View File
@@ -86,7 +86,7 @@
<tr mat-header-row *matHeaderRowDef="jitsiRoomsColumns"></tr> <tr mat-header-row *matHeaderRowDef="jitsiRoomsColumns"></tr>
<tr mat-row *matRowDef="let myRowData; columns: jitsiRoomsColumns"></tr> <tr mat-row *matRowDef="let myRowData; columns: jitsiRoomsColumns"></tr>
</table> </table>
<mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="jitsiRooms.totalElements" [pageSize]="jitsiRooms.size" <mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="jitsiRooms.page.totalElements" [pageSize]="jitsiRooms.page.size"
(page)="updatePages($event)" showFirstLastButtons></mat-paginator> (page)="updatePages($event)" showFirstLastButtons></mat-paginator>
</div> </div>
} }
@@ -116,7 +116,7 @@
<tr mat-header-row *matHeaderRowDef="timeslotsColumns"></tr> <tr mat-header-row *matHeaderRowDef="timeslotsColumns"></tr>
<tr mat-row *matRowDef="let myRowData; columns: timeslotsColumns"></tr> <tr mat-row *matRowDef="let myRowData; columns: timeslotsColumns"></tr>
</table> </table>
<mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="timeslots.totalElements" [pageSize]="timeslots.size" <mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="timeslots.page.totalElements" [pageSize]="timeslots.page.size"
(page)="updatePages($event)" showFirstLastButtons></mat-paginator> (page)="updatePages($event)" showFirstLastButtons></mat-paginator>
</div> </div>
} }
@@ -68,8 +68,8 @@
<tr mat-header-row *matHeaderRowDef="shortenedUrlColumns"></tr> <tr mat-header-row *matHeaderRowDef="shortenedUrlColumns"></tr>
<tr mat-row *matRowDef="let myRowData; columns: shortenedUrlColumns"></tr> <tr mat-row *matRowDef="let myRowData; columns: shortenedUrlColumns"></tr>
</table> </table>
<mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="shortenedUrls.totalElements" <mat-paginator [pageSizeOptions]="pageSizeOptions" [length]="shortenedUrls.page.totalElements"
[pageSize]="shortenedUrls.size" (page)="updatePages($event)" showFirstLastButtons></mat-paginator> [pageSize]="shortenedUrls.page.size" (page)="updatePages($event)" showFirstLastButtons></mat-paginator>
</div> </div>
} }