Skip to content

Commit e859ab1

Browse files
PR changes - fixed pagination for multicast
1 parent 5780eae commit e859ab1

File tree

6 files changed

+54
-41
lines changed

6 files changed

+54
-41
lines changed

src/app/applications/application-detail/application-detail.component.html

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<div *ngIf="application">
22
<app-top-bar [data]="application" [backButton]="backButton" [subPage]="true"
3-
[addDetailDowndown]="true" [dropDownButton]="dropdownButton" (deleteSelectedInDropdown)="onDeleteApplication()"
4-
[pageLimit]="pageLimit" (updatePageLimit)="updatePageLimit($event)">
3+
[addDetailDowndown]="true" [dropDownButton]="dropdownButton" (deleteSelectedInDropdown)="onDeleteApplication()">
54
</app-top-bar>
65
<div class="container-fluid">
76
<div class="row">
@@ -54,7 +53,7 @@ <h3>Detaljer</h3>
5453
<app-top-bar-table [component]="true" [title]="'APPLICATION.ATTACHED-IOT' | translate">
5554
</app-top-bar-table>
5655
</ng-template>
57-
<app-multicast-table [pageLimit]="pageLimit"></app-multicast-table>
56+
<app-multicast-table></app-multicast-table>
5857
</div>
5958
</div>
6059
</div>

src/app/applications/application-detail/application-detail.component.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,4 @@ export class ApplicationDetailComponent implements OnInit, OnDestroy {
103103
this.deleteDialogSubscription.unsubscribe();
104104
}
105105
}
106-
updatePageLimit(limit: any) {
107-
console.log(limit);
108-
}
109106
}

src/app/applications/iot-devices/iot-devices-table/iot-devices-table.component.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import { DeleteDialogComponent } from '@shared/components/delete-dialog/delete-d
2020
import { DeviceType } from '@shared/enums/device-type';
2121
import { MatDialog } from '@angular/material/dialog';
2222
import { DeleteDialogService } from '@shared/components/delete-dialog/delete-dialog.service';
23-
import { ReceivedMessageMetadata } from '@shared/models/received-message-metadata.model';
2423
import { environment } from '@environments/environment';
2524
import { startWith, switchMap, map, catchError } from 'rxjs/operators';
2625
import { MeService } from '@shared/services/me.service';

src/app/applications/multicast/multicast-table/multicast-table.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div class="loading-shade" *ngIf="isLoadingResults">
33
<mat-spinner *ngIf="isLoadingResults"></mat-spinner>
44
</div>
5-
<table mat-table [dataSource]="dataSource" matSort matSortActive="groupName" matSortDirection="asc" matSortDisableClear>
5+
<table mat-table [dataSource]="multicasts" matSort matSortActive="groupName" matSortDirection="asc" matSortDisableClear>
66

77
<!-- Name Column -->
88
<ng-container matColumnDef="groupName">

src/app/applications/multicast/multicast-table/multicast-table.component.ts

Lines changed: 47 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,14 @@ import {
88
} from '@angular/core';
99
import { MatPaginator } from '@angular/material/paginator';
1010
import { MatSort } from '@angular/material/sort';
11-
import { MatTableDataSource } from '@angular/material/table';
1211
import { ActivatedRoute } from '@angular/router';
1312
import { environment } from '@environments/environment';
1413
import { TranslateService } from '@ngx-translate/core';
1514
import { DeleteDialogService } from '@shared/components/delete-dialog/delete-dialog.service';
16-
import { tableSorter } from '@shared/helpers/table-sorting.helper';
1715
import { MeService } from '@shared/services/me.service';
1816
import { SnackService } from '@shared/services/snack.service';
19-
import { Subscription } from 'rxjs';
17+
import { merge, Observable, Subscription, of as observableOf } from 'rxjs';
18+
import { catchError, map, startWith, switchMap } from 'rxjs/operators';
2019
import { Multicast, MulticastData } from '../multicast.model';
2120
import { MulticastService } from '../multicast.service';
2221

@@ -30,15 +29,12 @@ export class MulticastTableComponent
3029
@ViewChild(MatPaginator) paginator: MatPaginator;
3130
@ViewChild(MatSort) sort: MatSort;
3231
displayedColumns: string[] = ['groupName', 'groupType', 'menu'];
33-
dataSource = new MatTableDataSource<Multicast>();
34-
multicasts: Multicast[];
32+
multicasts: Multicast[] = [];
3533
resultsLength = 0;
3634
public canEdit = false;
3735
@Input() isLoadingResults: boolean = true;
3836
public pageSize = environment.tablePageSize;
39-
@Input() pageLimit: number;
4037
public pageOffset = 0;
41-
public pageTotal: number;
4238
public applicationId: number;
4339

