diff --git a/dmp-frontend/src/app/app.component.html b/dmp-frontend/src/app/app.component.html index 68f4c4a75..6243a45e8 100644 --- a/dmp-frontend/src/app/app.component.html +++ b/dmp-frontend/src/app/app.component.html @@ -5,7 +5,7 @@ -
+
diff --git a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html index aca54fa5f..d62bb2fc2 100644 --- a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html +++ b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html @@ -1,7 +1,6 @@
-
- +
{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}
{{'DATASET-LISTING.STATES.EDITED' | translate}}: {{activity.modified | date:"longDate"}}
diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.html b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.html index 5202bd3ec..c2902536d 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.html +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.html @@ -70,8 +70,7 @@
-
- +
{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}
{{'DATASET-LISTING.STATES.EDITED' | translate}}: {{activity.modified | date:"longDate"}}
diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.html b/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.html index 7a3b48a1f..89ab52de0 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.html +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.html @@ -2,8 +2,7 @@
-
- +
{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}
{{'DATASET-LISTING.STATES.EDITED' | translate}}: {{activity.modified | date:"longDate"}}
diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.ts index d4319f40b..bbb59b775 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.ts @@ -247,12 +247,10 @@ export class DatasetExternalReferencesEditorComponent extends BaseComponent impl } removeTag(tag: any) { - console.log((this.formGroup.get('tags')).value); (this.formGroup.get('tags')).removeAt(((this.formGroup.get('tags')).value as any[]).indexOf(tag)); } addTag(ev: MatChipInputEvent) { - console.log((this.formGroup.get('tags')).value); if (ev.value !== '' && isNullOrUndefined(((this.formGroup.get('tags')).value as ExternalTagEditorModel[]).find(tag => tag.name === ev.value))) { (this.formGroup.get('tags')).push(new ExternalTagEditorModel('', ev.value).buildForm()); } diff --git a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria-dialog.component.html b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria-dialog.component.html index a558369b6..8646ab950 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria-dialog.component.html +++ b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria-dialog.component.html @@ -1,2 +1,2 @@ clear - + diff --git a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria-dialog.component.ts b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria-dialog.component.ts index 945d900cf..c835030f6 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria-dialog.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria-dialog.component.ts @@ -1,17 +1,27 @@ -import { Inject, Component } from '@angular/core'; +import { Inject, Component, ViewChild, OnInit, Output, EventEmitter } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; +import { DmpCriteriaComponent } from './dmp-criteria.component'; +import { DmpCriteria } from '@app/core/query/dmp/dmp-criteria'; +import { FormGroup } from '@angular/forms'; @Component({ selector: 'dmp-criteria-dialog-component', templateUrl: './dmp-criteria-dialog.component.html', }) -export class DmpCriteriaDialogComponent { +export class DmpCriteriaDialogComponent implements OnInit { + + @ViewChild(DmpCriteriaComponent, { static: true }) criteria: DmpCriteriaComponent; constructor( public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: { showGrant: boolean, isPublic: boolean } - ) { } + @Inject(MAT_DIALOG_DATA) public data: { showGrant: boolean, isPublic: boolean, criteria: DmpCriteria, formGroup: FormGroup, updateDataFn: Function } + ) { + } + + ngOnInit() { + this.criteria.setCriteria(this.data.criteria); + } onNoClick(): void { this.dialogRef.close(); @@ -21,4 +31,8 @@ export class DmpCriteriaDialogComponent { this.dialogRef.close(); } + onFiltersChanged(event) { + this.data.updateDataFn(this.criteria); + } + } diff --git a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html index 737b12ee5..9fbde9a29 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html +++ b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html @@ -3,20 +3,20 @@
{{'CRITERIA.FILTERS'| translate}}
- +
{{ 'TYPES.DMP-VISIBILITY.VISIBILITY' | translate }}
- {{ 'TYPES.DMP-VISIBILITY.ANY' | translate }} + {{ 'TYPES.DMP-VISIBILITY.ANY' | translate }} {{ 'TYPES.DMP-VISIBILITY.PUBLIC' | translate }} {{ 'TYPES.DMP-VISIBILITY.FINALIZED' | translate }} {{ 'TYPES.DMP-VISIBILITY.DRAFT' | translate }} @@ -81,7 +81,7 @@
{{ 'DATASET-PROFILE-LISTING.COLUMNS.ROLE' | translate }}
- {{ 'TYPES.DATASET-ROLE.ANY' | translate }} + {{ 'TYPES.DATASET-ROLE.ANY' | translate }} {{ 'TYPES.DATASET-ROLE.OWNER' | translate }} {{ 'TYPES.DATASET-ROLE.MEMBER' | translate }} diff --git a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts index 2a990faec..54e4b4dd8 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts @@ -1,6 +1,6 @@ -import { Component, Input, OnInit } from '@angular/core'; -import { FormBuilder, FormControl } from '@angular/forms'; +import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core'; +import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; import { GrantListingModel } from '@app/core/model/grant/grant-listing'; @@ -34,6 +34,9 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni @Input() showGrant: boolean; @Input() isPublic: boolean; + @Input() criteriaFormGroup: FormGroup; + @Output() filtersChanged: EventEmitter = new EventEmitter(); + filteringGrantsAsync = false; sizeError = false; maxFileSize: number = 1048576; @@ -96,6 +99,15 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni ngOnInit() { super.ngOnInit(); + + // This if is just for passing label on chips of dialog + if (this.formGroup && this.criteriaFormGroup) { + this.formGroup.get('datasetTemplates').setValue(this.criteriaFormGroup.get('datasetTemplates').value); + this.formGroup.get('grants').setValue(this.criteriaFormGroup.get('grants').value); + this.formGroup.get('collaborators').setValue(this.criteriaFormGroup.get('collaborators').value); + this.formGroup.get('organisations').setValue(this.criteriaFormGroup.get('organisations').value); + } + this.formGroup.get('role').valueChanges .pipe(takeUntil(this._destroyed)) .subscribe(x => this.controlModified()); @@ -131,6 +143,7 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni this.formGroup.get('collaborators').patchValue(criteria.collaborators); this.formGroup.get('datasetTemplates').patchValue(criteria.datasetTemplates); this.formGroup.get('grantStatus').patchValue(criteria.grantStatus); + this.formGroup.get('organisations').patchValue(criteria.organisations); } onCallbackError(error: any) { @@ -139,6 +152,7 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni controlModified(): void { this.clearErrorModel(); + this.filtersChanged.emit(); if (this.refreshCallback != null && (this.formGroup.get('like').value == null || this.formGroup.get('like').value.length === 0 || this.formGroup.get('like').value.length > 2) ) { diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.html b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.html index ac5cf9a16..9a4aaf680 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.html +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.html @@ -8,18 +8,24 @@

{{'DMP-LISTING.TEXT-INFO-QUESTION' | translate}} {{'DMP-LISTING.LINK-ZENODO' | translate}} {{'DMP-LISTING.GET-IDEA' | translate}}

-
+
-
- -
-
+ + + search + + {{formGroup.get('like').getError('backendError').message}} + + +
-
+
diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.scss b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.scss index 3fe73fa18..09bb2e64f 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.scss +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.scss @@ -186,16 +186,32 @@ } .filter-btn { - position: fixed; - right: 0px; - z-index: 100; + position: fixed; + right: 0px; + z-index: 100; + width: 37px; } .filter-btn button { - color: white; - background-color: #23BCBA; - width: 52px; - height: 45px; + color: white; + background-color: #23bcba; + width: 37px; + height: 45px; +} + +.search-form { + // font-size: 12px; + text-align: left; + width: 17.5rem; +} + +.search-form mat-icon { + color: #129d99; +} + +::ng-deep .search-form .mat-form-field-wrapper { + background-color: white !important; + padding-bottom: 0 !important; } // .bot-paginator { diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts index 1f74408d3..d9c351631 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts @@ -24,6 +24,7 @@ import { UiNotificationService, SnackBarNotificationLevel } from '@app/core/serv import { isNullOrUndefined } from 'util'; import { AuthService } from '@app/core/services/auth/auth.service'; import { DmpCriteriaDialogComponent } from './criteria/dmp-criteria-dialog.component'; +import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; @Component({ @@ -35,7 +36,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread @ViewChild(MatPaginator, { static: true }) _paginator: MatPaginator; @ViewChild(MatSort, { static: false }) sort: MatSort; - @ViewChild(DmpCriteriaComponent, { static: true }) criteria: DmpCriteriaComponent; + // @ViewChild(DmpCriteriaComponent, { static: true }) criteria: DmpCriteriaComponent; breadCrumbs: Observable = observableOf([{ parentComponentName: null, label: 'DMPs', url: "/plans" }]); itemId: string; @@ -52,11 +53,17 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread startIndex: number = 0; pageSize: number = 5; + criteria: DmpCriteria; + criteriaFormGroup: FormGroup; + public formGroup = new FormBuilder().group({ + like: new FormControl() + }) + constructor( private dmpService: DmpService, private router: Router, private route: ActivatedRoute, - private dialog: MatDialog, + public dialog: MatDialog, public enumUtils: EnumUtils, private language: TranslateService, private grantService: GrantService, @@ -83,12 +90,14 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread // const grant: GrantListingModel = { // id: this.grantId // } - this.criteria.setCriteria({ like: null, grants: [grant], groupIds: null, allVersions: false }); + // this.breadCrumbs = Observable.of([{ parentComponentName: 'GrantEditorComponent', label: grantLabel, url: '/grants/edit/' + this.grantId }]); + grantLabel = this.route.snapshot.queryParams.grantLabel; + + this.criteria = { like: null, grants: [grant], groupIds: null, allVersions: false } + // this.criteria.setCriteria({ like: null, grants: [grant], groupIds: null, allVersions: false }); this.refresh(); - grantLabel = this.route.snapshot.queryParams.grantLabel; - // this.breadCrumbs = Observable.of([{ parentComponentName: 'GrantEditorComponent', label: grantLabel, url: '/grants/edit/' + this.grantId }]); - this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages)); + // this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages)); }) } else if (params['groupId']) { @@ -106,10 +115,12 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread }] ); }) - this.criteria.setCriteria(this.getDefaultCriteria()); this.groupLabel = this.route.snapshot.queryParams.groupLabel; + + // this.criteria.setCriteria(this.getDefaultCriteria()); + this.criteria = this.getDefaultCriteria(); this.refresh(); - this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages)); + // this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages)); } else { this.itemId = params['groupId']; this.showGrant = true; @@ -134,9 +145,10 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread }] ); }) - this.criteria.setCriteria(this.getDefaultCriteria()); + // this.criteria.setCriteria(this.getDefaultCriteria()); + this.criteria = this.getDefaultCriteria(); this.refresh(); - this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages)); + // this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages)); } if (this.grantId != null) { @@ -146,9 +158,13 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread } }); + + this.formGroup.get('like').valueChanges + .pipe(takeUntil(this._destroyed)) + .subscribe(x => this.controlModified()); } - refresh(resetPages = false) { + public 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; @@ -158,36 +174,10 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread fields.push('-modified'); const request = new DataTableRequest(this.startIndex, this.pageSize, { fields: fields }); - let value = this.criteria.formGroup.value; - request.criteria = { - like: value.like, - grants: value.grants, - role: value.role - } - if (value.status == 2) { - request.criteria.isPublic = true; - } else { - request.criteria.status = value.status; - request.criteria.isPublic = false; - } - request.criteria.onlyPublic = this.isPublic; - if (this.isPublic) { - request.criteria.isPublic = true; - } - if (value.datasetTemplates) - request.criteria.datasetTemplates = value.datasetTemplates.map(x => x.id); - if (value.collaborators) - request.criteria.collaborators = value.collaborators.map(x => x.id); - if (value.organisations) - request.criteria.organisations = value.organisations.map(x => x.id); - if (this.itemId) { - request.criteria.groupIds = [this.itemId]; - request.criteria.allVersions = true; - } - request.criteria.grantStatus = value.grantStatus; + request.criteria = this.criteria; + this.dmpService.getPaged(request, "listing").pipe(takeUntil(this._destroyed)).subscribe(result => { if (!result) { return []; } - // if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; } result.data.map(item => { item['datasets'].map(dmp => { dmp.url = 'datasets/edit/' + dmp.url; @@ -197,6 +187,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread return item; }); this.listingItems = result.data; + this.totalCount = result.totalCount; }); } @@ -204,37 +195,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread this.startIndex = this.startIndex + this.pageSize; const fields: Array = ["-modified"]; const request = new DataTableRequest(this.startIndex, this.pageSize, { fields: fields }); - - // request.criteria = new DmpCriteria(); - // request.criteria.like = ""; - - let value = this.criteria.formGroup.value; - request.criteria = { - like: value.like, - grants: value.grants, - role: value.role - } - if (value.status == 2) { - request.criteria.isPublic = true; - } else { - request.criteria.status = value.status; - request.criteria.isPublic = false; - } - request.criteria.onlyPublic = this.isPublic; - if (this.isPublic) { - request.criteria.isPublic = true; - } - if (value.datasetTemplates) - request.criteria.datasetTemplates = value.datasetTemplates.map(x => x.id); - if (value.collaborators) - request.criteria.collaborators = value.collaborators.map(x => x.id); - if (value.organisations) - request.criteria.organisations = value.organisations.map(x => x.id); - if (this.itemId) { - request.criteria.groupIds = [this.itemId]; - request.criteria.allVersions = true; - } - request.criteria.grantStatus = value.grantStatus; + request.criteria = this.criteria; this.dmpService.getPaged(request, "listing").pipe(takeUntil(this._destroyed)).subscribe(result => { if (!result) { return []; } @@ -254,6 +215,17 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread this.refresh(); } + 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.refresh(); + } + // rowClicked(dmp: DmpListingModel) { // this.router.navigate(['/plans/overview/' + dmp.id]); // } @@ -281,8 +253,6 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread openShareDialog(rowId: any, rowName: any) { const dialogRef = this.dialog.open(DmpInvitationDialogComponent, { - // height: '250px', - // width: '700px', data: { dmpId: rowId, dmpName: rowName @@ -324,7 +294,11 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread restoreFocus: false, data: { showGrant: this.showGrant, - isPublic: this.isPublic + isPublic: this.isPublic, + criteria: this.criteria, + formGroup: this.criteriaFormGroup, + // criteria: this.grantId ? this.criteria : this.getDefaultCriteria(), + updateDataFn: this.updateDataFn.bind(this) }, position: { right: '0px;' } }); @@ -332,6 +306,46 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread dialogRef.afterClosed().subscribe(result => { }); } + + updateDataFn(criteria: DmpCriteriaComponent): void { + this.criteriaFormGroup = criteria.formGroup; + this.toDmpCriteria(criteria); + this.refresh(); + } + + toDmpCriteria(criteria: DmpCriteriaComponent): void { + let formGroup = criteria.formGroup; + this.criteria = { + like: formGroup.get('like').value, + grants: formGroup.get('grants').value, + role: formGroup.get('role').value + } + this.criteria.status = formGroup.get('status').value; + if (formGroup.get('status').value == 2) { + this.criteria.isPublic = true; + } else { + this.criteria.isPublic = false; + } + this.criteria.onlyPublic = this.isPublic; + if (this.isPublic) { + this.criteria.isPublic = true; + } + if (formGroup.get('datasetTemplates').value) + this.criteria.datasetTemplates = formGroup.get('datasetTemplates').value.map(x => x.id); + if (formGroup.get('collaborators').value) + this.criteria.collaborators = formGroup.get('collaborators').value.map(x => x.id); + if (formGroup.get('organisations').value) + this.criteria.organisations = formGroup.get('organisations').value.map(x => x.id); + if (this.itemId) { + this.criteria.groupIds = [this.itemId]; + this.criteria.allVersions = true; + } + this.criteria.grantStatus = formGroup.get('grantStatus').value; + } + + hasScrollbar(): boolean { + return document.getElementById("main-page").scrollHeight > document.documentElement.clientHeight + } } // export class DmpDataSource extends DataSource { diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts index 11ad516ae..fb73baf7b 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts @@ -575,7 +575,6 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit { } copyDoi(doi) { - console.log(doi.nativeElement.innerHTML); let domElement = doi.nativeElement as HTMLInputElement; domElement.select(); document.execCommand('copy'); diff --git a/dmp-frontend/src/app/ui/misc/oauth2-dialog/oauth2-dialog.component.ts b/dmp-frontend/src/app/ui/misc/oauth2-dialog/oauth2-dialog.component.ts index 7d9c2f6aa..c73a6c673 100644 --- a/dmp-frontend/src/app/ui/misc/oauth2-dialog/oauth2-dialog.component.ts +++ b/dmp-frontend/src/app/ui/misc/oauth2-dialog/oauth2-dialog.component.ts @@ -29,7 +29,6 @@ export class Oauth2DialogComponent extends BaseComponent implements OnInit{ } private loadUrl(url: string ) { - console.log(url); window.location.href = url; }