Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
This commit is contained in:
commit
21457bd9b0
|
@ -392,6 +392,7 @@ public class DmpServiceImpl implements DmpService {
|
||||||
newDmp.setStatus(DmpStatus.Draft);
|
newDmp.setStatus(DmpStatus.Draft);
|
||||||
newDmp.setProperties(oldDmpEntity.getProperties());
|
newDmp.setProperties(oldDmpEntity.getProperties());
|
||||||
newDmp.setBlueprintId(model.getBlueprintId());
|
newDmp.setBlueprintId(model.getBlueprintId());
|
||||||
|
newDmp.setAccessType(oldDmpEntity.getAccessType());
|
||||||
newDmp.setCreatorId(this.userScope.getUserId());
|
newDmp.setCreatorId(this.userScope.getUserId());
|
||||||
|
|
||||||
this.entityManager.persist(newDmp);
|
this.entityManager.persist(newDmp);
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -103,7 +103,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mt-2 stepper-actions justify-content-around">
|
<div class="row mt-3 stepper-actions justify-content-around">
|
||||||
<div class="col-auto mb-1">
|
<div class="col-auto mb-1">
|
||||||
<div mat-raised-button type="button" class="previous stepper-btn mr-2" [ngClass]="{'previous-disabled': this.step === 0}" (click)="previousStep()">
|
<div mat-raised-button type="button" class="previous stepper-btn mr-2" [ngClass]="{'previous-disabled': this.step === 0}" (click)="previousStep()">
|
||||||
<span class="material-icons">chevron_left</span>
|
<span class="material-icons">chevron_left</span>
|
||||||
|
@ -131,7 +131,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<app-form-progress-indication class="col-12" *ngIf="formGroup && !viewOnly" [formGroup]="formGroup" [isDescriptionEditor]="true"></app-form-progress-indication>
|
<app-form-progress-indication class="mt-2" *ngIf="formGroup && !viewOnly" [formGroup]="formGroup" [checkVisibility]="true"></app-form-progress-indication>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -628,6 +628,7 @@ export class DescriptionEditorComponent extends BaseEditor<DescriptionEditorMode
|
||||||
|
|
||||||
refreshData(): void {
|
refreshData(): void {
|
||||||
this.getItem(this.editorModel.id, (data: Description) => this.prepareForm(data));
|
this.getItem(this.editorModel.id, (data: Description) => this.prepareForm(data));
|
||||||
|
this.tocValidationService.validateForm();
|
||||||
}
|
}
|
||||||
|
|
||||||
refreshOnNavigateToData(id?: Guid): void {
|
refreshOnNavigateToData(id?: Guid): void {
|
||||||
|
@ -648,8 +649,7 @@ export class DescriptionEditorComponent extends BaseEditor<DescriptionEditorMode
|
||||||
this.descriptionService.persist(formData)
|
this.descriptionService.persist(formData)
|
||||||
.pipe(takeUntil(this._destroyed)).subscribe(
|
.pipe(takeUntil(this._destroyed)).subscribe(
|
||||||
complete => {
|
complete => {
|
||||||
onSuccess ? onSuccess(complete) : this.onCallbackSuccess(complete, this.isNew);
|
onSuccess ? onSuccess(complete) : this.onCallbackSuccess(complete);
|
||||||
this.tocValidationService.validateForm();
|
|
||||||
this.descriptionIsOnceSaved = true;
|
this.descriptionIsOnceSaved = true;
|
||||||
if (this.formGroup.get('status').value == DescriptionStatus.Finalized) this.isFinalized = true;
|
if (this.formGroup.get('status').value == DescriptionStatus.Finalized) this.isFinalized = true;
|
||||||
},
|
},
|
||||||
|
@ -666,8 +666,6 @@ export class DescriptionEditorComponent extends BaseEditor<DescriptionEditorMode
|
||||||
|
|
||||||
formSubmit(onSuccess?: (response) => void): void {
|
formSubmit(onSuccess?: (response) => void): void {
|
||||||
this.formService.removeAllBackEndErrors(this.formGroup);
|
this.formService.removeAllBackEndErrors(this.formGroup);
|
||||||
this.formService.touchAllFormFields(this.formGroup);
|
|
||||||
this.tocValidationService.validateForm();
|
|
||||||
if (this.formGroup.get('label').valid && this.formGroup.get('dmpId').valid && this.formGroup.get('dmpDescriptionTemplateId').valid
|
if (this.formGroup.get('label').valid && this.formGroup.get('dmpId').valid && this.formGroup.get('dmpDescriptionTemplateId').valid
|
||||||
&& this.formGroup.get('descriptionTemplateId').valid && this.formGroup.get('status').valid) {
|
&& this.formGroup.get('descriptionTemplateId').valid && this.formGroup.get('status').valid) {
|
||||||
this.persistEntity(onSuccess);
|
this.persistEntity(onSuccess);
|
||||||
|
@ -680,7 +678,7 @@ export class DescriptionEditorComponent extends BaseEditor<DescriptionEditorMode
|
||||||
saveAndClose(){
|
saveAndClose(){
|
||||||
this.formSubmit((data) => {
|
this.formSubmit((data) => {
|
||||||
this.uiNotificationService.snackBarNotification(this.isNew ? this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-CREATION') : this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success);
|
this.uiNotificationService.snackBarNotification(this.isNew ? this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-CREATION') : this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success);
|
||||||
this.refreshOnNavigateToData(data ? data.id : null);
|
this.formGroup = null;
|
||||||
this.backToDmp();
|
this.backToDmp();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,7 +82,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngSwitchCase="descriptionTemplateFieldTypeEnum.CHECK_BOX" class="col-12">
|
<div *ngSwitchCase="descriptionTemplateFieldTypeEnum.CHECK_BOX" class="col-12">
|
||||||
<mat-checkbox [formControl]="propertiesFormGroup?.get(field.id).get('textValue')">
|
<mat-checkbox [checked]="propertiesFormGroup?.get(field.id).get('textValue').value == 'true'" [disabled]="propertiesFormGroup?.get(field.id).get('textValue').disabled"(change)="checkBoxChanged($event)">
|
||||||
{{field.data.label}}</mat-checkbox>
|
{{field.data.label}}</mat-checkbox>
|
||||||
<mat-error *ngIf="propertiesFormGroup?.get(field.id).get('textValue').hasError('backendError')">{{propertiesFormGroup?.get(field.id).get('textValue').getError('backendError').message}}</mat-error>
|
<mat-error *ngIf="propertiesFormGroup?.get(field.id).get('textValue').hasError('backendError')">{{propertiesFormGroup?.get(field.id).get('textValue').getError('backendError').message}}</mat-error>
|
||||||
</div>
|
</div>
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
<mat-label>{{ (field.data.label | translate)}}</mat-label>
|
<mat-label>{{ (field.data.label | translate)}}</mat-label>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button *ngIf="propertiesFormGroup?.get(field.id).get('textValue').value && !filesToUpload" mat-button (click)="download()" type="button" class="attach-file-btn" [disabled]="propertiesFormGroup?.get(field.id).get('textValue').disabled">
|
<button *ngIf="propertiesFormGroup?.get(field.id).get('textValue').value && !filesToUpload" mat-button (click)="download()" type="button" class="attach-file-btn">
|
||||||
<mat-icon class="mr-2">download</mat-icon>
|
<mat-icon class="mr-2">download</mat-icon>
|
||||||
<mat-label>{{ "TYPES.DATASET-PROFILE-UPLOAD-TYPE.DOWNLOAD" | translate }}</mat-label>
|
<mat-label>{{ "TYPES.DATASET-PROFILE-UPLOAD-TYPE.DOWNLOAD" | translate }}</mat-label>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import { COMMA, ENTER } from '@angular/cdk/keycodes';
|
import { COMMA, ENTER } from '@angular/cdk/keycodes';
|
||||||
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, SimpleChanges } from '@angular/core';
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, SimpleChanges } from '@angular/core';
|
||||||
import { UntypedFormControl, UntypedFormGroup } from '@angular/forms';
|
import { UntypedFormControl, UntypedFormGroup } from '@angular/forms';
|
||||||
|
import { MatCheckboxChange } from '@angular/material/checkbox';
|
||||||
import { MatDialog } from "@angular/material/dialog";
|
import { MatDialog } from "@angular/material/dialog";
|
||||||
import { DescriptionTemplateFieldType } from '@app/core/common/enum/description-template-field-type';
|
import { DescriptionTemplateFieldType } from '@app/core/common/enum/description-template-field-type';
|
||||||
import { DescriptionTemplateFieldValidationType } from '@app/core/common/enum/description-template-field-validation-type';
|
import { DescriptionTemplateFieldValidationType } from '@app/core/common/enum/description-template-field-validation-type';
|
||||||
|
@ -116,6 +117,15 @@ export class DescriptionFormFieldComponent extends BaseComponent implements OnIn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkBoxChanged(event: MatCheckboxChange){
|
||||||
|
if (event.checked){
|
||||||
|
this.propertiesFormGroup?.get(this.field.id).get('textValue').setValue("true");
|
||||||
|
} else{
|
||||||
|
this.propertiesFormGroup?.get(this.field.id).get('textValue').setValue("false");
|
||||||
|
}
|
||||||
|
this.visibilityRulesService.reloadVisibility();
|
||||||
|
}
|
||||||
|
|
||||||
private applyFieldType(){
|
private applyFieldType(){
|
||||||
this.isRequired = this.field.validations?.includes(DescriptionTemplateFieldValidationType.Required);
|
this.isRequired = this.field.validations?.includes(DescriptionTemplateFieldValidationType.Required);
|
||||||
|
|
||||||
|
@ -164,7 +174,8 @@ export class DescriptionFormFieldComponent extends BaseComponent implements OnIn
|
||||||
// }
|
// }
|
||||||
break;
|
break;
|
||||||
case DescriptionTemplateFieldType.CHECK_BOX:
|
case DescriptionTemplateFieldType.CHECK_BOX:
|
||||||
this.propertiesFormGroup?.get(this.field.id).get('textValue').setValue(this.propertiesFormGroup?.get(this.field.id).get('textValue').value === 'true');
|
if (this.propertiesFormGroup?.get(this.field.id).get('textValue').value == undefined) this.propertiesFormGroup?.get(this.field.id).get('textValue').setValue("false");
|
||||||
|
this.visibilityRulesService.reloadVisibility();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
<div class="demo-progress-bar-container">
|
<div class="demo-progress-bar-container">
|
||||||
<div *ngIf="isEditor()" class="percentage d-flex justify-content-center">{{progressSoFar}} {{'GENERAL.PREPOSITIONS.OF' | translate}} {{total}}</div>
|
<div class="percentage d-flex justify-content-center"><span *ngIf="total>0">{{progressSoFar}} {{'GENERAL.PREPOSITIONS.OF' | translate}} {{total}}</span> </div>
|
||||||
<mat-progress-bar class="form-progress-bar" [ngClass]="{'progress-bar': isEditor()}" mode="determinate" [value]="value"></mat-progress-bar>
|
<mat-progress-bar *ngIf="value" class="form-progress-bar" [ngClass]="{'progress-bar': true}" mode="determinate" [value]="value"></mat-progress-bar>
|
||||||
<div *ngIf="isEditor()" class="percentage" [ngStyle]="{'padding-left': value ? value - 10 + '%' : 0 + '%' }">{{value}}%</div>
|
<mat-progress-bar *ngIf="!value" class="form-progress-bar" [ngClass]="{'progress-bar': true}" mode="determinate" [value]="0"></mat-progress-bar>
|
||||||
|
<div class="percentage" [ngStyle]="{'padding-left': value ? value - 10 + '%' : 0 + '%' }">
|
||||||
|
<span *ngIf="value">{{value}}%</span>
|
||||||
|
<span *ngIf="!value">0%</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,37 @@
|
||||||
.percentage {
|
// .percentage {
|
||||||
color: #212121;
|
// color: #212121;
|
||||||
opacity: 0.7;
|
// opacity: 0.7;
|
||||||
font-weight: 400;
|
// font-weight: 400;
|
||||||
font-size: 0.875rem;
|
// font-size: 0.875rem;
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
// .progress-bar {
|
||||||
|
// border-radius: 20px;
|
||||||
|
// height: 11px;
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// ::ng-deep .mat-progress-bar .mat-progress-bar-fill::after {
|
||||||
|
// border-radius: 20px !important;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Bar container
|
||||||
.progress-bar {
|
.progress-bar {
|
||||||
|
--mdc-linear-progress-active-indicator-height: 11px !important;
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
height: 11px;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
::ng-deep .mat-progress-bar .mat-progress-bar-fill::after {
|
//Progress bar
|
||||||
|
::ng-deep .mdc-linear-progress__bar-inner {
|
||||||
|
--mdc-linear-progress-active-indicator-color: var(--primary-color) !important;
|
||||||
border-radius: 20px !important;
|
border-radius: 20px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Buffer bar
|
||||||
|
::ng-deep .mdc-linear-progress__buffer {
|
||||||
|
--mdc-linear-progress-track-height: 11px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
::ng-deep .mdc-linear-progress__buffer-bar {
|
||||||
|
--mdc-linear-progress-track-color: #e0e2ec !important;
|
||||||
|
}
|
||||||
|
|
|
@ -11,13 +11,13 @@ import { takeUntil } from 'rxjs/operators';
|
||||||
})
|
})
|
||||||
export class FormProgressIndicationComponent extends BaseComponent implements OnInit, OnChanges {
|
export class FormProgressIndicationComponent extends BaseComponent implements OnInit, OnChanges {
|
||||||
@Input() formGroup: UntypedFormGroup;
|
@Input() formGroup: UntypedFormGroup;
|
||||||
@Input() isDmpEditor: boolean;
|
|
||||||
@Input() isDatasetEditor: boolean;
|
|
||||||
@Input() public progressValueAccuracy = 2;
|
@Input() public progressValueAccuracy = 2;
|
||||||
|
@Input() checkVisibility: boolean = false;
|
||||||
determinateProgressValue: number;
|
determinateProgressValue: number;
|
||||||
progressSoFar: number;
|
progressSoFar: number;
|
||||||
total: number;
|
total: number;
|
||||||
percent: number;
|
percent: number;
|
||||||
|
fieldTypes: string[] = ['dateValue', 'externalIdentifier.identifier', 'externalIdentifier.type', 'reference', 'references', 'textListValue', 'textValue'];
|
||||||
|
|
||||||
constructor(private visibilityRulesService: VisibilityRulesService) { super(); }
|
constructor(private visibilityRulesService: VisibilityRulesService) { super(); }
|
||||||
|
|
||||||
|
@ -43,20 +43,52 @@ export class FormProgressIndicationComponent extends BaseComponent implements On
|
||||||
}
|
}
|
||||||
|
|
||||||
calculateValueForProgressbar() {
|
calculateValueForProgressbar() {
|
||||||
if (this.isDmpEditor) {
|
this.progressSoFar = this.countRequiredFields(this.formGroup.get('properties'), this.checkVisibility, true);
|
||||||
this.progressSoFar = this.countFormControlsValidForProgress(this.formGroup);
|
this.total = this.countRequiredFields(this.formGroup.get('properties'), this.checkVisibility);
|
||||||
this.total = this.countFormControlsRequiredFieldsForTotal(this.formGroup);
|
|
||||||
} else if (this.isDatasetEditor) {
|
|
||||||
this.progressSoFar = this.countFormControlsValidForProgress(this.formGroup) + this.countFormControlsWithValueForProgress(this.formGroup);
|
|
||||||
this.total = this.countFormControlsRequiredFieldsForTotal(this.formGroup, true) + this.CountFormControlDepthLengthFotTotal(this.formGroup);
|
|
||||||
} else {
|
|
||||||
this.progressSoFar = this.countFormControlsWithValueForProgress(this.formGroup);
|
|
||||||
this.total = this.CountFormControlDepthLengthFotTotal(this.formGroup);
|
|
||||||
}
|
|
||||||
this.percent = (this.progressSoFar / this.total) * 100;
|
this.percent = (this.progressSoFar / this.total) * 100;
|
||||||
this.value = Number.parseFloat(this.percent.toPrecision(this.progressValueAccuracy));
|
this.value = Number.parseFloat(this.percent.toPrecision(this.progressValueAccuracy));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
countRequiredFields(formControl: AbstractControl, checkVisibility = false, countCompletedFields = false): number {
|
||||||
|
let valueCurrent = 0;
|
||||||
|
if (formControl instanceof UntypedFormGroup) {
|
||||||
|
if(!checkVisibility || (!formControl.get('id')?.value || (this.visibilityRulesService.isVisibleMap[formControl.get('id').value] ?? true))) {
|
||||||
|
Object.keys(formControl.controls).forEach(item => {
|
||||||
|
const control = formControl.get(item);
|
||||||
|
valueCurrent = valueCurrent + this.countRequiredFields(control, checkVisibility, countCompletedFields);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (formControl instanceof UntypedFormArray) {
|
||||||
|
formControl.controls.forEach(item => {
|
||||||
|
valueCurrent = valueCurrent + this.countRequiredFieldsByFieldset(item.get('ordinal').value, item.get('fields') as UntypedFormGroup, countCompletedFields);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return valueCurrent;
|
||||||
|
}
|
||||||
|
|
||||||
|
countRequiredFieldsByFieldset(ordinal: number, fieldsFormGroup: UntypedFormGroup, filterValid: boolean = false): number {
|
||||||
|
let fieldsCount: number = 0;
|
||||||
|
const fieldNames = Object.keys(fieldsFormGroup.controls);
|
||||||
|
for(let item of fieldNames) {
|
||||||
|
if (!this.checkVisibility || this.visibilityRulesService.isVisible(item, ordinal)) {
|
||||||
|
const fieldControl = fieldsFormGroup.get(item);
|
||||||
|
for (let fieldType of this.fieldTypes) {
|
||||||
|
const typedControl = fieldControl.get(fieldType);
|
||||||
|
let controlFilter: boolean = this.controlRequired(typedControl) && this.controlEnabled(typedControl);
|
||||||
|
if (filterValid) controlFilter = controlFilter && typedControl.valid;
|
||||||
|
|
||||||
|
if (controlFilter) {
|
||||||
|
fieldsCount ++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fieldsCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
countFormControlsWithValueForProgress(formControl: AbstractControl): number {
|
countFormControlsWithValueForProgress(formControl: AbstractControl): number {
|
||||||
let valueCurent = 0;
|
let valueCurent = 0;
|
||||||
if (formControl instanceof UntypedFormGroup) {
|
if (formControl instanceof UntypedFormGroup) {
|
||||||
|
@ -169,34 +201,15 @@ export class FormProgressIndicationComponent extends BaseComponent implements On
|
||||||
return valueCurrent;
|
return valueCurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
countFormControlsRequiredFieldsForTotal(formControl: AbstractControl, checkVisibility = false): number {
|
|
||||||
let valueCurrent = 0;
|
|
||||||
if (formControl instanceof UntypedFormControl) {
|
|
||||||
if (this.controlRequired(formControl) && this.controlEnabled(formControl)) {
|
|
||||||
valueCurrent++;
|
|
||||||
}
|
|
||||||
} else if (formControl instanceof UntypedFormGroup) {
|
|
||||||
if(!checkVisibility || (!formControl.get('id')?.value || (this.visibilityRulesService.isVisibleMap[formControl.get('id').value] ?? true))) {
|
|
||||||
Object.keys(formControl.controls).forEach(item => {
|
|
||||||
const control = formControl.get(item);
|
|
||||||
valueCurrent = valueCurrent + this.countFormControlsRequiredFieldsForTotal(control, checkVisibility);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else if (formControl instanceof UntypedFormArray) {
|
|
||||||
formControl.controls.forEach(item => {
|
|
||||||
valueCurrent = valueCurrent + this.countFormControlsRequiredFieldsForTotal(item, checkVisibility);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return valueCurrent;
|
|
||||||
}
|
|
||||||
|
|
||||||
controlRequired(formControl: AbstractControl) {
|
controlRequired(formControl: AbstractControl) {
|
||||||
if (formControl.validator) {
|
if (formControl.validator) {
|
||||||
const validator = formControl.validator({} as AbstractControl);
|
const validator = formControl.validator({} as AbstractControl);
|
||||||
if (validator && validator.required) {
|
if (validator && validator.required) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else { return false }
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
controlEnabled(formControl: AbstractControl) {
|
controlEnabled(formControl: AbstractControl) {
|
||||||
|
@ -204,8 +217,4 @@ export class FormProgressIndicationComponent extends BaseComponent implements On
|
||||||
return true;
|
return true;
|
||||||
} else { return false }
|
} else { return false }
|
||||||
}
|
}
|
||||||
|
|
||||||
isEditor(): boolean {
|
|
||||||
return this.isDmpEditor || this.isDatasetEditor;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,9 +31,8 @@
|
||||||
// Buffer bar
|
// Buffer bar
|
||||||
::ng-deep .mdc-linear-progress__buffer {
|
::ng-deep .mdc-linear-progress__buffer {
|
||||||
--mdc-linear-progress-track-height: 11px !important;
|
--mdc-linear-progress-track-height: 11px !important;
|
||||||
--mdc-linear-progress-active-indicator-color: var(--secondary-color) !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
::ng-deep .mdc-linear-progress__buffer-bar {
|
::ng-deep .mdc-linear-progress__buffer-bar {
|
||||||
--mdc-linear-progress-track-color: var(--secondary-color) !important;
|
--mdc-linear-progress-track-color: #e0e2ec !important;
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,12 +109,12 @@ export abstract class BaseEditor<EditorModelType extends BaseEditorModel, Entity
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
onCallbackSuccess(data?: any, refresh: boolean = true): void {
|
onCallbackSuccess(data?: any): void {
|
||||||
|
|
||||||
console.log("Success:", data);
|
console.log("Success:", data);
|
||||||
|
|
||||||
this.uiNotificationService.snackBarNotification(this.isNew ? this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-CREATION') : this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success);
|
this.uiNotificationService.snackBarNotification(this.isNew ? this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-CREATION') : this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success);
|
||||||
if (refresh) this.refreshOnNavigateToData(data ? data.id : null);
|
this.refreshOnNavigateToData(data ? data.id : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
onCallbackDeleteSuccess(data?: any): void {
|
onCallbackDeleteSuccess(data?: any): void {
|
||||||
|
|
|
@ -75,7 +75,7 @@ You can add one or more **fields** by clicking the `Add Field` button. For every
|
||||||
|
|
||||||
For a field you can specify:
|
For a field you can specify:
|
||||||
|
|
||||||
- **Field Type**: There are three field types available. `System`, `External Reference` and `Custom`. There is more information available in the [Field Types](/docs/documentation/administration/blueprints/field-types) section.
|
- **Field Type**: There are three field types available. `System`, `External Reference` and `Custom`. There is more information available in the [Field Types](/docs/documentation/administration/blueprints/field-types?t=blueprint) section.
|
||||||
- **System Field**: The specific system field we want to add. <br/>*Only applicable if we add a field of type `System`.*
|
- **System Field**: The specific system field we want to add. <br/>*Only applicable if we add a field of type `System`.*
|
||||||
- **Reference Type**: The type of external reference we want to add. For more information, you can refer to the [Reference Types](/docs/documentation/administration/reference-types) section of our docs.<br/>*Only applicable if we add a field of type `External Reference`.*
|
- **Reference Type**: The type of external reference we want to add. For more information, you can refer to the [Reference Types](/docs/documentation/administration/reference-types) section of our docs.<br/>*Only applicable if we add a field of type `External Reference`.*
|
||||||
- **Label**: A label for the field.
|
- **Label**: A label for the field.
|
||||||
|
|
|
@ -1 +1,44 @@
|
||||||
TODO: Add info about field types
|
import Tabs from '@theme/Tabs';
|
||||||
|
import TabItem from '@theme/TabItem';
|
||||||
|
|
||||||
|
In general, there are tree categories of fields that can be used.
|
||||||
|
|
||||||
|
- **System**: These are predefined fields that refer to system or specification information when filled by the end users. The available system fields are the following:
|
||||||
|
- **Title**: Refers to a title of an entity.
|
||||||
|
- **Description**: Refers to a description of an entity.
|
||||||
|
- **Language**: Refers to the language to be used. The languages being displayed to the end user are discussed [here](/docs/documentation/administration/languages).
|
||||||
|
- **Contact**: Refers to contact information about who should be responsible for the entity.
|
||||||
|
- **Access**: Indicates if an entity is publicly available. The end user will have to select between `Public` or `Restricted`.
|
||||||
|
- **User**: Refers to users registered to the platform.
|
||||||
|
- **External Reference**: These are fields that connect to a locally defined or an external source (an external API in most cases). There is more information available in the [Reference Types](/docs/documentation/administration/reference-types) section.
|
||||||
|
- **Custom**: These are generic fields that can be added to provide any type of information. The available data types are the following:
|
||||||
|
- **Text**
|
||||||
|
- **Rich Text**
|
||||||
|
- **Date**
|
||||||
|
- **Number**
|
||||||
|
|
||||||
|
:::info
|
||||||
|
|
||||||
|
Let's explore some specifics based on where these fields are getting setup.
|
||||||
|
<Tabs queryString="t">
|
||||||
|
<TabItem value="blueprint" label="Blueprints">
|
||||||
|
In the case of [plan blueprints](/docs/documentation/administration/blueprints/) you define the field you want by making two choices, what is the field category and then what is the system field type or the reference type or the data type respectively.
|
||||||
|
</TabItem>
|
||||||
|
<TabItem value="template" label="Description Templates">
|
||||||
|
In the case of [description templates](/docs/documentation/administration/templates/) the field type options are 'combined' in one dropdown control. The only difference here is that the options are separated inside that single dropdown based on the field category.
|
||||||
|
|
||||||
|
In the case of custom fields, you can specify the UI control that will be used in the forms. The elements that are supported are the following:
|
||||||
|
|
||||||
|
- **Text Area**: A regular text area (multiple lines)
|
||||||
|
- **Rich Text Area**: A rich text editor
|
||||||
|
- **Free Text**: A regular text box (one line)
|
||||||
|
- **File Upload**
|
||||||
|
- **Switch**
|
||||||
|
- **Radio Box**
|
||||||
|
- **Select**
|
||||||
|
- **Checkbox**
|
||||||
|
- **Date Picker**
|
||||||
|
</TabItem>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
|
:::
|
|
@ -1 +1,137 @@
|
||||||
TODO: Add info about semantics
|
import Tabs from '@theme/Tabs';
|
||||||
|
import TabItem from '@theme/TabItem';
|
||||||
|
|
||||||
|
:::info
|
||||||
|
|
||||||
|
By **Semantics** we mean a relation a field can have with a part of a data archive specification. When the users try to add semantics, a list of suggestions drops down, containing semantics for `RDA` and `Zenodo`.
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
These are the semantics suggestions.
|
||||||
|
|
||||||
|
<Tabs>
|
||||||
|
<TabItem value="rda" label="RDA" className="outer-tab">
|
||||||
|
<Tabs>
|
||||||
|
<TabItem value="plans" label="Plans">
|
||||||
|
- `rda.dmp.contact`
|
||||||
|
- `rda.dmp.contact.contact_id.identifier`
|
||||||
|
- `rda.dmp.contact.contact_id.type`
|
||||||
|
- `rda.dmp.contact.mbox`
|
||||||
|
- `rda.dmp.contact.name`
|
||||||
|
- `rda.dmp.contributor`
|
||||||
|
- `rda.dmp.contributor.contributor_id.identifier`
|
||||||
|
- `rda.dmp.contributor.contributor_id.type`
|
||||||
|
- `rda.dmp.contributor.mbox`
|
||||||
|
- `rda.dmp.contributor.name`
|
||||||
|
- `rda.dmp.contributor.role`
|
||||||
|
- `rda.dmp.cost`
|
||||||
|
- `rda.dmp.cost.currency_code`
|
||||||
|
- `rda.dmp.cost.description`
|
||||||
|
- `rda.dmp.cost.title`
|
||||||
|
- `rda.dmp.cost.value`
|
||||||
|
- `rda.dmp.created`
|
||||||
|
- `rda.dmp.description`
|
||||||
|
- `rda.dmp.dmp_id`
|
||||||
|
- `rda.dmp.dmp_id.identifier`
|
||||||
|
- `rda.dmp.dmp_id.type`
|
||||||
|
- `rda.dmp.ethical_issues_description`
|
||||||
|
- `rda.dmp.ethical_issues_exist`
|
||||||
|
- `rda.dmp.ethical_issues_report`
|
||||||
|
- `rda.dmp.language`
|
||||||
|
- `rda.dmp.modified`
|
||||||
|
- `rda.dmp.project`
|
||||||
|
- `rda.dmp.project.description`
|
||||||
|
- `rda.dmp.project.end`
|
||||||
|
- `rda.dmp.project.funding`
|
||||||
|
- `rda.dmp.project.funding.funder_id.identifier`
|
||||||
|
- `rda.dmp.project.funding.funder_id.type`
|
||||||
|
- `rda.dmp.project.funding.funding_status`
|
||||||
|
- `rda.dmp.project.funding.grant_id.identifier`
|
||||||
|
- `rda.dmp.project.funding.grant_id.type`
|
||||||
|
- `rda.dmp.project.start`
|
||||||
|
- `rda.dmp.dmp.project.title`
|
||||||
|
- `rda.dmp.title`
|
||||||
|
</TabItem>
|
||||||
|
<TabItem value="descriptions" label="Descriptions">
|
||||||
|
- `rda.dataset.data_quality_assurance`
|
||||||
|
- `rda.dataset.distribution.access_url`
|
||||||
|
- `rda.dataset.distribution.available_until`
|
||||||
|
- `rda.dataset.distribution.byte_size`
|
||||||
|
- `rda.dataset.distribution.data_access`
|
||||||
|
- `rda.dataset.distribution.description`
|
||||||
|
- `rda.dataset.distribution.download_url`
|
||||||
|
- `rda.dataset.distribution.format`
|
||||||
|
- `rda.dataset.distribution.host.availability`
|
||||||
|
- `rda.dataset.distribution.host.backup_frequency`
|
||||||
|
- `rda.dataset.distribution.host.backup_type`
|
||||||
|
- `rda.dataset.distribution.host.certified_with`
|
||||||
|
- `rda.dataset.distribution.host.description`
|
||||||
|
- `rda.dataset.distribution.host.geo_location`
|
||||||
|
- `rda.dataset.distribution.host.pid_system`
|
||||||
|
- `rda.dataset.distribution.host.storage_type`
|
||||||
|
- `rda.dataset.distribution.host.supports_versioning`
|
||||||
|
- `rda.dataset.distribution.host.title`
|
||||||
|
- `rda.dataset.distribution.host.url`
|
||||||
|
- `rda.dataset.distribution.license.license_ref`
|
||||||
|
- `rda.dataset.distribution.license.start_date`
|
||||||
|
- `rda.dataset.distribution.title`
|
||||||
|
- `rda.dataset.keyword`
|
||||||
|
- `rda.dataset.language`
|
||||||
|
- `rda.dataset.metadata.description`
|
||||||
|
- `rda.dataset.metadata.language`
|
||||||
|
- `rda.dataset.metadata.metadata_standard_id`
|
||||||
|
- `rda.dataset.metadata.metadata_standard_id.identifier`
|
||||||
|
- `rda.dataset.metadata.metadata_standard_id.type`
|
||||||
|
- `rda.dataset.personal_data`
|
||||||
|
- `rda.dataset.preservation_statement`
|
||||||
|
- `rda.dataset.security_and_privacy`
|
||||||
|
- `rda.dataset.security_and_privacy.description`
|
||||||
|
- `rda.dataset.security_and_privacy.title`
|
||||||
|
- `rda.dataset.sensitive_data`
|
||||||
|
- `rda.dataset.technical_resource.description`
|
||||||
|
- `rda.dataset.technical_resource.name`
|
||||||
|
- `rda.dataset.title`
|
||||||
|
- `rda.dataset.type`
|
||||||
|
- `rda.dataset.issued`
|
||||||
|
- `rda.dataset.dataset_id`
|
||||||
|
- `rda.dataset.dataset_id.identifier`
|
||||||
|
- `rda.dataset.dataset_id.type`
|
||||||
|
- `rda.dataset.description`
|
||||||
|
</TabItem>
|
||||||
|
</Tabs>
|
||||||
|
</TabItem>
|
||||||
|
<TabItem value="zenodo" label="Zenodo">
|
||||||
|
- `zenodo.related_identifiers.isCitedBy`
|
||||||
|
- `zenodo.related_identifiers.cites`
|
||||||
|
- `zenodo.related_identifiers.isSupplementTo`
|
||||||
|
- `zenodo.related_identifiers.isSupplementedBy`
|
||||||
|
- `zenodo.related_identifiers.isContinuedBy`
|
||||||
|
- `zenodo.related_identifiers.continues`
|
||||||
|
- `zenodo.related_identifiers.isDescribedBy`
|
||||||
|
- `zenodo.related_identifiers.describes`
|
||||||
|
- `zenodo.related_identifiers.hasMetadata`
|
||||||
|
- `zenodo.related_identifiers.isMetadataFor`
|
||||||
|
- `zenodo.related_identifiers.isNewVersionOf`
|
||||||
|
- `zenodo.related_identifiers.isPreviousVersionOf`
|
||||||
|
- `zenodo.related_identifiers.isPartOf`
|
||||||
|
- `zenodo.related_identifiers.hasPart`
|
||||||
|
- `zenodo.related_identifiers.isReferencedBy`
|
||||||
|
- `zenodo.related_identifiers.references`
|
||||||
|
- `zenodo.related_identifiers.isDocumentedBy`
|
||||||
|
- `zenodo.related_identifiers.documents`
|
||||||
|
- `zenodo.related_identifiers.isCompiledBy`
|
||||||
|
- `zenodo.related_identifiers.compiles`
|
||||||
|
- `zenodo.related_identifiers.isVariantFormOf`
|
||||||
|
- `zenodo.related_identifiers.isOriginalFormof`
|
||||||
|
- `zenodo.related_identifiers.isIdenticalTo`
|
||||||
|
- `zenodo.related_identifiers.isAlternateIdentifier`
|
||||||
|
- `zenodo.related_identifiers.isReviewedBy`
|
||||||
|
- `zenodo.related_identifiers.reviews`
|
||||||
|
- `zenodo.related_identifiers.isDerivedFrom`
|
||||||
|
- `zenodo.related_identifiers.isSourceOf`
|
||||||
|
- `zenodo.related_identifiers.requires`
|
||||||
|
- `zenodo.related_identifiers.isRequiredBy`
|
||||||
|
- `zenodo.related_identifiers.isObsoletedBy`
|
||||||
|
- `zenodo.related_identifiers.obsoletes`
|
||||||
|
</TabItem>
|
||||||
|
</Tabs>
|
|
@ -3,4 +3,4 @@ sidebar_position: 11
|
||||||
description: Configure the tenant you are logged in with
|
description: Configure the tenant you are logged in with
|
||||||
---
|
---
|
||||||
|
|
||||||
# Tenant configuration
|
# Tenant Configuration
|
|
@ -3,8 +3,8 @@ import type { Config } from '@docusaurus/types';
|
||||||
import type * as Preset from '@docusaurus/preset-classic';
|
import type * as Preset from '@docusaurus/preset-classic';
|
||||||
|
|
||||||
const config: Config = {
|
const config: Config = {
|
||||||
title: 'OpenDMP',
|
title: 'OpenCDMP',
|
||||||
tagline: 'OpenDMP',
|
tagline: 'OpenCDMP Docs',
|
||||||
favicon: 'img/favicon.ico',
|
favicon: 'img/favicon.ico',
|
||||||
|
|
||||||
// Set the production url of your site here
|
// Set the production url of your site here
|
||||||
|
@ -58,9 +58,9 @@ const config: Config = {
|
||||||
// Replace with your project's social card
|
// Replace with your project's social card
|
||||||
image: 'img/docusaurus-social-card.jpg',
|
image: 'img/docusaurus-social-card.jpg',
|
||||||
navbar: {
|
navbar: {
|
||||||
title: 'OpenDMP',
|
title: 'OpenCDMP',
|
||||||
logo: {
|
logo: {
|
||||||
alt: 'OpenDMP Logo',
|
alt: 'OpenCDMP Logo',
|
||||||
src: 'img/logo.svg',
|
src: 'img/logo.svg',
|
||||||
},
|
},
|
||||||
items: [
|
items: [
|
||||||
|
@ -78,7 +78,7 @@ const config: Config = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
href: 'https://test4.opendmp.eu/splash/',
|
href: 'https://test4.opendmp.eu/splash/',
|
||||||
label: 'Visit OpenDMP',
|
label: 'Visit OpenCDMP',
|
||||||
position: 'right',
|
position: 'right',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
@ -138,7 +138,7 @@ const config: Config = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
copyright: `Copyright © ${new Date().getFullYear()} OpenDMP. Built with Docusaurus.`,
|
copyright: `Copyright © ${new Date().getFullYear()} OpenCDMP. Built with Docusaurus.`,
|
||||||
},
|
},
|
||||||
prism: {
|
prism: {
|
||||||
theme: prismThemes.github,
|
theme: prismThemes.github,
|
||||||
|
|
|
@ -28,3 +28,7 @@
|
||||||
--ifm-color-primary-lightest: #4fddbf;
|
--ifm-color-primary-lightest: #4fddbf;
|
||||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
|
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.outer-tab {
|
||||||
|
margin-left: 1rem;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue