Files
pkgdash/ui/src/app/components/package/package.component.ts
Vasiliy Tolstov eb4daf33f1 rename
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2023-08-20 14:19:57 +03:00

172 lines
5.0 KiB
TypeScript

import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
import { Package } from '../../api/models/package';
import { PkgdashService } from '../../api/services/pkgdash.service';
import { debounceTime, distinctUntilChanged, fromEvent, merge, Observable, of, tap } from 'rxjs';
import { MatDialogConfig } from '@angular/material/dialog';
import { MatIcon } from '@angular/material/icon';
import { MatPaginator } from '@angular/material/paginator';
import { PackagesService } from '../../services/packages/packages.service';
import { PackagesDataSource } from '../../datasources/packages';
import { MatSort, Sort, SortDirection } from '@angular/material/sort';
import { ActivatedRoute, Router } from '@angular/router';
import { ConfirmService } from 'src/app/services/confirm/confirm.service';
import { AppConstants } from 'src/app/app.constants';
import { MessageService } from 'src/app/services/message/message.service';
import { ErrorRsp, PackagesCreateRsp, PackagesDeleteRsp, PackagesUpdateRsp } from 'src/app/api/models';
@Component({
selector: 'app-packages',
templateUrl: './package.component.html',
styleUrls: ['./package.component.scss'],
providers: [PkgdashService, MessageService]
})
export class PackageComponent implements OnInit {
@ViewChild(MatPaginator) paginator!: MatPaginator;
@ViewChild(MatSort) sort!: MatSort;
@ViewChild('input') input!: ElementRef;
selectedPackage?: Package;
dataSource: PackagesDataSource;
packages$!: Observable<any>;
public itemsCount = 20;
sortField = 'name';
sortOrder: SortDirection = 'asc';
constructor(
private router: Router,
private packageDialog: PackagesService,
private pkgdashService: PkgdashService,
private confirmDialog: ConfirmService,
private messageService: MessageService,
) {
this.dataSource = new PackagesDataSource(this.pkgdashService);
}
createPackageDialog(): void {
this.packageDialog.open({
height: '400px',
width: '600px',
autoFocus: true,
disableClose: false,
backdropClass: "package-dialog",
data: {
title: 'Create package'
}
});
this.packageDialog.confirmed().subscribe((data: any) => {
if (data) {
this.pkgdashService.packagesCreate(data)
.subscribe({
next: (rsp: PackagesCreateRsp) => {
this.loadPackages();
this.reloadComponent();
this.messageService.showMessage("package "+rsp.package!.name+" created")
},
error: (err: ErrorRsp) => {
this.messageService.showMessage("package "+data.name+" not created, error "+ err.details)
}
});
}
});
}
updatePackageDialog(pkg: Package): void {
this.packageDialog.open({
height: '400px',
width: '600px',
autoFocus: true,
disableClose: false,
backdropClass: "package-dialog",
data: {
service: pkg,
title: 'Update package '+pkg.name,
}
});
this.packageDialog.confirmed().subscribe((data: any) => {
if (data) {
this.pkgdashService.packagesUpdate({
id: pkg.id!,
body: data,
}).subscribe({
next: (rsp: PackagesUpdateRsp) => {
this.loadPackages();
this.reloadComponent();
this.messageService.showMessage("package "+rsp.package!.name+" updated")
},
error: (err: ErrorRsp) => {
this.messageService.showMessage("package "+data.name+" not updated, error "+ err.details)
}
})
}
});
}
deletePackageDialog(pkg: Package): void {
this.confirmDialog.open({
height: '200px',
width: '300px',
autoFocus: true,
disableClose: false,
backdropClass: "package-dialog",
data: {
title: 'Delete package '+pkg.name,
message: 'Are you sure?',
}
});
this.confirmDialog.confirmed().subscribe((data: any) => {
if (data) {
this.pkgdashService.packagesDelete({
id: pkg.id!,
}).subscribe({
next: (rsp: PackagesDeleteRsp) => {
this.loadPackages();
this.reloadComponent();
this.messageService.showMessage("package "+data.name+" deleted")
},
error: (err: ErrorRsp) => {
this.messageService.showMessage("package "+data.name+" not deleted, error "+ err.details)
}
})
}
})
}
selectPackage(pkg: Package): void {
this.selectedPackage = pkg;
}
ngAfterViewInit() {
}
public sortPackages(event: Sort): void {
this.loadPackages()
this.reloadComponent()
}
private reloadComponent(): void {
let currentUrl = this.router.url;
this.router.routeReuseStrategy.shouldReuseRoute = () => false;
this.router.onSameUrlNavigation = 'reload';
this.router.navigate([currentUrl]);
}
private loadPackages(): void {
this.dataSource.list();
}
ngOnInit(): void {
this.dataSource.list('', this.sortField, this.sortOrder, 0, this.itemsCount);
this.packages$ = this.dataSource.connect();
}
}