4440
private multicastSubscription: Subscription;
@@ -57,38 +53,52 @@ export class MulticastTableComponent
5753

5854
ngOnInit(): void {
5955
this.applicationId = +Number(this.route.parent.snapshot.paramMap.get('id'));
60-
this.getMulticasts();
6156
this.canEdit = this.meService.canWriteInTargetOrganization();
6257
}
6358

6459
ngAfterViewInit() {
65-
this.dataSource.paginator = this.paginator;
66-
this.dataSource.sort = this.sort;
60+
// If the user changes the sort order, reset back to the first page.
61+
this.sort.sortChange.subscribe(() => (this.paginator.pageIndex = 0));
62+
63+
merge(this.sort.sortChange, this.paginator.page)
64+
.pipe(
65+
startWith({}),
66+
switchMap(() => {
67+
this.isLoadingResults = true;
68+
const multicasts = this.getMulticasts(
69+
this.sort.active,
70+
this.sort.direction
71+
);
72+
//TODO::: Snack here
73+
return multicasts;
74+
}),
75+
map((data) => {
76+
// Flip flag to show that loading has finished.
77+
this.isLoadingResults = false;
78+
this.resultsLength = data.count;
79+
80+
return data.data;
81+
}),
82+
catchError(() => {
83+
this.isLoadingResults = false;
84+
return observableOf([]);
85+
})
86+
)
87+
.subscribe((data) => (this.multicasts = data));
6788
}
6889

69-
getMulticasts(): void {
90+
getMulticasts(
91+
orderByColumn: string,
92+
orderByDirection: string
93+
): Observable<MulticastData> {
7094
if (this.applicationId) {
71-
this.multicastSubscription = this.multicastService
72-
.getMulticastsByApplicationId(
73-
this.pageLimit,
74-
this.pageOffset * this.pageLimit,
75-
this.applicationId
76-
)
77-
.subscribe((multicasts: MulticastData) => {
78-
this.multicasts = multicasts.data;
79-
this.dataSource = new MatTableDataSource<Multicast>(this.multicasts); // these lines of code is inspired/taken from datatarget.
80-
this.dataSource.paginator = this.paginator;
81-
this.dataSource.sort = this.sort;
82-
this.dataSource.sortingDataAccessor = tableSorter;
83-
this.isLoadingResults = false;
84-
if (this.pageLimit) {
85-
this.pageTotal = Math.ceil(multicasts.count / this.pageLimit);
86-
}
87-
if (multicasts.ok === false) {
88-
// ok is only defined when it's an error.
89-
this.snackService.showLoadFailSnack();
90-
}
91-
});
95+
return this.multicastService.getMulticastsByApplicationId(
96+
this.paginator.pageSize,
97+
this.paginator.pageIndex * this.paginator.pageSize,
98+
orderByDirection,
99+
orderByColumn,
100+
this.applicationId
101+
);
92102
}
93103
}
94104

@@ -101,7 +111,11 @@ export class MulticastTableComponent
101111
this.multicastService.delete(multicast.id).subscribe((response) => {
102112
if (response.ok && response.body.affected > 0) {
103113
// if deleted succesfully, get the new array of multicasts and show a succesful snack.
104-
this.getMulticasts();
114+
this.paginator.page.emit({
115+
pageIndex: this.paginator.pageIndex,
116+
pageSize: this.paginator.pageSize,
117+
length: this.resultsLength,
118+
});
105119
this.snackService.showDeletedSnack();
106120
} else {
107121
this.snackService.showFailSnack();

src/app/applications/multicast/multicast.service.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,15 @@ export class MulticastService {
2323
getMulticastsByApplicationId(
2424
limit: number,
2525
offset: number,
26+
sort: string,
27+
orderOn: string,
2628
applicationId: number
2729
): Observable<MulticastData> {
2830
const body = {
2931
limit,
3032
offset,
33+
sort,
34+
orderOn,
3135
applicationId,
3236
};
3337
return this.restService.get(this.multicastURL, body);

0 commit comments

Comments
 (0)