Files
Picsur/frontend/src/app/routes/settings/settings-users/settings-users.component.ts

61 lines
2.0 KiB
TypeScript
Raw Normal View History

2022-03-19 23:08:20 +01:00
import { Component, OnInit, ViewChild } from '@angular/core';
import { MatPaginator, PageEvent } from '@angular/material/paginator';
import { AutoUnsubscribe } from 'ngx-auto-unsubscribe-decorator';
import { EUser } from 'picsur-shared/dist/entities/user.entity';
import { HasFailed } from 'picsur-shared/dist/types';
import { BehaviorSubject, Subject, throttleTime } from 'rxjs';
import { UserManageService } from 'src/app/services/api/usermanage.service';
2022-03-19 21:34:33 +01:00
@Component({
templateUrl: './settings-users.component.html',
2022-03-19 23:08:20 +01:00
styleUrls: ['./settings-users.component.scss'],
2022-03-19 21:34:33 +01:00
})
export class SettingsUsersComponent implements OnInit {
2022-03-19 23:08:20 +01:00
public readonly displayedColumns: string[] = ['id', 'username'];
public readonly pageSizeOptions: number[] = [5, 10, 25, 100];
public readonly startingPageSize = this.pageSizeOptions[2];
2022-03-19 21:34:33 +01:00
2022-03-19 23:08:20 +01:00
public dataSubject = new BehaviorSubject<EUser[]>([]);
public updateSubject = new Subject<PageEvent>();
@ViewChild(MatPaginator) paginator: MatPaginator;
constructor(private userManageService: UserManageService) {}
async ngOnInit() {
this.subscribeToUpdate();
this.fetchUsers(this.startingPageSize, 0);
}
@AutoUnsubscribe()
private subscribeToUpdate() {
return this.updateSubject
.pipe(throttleTime(500, undefined, { leading: true, trailing: true }))
.subscribe(async (pageEvent: PageEvent) => {
let amount = await this.fetchUsers(
pageEvent.pageSize,
pageEvent.pageIndex
);
if (amount === 0) {
if ( pageEvent.previousPageIndex === pageEvent.pageIndex - 1){
this.paginator.previousPage();
} else {
this.paginator.firstPage();
}
}
});
2022-03-19 21:34:33 +01:00
}
2022-03-19 23:08:20 +01:00
private async fetchUsers(
pageSize: number,
pageIndex: number
): Promise<number> {
const result = await this.userManageService.getUsers(pageSize, pageIndex);
if (HasFailed(result)) return 0;
this.dataSubject.next(result);
return result.length;
}
2022-03-19 21:34:33 +01:00
}