import { Injectable } from '@angular/core'; import { AdHocReportingUI } from '@core/typings/ui/ad-hoc-reporting.typing'; import { FormDefinitionForUi } from '@features/configure-forms/form.typing'; import { ComponentHelperService } from '@features/formio/services/component-helper/component-helper.service'; import { ReferenceFieldsService } from '@features/reference-fields/services/reference-fields.service'; import { PolicyService } from './policy.service'; @Injectable({ providedIn: 'root' }) export class FormMaskingService { constructor ( private referenceFieldService: ReferenceFieldsService, private policyService: PolicyService, private componentHelper: ComponentHelperService ) { } checkShouldShowMaskToggleForAdHoc ( columns: AdHocReportingUI.ColumnImplementation[] ) { const applicable = this.checkIfAnyColumnIsMasked(columns); return { shouldShow: this.policyService.grantApplication.canSeeMaskedApplicants() && applicable, defaultSetting: applicable }; } checkShouldShowMaskToggleForFormView (formDefinition: FormDefinitionForUi[]) { const applicable = this.checkIfFormHasMaskedField(formDefinition); return { shouldShow: this.policyService.grantApplication.canSeeMaskedApplicants() && applicable, defaultSetting: applicable }; } // default to unmasked (false) for users who have the right permission getDefaultMaskSetting () { return !this.policyService.grantApplication.canSeeMaskedApplicants(); } get formFieldMask () { return '******'; } private checkIfAnyColumnIsMasked ( columns: AdHocReportingUI.ColumnImplementation[] ) { return columns.some(column => { if (column.definition.isReferenceField) { const refFieldKey = column.definition.column; const applicableField = this.getApplicableFieldForMasking(refFieldKey); const field = this.referenceFieldService.getReferenceFieldByKey(applicableField); return field.isMasked; } return false; }); } getApplicableFieldForMasking (fieldKey: string) { if (fieldKey.includes('.currencyValue')) { return fieldKey.split('.currencyValue')[0]; } else { return fieldKey; } } private checkIfFormHasMaskedField (form: FormDefinitionForUi[]) { let hasMasked = false; form.forEach((tab) => { this.componentHelper.eachComponent(tab.components, (component) => { const key = this.componentHelper.getRefFieldKeyFromCompType(component.type); const field = this.referenceFieldService.getReferenceFieldByKey(key); if (field?.isMasked) { hasMasked = true; } }); }); return hasMasked; } }