diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java index c5bd7c8fe..e42cf89a1 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java @@ -17,6 +17,7 @@ public class DataManagementPlanCriteria extends Criteria { private Integer status; private List organisations; private Integer role; + private List collaborators; public Date getPeriodStart() { return periodStart; @@ -73,4 +74,11 @@ public class DataManagementPlanCriteria extends Criteria { public void setRole(Integer role) { this.role = role; } + + public List getCollaborators() { + return collaborators; + } + public void setCollaborators(List collaborators) { + this.collaborators = collaborators; + } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java index 6c2ca51b0..50a54ebe3 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java @@ -19,6 +19,7 @@ public class DatasetCriteria extends Criteria { private List organisations; private Integer role; private List projects; + private List collaborators; public boolean getAllVersions() { return allVersions; @@ -89,4 +90,11 @@ public class DatasetCriteria extends Criteria { public void setProjects(List projects) { this.projects = projects; } + + public List getCollaborators() { + return collaborators; + } + public void setCollaborators(List collaborators) { + this.collaborators = collaborators; + } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserInfoCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserInfoCriteria.java index 546a2f5f6..3d21d809e 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserInfoCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserInfoCriteria.java @@ -8,11 +8,11 @@ import java.util.List; public class UserInfoCriteria extends Criteria { private String email; private List appRoles; + private String collaboratorLike; public List getAppRoles() { return appRoles; } - public void setAppRoles(List appRoles) { this.appRoles = appRoles; } @@ -20,8 +20,14 @@ public class UserInfoCriteria extends Criteria { public String getEmail() { return email; } - public void setEmail(String email) { this.email = email; } + + public String getCollaboratorLike() { + return collaboratorLike; + } + public void setCollaboratorLike(String collaboratorLike) { + this.collaboratorLike = collaboratorLike; + } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java index 625299c18..34cee13a8 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java @@ -13,6 +13,7 @@ import eu.eudat.queryable.types.SelectionField; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import schemasMicrosoftComOfficeOffice.LeftDocument; import javax.persistence.criteria.JoinType; import java.util.Arrays; @@ -64,6 +65,9 @@ public class DMPDaoImpl extends DatabaseAccess implements DMPDao { if (criteria.getOrganisations() != null && !criteria.getOrganisations().isEmpty()) { query.where((builder, root) -> root.join("organisations").get("reference").in(criteria.getOrganisations())); } + if (criteria.getCollaborators() != null && !criteria.getCollaborators().isEmpty()) { + query.where((builder, root) -> root.join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id").in(criteria.getCollaborators())); + } query.where((builder, root) -> builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue())); return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java index 59f19e4b8..460dccbcc 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java @@ -52,6 +52,9 @@ public class DatasetDaoImpl extends DatabaseAccess implements DatasetDa if (criteria.getProjects() != null && !criteria.getProjects().isEmpty()) { query.where((builder, root) -> root.join("dmp").join("project").get("id").in(criteria.getProjects())); } + if (criteria.getCollaborators() != null && !criteria.getCollaborators().isEmpty()) { + query.where((builder, root) -> root.join("dmp", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id").in(criteria.getCollaborators())); + } query.where(((builder, root) -> builder.notEqual(root.get("status"), Dataset.Status.DELETED.getValue()))); return query; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Users.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Users.java index a54c9e0d1..820f94cee 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Users.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Users.java @@ -66,6 +66,13 @@ public class Users extends BaseController { userManager.updateSettings(settings, principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE)); } + + @RequestMapping(method = RequestMethod.POST, value = {"/getCollaboratorsPaged"}, consumes = "application/json", produces = "application/json") + public @ResponseBody + ResponseEntity>> getCollaboratorsPaged(@Valid @RequestBody UserInfoTableRequestItem userInfoTableRequestItem, @ClaimedAuthorities(claims = {ADMIN}) Principal principal) throws Exception { + DataTableData dataTable = userManager.getCollaboratorsPaged(userInfoTableRequestItem, principal); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().payload(dataTable).status(ApiMessageCode.NO_MESSAGE)); + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java index 4df08f2d3..6a227eab5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java @@ -1,7 +1,11 @@ package eu.eudat.logic.managers; import com.fasterxml.jackson.databind.ObjectMapper; +import eu.eudat.data.dao.criteria.DataManagementPlanCriteria; +import eu.eudat.data.dao.entities.DMPDao; +import eu.eudat.data.dao.entities.UserInfoDao; import eu.eudat.data.entities.DMP; +import eu.eudat.data.entities.UserDMP; import eu.eudat.data.entities.UserRole; import eu.eudat.data.query.items.table.userinfo.UserInfoTableRequestItem; import eu.eudat.exceptions.security.UnauthorisedException; @@ -15,6 +19,7 @@ import eu.eudat.models.data.dmp.DataManagementPlan; import eu.eudat.models.data.helpers.common.DataTableData; import eu.eudat.models.data.login.Credentials; import eu.eudat.models.data.security.Principal; +import eu.eudat.models.data.userinfo.UserInfo; import eu.eudat.models.data.userinfo.UserListingModel; import eu.eudat.models.data.userinfo.UserProfile; import eu.eudat.queryable.QueryableList; @@ -25,10 +30,7 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; @Component @@ -93,4 +95,49 @@ public class UserManager { if (principal == null) throw new UnauthorisedException("Could not Sign In User"); return principal; } + + public DataTableData getCollaboratorsPaged(UserInfoTableRequestItem userInfoTableRequestItem, Principal principal) throws Exception { + //UserInfoDao userInfoDao = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao(); + DMPDao dmpDao = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(); + + // Gets all the DMPs the user is associated. + DataManagementPlanCriteria dataManagementPlanCriteria = new DataManagementPlanCriteria(); + QueryableList dmpItmes = dmpDao.getWithCriteria(dataManagementPlanCriteria); + QueryableList dmpAuthItems = dmpDao.getAuthenticated(dmpItmes, principal.getId()); + List dmpList = dmpAuthItems.toList(); + + // List to place the associated users. + List associatedUsersList = new LinkedList<>(); + + // Iterate through the DMP list and get the users associated. + for (DMP dmp : dmpList) { + for (UserDMP userDMP : dmp.getUsers()) { + if (userDMP.getUser().getId() != principal.getId()) { + associatedUsersList.add(new UserListingModel().fromDataModel(userDMP.getUser())); + } + } + } + + // Remove duplicates from the associated users list. + associatedUsersList = associatedUsersList.stream().distinct().collect(Collectors.toList()); + + // Filter using the criteria. + List associatedUsersListFiltered = new LinkedList<>(); + associatedUsersList.stream() + .filter(item -> item.getName().toLowerCase().contains(userInfoTableRequestItem.getCriteria().getCollaboratorLike().toLowerCase())).forEach( + o -> { + associatedUsersListFiltered.add(o); + } + ); + + /*QueryableList users = userInfoDao.getWithCriteria(userInfoTableRequestItem.getCriteria()).withHint(HintedModelFactory.getHint(UserListingModel.class)); + QueryableList pagedUsers = PaginationManager.applyPaging(users, userInfoTableRequestItem);*/ + + //List modelUsers = pagedUsers.select(item -> new listing model().fromDataModel(item)); + + DataTableData dataTableData = new DataTableData<>(); + dataTableData.setData(associatedUsersListFiltered); + dataTableData.setTotalCount((long)associatedUsersListFiltered.size()); + return dataTableData; + } } diff --git a/dmp-frontend/src/app/core/query/dataset/dataset-criteria.ts b/dmp-frontend/src/app/core/query/dataset/dataset-criteria.ts index f063ab6a3..1367e1bb9 100644 --- a/dmp-frontend/src/app/core/query/dataset/dataset-criteria.ts +++ b/dmp-frontend/src/app/core/query/dataset/dataset-criteria.ts @@ -9,4 +9,5 @@ export class DatasetCriteria extends BaseCriteria { public allVersions?: boolean; public role?: number; public organisations?: string[] = []; + public collaborators?: string[] = []; } diff --git a/dmp-frontend/src/app/core/query/dmp/dmp-criteria.ts b/dmp-frontend/src/app/core/query/dmp/dmp-criteria.ts index 8c40643e5..2f0bdaa9b 100644 --- a/dmp-frontend/src/app/core/query/dmp/dmp-criteria.ts +++ b/dmp-frontend/src/app/core/query/dmp/dmp-criteria.ts @@ -9,4 +9,5 @@ export class DmpCriteria extends BaseCriteria { public allVersions?: boolean; public status?: number; public role?: number; + public collaborators?: string[] = []; } diff --git a/dmp-frontend/src/app/core/query/user/user-criteria.ts b/dmp-frontend/src/app/core/query/user/user-criteria.ts index 5d0c631a2..17c986c48 100644 --- a/dmp-frontend/src/app/core/query/user/user-criteria.ts +++ b/dmp-frontend/src/app/core/query/user/user-criteria.ts @@ -4,4 +4,5 @@ import { BaseCriteria } from "../base-criteria"; export class UserCriteria extends BaseCriteria { public label: String; public appRoles: AppRole[]; + public collaboratorLike: string; } diff --git a/dmp-frontend/src/app/core/services/user/user.service.ts b/dmp-frontend/src/app/core/services/user/user.service.ts index 38a028b05..b4c8659a2 100644 --- a/dmp-frontend/src/app/core/services/user/user.service.ts +++ b/dmp-frontend/src/app/core/services/user/user.service.ts @@ -16,7 +16,7 @@ export class UserService { constructor(private http: BaseHttpService) { - this.actionUrl = environment.Server + '/user/'; + this.actionUrl = environment.Server + 'user/'; } getPaged(dataTableRequest: DataTableRequest): Observable> { @@ -42,4 +42,8 @@ export class UserService { updateUserSettings(value: any): Observable { return this.http.post(this.actionUrl + 'settings', value, { headers: this.headers }); } + + getCollaboratorsPaged(dataTableRequest: DataTableRequest): Observable> { + return this.http.post>(this.actionUrl + 'getCollaboratorsPaged', JSON.stringify(dataTableRequest), { headers: this.headers }); + } } 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 f592f3d80..97fe399b5 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 @@ -49,6 +49,19 @@ + +
+
{{'CRITERIA.DATA-SETS.RELATED-COLLABORATORS' | translate}}
+ + + + arrow_drop_down + +
+ +
{{'CRITERIA.DATA-SETS.ROLE' | translate }}
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 024c24d12..3781bad54 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 @@ -30,6 +30,8 @@ import { OrganisationCriteria } from '../../../../core/query/organisation/organi import { OrganisationService } from '../../../../core/services/organisation/organisation.service'; import { ProjectCriteria } from '../../../../core/query/project/project-criteria'; import { ProjectService } from '../../../../core/services/project/project.service'; +import { UserCriteria } from '../../../../core/query/user/user-criteria'; +import { UserService } from '../../../../core/services/user/user.service'; @Component({ selector: 'app-dataset-criteria-component', @@ -52,7 +54,8 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O projects: new FormControl(), status: new FormControl(), role: new FormControl(), - organisations: new FormControl() + organisations: new FormControl(), + collaborators: new FormControl(), }); tagsAutoCompleteConfiguration = { @@ -69,6 +72,13 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O titleFn: (item) => item['label'] }; + collaboratorsAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { + filterFn: this.filterCollaborators.bind(this), + initialItems: (excludedItems: any[]) => this.filterCollaborators('').map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1)), + displayFn: (item) => item['name'], + titleFn: (item) => item['name'] + }; + projectAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterProject.bind(this), initialItems: (excludedItems: any[]) => this.filterProject('').map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1)), @@ -95,6 +105,7 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O private language: TranslateService, public projectService: ProjectService, private organisationService: OrganisationService, + private userService: UserService, fb: FormBuilder ) { super(new ValidationErrorModel()); @@ -124,6 +135,10 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O this.formGroup.get('organisations').valueChanges .pipe(takeUntil(this._destroyed)) .subscribe(x => this.controlModified()); + this.formGroup.get('collaborators').valueChanges + .pipe(takeUntil(this._destroyed)) + .subscribe(x => this.controlModified()); + // if (this.criteria == null) { this.criteria = {}; } } @@ -131,8 +146,9 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O this.formGroup.get('like').patchValue(criteria.like); this.formGroup.get('dmpIds').patchValue(criteria.dmpIds); this.formGroup.get('projects').patchValue(criteria.projects); - this.formGroup.get('status').patchValue(criteria.like); - this.formGroup.get('role').patchValue(criteria.like); + this.formGroup.get('status').patchValue(criteria.status); + this.formGroup.get('role').patchValue(criteria.role); + this.formGroup.get('collaborators').patchValue(criteria.collaborators); // this.criteria = criteria; } @@ -188,6 +204,15 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O return this.organisationService.searchInternalOrganisations(dataTableRequest).map(x => x.data); } + filterCollaborators(query: string) { + const fields: Array = new Array(); + fields.push('asc'); + const collaboratorsRequestItem: DataTableRequest = new DataTableRequest(0, null, { fields: fields }); + collaboratorsRequestItem.criteria = new UserCriteria(); + collaboratorsRequestItem.criteria.collaboratorLike = query; + return this.userService.getCollaboratorsPaged(collaboratorsRequestItem).map(x => x.data); + } + fileImport(event) { const dialogRef = this.dialog.open(DatasetUploadDialogue, { data: { 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 c9053da87..f050c4196 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 @@ -85,6 +85,9 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB allVersions: value.allVersions, role: value.role } + if (value.collaborators) { + request.criteria.collaborators = value.collaborators.map(x => x.id) + } if (value.dmpIds) { request.criteria.dmpIds = value.dmpIds.map(x => x.id); } 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 0a4966068..d5497f519 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 @@ -38,13 +38,13 @@
-
{{ 'DMP-RELATED-COLLABORATOR.RELATED-COLLABORATOR' | translate}}
+
{{ 'CRITERIA.DMP.RELATED-COLLABORATORS' | translate}}
- - + + + arrow_drop_down
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 9c060eb80..653667cb0 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 @@ -21,6 +21,8 @@ import { OrganisationService } from '../../../../core/services/organisation/orga import { OrganisationCriteria } from '../../../../core/query/organisation/organisation-criteria'; import { OrganizationModel } from '../../../../core/model/organisation/organization'; import { DataTableData } from '../../../../core/model/data-table/data-table-data'; +import { UserCriteria } from '../../../../core/query/user/user-criteria'; +import { UserService } from '../../../../core/services/user/user.service'; @Component({ selector: 'app-dmp-criteria-component', @@ -40,10 +42,18 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni like: new FormControl(), projects: new FormControl(), status: new FormControl(), + role: new FormControl, organisations: new FormControl(), - role: new FormControl + collaborators: new FormControl(), }); + collaboratorsAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { + filterFn: this.filterCollaborators.bind(this), + initialItems: (excludedItems: any[]) => this.filterCollaborators('').map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1)), + displayFn: (item) => item['name'], + titleFn: (item) => item['name'] + }; + projectAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterProject.bind(this), initialItems: (excludedItems: any[]) => this.filterProject('').map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1)), @@ -64,7 +74,8 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni private dmpService: DmpService, public formBuilder: FormBuilder, private dialog: MatDialog, - private organisationService: OrganisationService + private organisationService: OrganisationService, + private userService: UserService, ) { super(new ValidationErrorModel()); } @@ -86,6 +97,9 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni this.formGroup.get('like').valueChanges .pipe(takeUntil(this._destroyed)) .subscribe(x => this.controlModified()); + this.formGroup.get('collaborators').valueChanges + .pipe(takeUntil(this._destroyed)) + .subscribe(x => this.controlModified()); //if (this.criteria == null) { this.criteria = new DataManagementPlanCriteria(); } } @@ -93,6 +107,8 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni this.formGroup.get('like').patchValue(criteria.like); this.formGroup.get('projects').patchValue(criteria.projects); this.formGroup.get('status').patchValue(criteria.status); + this.formGroup.get('role').patchValue(criteria.role); + this.formGroup.get('collaborators').patchValue(criteria.collaborators); } onCallbackError(error: any) { @@ -128,6 +144,15 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni return this.organisationService.searchInternalOrganisations(dataTableRequest).map(x => x.data); } + filterCollaborators(query: string) { + const fields: Array = new Array(); + fields.push('asc'); + const collaboratorsRequestItem: DataTableRequest = new DataTableRequest(0, null, { fields: fields }); + collaboratorsRequestItem.criteria = new UserCriteria(); + collaboratorsRequestItem.criteria.collaboratorLike = query; + return this.userService.getCollaboratorsPaged(collaboratorsRequestItem).map(x => x.data); + } + fileSave(event) { const dialogRef = this.dialog.open(DmpUploadDialogue, { data: { 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 37f05cbf6..aad015d85 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 @@ -100,6 +100,9 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread status: value.status, role: value.role } + if (value.collaborators) { + request.criteria.collaborators = value.collaborators.map(x => x.id) + } if (value.organisations) { request.criteria.organisations = value.organisations.map(x => x.id) } diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index e2edde7d5..7dbf871f3 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -493,12 +493,16 @@ "SELECT-SPEC": "Select Dataset Specification", "RELATED-PROJECT": "Related Project", "SELECT-DMP": "Select DMP", - "RELATED-DMP": "Related DMPs" + "RELATED-DMP": "Related DMPs", + "SELECT-COLLABORATORS": "Select Collaborators", + "RELATED-COLLABORATORS": "Related Collaborators" }, "DMP": { "LIKE": "Search DMPs", "PROJECTS": "Projects", - "SELECT-PROJECTS": "Select Projects" + "SELECT-PROJECTS": "Select Projects", + "SELECT-COLLABORATORS": "Select Collaborators", + "RELATED-COLLABORATORS": "Related Collaborators" }, "USERS": { "LABEL": "Search",