Admin template editor. Fix invalid visibility rules case.

This commit is contained in:
Kristian Ntavidi 2021-05-05 15:50:20 +03:00
parent 9ccae4d2c7
commit c157ecc4e7
12 changed files with 169 additions and 8 deletions

View File

@ -23,7 +23,7 @@ export class RuleEditorModel extends BaseFormModel {
// sourceField: [this.sourceField],
target: [{ value: this.target, disabled: (disabled && !skipDisable.includes('RuleEditorModel.target')) }, [Validators.required]],
ruleStyle: [{ value: this.ruleStyle, disabled: (disabled && !skipDisable.includes('RuleEditorModel.ruleStyle')) }],
value: [{ value: this.value, disabled: (disabled && !skipDisable.includes('RuleEditorModel.value')) }],
value: [{ value: this.value, disabled: (disabled && !skipDisable.includes('RuleEditorModel.value')) }, [Validators.required]],
ruleType: [{ value: this.ruleType, disabled: (disabled && !skipDisable.includes('RuleEditorModel.ruleType')) }],
valueType: [{ value: this.valueType, disabled: (disabled && !skipDisable.includes('RuleEditorModel.valueType')) }]
});

View File

@ -34,13 +34,14 @@ import { AutoCompleteFieldDataEditorModel } from '../../../admin/field-data/auto
import { DatasetsAutoCompleteFieldDataEditorModel } from '../../../admin/field-data/datasets-autocomplete-field-data-editor-mode';
import { DatasetProfileComboBoxType } from '@app/core/common/enum/dataset-profile-combo-box-type';
import { Guid } from '@common/types/guid';
import { ErrorStateMatcher, MatSlideToggleChange } from '@angular/material';
import { ErrorStateMatcher, MatDialog, MatSlideToggleChange } from '@angular/material';
import { DefaultValueEditorModel } from '../../../admin/default-value-editor-model';
import { EditorCustomValidators } from '../../custom-validators/editor-custom-validators';
import { Field } from '@app/core/model/admin/dataset-profile/dataset-profile';
import { DatasetProfileInternalDmpEntitiesType } from '@app/core/common/enum/dataset-profile-internal-dmp-entities-type';
import { FieldEditorModel } from '../../../admin/field-editor-model';
import { AutoCompleteFieldData, BooleanDecisionFieldData, CheckBoxFieldData, CurrencyFieldData, DataRepositoriesFieldData, DatasetIdentifierFieldData, DatePickerFieldData, DmpsAutoCompleteFieldData, ExternalDatasetsFieldData, FieldDataOption, FreeTextFieldData, OrganizationsFieldData, RadioBoxFieldData, RegistriesFieldData, ResearchersAutoCompleteFieldData, ServicesFieldData, TagsFieldData, TextAreaFieldData, ValidationFieldData, WordListFieldData } from '@app/core/model/dataset-profile-definition/field-data/field-data';
import { ConfirmationDialogComponent } from '@common/modules/confirmation-dialog/confirmation-dialog.component';
@Component({
selector: 'app-dataset-profile-editor-field-component',
@ -69,7 +70,8 @@ export class DatasetProfileEditorFieldComponent extends BaseComponent implements
constructor(
public enumUtils: EnumUtils,
public datasetProfileService: DatasetProfileService
public datasetProfileService: DatasetProfileService,
private dialog: MatDialog
) { super();
}
@ -97,7 +99,8 @@ export class DatasetProfileEditorFieldComponent extends BaseComponent implements
// }
// }
if(this.form.get('viewStyle').get('renderStyle').value){
const renderStyle = this.form.get('viewStyle').get('renderStyle').value;
if(renderStyle){
// this.matcher.setReference(this.form);
const type = this.form.get('viewStyle').get('renderStyle').value;
@ -164,7 +167,7 @@ export class DatasetProfileEditorFieldComponent extends BaseComponent implements
this.viewType = this.viewTypeEnum.Validation;
break;
}
}
// this.showPreview = true;
@ -390,8 +393,6 @@ export class DatasetProfileEditorFieldComponent extends BaseComponent implements
case this.viewTypeEnum.Select:
case this.viewTypeEnum.CheckBox:
case this.viewTypeEnum.DatePicker:
case this.viewTypeEnum.DataRepositories://TODO FURTHER NOTICE
case this.viewTypeEnum.ExternalDatasets://TODO FURTHER NOTICE
return true;
}

View File

@ -280,7 +280,95 @@ export class DatasetProfileEditorComponent extends BaseComponent implements OnIn
}, 400);
// this._initializeFormValidity(tocentries);
//Checking invalid visibilty RULES
const fieldsetEntries = this._getAllFieldSets(this.toCEntries);
const fieldSetHavingInvalidVisibilityRules:ToCEntry[] = fieldsetEntries
.filter(entry=>{
const fieldsFormGroup = entry.form.get('fields');
const invalid = (fieldsFormGroup as FormArray).controls.filter(field=>{
return this.hasInvalidVisibilityRule(field as FormGroup);
});
if(invalid && invalid.length){
return true;
}
return false;
});
if(fieldSetHavingInvalidVisibilityRules.length){
const occurences = fieldSetHavingInvalidVisibilityRules.map(record=>record.numbering).join(' , ');
this.dialog.open(ConfirmationDialogComponent, {
data:{
message: this.language.instant('DATASET-PROFILE-EDITOR.ERRORS.INVALID-VISIBILITY-RULES.MESSAGE-START')+occurences+ this.language.instant('DATASET-PROFILE-EDITOR.ERRORS.INVALID-VISIBILITY-RULES.MESSAGE-END'),
confirmButton: this.language.instant('DATASET-PROFILE-EDITOR.ERRORS.INVALID-VISIBILITY-RULES.CONFIRM-YES'),
cancelButton: this.language.instant('DATASET-PROFILE-EDITOR.ERRORS.INVALID-VISIBILITY-RULES.CONFIRM-NO')
},
maxWidth:'30em'
})
.afterClosed()
.subscribe(confirm=>{
if(confirm){
this.removeFieldSetVisibilityRules(fieldSetHavingInvalidVisibilityRules);
this.uiNotificationService.snackBarNotification(this.language.instant('DATASET-PROFILE-EDITOR.ERRORS.INVALID-VISIBILITY-RULES.REMOVE-SUCCESS'), SnackBarNotificationLevel.Success);
}else{
console.log('User not confirmed');
}
})
}
}
private removeFieldSetVisibilityRules(fieldsets:ToCEntry[]){
if(!fieldsets || !fieldsets.length) return;
fieldsets.forEach(fieldset=>{
if(fieldset.type != ToCEntryType.FieldSet){
return;
}
const fields = fieldset.form.get('fields') as FormArray;
fields.controls.forEach(fieldControl=>{
if(this.hasInvalidVisibilityRule(fieldControl as FormGroup)){
try{
(fieldControl.get('visible').get('rules') as FormArray).clear();
}catch{}
}
})
})
}
private hasInvalidVisibilityRule(field: FormGroup):boolean{
const renderStyle = field.get('viewStyle').get('renderStyle').value;
if(renderStyle && ![
DatasetProfileFieldViewStyle.TextArea,
DatasetProfileFieldViewStyle.FreeText,
DatasetProfileFieldViewStyle.BooleanDecision,
DatasetProfileFieldViewStyle.RadioBox,
DatasetProfileFieldViewStyle.CheckBox,
DatasetProfileFieldViewStyle.DatePicker,
DatasetProfileFieldViewStyle.ComboBox,
].includes(renderStyle)){
if(((renderStyle === DatasetProfileFieldViewStyle) && (field.get('data').get('type').value === DatasetProfileComboBoxType.WordList))){
return false;
}
try{
if(field.get('visible').get('rules').value.length){
return true;
}
return false;
}catch{
return false;
}
}else{
return false;
}
}

