argos/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-fiel...

156 lines
7.5 KiB
TypeScript
Raw Normal View History

2019-01-18 18:03:45 +01:00

2019-01-28 16:47:12 +01:00
import { Component, Input, OnInit } from '@angular/core';
import { FormArray, FormControl, FormGroup } from '@angular/forms';
import { DatasetProfileFieldViewStyle } from '@app/core/common/enum/dataset-profile-field-view-style';
import { ValidationType } from '@app/core/common/enum/validation-type';
import { DatasetProfileService } from '@app/core/services/dataset-profile/dataset-profile.service';
import { EnumUtils } from '@app/core/services/utilities/enum-utils.service';
import { BooleanDecisionFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/boolean-decision-field-data-editor-model';
import { CheckBoxFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/check-box-field-data-editor-model';
import { DatePickerDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/date-picker-data-editor-models';
import { FreeTextFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/free-text-field-data-editor-model';
import { RadioBoxFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/radio-box-field-data-editor-model';
import { ResearchersAutoCompleteFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/researchers-auto-complete-field-data-editor-model';
import { TextAreaFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/text-area-field-data-editor-model';
import { WordListFieldDataEditorModel } from '@app/ui/admin/dataset-profile/admin/field-data/word-list-field-data-editor-model';
import { RuleEditorModel } from '@app/ui/admin/dataset-profile/admin/rule-editor-model';
import { BaseComponent } from '@common/base/base.component';
2019-01-28 14:05:19 +01:00
import { takeUntil } from 'rxjs/operators';
import { ExternalDatasetEditorModel } from '@app/ui/dataset/dataset-wizard/dataset-wizard-editor.model';
import { DataRepositoriesDataEditorModel } from '../../../admin/field-data/data-repositories-data-editor-models';
import { RegistriesDataEditorModel } from '../../../admin/field-data/registries-data-editor-models';
import { ServicesDataEditorModel } from '../../../admin/field-data/services-data-editor-models';
import { TagsDataEditorModel } from '../../../admin/field-data/tags-data-editor-models';
import { ResearchersDataEditorModel } from '../../../admin/field-data/researchers-data-editor-models';
import { OrganizationsDataEditorModel } from '../../../admin/field-data/organizations-data-editor-models';
import { DatasetIdentifierDataEditorModel } from '../../../admin/field-data/dataset-identifier-data-editor-models';
import { ExternalDatasetsDataEditorModel } from '../../../admin/field-data/external-datasets-data-editor-models';
2019-01-18 18:03:45 +01:00
@Component({
selector: 'app-dataset-profile-editor-field-component',
templateUrl: './dataset-profile-editor-field.component.html',
styleUrls: ['./dataset-profile-editor-field.component.scss']
})
2019-01-28 14:05:19 +01:00
export class DatasetProfileEditorFieldComponent extends BaseComponent implements OnInit {
@Input() viewOnly: boolean;
2019-01-18 18:03:45 +01:00
@Input() form: FormGroup;
@Input() showOrdinal = true;
@Input() indexPath: string;
2019-01-28 14:05:19 +01:00
validationTypeEnum = ValidationType;
2019-01-18 18:03:45 +01:00
viewStyleEnum = DatasetProfileFieldViewStyle;
isFieldMultiplicityEnabled = false;
2019-01-18 18:03:45 +01:00
constructor(
public enumUtils: EnumUtils,
public datasetProfileService: DatasetProfileService
2019-01-28 14:05:19 +01:00
) { super(); }
2019-01-18 18:03:45 +01:00
ngOnInit() {
if (this.form.get('multiplicity')) {
if (this.form.get('multiplicity').value.min > 1 && this.form.get('multiplicity').value.max > 1) {
2019-01-18 18:03:45 +01:00
this.isFieldMultiplicityEnabled = true;
}
}
// this.addNewRule();
2019-01-28 14:05:19 +01:00
this.form.get('viewStyle').get('renderStyle').valueChanges
.pipe(takeUntil(this._destroyed))
.subscribe(x => {
if (this.form.get('data')) {
this.form.removeControl('data');
switch (x) {
case DatasetProfileFieldViewStyle.BooleanDecision:
this.form.addControl('data', new BooleanDecisionFieldDataEditorModel().buildForm());
break;
case DatasetProfileFieldViewStyle.CheckBox:
this.form.addControl('data', new CheckBoxFieldDataEditorModel().buildForm());
break;
case DatasetProfileFieldViewStyle.ComboBox:
2019-01-28 16:47:12 +01:00
this.form.addControl('data', new WordListFieldDataEditorModel().buildForm());
2019-01-28 14:05:19 +01:00
break;
case DatasetProfileFieldViewStyle.InternalDmpEntities:
this.form.addControl('data', new ResearchersAutoCompleteFieldDataEditorModel().buildForm());
break;
2019-01-28 14:05:19 +01:00
case DatasetProfileFieldViewStyle.FreeText:
this.form.addControl('data', new FreeTextFieldDataEditorModel().buildForm());
break;
case DatasetProfileFieldViewStyle.RadioBox:
this.form.addControl('data', new RadioBoxFieldDataEditorModel().buildForm());
break;
case DatasetProfileFieldViewStyle.TextArea:
this.form.addControl('data', new TextAreaFieldDataEditorModel().buildForm());
break;
case DatasetProfileFieldViewStyle.DatePicker:
this.form.addControl('data', new DatePickerDataEditorModel().buildForm());
break;
case DatasetProfileFieldViewStyle.ExternalDatasets:
this.form.addControl('data', new ExternalDatasetsDataEditorModel().buildForm());
break;
case DatasetProfileFieldViewStyle.DataRepositories:
this.form.addControl('data', new DataRepositoriesDataEditorModel().buildForm());
break;
case DatasetProfileFieldViewStyle.Registries:
this.form.addControl('data', new RegistriesDataEditorModel().buildForm());
break;
case DatasetProfileFieldViewStyle.Services:
this.form.addControl('data', new ServicesDataEditorModel().buildForm());
break;
case DatasetProfileFieldViewStyle.Tags:
this.form.addControl('data', new TagsDataEditorModel().buildForm());
break;
case DatasetProfileFieldViewStyle.Researchers:
this.form.addControl('data', new ResearchersDataEditorModel().buildForm());
break;
case DatasetProfileFieldViewStyle.Organizations:
this.form.addControl('data', new OrganizationsDataEditorModel().buildForm());
break;
case DatasetProfileFieldViewStyle.DatasetIdentifier:
this.form.addControl('data', new DatasetIdentifierDataEditorModel().buildForm());
break;
2019-01-28 14:05:19 +01:00
}
}
});
2019-01-18 18:03:45 +01:00
}
defaulValueRequired(viewStile: DatasetProfileFieldViewStyle): boolean {
switch (viewStile) {
case DatasetProfileFieldViewStyle.CheckBox:
return true;
case DatasetProfileFieldViewStyle.RadioBox:
case DatasetProfileFieldViewStyle.TextArea:
case DatasetProfileFieldViewStyle.FreeText:
case DatasetProfileFieldViewStyle.ComboBox:
case DatasetProfileFieldViewStyle.InternalDmpEntities:
case DatasetProfileFieldViewStyle.BooleanDecision:
case DatasetProfileFieldViewStyle.DatePicker:
case DatasetProfileFieldViewStyle.ExternalDatasets:
case DatasetProfileFieldViewStyle.DataRepositories:
case DatasetProfileFieldViewStyle.Registries:
case DatasetProfileFieldViewStyle.Services:
case DatasetProfileFieldViewStyle.Tags:
case DatasetProfileFieldViewStyle.Registries:
case DatasetProfileFieldViewStyle.Organizations:
case DatasetProfileFieldViewStyle.DatasetIdentifier:
return false;
default:
return false;
}
}
2019-01-18 18:03:45 +01:00
onIsFieldMultiplicityEnabledChange(isFieldMultiplicityEnabled: boolean) {
if (!isFieldMultiplicityEnabled) {
(<FormControl>this.form.get('multiplicity').get('min')).setValue(0);
(<FormControl>this.form.get('multiplicity').get('max')).setValue(0);
}
}
addNewRule() {
const rule: RuleEditorModel = new RuleEditorModel();
(<FormArray>this.form.get('visible').get('rules')).push(rule.buildForm());
}
}