diff --git a/dmp-frontend/src/app/ui/dmp/dmp.module.ts b/dmp-frontend/src/app/ui/dmp/dmp.module.ts
index 243f3e605..3f37ce449 100644
--- a/dmp-frontend/src/app/ui/dmp/dmp.module.ts
+++ b/dmp-frontend/src/app/ui/dmp/dmp.module.ts
@@ -46,6 +46,8 @@ import { LicenseInfoComponent } from './editor/license-info/license-info.compone
import { StartNewDatasetDialogComponent } from './start-new-dataset-dialogue/start-new-dataset-dialog.component';
import { NgxDropzoneModule } from 'ngx-dropzone';
import { DmpToDatasetDialogComponent } from './dmp-to-dataset/dmp-to-dataset-dialog.component';
+import { FormProgressIndicationComponent } from '../misc/dataset-description-form/components/form-progress-indication/form-progress-indication.component';
+import { FormProgressIndicationModule } from '../misc/dataset-description-form/components/form-progress-indication/form-progress-indication.module';
@NgModule({
imports: [
@@ -62,7 +64,8 @@ import { DmpToDatasetDialogComponent } from './dmp-to-dataset/dmp-to-dataset-dia
MultipleChoiceDialogModule,
DatasetEditorDetailsModule,
DatasetDescriptionFormModule,
- NgxDropzoneModule
+ NgxDropzoneModule,
+ FormProgressIndicationModule
],
declarations: [
DmpListingComponent,
diff --git a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.html b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.html
index 9e4f13bf1..39392ceac 100644
--- a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.html
+++ b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.html
@@ -33,10 +33,18 @@
{{'DMP-EDITOR.STEPPER.USER-GUIDE' | translate}}
- - {{'DMP-EDITOR.STEPPER.MAIN-INFO' | translate}} (7)
- - {{'DMP-EDITOR.STEPPER.FUNDING-INFO' | translate}} (3)
+ - {{'DMP-EDITOR.STEPPER.MAIN-INFO' | translate}} (1)
+ - {{'DMP-EDITOR.STEPPER.MAIN-INFO' | translate}} (done)
+ - {{'DMP-EDITOR.STEPPER.MAIN-INFO' | translate}} (2)
+ - {{'DMP-EDITOR.STEPPER.MAIN-INFO' | translate}} (done)
+
+ - {{'DMP-EDITOR.STEPPER.FUNDING-INFO' | translate}} (2)
+ - {{'DMP-EDITOR.STEPPER.FUNDING-INFO' | translate}} (done)
+
- {{'DMP-EDITOR.STEPPER.LICENSE-INFO' | translate}}
- - {{'DMP-EDITOR.STEPPER.DATASET-INFO' | translate}}
+
+ - {{'DMP-EDITOR.STEPPER.DATASET-INFO' | translate}} (1)
+ - {{'DMP-EDITOR.STEPPER.DATASET-INFO' | translate}} (done)
-
@@ -70,6 +78,9 @@
{{'DMP-EDITOR.ACTIONS.SAVE' | translate}} & {{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}
+
diff --git a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.scss b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.scss
index 7126fa67e..e36d917d7 100644
--- a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.scss
+++ b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.scss
@@ -442,6 +442,14 @@ mat-icon.size-16 {
list-style-type: none;
}
+.done-icon {
+ display: inline-flex;
+ vertical-align: middle;
+ font-size: 16px !important;
+ height: auto;
+ width: auto;
+}
+
// ::ng-deep .mat-tab-labels {
// justify-content: space-between;
// }
diff --git a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts
index e37083cbc..6e5a702a3 100644
--- a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts
+++ b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts
@@ -413,7 +413,6 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC
}
public isFormValid() {
- this.formGroup.markAllAsTouched();
return this.formGroup.valid;
// return this.formGroup.get('label').valid && this.formGroup.get('profiles').valid &&
// (this.formGroup.get('funder').get('label').valid || this.formGroup.get('funder').get('existFunder').valid) &&
@@ -896,6 +895,30 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC
this.dmp.id != null ? this.router.navigate(['/plans', 'edit', this.dmp.id]) : this.router.navigate(['/plans']);
}
+ mainInfoValid(): boolean {
+ if (this.formGroup.get('label').valid) {
+ if (this.formGroup.get('publicDate')) {
+ if (this.formGroup.get('publicDate').valid) {
+ return true;
+ } else if (this.formGroup.get('publicDate').invalid) {
+ return false
+ }
+ } else {
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ fundingInfoValid(): boolean {
+ return this.formGroup.get('funder') && this.formGroup.get('funder').valid && this.formGroup.get('grant') && this.formGroup.get('grant').valid;
+ }
+
+ datasetInfoValid(): boolean {
+ return this.formGroup.get('profiles') && this.formGroup.get('profiles').valid && this.formGroup.get('profiles').value.length > 0;
+ }
+
// advancedClicked() {
// const dialogRef = this.dialog.open(ExportMethodDialogComponent, {
// maxWidth: '500px',
diff --git a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.model.ts b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.model.ts
index 38edd04aa..b95e0e8e0 100644
--- a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.model.ts
+++ b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.model.ts
@@ -92,7 +92,7 @@ export class DmpEditorModel {
groupId: [{ value: this.groupId, disabled: disabled }, context.getValidation('groupId').validators],
version: [{ value: this.version, disabled: disabled }, context.getValidation('version').validators],
status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators],
- description: [{ value: this.description, disabled: disabled }],
+ description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators],
grant: this.grant.buildForm(),
project: this.project.buildForm(),
funder: this.funder.buildForm(),
@@ -135,10 +135,10 @@ export class DmpEditorModel {
baseContext.validation.push({ key: 'groupId', validators: [BackendErrorValidator(this.validationErrorModel, 'groupId')] });
baseContext.validation.push({ key: 'version', validators: [BackendErrorValidator(this.validationErrorModel, 'version')] });
baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'status')] });
- baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'description')] });
+ baseContext.validation.push({ key: 'description', validators: [BackendErrorValidator(this.validationErrorModel, 'description')] });
baseContext.validation.push({ key: 'grant', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'grant')] });
baseContext.validation.push({ key: 'project', validators: [BackendErrorValidator(this.validationErrorModel, 'project')] });
- baseContext.validation.push({ key: 'funder', validators: [BackendErrorValidator(this.validationErrorModel, 'funder')] });
+ baseContext.validation.push({ key: 'funder', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'funder')] });
baseContext.validation.push({ key: 'organisations', validators: [BackendErrorValidator(this.validationErrorModel, 'organisations')] });
baseContext.validation.push({ key: 'researchers', validators: [BackendErrorValidator(this.validationErrorModel, 'researchers')] });
baseContext.validation.push({ key: 'profiles', validators: [Validators.required, ValidJsonValidator, BackendErrorValidator(this.validationErrorModel, 'profiles')] });
diff --git a/dmp-frontend/src/app/ui/dmp/editor/funding-info/funding-info.component.html b/dmp-frontend/src/app/ui/dmp/editor/funding-info/funding-info.component.html
index 5a1bfa8d1..61104beb1 100644
--- a/dmp-frontend/src/app/ui/dmp/editor/funding-info/funding-info.component.html
+++ b/dmp-frontend/src/app/ui/dmp/editor/funding-info/funding-info.component.html
@@ -112,14 +112,14 @@
-
+
{{projectFormGroup.get('label').getError('backendError').message}}
{{'GENERAL.VALIDATION.REQUIRED' | translate}}
-
+
{{projectFormGroup.get('description').getError('backendError').message}}
diff --git a/dmp-frontend/src/app/ui/dmp/editor/general-tab/extra-properties-form.model.ts b/dmp-frontend/src/app/ui/dmp/editor/general-tab/extra-properties-form.model.ts
index c2dc45d91..6ff2f48cb 100644
--- a/dmp-frontend/src/app/ui/dmp/editor/general-tab/extra-properties-form.model.ts
+++ b/dmp-frontend/src/app/ui/dmp/editor/general-tab/extra-properties-form.model.ts
@@ -4,6 +4,7 @@ import { BackendErrorValidator } from '@common/forms/validation/custom-validator
import { CostModel } from '@app/core/model/dmp/cost';
import { isNullOrUndefined } from 'util';
import { CostEditorModel } from '../cost-editor/add-cost/add-cost.model';
+import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model';
export class ExtraPropertiesFormModel {
public language: string;
@@ -12,6 +13,7 @@ export class ExtraPropertiesFormModel {
public publicDate: Date;
public contact: string;
public costs: CostEditorModel[] = [];
+ public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
fromModel(item: any): ExtraPropertiesFormModel {
this.language = item.language;
@@ -53,12 +55,12 @@ export class ExtraPropertiesFormModel {
createValidationContext(): ValidationContext {
const baseContext: ValidationContext = new ValidationContext();
- baseContext.validation.push({ key: 'language', validators: [] });
- baseContext.validation.push({ key: 'license', validators: [] });
- baseContext.validation.push({ key: 'visible', validators: [] });
- baseContext.validation.push({ key: 'publicDate', validators: [] });
- baseContext.validation.push({ key: 'contact', validators: [] });
- baseContext.validation.push({ key: 'costs', validators: [] });
+ baseContext.validation.push({ key: 'language', validators: [BackendErrorValidator(this.validationErrorModel, 'language')] });
+ baseContext.validation.push({ key: 'license', validators: [BackendErrorValidator(this.validationErrorModel, 'license')] });
+ baseContext.validation.push({ key: 'visible', validators: [BackendErrorValidator(this.validationErrorModel, 'visible')] });
+ baseContext.validation.push({ key: 'publicDate', validators: [BackendErrorValidator(this.validationErrorModel, 'publicDate')] });
+ baseContext.validation.push({ key: 'contact', validators: [BackendErrorValidator(this.validationErrorModel, 'contact')] });
+ baseContext.validation.push({ key: 'costs', validators: [BackendErrorValidator(this.validationErrorModel, 'costs')] });
return baseContext;
}
diff --git a/dmp-frontend/src/app/ui/dmp/editor/grant-tab/project-form-model.ts b/dmp-frontend/src/app/ui/dmp/editor/grant-tab/project-form-model.ts
index 826221b30..83178a711 100644
--- a/dmp-frontend/src/app/ui/dmp/editor/grant-tab/project-form-model.ts
+++ b/dmp-frontend/src/app/ui/dmp/editor/grant-tab/project-form-model.ts
@@ -36,9 +36,9 @@ export class ProjectFormModel {
createValidationContext(): ValidationContext {
const baseContext: ValidationContext = new ValidationContext();
baseContext.validation.push({ key: 'id', validators: [] });
- baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'label')] });
+ baseContext.validation.push({ key: 'label', validators: [BackendErrorValidator(this.validationErrorModel, 'label')] });
baseContext.validation.push({ key: 'status', validators: [] });
- baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'description')] });
+ baseContext.validation.push({ key: 'description', validators: [BackendErrorValidator(this.validationErrorModel, 'description')] });
baseContext.validation.push({ key: 'existProject', validators: [BackendErrorValidator(this.validationErrorModel, 'existProject')] });
return baseContext;
}
diff --git a/dmp-frontend/src/app/ui/dmp/editor/main-info/main-info.component.html b/dmp-frontend/src/app/ui/dmp/editor/main-info/main-info.component.html
index aa20383a8..f83b80bf7 100644
--- a/dmp-frontend/src/app/ui/dmp/editor/main-info/main-info.component.html
+++ b/dmp-frontend/src/app/ui/dmp/editor/main-info/main-info.component.html
@@ -127,7 +127,7 @@
-
1.7 {{'DMP-EDITOR.FIELDS.CONTACT' | translate}}
+
1.7 {{'DMP-EDITOR.FIELDS.CONTACT' | translate}}*