View File

@ -532,6 +532,15 @@
},
"FEEDBACK-MESSAGES":{
"SAVE-SUCCESS":"Changes were saved successfully."
},
"ERRORS":{
"INVALID-VISIBILITY-RULES":{
"MESSAGE-START": "There were invalid visibilty rules detected in ",
"MESSAGE-END": ". Would you like to fix them?",
"CONFIRM-YES": "Yes, remove invalid rules",
"CONFIRM-NO": "No, keep them.",
"REMOVE-SUCCESS":"Invalid visibility rules were removed successfully."
}
}
},
"GRANT-LISTING": {

View File

@ -532,6 +532,15 @@
},
"FEEDBACK-MESSAGES":{
"SAVE-SUCCESS":"Changes were saved successfully."
},
"ERRORS":{
"INVALID-VISIBILITY-RULES":{
"MESSAGE-START": "There were invalid visibilty rules detected in ",
"MESSAGE-END": ". Would you like to fix them?",
"CONFIRM-YES": "Yes, remove invalid rules",
"CONFIRM-NO": "No, keep them.",
"REMOVE-SUCCESS":"Invalid visibility rules were removed successfully."
}
}
},
"GRANT-LISTING": {

View File

@ -532,6 +532,15 @@
},
"FEEDBACK-MESSAGES":{
"SAVE-SUCCESS":"Changes were saved successfully."
},
"ERRORS":{
"INVALID-VISIBILITY-RULES":{
"MESSAGE-START": "There were invalid visibilty rules detected in ",
"MESSAGE-END": ". Would you like to fix them?",
"CONFIRM-YES": "Yes, remove invalid rules",
"CONFIRM-NO": "No, keep them.",
"REMOVE-SUCCESS":"Invalid visibility rules were removed successfully."
}
}
},
"GRANT-LISTING": {

View File

@ -532,6 +532,15 @@
},
"FEEDBACK-MESSAGES":{
"SAVE-SUCCESS":"Changes were saved successfully."
},
"ERRORS":{
"INVALID-VISIBILITY-RULES":{
"MESSAGE-START": "There were invalid visibilty rules detected in ",
"MESSAGE-END": ". Would you like to fix them?",
"CONFIRM-YES": "Yes, remove invalid rules",
"CONFIRM-NO": "No, keep them.",
"REMOVE-SUCCESS":"Invalid visibility rules were removed successfully."
}
}
},
"GRANT-LISTING": {

View File

@ -532,6 +532,15 @@
},
"FEEDBACK-MESSAGES":{
"SAVE-SUCCESS":"Changes were saved successfully."
},
"ERRORS":{
"INVALID-VISIBILITY-RULES":{
"MESSAGE-START": "There were invalid visibilty rules detected in ",
"MESSAGE-END": ". Would you like to fix them?",
"CONFIRM-YES": "Yes, remove invalid rules",
"CONFIRM-NO": "No, keep them.",
"REMOVE-SUCCESS":"Invalid visibility rules were removed successfully."
}
}
},
"GRANT-LISTING": {

View File

@ -532,6 +532,15 @@
},
"FEEDBACK-MESSAGES":{
"SAVE-SUCCESS":"Changes were saved successfully."
},
"ERRORS":{
"INVALID-VISIBILITY-RULES":{
"MESSAGE-START": "There were invalid visibilty rules detected in ",
"MESSAGE-END": ". Would you like to fix them?",
"CONFIRM-YES": "Yes, remove invalid rules",
"CONFIRM-NO": "No, keep them.",
"REMOVE-SUCCESS":"Invalid visibility rules were removed successfully."
}
}
},
"GRANT-LISTING": {

View File

@ -532,6 +532,15 @@
},
"FEEDBACK-MESSAGES":{
"SAVE-SUCCESS":"Changes were saved successfully."
},
"ERRORS":{
"INVALID-VISIBILITY-RULES":{
"MESSAGE-START": "There were invalid visibilty rules detected in ",
"MESSAGE-END": ". Would you like to fix them?",
"CONFIRM-YES": "Yes, remove invalid rules",
"CONFIRM-NO": "No, keep them.",
"REMOVE-SUCCESS":"Invalid visibility rules were removed successfully."
}
}
},
"GRANT-LISTING": {

View File

@ -532,6 +532,15 @@
},
"FEEDBACK-MESSAGES":{
"SAVE-SUCCESS":"Changes were saved successfully."
},
"ERRORS":{
"INVALID-VISIBILITY-RULES":{
"MESSAGE-START": "There were invalid visibilty rules detected in ",
"MESSAGE-END": ". Would you like to fix them?",
"CONFIRM-YES": "Yes, remove invalid rules",
"CONFIRM-NO": "No, keep them.",
"REMOVE-SUCCESS":"Invalid visibility rules were removed successfully."
}
}
},
"GRANT-LISTING": {

View File

@ -23,7 +23,7 @@
}
.cancel-btn {
width: 101px;
min-width: 101px;
height: 43px;
background: #ffffff;
border: 1px solid #b5b5b5;