Merge branch 'ui-redesign' of gitlab.eudat.eu:dmp/OpenAIRE-EUDAT-DMP-service-pilot into ui-redesign
# Conflicts: # dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.html
This commit is contained in:
commit
2ebf413217
|
@ -57,8 +57,7 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static org.springframework.http.MediaType.APPLICATION_ATOM_XML;
|
import static org.springframework.http.MediaType.*;
|
||||||
import static org.springframework.http.MediaType.APPLICATION_JSON;
|
|
||||||
|
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
|
@ -256,8 +255,10 @@ public class DMPs extends BaseController {
|
||||||
public ResponseEntity<ResponseItem> dmpUpload(@RequestParam("file") MultipartFile[] files, @RequestParam(name = "profiles", required = false)String[] profiles, Principal principal) throws Exception {
|
public ResponseEntity<ResponseItem> dmpUpload(@RequestParam("file") MultipartFile[] files, @RequestParam(name = "profiles", required = false)String[] profiles, Principal principal) throws Exception {
|
||||||
if (files[0].getContentType().equals(APPLICATION_JSON.toString())) {
|
if (files[0].getContentType().equals(APPLICATION_JSON.toString())) {
|
||||||
this.dataManagementPlanManager.createFromRDA(files, principal, profiles);
|
this.dataManagementPlanManager.createFromRDA(files, principal, profiles);
|
||||||
} else if (files[0].getContentType().equals(APPLICATION_ATOM_XML.toString())) {
|
} else if (files[0].getContentType().equals(APPLICATION_ATOM_XML.toString()) || files[0].getContentType().equals(TEXT_XML.toString())) {
|
||||||
this.dataManagementPlanManager.createDmpFromXml(this.getApiContext(), files, principal);
|
this.dataManagementPlanManager.createDmpFromXml(this.getApiContext(), files, principal);
|
||||||
|
} else {
|
||||||
|
return ResponseEntity.badRequest().body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("File format is not supported"));
|
||||||
}
|
}
|
||||||
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List>()
|
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List>()
|
||||||
.status(ApiMessageCode.SUCCESS_MESSAGE));
|
.status(ApiMessageCode.SUCCESS_MESSAGE));
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package eu.eudat.logic.utilities.json;
|
||||||
|
|
||||||
|
public class JavaToJson {
|
||||||
|
|
||||||
|
public static String objectStringToJson(String object) {
|
||||||
|
String result = object.replaceAll("=", "\":\"")
|
||||||
|
.replaceAll("\\{", "{\"")
|
||||||
|
.replaceAll(", ", "\", \"")
|
||||||
|
.replaceAll("}", "\"}" ).
|
||||||
|
replaceAll("}\", \"\\{", "}, {");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
|
@ -53,6 +53,14 @@ public class DatasetId implements Serializable
|
||||||
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
|
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
|
||||||
private final static long serialVersionUID = -6295164005851378031L;
|
private final static long serialVersionUID = -6295164005851378031L;
|
||||||
|
|
||||||
|
public DatasetId() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public DatasetId(String identifier, Type type) {
|
||||||
|
this.identifier = identifier;
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Dataset Identifier Schema
|
* The Dataset Identifier Schema
|
||||||
* <p>
|
* <p>
|
||||||
|
|
|
@ -52,15 +52,17 @@ public class DatasetIdRDAMapper {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void finalRDAMap(DatasetId rda, String property, String value) {
|
private static void finalRDAMap(DatasetId rda, String property, String value) {
|
||||||
for (DatasetIdProperties datasetIdProperties : DatasetIdProperties.values()) {
|
if (value != null) {
|
||||||
if (property.contains(datasetIdProperties.getName())) {
|
for (DatasetIdProperties datasetIdProperties : DatasetIdProperties.values()) {
|
||||||
switch (datasetIdProperties) {
|
if (property.contains(datasetIdProperties.getName())) {
|
||||||
case IDENTIFIER:
|
switch (datasetIdProperties) {
|
||||||
rda.setIdentifier(value);
|
case IDENTIFIER:
|
||||||
break;
|
rda.setIdentifier(value);
|
||||||
case TYPE:
|
break;
|
||||||
rda.setType(DatasetId.Type.fromValue(value));
|
case TYPE:
|
||||||
break;
|
rda.setType(DatasetId.Type.fromValue(value));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel;
|
||||||
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
|
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
|
||||||
import eu.eudat.models.rda.Contributor;
|
import eu.eudat.models.rda.Contributor;
|
||||||
import eu.eudat.models.rda.Dataset;
|
import eu.eudat.models.rda.Dataset;
|
||||||
|
import eu.eudat.models.rda.DatasetId;
|
||||||
import eu.eudat.models.rda.Language;
|
import eu.eudat.models.rda.Language;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -56,11 +57,14 @@ public class DatasetRDAMapper {
|
||||||
if (!idNodes.isEmpty()) {
|
if (!idNodes.isEmpty()) {
|
||||||
rda.setDatasetId(DatasetIdRDAMapper.toRDA(idNodes));
|
rda.setDatasetId(DatasetIdRDAMapper.toRDA(idNodes));
|
||||||
}
|
}
|
||||||
|
if (rda.getDatasetId() == null) {
|
||||||
|
rda.setDatasetId(new DatasetId(dataset.getId().toString(), DatasetId.Type.OTHER));
|
||||||
|
}
|
||||||
List<JsonNode> typeNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.type");
|
List<JsonNode> typeNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.type");
|
||||||
if (!typeNodes.isEmpty()) {
|
if (!typeNodes.isEmpty()) {
|
||||||
rda.setType(typeNodes.get(0).get("value").asText());
|
rda.setType(typeNodes.get(0).get("value").asText());
|
||||||
} else {
|
} else {
|
||||||
rda.setType(dataset.getLabel());
|
rda.setType("DMP Dataset");
|
||||||
}
|
}
|
||||||
List<JsonNode> languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.language");
|
List<JsonNode> languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.language");
|
||||||
if (!languageNodes.isEmpty()) {
|
if (!languageNodes.isEmpty()) {
|
||||||
|
@ -93,9 +97,9 @@ public class DatasetRDAMapper {
|
||||||
rda.setKeyword(keywordNodes.stream().map(keywordNode -> {
|
rda.setKeyword(keywordNodes.stream().map(keywordNode -> {
|
||||||
JsonNode value = keywordNode.get("value");
|
JsonNode value = keywordNode.get("value");
|
||||||
if (value.isArray()) {
|
if (value.isArray()) {
|
||||||
return StreamSupport.stream(value.spliterator(), false).map(node -> KeywordRDAMapper.toRDA(node.asText())).collect(Collectors.toList());
|
return StreamSupport.stream(value.spliterator(), false).map(node -> KeywordRDAMapper.toRDA(node.asText())).flatMap(Collection::stream).collect(Collectors.toList());
|
||||||
} else {
|
} else {
|
||||||
return Collections.singletonList(KeywordRDAMapper.toRDA(keywordNode.get("value").asText()));
|
return KeywordRDAMapper.toRDA(keywordNode.get("value").asText());
|
||||||
}
|
}
|
||||||
}).flatMap(Collection::stream).collect(Collectors.toList()));
|
}).flatMap(Collection::stream).collect(Collectors.toList()));
|
||||||
for (int i = 0; i < keywordNodes.size(); i++) {
|
for (int i = 0; i < keywordNodes.size(); i++) {
|
||||||
|
@ -118,6 +122,8 @@ public class DatasetRDAMapper {
|
||||||
List<JsonNode> sensitiveDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.sensitive_data");
|
List<JsonNode> sensitiveDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.sensitive_data");
|
||||||
if (!sensitiveDataNodes.isEmpty()) {
|
if (!sensitiveDataNodes.isEmpty()) {
|
||||||
rda.setSensitiveData(sensitiveDataNodes.stream().map(sensitiveDataNode -> Dataset.SensitiveData.fromValue(sensitiveDataNode.get("value").asText())).findFirst().get());
|
rda.setSensitiveData(sensitiveDataNodes.stream().map(sensitiveDataNode -> Dataset.SensitiveData.fromValue(sensitiveDataNode.get("value").asText())).findFirst().get());
|
||||||
|
} else {
|
||||||
|
rda.setSensitiveData(Dataset.SensitiveData.UNKNOWN);
|
||||||
}
|
}
|
||||||
List<JsonNode> technicalResourceNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.technical_resource");
|
List<JsonNode> technicalResourceNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.technical_resource");
|
||||||
if (!technicalResourceNodes.isEmpty()) {
|
if (!technicalResourceNodes.isEmpty()) {
|
||||||
|
|
|
@ -31,6 +31,18 @@ public class DmpRDAMapper {
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Dmp toRDA(DMP dmp) {
|
public Dmp toRDA(DMP dmp) {
|
||||||
|
Map<String, Object> extraProperties;
|
||||||
|
if (dmp.getExtraProperties() == null) {
|
||||||
|
throw new IllegalArgumentException("DMP is missing required Data for RDA export");
|
||||||
|
} else {
|
||||||
|
extraProperties = new org.json.JSONObject(dmp.getExtraProperties()).toMap();
|
||||||
|
if (extraProperties.get("language") == null) {
|
||||||
|
throw new IllegalArgumentException("DMP must have it's language property defined");
|
||||||
|
}
|
||||||
|
if (extraProperties.get("contact") == null) {
|
||||||
|
throw new IllegalArgumentException("DMP must have it's contact property defined");
|
||||||
|
}
|
||||||
|
}
|
||||||
Dmp rda = new Dmp();
|
Dmp rda = new Dmp();
|
||||||
if (dmp.getDoi() != null && !dmp.getDoi().isEmpty()) {
|
if (dmp.getDoi() != null && !dmp.getDoi().isEmpty()) {
|
||||||
rda.setDmpId(DmpIdRDAMapper.toRDA(dmp.getDoi()));
|
rda.setDmpId(DmpIdRDAMapper.toRDA(dmp.getDoi()));
|
||||||
|
@ -42,11 +54,13 @@ public class DmpRDAMapper {
|
||||||
rda.setModified(dmp.getModified());
|
rda.setModified(dmp.getModified());
|
||||||
rda.setTitle(dmp.getLabel());
|
rda.setTitle(dmp.getLabel());
|
||||||
|
|
||||||
Map<String, Object> extraProperties = new org.json.JSONObject(dmp.getExtraProperties()).toMap();
|
|
||||||
if (!extraProperties.isEmpty()) {
|
if (!extraProperties.isEmpty()) {
|
||||||
if (extraProperties.get("language") != null) {
|
if (extraProperties.get("ethicalIssues") != null) {
|
||||||
rda.setLanguage(LanguageRDAMapper.mapLanguageIsoToRDAIso(extraProperties.get("language").toString()));
|
rda.setEthicalIssuesExist(Dmp.EthicalIssuesExist.fromValue(extraProperties.get("ethicalIsses").toString()));
|
||||||
|
} else {
|
||||||
|
rda.setEthicalIssuesExist(Dmp.EthicalIssuesExist.UNKNOWN);
|
||||||
}
|
}
|
||||||
|
rda.setLanguage(LanguageRDAMapper.mapLanguageIsoToRDAIso(extraProperties.get("language").toString()));
|
||||||
if (extraProperties.get("costs") != null) {
|
if (extraProperties.get("costs") != null) {
|
||||||
rda.setCost(new ArrayList<>());
|
rda.setCost(new ArrayList<>());
|
||||||
((List) extraProperties.get("costs")).forEach(costl -> {
|
((List) extraProperties.get("costs")).forEach(costl -> {
|
||||||
|
@ -59,10 +73,8 @@ public class DmpRDAMapper {
|
||||||
rda.getCost().add(cost);
|
rda.getCost().add(cost);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (extraProperties.get("contact") != null) {
|
UserInfo contact = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString((String) extraProperties.get("contact")));
|
||||||
UserInfo contact = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString((String)extraProperties.get("contact")));
|
rda.setContact(ContactRDAMapper.toRDA(contact));
|
||||||
rda.setContact(ContactRDAMapper.toRDA(contact));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*UserInfo creator;
|
/*UserInfo creator;
|
||||||
|
@ -101,7 +113,7 @@ public class DmpRDAMapper {
|
||||||
entity.getAssociatedDmps().add(exProfile);
|
entity.getAssociatedDmps().add(exProfile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (rda.getContributor() != null && !rda.getContributor().isEmpty()) {
|
if (rda.getContributor() != null && !rda.getContributor().isEmpty() && rda.getContributor().get(0).getContributorId() != null) {
|
||||||
entity.setResearchers(rda.getContributor().stream().map(ContributorRDAMapper::toEntity).filter(StreamDistinctBy.distinctByKey(Researcher::getReference)).collect(Collectors.toSet()));
|
entity.setResearchers(rda.getContributor().stream().map(ContributorRDAMapper::toEntity).filter(StreamDistinctBy.distinctByKey(Researcher::getReference)).collect(Collectors.toSet()));
|
||||||
}
|
}
|
||||||
entity.setCreated(rda.getCreated());
|
entity.setCreated(rda.getCreated());
|
||||||
|
|
|
@ -1,25 +1,29 @@
|
||||||
package eu.eudat.models.rda.mapper;
|
package eu.eudat.models.rda.mapper;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import eu.eudat.elastic.entities.Tag;
|
||||||
|
import eu.eudat.logic.utilities.json.JavaToJson;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.Map;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class KeywordRDAMapper {
|
public class KeywordRDAMapper {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(KeywordRDAMapper.class);
|
private static final Logger logger = LoggerFactory.getLogger(KeywordRDAMapper.class);
|
||||||
|
|
||||||
public static String toRDA(String value) {
|
public static List<String> toRDA(String value) {
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
try {
|
try {
|
||||||
Map<String, Object> map = mapper.readValue(value, HashMap.class);
|
value = JavaToJson.objectStringToJson(value);
|
||||||
return (String) map.get("name");
|
List<Tag> tags = Arrays.asList(mapper.readValue(value, Tag[].class));
|
||||||
|
List<String> keywordNames = tags.stream().map(Tag::getName).collect(Collectors.toList());
|
||||||
|
return keywordNames;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.error(e.getMessage(), e);
|
logger.error(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return value;
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,7 +127,8 @@ export class AuthService extends BaseService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public me(): Observable<Principal> {
|
public me(): Observable<Principal> {
|
||||||
const url = this.actionUrl + '/me';
|
this.actionUrl = this.configurationService.server + 'auth/';
|
||||||
|
const url = this.actionUrl + 'me';
|
||||||
const principal = this.current();
|
const principal = this.current();
|
||||||
if (!principal) {
|
if (!principal) {
|
||||||
this.clear();
|
this.clear();
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p *ngIf="listingItems && listingItems.length > 0" class="col-auto header-title">{{'GENERAL.TITLES.DATASETS' | translate}}</p>
|
<p *ngIf="listingItems && listingItems.length > 0" class="col-auto header-title">{{(isPublic ? 'GENERAL.TITLES.EXPLORE' : 'GENERAL.TITLES.DATASETS') | translate}}</p>
|
||||||
<div *ngIf="listingItems && listingItems.length > 0" class="ml-auto">
|
<div *ngIf="listingItems && listingItems.length > 0 && !isPublic" class="ml-auto">
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<button mat-raised-button class="add-dataset align-self-center yellow-btn" [routerLink]="['/new/dataset/']">
|
<button mat-raised-button class="add-dataset align-self-center yellow-btn" [routerLink]="['/new/dataset/']">
|
||||||
{{'DASHBOARD.ACTIONS.ADD-DATASET' | translate}}
|
{{'DASHBOARD.ACTIONS.ADD-DATASET' | translate}}
|
||||||
|
@ -46,7 +46,7 @@
|
||||||
<!-- End of Sort by -->
|
<!-- End of Sort by -->
|
||||||
<div class="d-flex flex-row ml-auto">
|
<div class="d-flex flex-row ml-auto">
|
||||||
<!-- Guided Tour -->
|
<!-- Guided Tour -->
|
||||||
<div class="center-content" (click)="restartTour()">
|
<div *ngIf="!isPublic" class="center-content" (click)="restartTour()">
|
||||||
{{ 'GENERAL.ACTIONS.TAKE-A-TOUR'| translate }}
|
{{ 'GENERAL.ACTIONS.TAKE-A-TOUR'| translate }}
|
||||||
</div>
|
</div>
|
||||||
<!-- End of Guided Tour -->
|
<!-- End of Guided Tour -->
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-auto d-flex align-items-center">
|
<div class="col-auto d-flex align-items-center">
|
||||||
<button *ngIf="!lockStatus" mat-raised-button class="dataset-save-btn" type="submit">{{ 'DATASET-WIZARD.ACTIONS.SAVE' | translate }}</button>
|
<button *ngIf="!lockStatus && !isFinalized" mat-raised-button class="dataset-save-btn" type="submit">{{ 'DATASET-WIZARD.ACTIONS.SAVE' | translate }}</button>
|
||||||
<button *ngIf="lockStatus" mat-raised-button disabled class="dataset-save-btn cursor-default" type="button">{{ 'DMP-OVERVIEW.LOCKED' | translate}}</button>
|
<button *ngIf="lockStatus" mat-raised-button disabled class="dataset-save-btn cursor-default" type="button">{{ 'DMP-OVERVIEW.LOCKED' | translate}}</button>
|
||||||
<!-- <div *ngIf="!isNew && formGroup.enabled && !lockStatus">
|
<!-- <div *ngIf="!isNew && formGroup.enabled && !lockStatus">
|
||||||
<button *ngIf="!isFinalized" mat-raised-button type="submit" class="dataset-save-btn">{{'DMP-EDITOR.ACTIONS.SAVE' | translate}}</button>
|
<button *ngIf="!isFinalized" mat-raised-button type="submit" class="dataset-save-btn">{{'DMP-EDITOR.ACTIONS.SAVE' | translate}}</button>
|
||||||
|
@ -96,7 +96,7 @@
|
||||||
</ul> -->
|
</ul> -->
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
<!-- <ul *ngIf="!isNewDataset && hasProfile()" class="add-dataset-option">
|
<!-- <ul *ngIf="!isNewDataset && hasProfile() && !isFinalized" class="add-dataset-option">
|
||||||
<li>
|
<li>
|
||||||
<a class="add-dataset-btn stepper-btn" (click)="addDataset()" target="_blank">
|
<a class="add-dataset-btn stepper-btn" (click)="addDataset()" target="_blank">
|
||||||
<mat-icon>add</mat-icon>{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}
|
<mat-icon>add</mat-icon>{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}
|
||||||
|
@ -117,7 +117,7 @@
|
||||||
<span class="material-icons">chevron_right</span>
|
<span class="material-icons">chevron_right</span>
|
||||||
<div>{{'DMP-EDITOR.STEPPER.NEXT' | translate}}</div>
|
<div>{{'DMP-EDITOR.STEPPER.NEXT' | translate}}</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="!isNewDataset && this.step >= 3 && hasProfile()" mat-raised-button type="button" class="col-auto add-dataset-option ml-auto">
|
<div *ngIf="!isNewDataset && this.step >= 3 && hasProfile() && !isFinalized" mat-raised-button type="button" class="col-auto add-dataset-option ml-auto">
|
||||||
<a class="add-dataset-btn stepper-btn" (click)="addDataset()" target="_blank">
|
<a class="add-dataset-btn stepper-btn" (click)="addDataset()" target="_blank">
|
||||||
<mat-icon>add</mat-icon>{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}
|
<mat-icon>add</mat-icon>{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<p class="mt-4 pt-2">{{'DMP-LISTING.TEXT-INFO-QUESTION' | translate}} <a class="zenodo-link" href="https://zenodo.org/communities/liber-dmp-cat/?page=1&size=20" target="_blank">{{'DMP-LISTING.LINK-ZENODO' | translate}}</a> {{'DMP-LISTING.GET-IDEA' | translate}}</p>
|
<p class="mt-4 pt-2">{{'DMP-LISTING.TEXT-INFO-QUESTION' | translate}} <a class="zenodo-link" href="https://zenodo.org/communities/liber-dmp-cat/?page=1&size=20" target="_blank">{{'DMP-LISTING.LINK-ZENODO' | translate}}</a> {{'DMP-LISTING.GET-IDEA' | translate}}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p *ngIf="listingItems && listingItems.length > 0" class="col-auto header-title">{{'GENERAL.TITLES.PLANS' | translate}}</p>
|
<p *ngIf="listingItems && listingItems.length > 0" class="col-auto header-title">{{(isPublic ? 'GENERAL.TITLES.EXPLORE-PLANS' : 'GENERAL.TITLES.PLANS') | translate}}</p>
|
||||||
<div *ngIf="listingItems && listingItems.length > 0" class="filter-btn" [style.right]="dialogAnimation.dialog.getDialogById('filters') ? '446px' : '0px'" [style.width]="scrollbar ? '57px' : '37px'" (click)="openFiltersDialog()">
|
<div *ngIf="listingItems && listingItems.length > 0" class="filter-btn" [style.right]="dialogAnimation.dialog.getDialogById('filters') ? '446px' : '0px'" [style.width]="scrollbar ? '57px' : '37px'" (click)="openFiltersDialog()">
|
||||||
<button mat-raised-button class="p-0">
|
<button mat-raised-button class="p-0">
|
||||||
<mat-icon class="mr-4">filter_alt</mat-icon>
|
<mat-icon class="mr-4">filter_alt</mat-icon>
|
||||||
|
@ -35,7 +35,7 @@
|
||||||
<div class="d-flex flex-row ml-auto">
|
<div class="d-flex flex-row ml-auto">
|
||||||
<!-- Guided Tour -->
|
<!-- Guided Tour -->
|
||||||
<!-- <div class="center-content" [style.display]="!isVisible && isAuthenticated()? 'block' : 'none'" (click)="restartTour()"> -->
|
<!-- <div class="center-content" [style.display]="!isVisible && isAuthenticated()? 'block' : 'none'" (click)="restartTour()"> -->
|
||||||
<div class="center-content" (click)="restartTour()">{{ 'GENERAL.ACTIONS.TAKE-A-TOUR'| translate }}</div>
|
<div *ngIf="!isPublic" class="center-content" (click)="restartTour()">{{ 'GENERAL.ACTIONS.TAKE-A-TOUR'| translate }}</div>
|
||||||
<!-- End of Guided Tour -->
|
<!-- End of Guided Tour -->
|
||||||
<!-- Search Filter-->
|
<!-- Search Filter-->
|
||||||
<mat-form-field class="search-form ml-auto col-auto pr-0"
|
<mat-form-field class="search-form ml-auto col-auto pr-0"
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
<div class="col-auto dmp-dataset-descriptions-name" *ngIf="last || i == 2">{{dataset.label}}</div>
|
<div class="col-auto dmp-dataset-descriptions-name" *ngIf="last || i == 2">{{dataset.label}}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a class="d-flex justify-content-center pb-3 show-more" *ngIf="dmp.datasets.length > 3" [routerLink]="['../plans/overview/' + dmp.id]"><u>{{'GENERAL.ACTIONS.SHOW-MORE' | translate}}</u></a>
|
<a class="d-flex justify-content-center pb-3 show-more" *ngIf="dmp.datasets.length > 3" [routerLink]="isPublic ? ['/explore-plans/publicOverview/' + dmp.id] : ['/plans/overview/' + dmp.id]"><u>{{'GENERAL.ACTIONS.SHOW-MORE' | translate}}</u></a>
|
||||||
</a>
|
</a>
|
||||||
<div class="dmp-card-actions">
|
<div class="dmp-card-actions">
|
||||||
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DMP-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DMP-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
||||||
|
|
|
@ -346,8 +346,16 @@ export class FormFieldComponent extends BaseComponent implements OnInit {
|
||||||
|
|
||||||
parseTags() {
|
parseTags() {
|
||||||
let stringValue = this.form.get('value').value;
|
let stringValue = this.form.get('value').value;
|
||||||
stringValue = (<string>stringValue).replace(new RegExp('{', 'g'), '{"').replace(new RegExp('=', 'g'), '":"').replace(new RegExp(',', 'g'), '",').replace(new RegExp(', ', 'g'), ', "').replace(new RegExp('}', 'g'), '"}');
|
if (typeof stringValue === 'string') {
|
||||||
stringValue = stringValue.replace(new RegExp('}"', 'g'), '}').replace(new RegExp('"{', 'g'), '{');
|
stringValue = (<string>stringValue).replace(new RegExp('{', 'g'), '{"').replace(new RegExp('=', 'g'), '":"').replace(new RegExp(',', 'g'), '",').replace(new RegExp(', ', 'g'), ', "').replace(new RegExp('}', 'g'), '"}');
|
||||||
|
stringValue = stringValue.replace(new RegExp('}"', 'g'), '}').replace(new RegExp('"{', 'g'), '{');
|
||||||
|
} else if (stringValue instanceof Array) {
|
||||||
|
const tempArray = new Array();
|
||||||
|
for (let stringTag of stringValue) {
|
||||||
|
tempArray.push(JSON.parse(stringTag));
|
||||||
|
}
|
||||||
|
stringValue = JSON.stringify(tempArray);
|
||||||
|
}
|
||||||
const tagArray = JSON.parse(stringValue);
|
const tagArray = JSON.parse(stringValue);
|
||||||
this.form.patchValue({'value': tagArray});
|
this.form.patchValue({'value': tagArray});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue