2019-09-23 10:17:03 +02:00
|
|
|
|
2018-11-27 18:33:17 +01:00
|
|
|
import { Component, OnInit, ViewChild } from '@angular/core';
|
2019-12-11 15:51:03 +01:00
|
|
|
import { MatPaginator } from '@angular/material/paginator';
|
2019-09-23 10:17:03 +02:00
|
|
|
import { MatSort } from '@angular/material/sort';
|
2018-11-27 18:33:17 +01:00
|
|
|
import { ActivatedRoute, Params, Router } from '@angular/router';
|
2019-12-11 15:51:03 +01:00
|
|
|
import { DatasetStatus } from '@app/core/common/enum/dataset-status';
|
|
|
|
import { DataTableRequest } from '@app/core/model/data-table/data-table-request';
|
|
|
|
import { DatasetListingModel } from '@app/core/model/dataset/dataset-listing';
|
|
|
|
import { DatasetCriteria } from '@app/core/query/dataset/dataset-criteria';
|
|
|
|
import { DatasetService } from '@app/core/services/dataset/dataset.service';
|
|
|
|
import { DmpService } from '@app/core/services/dmp/dmp.service';
|
|
|
|
import { DatasetCriteriaComponent } from '@app/ui/dataset/listing/criteria/dataset-criteria.component';
|
|
|
|
import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item';
|
|
|
|
import { IBreadCrumbComponent } from '@app/ui/misc/breadcrumb/definition/IBreadCrumbComponent';
|
|
|
|
import { BaseComponent } from '@common/base/base.component';
|
2019-05-23 11:40:24 +02:00
|
|
|
import { TranslateService } from '@ngx-translate/core';
|
2019-12-11 15:51:03 +01:00
|
|
|
import { Observable, of as observableOf } from 'rxjs';
|
|
|
|
import { takeUntil } from 'rxjs/operators';
|
2020-03-11 10:04:49 +01:00
|
|
|
import { ExternalTagEditorModel } from '../dataset-wizard/dataset-wizard-editor.model';
|
2020-03-16 17:50:29 +01:00
|
|
|
import { AuthService } from '@app/core/services/auth/auth.service';
|
|
|
|
import { isNullOrUndefined } from 'util';
|
2017-12-15 16:33:18 +01:00
|
|
|
|
|
|
|
@Component({
|
2018-10-05 17:00:54 +02:00
|
|
|
selector: 'app-dataset-listing-component',
|
|
|
|
templateUrl: 'dataset-listing.component.html',
|
2019-01-18 18:03:45 +01:00
|
|
|
styleUrls: ['./dataset-listing.component.scss']
|
2017-12-15 16:33:18 +01:00
|
|
|
})
|
2018-11-27 18:33:17 +01:00
|
|
|
export class DatasetListingComponent extends BaseComponent implements OnInit, IBreadCrumbComponent {
|
2017-12-15 16:33:18 +01:00
|
|
|
|
2019-09-23 10:17:03 +02:00
|
|
|
@ViewChild(MatPaginator, { static: true }) _paginator: MatPaginator;
|
|
|
|
@ViewChild(MatSort, { static: false }) sort: MatSort;
|
|
|
|
@ViewChild(DatasetCriteriaComponent, { static: true }) criteria: DatasetCriteriaComponent;
|
2018-10-05 17:00:54 +02:00
|
|
|
|
|
|
|
breadCrumbs: Observable<BreadcrumbItem[]>;
|
|
|
|
|
|
|
|
titlePrefix: String;
|
|
|
|
dmpId: string;
|
2019-04-26 18:03:38 +02:00
|
|
|
status: Number;
|
2019-05-08 11:53:23 +02:00
|
|
|
totalCount: number;
|
2019-04-09 09:29:43 +02:00
|
|
|
dmpSearchEnabled = true;
|
2019-05-08 11:53:23 +02:00
|
|
|
listingItems: DatasetListingModel[] = [];
|
2018-10-05 17:00:54 +02:00
|
|
|
|
2020-03-16 17:50:29 +01:00
|
|
|
isPublic: boolean = false;
|
|
|
|
|
2018-10-05 17:00:54 +02:00
|
|
|
constructor(
|
|
|
|
private datasetService: DatasetService,
|
|
|
|
private router: Router,
|
2019-01-18 18:03:45 +01:00
|
|
|
private route: ActivatedRoute,
|
|
|
|
private dmpService: DmpService,
|
2019-05-23 11:40:24 +02:00
|
|
|
private language: TranslateService,
|
2020-03-16 17:50:29 +01:00
|
|
|
private authService: AuthService
|
2018-10-05 17:00:54 +02:00
|
|
|
) {
|
2018-11-27 18:33:17 +01:00
|
|
|
super();
|
2018-10-05 17:00:54 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
ngOnInit() {
|
2020-03-16 17:50:29 +01:00
|
|
|
this.isPublic = this.router.url === '/explore';
|
|
|
|
if (!this.isPublic && isNullOrUndefined(this.authService.current())) {
|
|
|
|
this.router.navigateByUrl("/explore");
|
|
|
|
}
|
2018-11-27 18:33:17 +01:00
|
|
|
this.route.params
|
|
|
|
.pipe(takeUntil(this._destroyed))
|
|
|
|
.subscribe(async (params: Params) => {
|
2019-04-22 11:35:50 +02:00
|
|
|
const queryParams = this.route.snapshot.queryParams;
|
|
|
|
this.dmpId = queryParams['dmpId'];
|
2019-04-26 18:03:38 +02:00
|
|
|
this.status = queryParams['status'];
|
2019-06-04 09:25:25 +02:00
|
|
|
// Makes multiple post requests
|
|
|
|
// this.criteria.setRefreshCallback(() => this.refresh());
|
2018-11-27 18:33:17 +01:00
|
|
|
if (this.dmpId != null) {
|
2019-04-09 09:29:43 +02:00
|
|
|
this.dmpSearchEnabled = false;
|
2019-01-18 18:03:45 +01:00
|
|
|
const dmp = await this.dmpService.getSingle(this.dmpId).toPromise();
|
2019-04-09 09:29:43 +02:00
|
|
|
this.criteria.setCriteria(this.getDefaultCriteria(dmp));
|
|
|
|
this.refresh();
|
2019-05-17 15:29:00 +02:00
|
|
|
this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages));
|
2019-09-23 10:17:03 +02:00
|
|
|
this.breadCrumbs = observableOf([{
|
2019-05-23 11:40:24 +02:00
|
|
|
parentComponentName: 'DmpEditorComponent',
|
|
|
|
label: dmp.label,
|
|
|
|
url: '/plans/edit/' + this.dmpId
|
|
|
|
}]);
|
2018-11-27 18:33:17 +01:00
|
|
|
if (params['dmpLabel'] !== undefined) {
|
|
|
|
this.titlePrefix = 'for ' + params['dmpLabel'];
|
|
|
|
}
|
|
|
|
} else {
|
2019-04-09 09:29:43 +02:00
|
|
|
this.criteria.setCriteria(this.getDefaultCriteria());
|
|
|
|
this.refresh();
|
2019-05-17 15:29:00 +02:00
|
|
|
this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages));
|
2019-09-23 10:17:03 +02:00
|
|
|
this.breadCrumbs = observableOf([{
|
2019-05-23 11:40:24 +02:00
|
|
|
parentComponentName: null,
|
2019-06-07 13:03:10 +02:00
|
|
|
label: this.language.instant('NAV-BAR.MY-DATASET-DESCRIPTIONS'),
|
2020-03-16 17:50:29 +01:00
|
|
|
url: this.isPublic ? "/explore" : "/datasets"
|
2019-05-23 11:40:24 +02:00
|
|
|
}]);
|
2018-10-05 17:00:54 +02:00
|
|
|
}
|
2019-04-26 18:03:38 +02:00
|
|
|
|
2019-06-25 11:16:37 +02:00
|
|
|
if (this.status != null && this.status == DatasetStatus.Draft) {
|
2019-04-26 18:03:38 +02:00
|
|
|
this.criteria.setCriteria(this.getDraftCriteria());
|
2019-05-17 15:29:00 +02:00
|
|
|
this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages));
|
2019-09-17 10:40:49 +02:00
|
|
|
this.refresh();
|
2019-04-26 18:03:38 +02:00
|
|
|
}
|
2018-11-27 18:33:17 +01:00
|
|
|
});
|
2018-10-05 17:00:54 +02:00
|
|
|
}
|
|
|
|
|
2019-05-17 15:29:00 +02:00
|
|
|
refresh(resetPages = false) {
|
2019-05-10 10:53:39 +02:00
|
|
|
if (this._paginator.pageSize === undefined) this._paginator.pageSize = 10;
|
2019-05-17 15:29:00 +02:00
|
|
|
if (resetPages) this._paginator.pageIndex = 0;
|
2019-05-08 11:53:23 +02:00
|
|
|
const startIndex = this._paginator.pageIndex * this._paginator.pageSize;
|
|
|
|
let fields: Array<string> = new Array();
|
2019-12-12 10:26:19 +01:00
|
|
|
fields.push('-modified');
|
|
|
|
//if (this.sort && this.sort.active) { fields = this.sort.direction === 'asc' ? ['+' + this.sort.active] : ['-' + this.sort.active]; }
|
2019-05-08 11:53:23 +02:00
|
|
|
const request = new DataTableRequest<DatasetCriteria>(startIndex, this._paginator.pageSize, { fields: fields });
|
2019-05-10 14:36:23 +02:00
|
|
|
let value = this.criteria.formGroup.value;
|
|
|
|
request.criteria = {
|
|
|
|
like: value.like,
|
|
|
|
status: value.status,
|
|
|
|
allVersions: value.allVersions,
|
|
|
|
role: value.role
|
|
|
|
}
|
2019-05-16 12:54:29 +02:00
|
|
|
if (value.tags) {
|
2020-03-11 10:04:49 +01:00
|
|
|
request.criteria.tags = value.tags.map(x => (<ExternalTagEditorModel>x));
|
2019-05-16 12:54:29 +02:00
|
|
|
}
|
2019-05-16 12:10:28 +02:00
|
|
|
if (value.collaborators) {
|
2019-05-16 12:54:29 +02:00
|
|
|
request.criteria.collaborators = value.collaborators.map(x => x.id);
|
2019-05-16 12:10:28 +02:00
|
|
|
}
|
2019-05-10 14:36:23 +02:00
|
|
|
if (value.dmpIds) {
|
2019-05-10 16:02:20 +02:00
|
|
|
request.criteria.dmpIds = value.dmpIds.map(x => x.id);
|
|
|
|
}
|
2020-01-17 12:36:00 +01:00
|
|
|
if (value.groupIds) {
|
|
|
|
request.criteria.groupIds = value.groupIds.map(x => x.groupId);
|
|
|
|
}
|
2019-08-01 09:54:40 +02:00
|
|
|
if (value.grants) {
|
|
|
|
request.criteria.grants = value.grants.map(x => x.id);
|
2019-05-10 14:36:23 +02:00
|
|
|
}
|
|
|
|
if (value.organisations) {
|
|
|
|
request.criteria.organisations = value.organisations.map(x => x.id);
|
|
|
|
}
|
2019-06-12 11:10:46 +02:00
|
|
|
if (value.datasetTemplates) {
|
|
|
|
request.criteria.datasetTemplates = value.datasetTemplates.map(x => x.id)
|
|
|
|
}
|
2020-03-16 17:50:29 +01:00
|
|
|
if(value.grantStatus) {
|
|
|
|
request.criteria.grantStatus = value.grantStatus;
|
|
|
|
}
|
|
|
|
request.criteria.isPublic = this.isPublic;
|
2019-05-08 12:52:14 +02:00
|
|
|
// if (this.itemId) {
|
|
|
|
// // request.criteria.groupIds = [this.itemId];
|
|
|
|
// request.criteria.allVersions = true;
|
|
|
|
// }
|
2019-05-08 11:53:23 +02:00
|
|
|
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;
|
|
|
|
});
|
2018-10-05 17:00:54 +02:00
|
|
|
}
|
|
|
|
|
2019-05-10 10:53:39 +02:00
|
|
|
pageThisEvent(event) {
|
|
|
|
this.refresh();
|
|
|
|
}
|
|
|
|
|
2018-10-05 17:00:54 +02:00
|
|
|
|
2019-04-15 11:34:12 +02:00
|
|
|
getDefaultCriteria(dmp: any = null): DatasetCriteria {
|
2018-10-05 17:00:54 +02:00
|
|
|
const defaultCriteria = new DatasetCriteria();
|
2019-04-15 11:34:12 +02:00
|
|
|
if (dmp != null) {
|
|
|
|
defaultCriteria.dmpIds.push(dmp);
|
2018-10-05 17:00:54 +02:00
|
|
|
}
|
|
|
|
return defaultCriteria;
|
|
|
|
}
|
|
|
|
|
2019-04-26 18:03:38 +02:00
|
|
|
getDraftCriteria(): DatasetCriteria {
|
|
|
|
const draftCriteria = new DatasetCriteria();
|
2019-06-25 11:16:37 +02:00
|
|
|
draftCriteria.status = DatasetStatus.Draft;
|
2019-04-26 18:03:38 +02:00
|
|
|
return draftCriteria;
|
|
|
|
}
|
|
|
|
|
2018-10-05 17:00:54 +02:00
|
|
|
makeItPublic(id: String) {
|
2018-11-27 18:33:17 +01:00
|
|
|
this.datasetService.makeDatasetPublic(id)
|
|
|
|
.pipe(takeUntil(this._destroyed))
|
|
|
|
.subscribe();
|
2018-10-05 17:00:54 +02:00
|
|
|
}
|
2019-10-23 17:36:29 +02:00
|
|
|
|
|
|
|
// rowClicked(dataset: DatasetListingModel) {
|
|
|
|
// this.router.navigate(['/datasets/edit/' + dataset.id]);
|
|
|
|
// }
|
2019-05-10 10:53:39 +02:00
|
|
|
}
|