2021-03-08 10:24:30 +01:00
|
|
|
import { Inject, Injectable } from "@angular/core";
|
|
|
|
import { AbstractControl, FormArray, ValidationErrors, ValidatorFn } from "@angular/forms";
|
|
|
|
|
|
|
|
|
|
|
|
export class EditorCustomValidators{
|
|
|
|
|
2021-03-12 17:19:51 +01:00
|
|
|
public atLeastOneElementListValidator(arrayToCheck): ValidatorFn{
|
2021-03-08 10:24:30 +01:00
|
|
|
return (control: AbstractControl): ValidationErrors | null=>{
|
|
|
|
|
|
|
|
const fa = control.get(arrayToCheck) as FormArray;
|
|
|
|
|
|
|
|
if(fa.length === 0){
|
2021-03-12 17:19:51 +01:00
|
|
|
return {[EditorCustomValidatorsEnum.emptyArray]: true};
|
2021-03-08 10:24:30 +01:00
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
2021-03-12 17:19:51 +01:00
|
|
|
public pagesHaveAtLeastOneSection(pagesArrayName:string,sectionsArrayName:string ): ValidatorFn{
|
2021-03-08 10:24:30 +01:00
|
|
|
|
2021-03-12 17:19:51 +01:00
|
|
|
return (control: AbstractControl): ValidationErrors | null=>{
|
|
|
|
|
|
|
|
const pages = control.get(pagesArrayName) as FormArray;
|
|
|
|
const sections = control.get(sectionsArrayName) as FormArray;
|
|
|
|
|
|
|
|
|
|
|
|
const pageIdsArray = pages.controls.map(page=>page.get('id').value);
|
|
|
|
const sectionsPageIds = sections.controls.map(section=> section.get('page').value);
|
|
|
|
|
|
|
|
let invalidMessage = null;
|
|
|
|
|
|
|
|
pageIdsArray.forEach(pageId=>{
|
|
|
|
if(!sectionsPageIds.includes(pageId)){
|
|
|
|
invalidMessage = {[EditorCustomValidatorsEnum.atLeastOneSectionInPage]:true};
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
return invalidMessage;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public sectionHasAtLeastOneChildOf(fieldsetsArrayName, sectionsArrayName): ValidatorFn{
|
|
|
|
|
|
|
|
return (control: AbstractControl): ValidationErrors | null=>{
|
|
|
|
|
|
|
|
const fieldsets = control.get(fieldsetsArrayName) as FormArray;
|
|
|
|
const sections = control.get(sectionsArrayName) as FormArray;
|
|
|
|
|
|
|
|
|
|
|
|
if((fieldsets && fieldsets.length) || (sections && sections.length)){
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
return {[EditorCustomValidatorsEnum.sectionMustHaveOneChild] : true};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export enum EditorCustomValidatorsEnum{
|
|
|
|
sectionMustHaveOneChild = "sectionMustHaveOneChild",
|
|
|
|
atLeastOneSectionInPage = 'atLeastOneSectionInPage',
|
|
|
|
emptyArray="emptyArray"
|
2021-03-08 10:24:30 +01:00
|
|
|
}
|