diff --git a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.html b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.html index 492cc3a6f..594ab4b80 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.html +++ b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.html @@ -6,18 +6,27 @@
- - + + - - + + + + + + + {{'CRITERIA.DATA-SETS.NONE'| translate}} {{enumUtils.toDatasetStatusString(statuses.Draft)}} {{enumUtils.toDatasetStatusString(statuses.Finalized)}} - - + +
diff --git a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.ts b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.ts index 2bcc3f26e..e408e3ca2 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.ts +++ b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.ts @@ -9,6 +9,12 @@ import { ExternalSourcesService } from '../../../../core/services/external-sourc import { EnumUtils } from '../../../../core/services/utilities/enum-utils.service'; import { RequestItem } from '../../../../core/query/request-item'; import { BaseCriteriaComponent } from '../../../misc/criteria/base-criteria.component'; +import { DmpCriteria } from '../../../../core/query/dmp/dmp-criteria'; +import { DmpService } from '../../../../core/services/dmp/dmp.service'; +import { DataTableRequest } from '../../../../core/model/data-table/data-table-request'; +import { DataTableData } from '../../../../core/model/data-table/data-table-data'; +import { DmpListingModel } from '../../../../core/model/dmp/dmp-listing'; +import { Input } from '@angular/core'; @Component({ selector: 'app-dataset-criteria-component', @@ -17,10 +23,10 @@ import { BaseCriteriaComponent } from '../../../misc/criteria/base-criteria.comp }) export class DatasetCriteriaComponent extends BaseCriteriaComponent implements OnInit { + @Input() dmpSearchEnabled; public criteria: any; public filteringTagsAsync = false; public filteredTags: ExternalSourceItemModel[]; - statuses = DatasetStatus; tagsAutoCompleteConfiguration = { @@ -30,9 +36,17 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O titleFn: (item) => item['name'] }; + dmpAutoCompleteConfiguration = { + filterFn: (x, excluded) => this.filterDmps(x).map(x => x.data), + initialItems: (extraData) => this.filterDmps('').map(x => x.data), + displayFn: (item) => item['label'], + titleFn: (item) => item['label'] + }; + constructor( private externalSourcesService: ExternalSourcesService, - public enumUtils: EnumUtils + public enumUtils: EnumUtils, + public dmpService: DmpService ) { super(new ValidationErrorModel()); } @@ -60,7 +74,6 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O } filterTags(value: string): Observable { - this.filteredTags = undefined; this.filteringTagsAsync = true; @@ -69,6 +82,14 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O criteria.like = value; requestItem.criteria = criteria; return this.externalSourcesService.searchDatasetTags(requestItem); + } + filterDmps(value: string): Observable> { + const fields: Array = new Array(); + fields.push('asc'); + const dmpDataTableRequest: DataTableRequest = new DataTableRequest(0, null, { fields: fields }); + dmpDataTableRequest.criteria = new DmpCriteria(); + dmpDataTableRequest.criteria.like = value; + return this.dmpService.getPaged(dmpDataTableRequest, "autocomplete"); } } diff --git a/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.html b/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.html index d8b8a93ae..f69c23264 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.html +++ b/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.html @@ -1,7 +1,7 @@

{{'DATASET-LISTING.TITLE' | translate}} {{titlePrefix}}

- + diff --git a/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts b/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts index e00fc6bd4..93ba77eb0 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts +++ b/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts @@ -34,6 +34,7 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB pageEvent: PageEvent; titlePrefix: String; dmpId: string; + dmpSearchEnabled = true; constructor( private datasetService: DatasetService, @@ -47,23 +48,24 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB super(); } - ngOnInit() { - this.route.params .pipe(takeUntil(this._destroyed)) .subscribe(async (params: Params) => { this.dmpId = params['dmpId']; - this.criteria.setCriteria(this.getDefaultCriteria(this.dmpId)); - this.refresh(); 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.breadCrumbs = Observable.of([{ 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.breadCrumbs = Observable.of([]); } }); @@ -77,7 +79,7 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB this.router.navigate(['/datasets/edit/' + rowId]); } - getDefaultCriteria(dmpId: String): DatasetCriteria { + getDefaultCriteria(dmpId: any = null): DatasetCriteria { const defaultCriteria = new DatasetCriteria(); if (dmpId != null) { defaultCriteria.dmpIds.push(dmpId); @@ -90,7 +92,6 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB .pipe(takeUntil(this._destroyed)) .subscribe(); } - } export class DatasetDataSource extends DataSource { @@ -106,7 +107,6 @@ export class DatasetDataSource extends DataSource { private dmpId: String ) { super(); - } connect(): Observable { @@ -115,7 +115,6 @@ export class DatasetDataSource extends DataSource { //this._sort.matSortChange ]; - return Observable.merge(...displayDataChanges) .startWith(null) .switchMap(() => { @@ -123,7 +122,13 @@ export class DatasetDataSource extends DataSource { let fields: Array = new Array(); if (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._criteria.criteria; + request.criteria = { + like: this._criteria.criteria.like, + status: this._criteria.criteria.status, + dmpIds: this._criteria.criteria.dmpIds ? this._criteria.criteria.dmpIds.map(x => x.id) : null, + tags: this._criteria.criteria.tags, + allVersions: this._criteria.criteria.allVersions + } if (this.dmpId) { request.criteria.allVersions = true; } return this._service.getPaged(request); }) diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index bc1383403..09eaf772f 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -270,7 +270,9 @@ "DMP-SEARCH": { "PLACEHOLDER": "Search DMP" }, - "ERROR-MESSAGE": "This DMP does not contain this Dataset Profile" + "COPY": "Copy", + "CANCEL": "Cancel", + "ERROR-MESSAGE": "Selected DMP does not contain this Dataset Profile" } }, "DATASET-LISTING": { @@ -419,7 +421,7 @@ "CRITERIA": { "FILTERS": "Filters", "PROJECTS": { - "LIKE": "Search", + "LIKE": "Search Projects", "PERIOD-FROM": "Project Start", "PERIOD-TO": "Project End", "PROJECT-STATE-TYPE": "Project Status", @@ -437,10 +439,11 @@ "PERIOD-TO": "End", "STATUS": "Status", "NONE": "-", - "TAGS": "Tags" + "TAGS": "Tags", + "LIKE": "Search Datasets" }, "DMP": { - "LIKE": "Search", + "LIKE": "Search DMPs", "PROJECTS": "Projects" }, "USERS": {