46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
import { conditionsMet } from './FormLogicConditionChecker'
|
|
class FormLogicPropertyResolver {
|
|
conditionsMet = conditionsMet;
|
|
property = null;
|
|
formData = null;
|
|
logic = false;
|
|
|
|
constructor (property, formData) {
|
|
this.property = property
|
|
this.formData = formData
|
|
this.logic = (property.logic !== undefined) ? property.logic : false
|
|
}
|
|
|
|
isHidden () {
|
|
if (!this.logic) {
|
|
return this.property.hidden
|
|
}
|
|
|
|
const conditionsMet = this.conditionsMet(this.logic.conditions, this.formData)
|
|
if (conditionsMet && this.property.hidden && this.logic.actions.length > 0 && this.logic.actions.includes('show-block')) {
|
|
return false
|
|
} else if (conditionsMet && !this.property.hidden && this.logic.actions.length > 0 && this.logic.actions.includes('hide-block')) {
|
|
return true
|
|
} else {
|
|
return this.property.hidden
|
|
}
|
|
}
|
|
|
|
isRequired () {
|
|
if (!this.logic) {
|
|
return this.property.required
|
|
}
|
|
|
|
const conditionsMet = this.conditionsMet(this.logic.conditions, this.formData)
|
|
if (conditionsMet && this.property.required && this.logic.actions.length > 0 && this.logic.actions.includes('make-it-optional')) {
|
|
return false
|
|
} else if (conditionsMet && !this.property.required && this.logic.actions.length > 0 && this.logic.actions.includes('require-answer')) {
|
|
return true
|
|
} else {
|
|
return this.property.required
|
|
}
|
|
}
|
|
}
|
|
|
|
export default FormLogicPropertyResolver
|