import { Component, OnInit, ViewChild } from '@angular/core'; import { MatPaginator, MatSort } from '@angular/material'; 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 { ExploreDatasetCriteriaModel } from '../../core/query/explore-dataset/explore-dataset-criteria'; import { DatasetService } from '../../core/services/dataset/dataset.service'; import { DmpService } from '../../core/services/dmp/dmp.service'; @Component({ selector: 'app-explore-dataset-listing-component', templateUrl: 'explore-dataset-listing.component.html', styleUrls: ['./explore-dataset-listing.component.scss'], }) export class ExploreDatasetListingComponent extends BaseComponent implements OnInit { @ViewChild(MatPaginator) _paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; titlePrefix: String; dmpId: string; totalCount: number; dmpSearchEnabled = true; listingItems: DatasetListingModel[] = []; exploreDatasetCriteriaModel: ExploreDatasetCriteriaModel; constructor( private datasetService: DatasetService, private router: Router, private route: ActivatedRoute, private dmpService: DmpService, ) { super(); } ngOnInit() { this.route.params .pipe(takeUntil(this._destroyed)) .subscribe(async (params: Params) => { this.dmpId = params['dmpId']; this.refresh(); if (this.dmpId != null) { const dmp = await this.dmpService.getSingle(this.dmpId).toPromise(); if (params['dmpLabel'] !== undefined) { this.titlePrefix = 'for ' + params['dmpLabel']; } } }); } refresh() { const startIndex = this._paginator.pageIndex * this._paginator.pageSize; let fields: Array = new Array(); if (this.sort && this.sort.active) { fields = this.sort.direction === 'asc' ? ['+' + this.sort.active] : ['-' + this.sort.active]; } const request = new DataTableRequest(startIndex, this._paginator.pageSize, { fields: fields }); request.criteria = this.exploreDatasetCriteriaModel; this.datasetService.getPublicPaged(request).pipe(takeUntil(this._destroyed)).subscribe(result => { if (!result) { return []; } if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; } this.listingItems = result.data; }); } rowClicked(dataset: DatasetListingModel) { this.router.navigate(['/datasets/editPublic/' + dataset.id]); } onCriteriaChange(event: ExploreDatasetCriteriaModel) { console.log(event) this.exploreDatasetCriteriaModel = event; this.refresh(); } getDefaultCriteria(dmpId: String): DatasetCriteria { const defaultCriteria = new DatasetCriteria(); if (dmpId != null) { defaultCriteria.dmpIds.push(dmpId); } return defaultCriteria; } }