Skip to content
17 changes: 12 additions & 5 deletions src/server/plugins/engine/components/AutocompleteField.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { type AutocompleteFieldComponent } from '@defra/forms-model'
import { type LanguageMessages } from 'joi'

import { SelectField } from '~/src/server/plugins/engine/components/SelectField.js'
import { withCustomValidationOverrides } from '~/src/server/plugins/engine/components/helpers/index.js'
import { type RenderContext } from '~/src/server/plugins/engine/components/types.js'
import { buildValidationMessages } from '~/src/server/plugins/engine/i18n/buildValidationMessages.js'
import { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
Expand Down Expand Up @@ -50,12 +50,19 @@ export class AutocompleteField extends SelectField {
}

getValidationMessagesOverride(translator: Translator) {
const { customValidationMessages } = this.options
const { t } = translator
const defaults = {
'any.required': buildValidationMessages(t).objectRequired,
'any.only': buildValidationMessages(t).objectRequired
}

return {
[this.name]: {
'any.required': buildValidationMessages(t).objectRequired,
'any.only': buildValidationMessages(t).objectRequired
} as LanguageMessages
[this.name]: withCustomValidationOverrides(
defaults,
undefined,
customValidationMessages
)
}
}
}
26 changes: 18 additions & 8 deletions src/server/plugins/engine/components/LocationFieldBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ import {
FormComponent,
isFormValue
} from '~/src/server/plugins/engine/components/FormComponent.js'
import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers/index.js'
import {
addClassOptionIfNone,
withCustomValidationOverrides
} from '~/src/server/plugins/engine/components/helpers/index.js'
import { type RenderContext } from '~/src/server/plugins/engine/components/types.js'
import { buildValidationMessages } from '~/src/server/plugins/engine/i18n/buildValidationMessages.js'
import { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
Expand Down Expand Up @@ -141,16 +144,23 @@ export abstract class LocationFieldBase extends FormComponent {
}

getValidationMessagesOverride(translator: Translator) {
const { customValidationMessage, customValidationMessages } = this.options
const { t } = translator
const config = this.getValidationConfig(translator)
const defaults = {
'any.required':
config.requiredMessage ?? buildValidationMessages(t).objectRequired,
'string.empty':
config.requiredMessage ?? buildValidationMessages(t).objectRequired,
'string.pattern.base': config.patternErrorMessage
}

return {
[this.name]: {
'any.required':
config.requiredMessage ?? buildValidationMessages(t).objectRequired,
'string.empty':
config.requiredMessage ?? buildValidationMessages(t).objectRequired,
'string.pattern.base': config.patternErrorMessage
} as LanguageMessages
[this.name]: withCustomValidationOverrides(
defaults,
customValidationMessage,
customValidationMessages
)
}
}

Expand Down
30 changes: 17 additions & 13 deletions src/server/plugins/engine/components/NumberField.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
import { type NumberFieldComponent } from '@defra/forms-model'
import joi, {
type CustomValidator,
type LanguageMessages,
type NumberSchema
} from 'joi'
import joi, { type CustomValidator, type NumberSchema } from 'joi'

import {
FormComponent,
isFormValue
} from '~/src/server/plugins/engine/components/FormComponent.js'
import { withCustomValidationOverrides } from '~/src/server/plugins/engine/components/helpers/index.js'
import { type RenderContext } from '~/src/server/plugins/engine/components/types.js'
import { buildValidationMessages } from '~/src/server/plugins/engine/i18n/buildValidationMessages.js'
import { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
Expand Down Expand Up @@ -137,16 +134,23 @@ export class NumberField extends FormComponent {
}

getValidationMessagesOverride(translator: Translator) {
const { customValidationMessage, customValidationMessages } = this.options
const { t } = translator
const defaults = {
'any.required': buildValidationMessages(t).objectRequired,
'number.base': buildValidationMessages(t).objectMissing,
'number.precision': buildValidationMessages(t).numberPrecision,
'number.integer': buildValidationMessages(t).numberInteger,
'number.min': buildValidationMessages(t).numberMin,
'number.max': buildValidationMessages(t).numberMax
}

return {
[this.name]: {
'any.required': buildValidationMessages(t).objectRequired,
'number.base': buildValidationMessages(t).objectMissing,
'number.precision': buildValidationMessages(t).numberPrecision,
'number.integer': buildValidationMessages(t).numberInteger,
'number.min': buildValidationMessages(t).numberMin,
'number.max': buildValidationMessages(t).numberMax
} as LanguageMessages
[this.name]: withCustomValidationOverrides(
defaults,
customValidationMessage,
customValidationMessages
)
}
}

Expand Down
18 changes: 14 additions & 4 deletions src/server/plugins/engine/components/YesNoField.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ import {
} from '@defra/forms-model'

import { SelectionControlField } from '~/src/server/plugins/engine/components/SelectionControlField.js'
import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers/index.js'
import {
addClassOptionIfNone,
withCustomValidationOverrides
} from '~/src/server/plugins/engine/components/helpers/index.js'
import { buildValidationMessages } from '~/src/server/plugins/engine/i18n/buildValidationMessages.js'
import { type Translator } from '~/src/server/plugins/engine/i18n/types.js'
import { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
Expand Down Expand Up @@ -62,11 +65,18 @@ export class YesNoField extends SelectionControlField {
}

getValidationMessagesOverride(translator: Translator) {
const { customValidationMessage, customValidationMessages } = this.options
const { selectYesNoRequired } = buildValidationMessages(translator.t)
const defaults = {
'any.required': selectYesNoRequired
}

return {
[this.name]: {
'any.required': selectYesNoRequired
}
[this.name]: withCustomValidationOverrides(
defaults,
customValidationMessage,
customValidationMessages
)
}
}

Expand Down
Loading
Loading