284 lines
10 KiB
TypeScript
284 lines
10 KiB
TypeScript
|
|
import { Component, OnInit, ViewChild } from '@angular/core';
|
|
import { MatPaginator } from '@angular/material/paginator';
|
|
import { MatSort } from '@angular/material/sort';
|
|
import { ActivatedRoute, Params, Router } from '@angular/router';
|
|
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';
|
|
import { TranslateService } from '@ngx-translate/core';
|
|
import { Observable, of as observableOf } from 'rxjs';
|
|
import { takeUntil } from 'rxjs/operators';
|
|
import { ExternalTagEditorModel } from '../dataset-wizard/dataset-wizard-editor.model';
|
|
import { AuthService } from '@app/core/services/auth/auth.service';
|
|
import { isNullOrUndefined } from 'util';
|
|
import { DatasetCriteriaDialogComponent } from './criteria/dataset-criteria-dialogue/dataset-criteria-dialog.component';
|
|
import { MatDialog } from '@angular/material';
|
|
import { FormGroup, FormBuilder, FormControl } from '@angular/forms';
|
|
import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order';
|
|
import { EnumUtils } from '@app/core/services/utilities/enum-utils.service';
|
|
|
|
@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[] = [];
|
|
|
|
isPublic: boolean = false;
|
|
public isVisible = true
|
|
|
|
startIndex: number = 0;
|
|
pageSize: number = 5;
|
|
criteria: DatasetCriteria;
|
|
criteriaFormGroup: FormGroup;
|
|
public formGroup = new FormBuilder().group({
|
|
like: new FormControl(),
|
|
order: new FormControl()
|
|
});
|
|
|
|
scrollbar: boolean;
|
|
order = RecentActivityOrder;
|
|
|
|
constructor(
|
|
private datasetService: DatasetService,
|
|
private router: Router,
|
|
private route: ActivatedRoute,
|
|
public dialog: MatDialog,
|
|
private dmpService: DmpService,
|
|
private language: TranslateService,
|
|
private authService: AuthService,
|
|
public enumUtils: EnumUtils
|
|
) {
|
|
super();
|
|
}
|
|
|
|
ngOnInit() {
|
|
this.isPublic = this.router.url === '/explore';
|
|
this.formGroup.get('order').setValue(this.order.MODIFIED);
|
|
if (!this.isPublic && isNullOrUndefined(this.authService.current())) {
|
|
this.router.navigateByUrl("/explore");
|
|
}
|
|
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 = this.getDefaultCriteria(dmp);
|
|
// 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 = this.getDefaultCriteria();
|
|
// 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: this.isPublic ? "/explore" : "/datasets"
|
|
}]);
|
|
}
|
|
|
|
if (this.status != null && this.status == DatasetStatus.Draft) {
|
|
this.criteria = this.getDraftCriteria();
|
|
// this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages));
|
|
this.refresh();
|
|
}
|
|
});
|
|
|
|
this.formGroup.get('like').valueChanges
|
|
.pipe(takeUntil(this._destroyed))
|
|
.subscribe(x => this.controlModified());
|
|
this.formGroup.get('order').valueChanges
|
|
.pipe(takeUntil(this._destroyed))
|
|
.subscribe(x => this.refresh());
|
|
}
|
|
|
|
ngAfterContentChecked(): void {
|
|
this.scrollbar = this.hasScrollbar();
|
|
}
|
|
|
|
controlModified(): void {
|
|
// this.clearErrorModel();
|
|
// if (this.refreshCallback != null &&
|
|
// (this.formGroup.get('like').value == null || this.formGroup.get('like').value.length === 0 || this.formGroup.get('like').value.length > 2)
|
|
// ) {
|
|
// setTimeout(() => this.refreshCallback(true));
|
|
// }
|
|
this.criteria.like = this.formGroup.get("like").value;
|
|
this.startIndex = 0;
|
|
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();
|
|
// fields.push('-modified');
|
|
//if (this.sort && this.sort.active) { fields = this.sort.direction === 'asc' ? ['+' + this.sort.active] : ['-' + this.sort.active]; }
|
|
const fields: Array<string> = ["-" + this.formGroup.get('order').value];
|
|
const request = new DataTableRequest<DatasetCriteria>(this.startIndex, this.pageSize, { fields: fields });
|
|
this.criteria.isPublic = this.isPublic;
|
|
request.criteria = this.criteria;
|
|
|
|
this.datasetService.getPaged(request).pipe(takeUntil(this._destroyed)).subscribe(result => {
|
|
if (!result) { return []; }
|
|
// if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; }
|
|
this.totalCount = result.totalCount;
|
|
this.listingItems = result.data;
|
|
});
|
|
}
|
|
|
|
public loadMore() {
|
|
this.startIndex = this.startIndex + this.pageSize;
|
|
// const fields: Array<string> = ["-modified"];
|
|
const fields: Array<string> = ["-" + this.formGroup.get('order').value];
|
|
const request = new DataTableRequest<DatasetCriteria>(this.startIndex, this.pageSize, { fields: fields });
|
|
this.criteria.isPublic = this.isPublic;
|
|
request.criteria = this.criteria;
|
|
|
|
this.datasetService.getPaged(request).pipe(takeUntil(this._destroyed)).subscribe(result => {
|
|
if (!result) { return []; }
|
|
// if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; }
|
|
this.listingItems = this.listingItems.concat(result.data);
|
|
});
|
|
}
|
|
|
|
pageThisEvent(event) {
|
|
this.refresh();
|
|
}
|
|
|
|
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();
|
|
}
|
|
|
|
openFiltersDialog(): void {
|
|
const dialogRef = this.dialog.open(DatasetCriteriaDialogComponent, {
|
|
width: '456px',
|
|
height: '100%',
|
|
restoreFocus: false,
|
|
data: {
|
|
isPublic: this.isPublic,
|
|
status: this.status,
|
|
criteria: this.criteria,
|
|
formGroup: this.criteriaFormGroup,
|
|
// criteria: this.grantId ? this.criteria : this.getDefaultCriteria(),
|
|
updateDataFn: this.updateDataFn.bind(this)
|
|
},
|
|
position: { right: '0px;' }
|
|
});
|
|
|
|
dialogRef.afterClosed().subscribe(result => {
|
|
});
|
|
}
|
|
|
|
updateDataFn(criteria: DatasetCriteriaComponent): void {
|
|
this.criteriaFormGroup = criteria.formGroup;
|
|
this.toDatasetCriteria(criteria);
|
|
this.refresh();
|
|
}
|
|
|
|
toDatasetCriteria(criteria: DatasetCriteriaComponent) {
|
|
let formGroup = criteria.formGroup;
|
|
this.criteria = {
|
|
like: formGroup.get("like").value,
|
|
status: formGroup.get("status").value,
|
|
allVersions: formGroup.get("allVersions").value,
|
|
role: formGroup.get("role").value
|
|
}
|
|
if (formGroup.get("tags") && formGroup.get("tags").value) {
|
|
this.criteria.tags = formGroup.get("tags").value.map(x => (<ExternalTagEditorModel>x));
|
|
}
|
|
if (formGroup.get("collaborators") && formGroup.get("collaborators").value) {
|
|
this.criteria.collaborators = formGroup.get("collaborators").value.map(x => x.id);
|
|
}
|
|
if (formGroup.get("dmpIds") && formGroup.get("dmpIds").value) {
|
|
this.criteria.dmpIds = formGroup.get("dmpIds").value.map(x => x.id);
|
|
}
|
|
if (formGroup.get("groupIds") && formGroup.get("groupIds").value) {
|
|
this.criteria.groupIds = formGroup.get("groupIds").value.map(x => x.groupId);
|
|
}
|
|
if (formGroup.get("grants") && formGroup.get("grants").value) {
|
|
this.criteria.grants = formGroup.get("grants").value.map(x => x.id);
|
|
}
|
|
if (formGroup.get("organisations") && formGroup.get("organisations").value) {
|
|
this.criteria.organisations = formGroup.get("organisations").value.map(x => x.id);
|
|
}
|
|
if (formGroup.get("datasetTemplates") && formGroup.get("datasetTemplates").value) {
|
|
this.criteria.datasetTemplates = formGroup.get("datasetTemplates").value.map(x => x.id)
|
|
}
|
|
if (formGroup.get("grantStatus") && formGroup.get("grantStatus").value) {
|
|
this.criteria.grantStatus = formGroup.get("grantStatus").value;
|
|
}
|
|
this.criteria.isPublic = this.isPublic;
|
|
// if (this.itemId) {
|
|
// // this.criteria.groupIds = [this.itemId];
|
|
// this.criteria.allVersions = true;
|
|
// }
|
|
}
|
|
|
|
public closeCard(): void {
|
|
this.isVisible = false;
|
|
}
|
|
|
|
hasScrollbar(): boolean {
|
|
return document.getElementById("main-page").scrollHeight > document.documentElement.clientHeight
|
|
}
|
|
|
|
// rowClicked(dataset: DatasetListingModel) {
|
|
// this.router.navigate(['/datasets/edit/' + dataset.id]);
|
|
// }
|
|
}
|