You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
argos/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts

163 lines
5.8 KiB
TypeScript

import {of as observableOf, Observable } from 'rxjs';
import { Component, OnInit, ViewChild } from '@angular/core';
import { MatPaginator, PageEvent } from '@angular/material/paginator';
import { MatSort } from '@angular/material/sort';
import { ActivatedRoute, Params, Router } from '@angular/router';
import { takeUntil } from 'rxjs/operators';
import { BaseComponent } from '../../../core/common/base/base.component';
import { DataTableRequest } from '../../../core/model/data-table/data-table-request';
import { DatasetListingModel } from '../../../core/model/dataset/dataset-listing';
import { DatasetCriteria } from '../../../core/query/dataset/dataset-criteria';
import { DatasetService } from '../../../core/services/dataset/dataset.service';
import { DmpService } from '../../../core/services/dmp/dmp.service';
import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item';
import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent';
import { DatasetCriteriaComponent } from './criteria/dataset-criteria.component';
import { TranslateService } from '@ngx-translate/core';
import { DatasetStatus } from '../../../core/common/enum/dataset-status';
@Component({
selector: 'app-dataset-listing-component',
templateUrl: 'dataset-listing.component.html',
styleUrls: ['./dataset-listing.component.scss']
})
export class DatasetListingComponent extends BaseComponent implements OnInit, IBreadCrumbComponent {
@ViewChild(MatPaginator, { static: true }) _paginator: MatPaginator;
@ViewChild(MatSort, { static: false }) sort: MatSort;
@ViewChild(DatasetCriteriaComponent, { static: true }) criteria: DatasetCriteriaComponent;
breadCrumbs: Observable<BreadcrumbItem[]>;
titlePrefix: String;
dmpId: string;
status: Number;
totalCount: number;
dmpSearchEnabled = true;
listingItems: DatasetListingModel[] = [];
constructor(
private datasetService: DatasetService,
private router: Router,
private route: ActivatedRoute,
private dmpService: DmpService,
private language: TranslateService,
) {
super();
}
ngOnInit() {
this.route.params
.pipe(takeUntil(this._destroyed))
.subscribe(async (params: Params) => {
const queryParams = this.route.snapshot.queryParams;
this.dmpId = queryParams['dmpId'];
this.status = queryParams['status'];
// Makes multiple post requests
// this.criteria.setRefreshCallback(() => this.refresh());
if (this.dmpId != null) {
this.dmpSearchEnabled = false;
const dmp = await this.dmpService.getSingle(this.dmpId).toPromise();
this.criteria.setCriteria(this.getDefaultCriteria(dmp));
this.refresh();
this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages));
this.breadCrumbs = observableOf([{
parentComponentName: 'DmpEditorComponent',
label: dmp.label,
url: '/plans/edit/' + this.dmpId
}]);
if (params['dmpLabel'] !== undefined) {
this.titlePrefix = 'for ' + params['dmpLabel'];
}
} else {
this.criteria.setCriteria(this.getDefaultCriteria());
this.refresh();
this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages));
this.breadCrumbs = observableOf([{
parentComponentName: null,
label: this.language.instant('NAV-BAR.MY-DATASET-DESCRIPTIONS'),
url: "/datasets"
}]);
}
if (this.status != null && this.status == DatasetStatus.Draft) {
this.criteria.setCriteria(this.getDraftCriteria());
this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages));
this.refresh();
}
});
}
refresh(resetPages = false) {
if (this._paginator.pageSize === undefined) this._paginator.pageSize = 10;
if (resetPages) this._paginator.pageIndex = 0;
const startIndex = this._paginator.pageIndex * this._paginator.pageSize;
let fields: Array<string> = new Array();
if (this.sort && this.sort.active) { fields = this.sort.direction === 'asc' ? ['+' + this.sort.active] : ['-' + this.sort.active]; }
const request = new DataTableRequest<DatasetCriteria>(startIndex, this._paginator.pageSize, { fields: fields });
let value = this.criteria.formGroup.value;
request.criteria = {
like: value.like,
status: value.status,
allVersions: value.allVersions,
role: value.role
}
if (value.tags) {
request.criteria.tags = value.tags.map(x => x.id);
}
if (value.collaborators) {
request.criteria.collaborators = value.collaborators.map(x => x.id);
}
if (value.dmpIds) {
request.criteria.dmpIds = value.dmpIds.map(x => x.id);
}
if (value.grants) {
request.criteria.grants = value.grants.map(x => x.id);
}
if (value.organisations) {
request.criteria.organisations = value.organisations.map(x => x.id);
}
if (value.datasetTemplates) {
request.criteria.datasetTemplates = value.datasetTemplates.map(x => x.id)
}
// if (this.itemId) {
// // request.criteria.groupIds = [this.itemId];
// request.criteria.allVersions = true;
// }
this.datasetService.getPaged(request).pipe(takeUntil(this._destroyed)).subscribe(result => {
if (!result) { return []; }
if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; }
this.listingItems = result.data;
});
}
pageThisEvent(event) {
this.refresh();
}
rowClicked(dataset: DatasetListingModel) {
this.router.navigate(['/datasets/edit/' + dataset.id]);
}
getDefaultCriteria(dmp: any = null): DatasetCriteria {
const defaultCriteria = new DatasetCriteria();
if (dmp != null) {
defaultCriteria.dmpIds.push(dmp);
}
return defaultCriteria;
}
getDraftCriteria(): DatasetCriteria {
const draftCriteria = new DatasetCriteria();
draftCriteria.status = DatasetStatus.Draft;
return draftCriteria;
}
makeItPublic(id: String) {
this.datasetService.makeDatasetPublic(id)
.pipe(takeUntil(this._destroyed))
.subscribe();
}
}