import { Component, ViewEncapsulation, OnInit, Input } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { VisibilityRulesService } from '../../../utilities/visibility-rules/visibility-rules.service'; import { JsonSerializer } from '../../../utilities/JsonSerializer'; import { Rule } from '../../../models/Rule'; import { DatasetWizardModel } from '../../../models/datasets/DatasetWizardModel'; import { DatasetProfileDefinitionModel } from '../../../models/DatasetProfileDefinitionModel'; import { Section } from '../../../models/Section'; import { CompositeField } from '../../../models/CompositeField'; import '../../../utilities/enhancers/flatMap'; import { Field } from '../../../models/Field'; import { MarkForConsiderationService } from '../../../utilities/mark-for-considerations/mark-for-consideration.service'; @Component({ selector: 'app-dynamic-form-pending-questions-display', templateUrl: './dynamic-form-pending-questions-display.component.html', styleUrls: [ './dynamic-form-pending-questions-display.component.scss' ], providers: [ ], encapsulation: ViewEncapsulation.None, }) export class DynamicFormPendingQuestionsDisplayComponent implements OnInit { constructor( private visibilityRulesService: VisibilityRulesService, private markForConsideration: MarkForConsiderationService) { } datasetProfileDefinitionModel: DatasetProfileDefinitionModel; @Input() form: FormGroup; @Input() dataModel: DatasetWizardModel = new DatasetWizardModel(); fields: CompositeField[]; ngOnInit(): void { const rules: Rule[] = JsonSerializer.fromJSONArray(this.dataModel.datasetProfileDefinition.rules, Rule); this.datasetProfileDefinitionModel = this.dataModel.datasetProfileDefinition; const sections: Section[] = this.datasetProfileDefinitionModel.pages.flatMap(page => page.sections).filter(x => x); const compositeFields: CompositeField[] = sections.flatMap(section => section.compositeFields).filter(x => x); const nestedSections: Section[] = sections.flatMap(section => section.sections).filter(x => x); const nestedCompositeFiels: CompositeField[] = nestedSections.flatMap(section => section.compositeFields).filter(x => x); const compositeFieldsUnion = compositeFields.concat(nestedCompositeFiels); //const fields: Field[] = compositeFields.flatMap(composite => composite.fields).concat(nestedCompositeFiels.flatMap(composite => composite.fields)); const fields = compositeFieldsUnion.filter(compositeField => this.visibilityRulesService.checkElementVisibility(compositeField.id)) .filter(compositeField => compositeField.fields.filter(x => x && x.validationRequired && this.visibilityRulesService.getFormGroup(x.id).value == null).length > 0); fields.forEach(x => this.markForConsideration.markForConsideration(x)); } }