Files
gremiumhub/legalconsenthub/composables/useApplicationFormValidator.ts

48 lines
1.9 KiB
TypeScript

import { ComplianceStatus, type FormElementDto } from '~/.api-client'
import { complianceCheckableElementTypes, complianceMap } from './complianceMap'
import type { FormElementId } from '~/types/FormElement'
export function useApplicationFormValidator() {
function validateFormElements(formElements: FormElementDto[]): Map<FormElementId, ComplianceStatus> {
const formElementComplianceMap = new Map<FormElementId, ComplianceStatus>()
formElements.forEach((formElement) => {
if (!complianceCheckableElementTypes.includes(formElement.type)) return
// Reset any previously set compliance status when all options are false
const hasAtLeastOneOptionSet = formElement.options.some((option) => option.value && option.value !== 'false')
if (!hasAtLeastOneOptionSet) {
formElementComplianceMap.delete(formElement.id)
return
}
formElement.options.forEach((option) => {
if (!option.value) {
console.log(`Value missing for ${formElement.type}`)
return
}
const currentHighestComplianceStatus =
complianceMap?.get(option.processingPurpose)?.get(option.employeeDataCategory) ?? ComplianceStatus.NonCritical
const currentHighestComplianceStatusPos =
Object.values(ComplianceStatus).indexOf(currentHighestComplianceStatus)
if (formElementComplianceMap.has(formElement.id)) {
const newComplianceStatus = formElementComplianceMap.get(formElement.id)!
const newComplianceStatusPos = Object.values(ComplianceStatus).indexOf(newComplianceStatus)
if (newComplianceStatusPos > currentHighestComplianceStatusPos) {
formElementComplianceMap.set(formElement.id, newComplianceStatus)
}
} else {
formElementComplianceMap.set(formElement.id, currentHighestComplianceStatus)
}
})
})
return formElementComplianceMap
}
return { validateFormElements }
}