gisaf-frontend/src/app/admin/admin-basket/basket.component.ts
phil b6496f9dba Admin basket: update/fix file import
remove useless AdminBasketFile model definition
cleanups, typings
2024-04-20 11:12:54 +05:30

114 lines
No EOL
3.8 KiB
TypeScript

import { Component, OnInit, Input, ViewChild, ElementRef,
ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core'
import { ActivatedRoute } from '@angular/router'
import { UntypedFormGroup, UntypedFormControl } from '@angular/forms'
import { SelectionModel } from '@angular/cdk/collections'
import { MatPaginator } from '@angular/material/paginator'
import { MatSnackBar } from '@angular/material/snack-bar'
import { MatSort } from '@angular/material/sort'
import { MatTableDataSource } from '@angular/material/table'
import { AdminDataService } from '../admin-data.service'
import { AdminBasket, AdminService, FileImport } from '../../openapi'
import { HtmlSnackbarComponent } from '../../custom-snackbar/custom-snackbar.component'
@Component({
selector: 'gisaf-admin-basket',
templateUrl: './basket.component.html',
styleUrls: ['./basket.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AdminBasketComponent implements OnInit {
constructor(
public adminDataService: AdminDataService,
private route: ActivatedRoute,
private snackBar: MatSnackBar,
private cdr: ChangeDetectorRef,
public adminService: AdminService,
) {}
basket: AdminBasket
dataSource: MatTableDataSource<object>
@ViewChild(MatPaginator, {static: true}) paginator: MatPaginator
@ViewChild(MatSort, {static: true}) sort: MatSort
selection = new SelectionModel(true, [])
unlockDeleteFormGroup: UntypedFormGroup = new UntypedFormGroup({})
columns: string[] = [
'name',
'status',
'time',
'store',
'project',
'surveyor',
'equipment',
'import',
'delete',
]
filterText: string
ngOnInit() {
this.route.data.subscribe(
(basket: object) => {
this.basket = basket['basket']
this.dataSource = new MatTableDataSource(this.basket.files)
this.dataSource.sort = this.sort
this.dataSource.paginator = this.paginator
this.cdr.markForCheck()
}
)
this.unlockDeleteFormGroup = new UntypedFormGroup({
'canDelete': new UntypedFormControl(),
})
}
getColumns() {
return this.columns.filter(
col => this.basket.columns.indexOf(col) != -1
)
}
applyFilter() {
this.dataSource.filter = this.filterText.trim().toLowerCase()
}
download(item: FileImport) {
window.open('/api/admin/basket/download/' + this.basket.name + '/' + item.id + '/' + item.name)
}
importItem(item: FileImport, dryRun: boolean) {
return this.adminService.importBasketFileApiAdminBasketImportBasketFileIdGet({
basket: this.basket.name,
fileId: item.id,
dryRun: dryRun
}).subscribe(
resp => {
this.basket.files.find(row => row.id == item.id).time = new Date(resp.time).toLocaleString()
this.snackBar.openFromComponent(HtmlSnackbarComponent, {
data: resp,
//duration: 3000
})
this.cdr.markForCheck()
}
)
}
deleteItem(item: FileImport) {
return this.adminService.deleteBasketFileApiAdminBasketDeleteBasketFileIdGet({
basket: this.basket.name,
fileId: item.id
}).subscribe(
id => {
let dsi = this.dataSource.data.findIndex(fi => fi['id'] == id)
this.dataSource.data.splice(dsi, 1)
// Force Angular change detection (??)
this.dataSource.data = this.dataSource.data
this.cdr.markForCheck()
}
)
}
isDate(val: any) {
return val instanceof Date && isFinite(<any>val)
}
}