UNPKG

@dwp/govuk-casa

Version:

A framework for building GOVUK Collect-And-Submit-Applications

72 lines (62 loc) 1.91 kB
import ValidatorFactory from "../ValidatorFactory.js"; import ValidationError from "../ValidationError.js"; import { coerceInputToInteger } from "../utils.js"; /** * @typedef {import("../../casa").ErrorMessageConfig} ErrorMessageConfig * @access private */ /** * @typedef {object} RangeConfigOptions * @property {ErrorMessageConfig} errorMsgMax Error message to use on max * failure * @property {ErrorMessageConfig} errorMsgMin Error message to use on min * failure * @property {number} max Maximum integer value * @property {number} min Minimum integer value */ /** * Test if an integer is within a provided range. * * See {@link RangeConfigOptions} for `make()` options. * * @memberof Validators * @augments ValidatorFactory */ export default class Range extends ValidatorFactory { name = "range"; validate(inputValue, dataContext = {}) { const { errorMsgMax = { inline: "validation:rule.range.max.inline", summary: "validation:rule.range.max.summary", }, errorMsgMin = { inline: "validation:rule.range.min.inline", summary: "validation:rule.range.min.summary", }, min = Number.MIN_VALUE, max = Number.MAX_VALUE, } = this.config; let errorMsg; let valid = true; if (inputValue > max) { valid = false; errorMsg = errorMsgMax; } if (inputValue < min) { valid = false; errorMsg = errorMsgMin; } return valid ? [] : [ValidationError.make({ errorMsg, dataContext })]; } sanitise(value) { // treat an empty string as undefined // when user submits empty form, it stores an empty string if (value !== "" && value !== undefined) { // add to custom validator docs to ensure not to return a falsy value as // it doesn't show on screen return coerceInputToInteger(value)?.toString(); } return undefined; } }