added RequiredIf option

This commit is contained in:
2023-05-08 20:24:54 +10:00
parent 9b5aab6e6e
commit a1170a1347

View File

@@ -821,6 +821,70 @@ export function Required(
};
}
/**
* Required If
*/
type ValidationRequiredIfCheck = boolean | Array<boolean>;
interface ValidationRequiredIfOptions {
check: ValidationRequiredIfCheck;
invalidMessage?:
| string
| ((options: ValidationRequiredIfOptions) => string);
}
interface ValidationRequiredIfObject extends ValidationRequiredIfOptions {
validate: (value: string) => Promise<ValidationResult>;
}
const defaultValidationRequiredIfOptions: ValidationRequiredIfOptions = {
check: true,
invalidMessage: "This field is required.",
};
/**
* Validate field contains value
*
* @param checkOrOptions
* @param options options data
* @returns ValidationRequiredIfObject
*/
export function RequiredIf(
checkOrOptions: boolean | Array<boolean> | ValidationRequiredIfOptions,
options?: ValidationRequiredIfOptions
): ValidationRequiredIfObject {
if (
typeof checkOrOptions === "boolean" ||
Array.isArray(checkOrOptions) === true
) {
options = { ...defaultValidationRequiredIfOptions, ...(options || {}) };
options.check = checkOrOptions;
} else {
options = {
...defaultValidationRequiredIfOptions,
...(checkOrOptions || {}),
};
}
options = { ...defaultValidationRequiredIfOptions, ...(options || {}) };
return {
...options,
validate: function (value: unknown): Promise<ValidationResult> {
return Promise.resolve({
valid: Array.isArray(value)
? value.every((item) => !!item)
: value == true,
invalidMessages: [
typeof this.invalidMessage === "string"
? this.invalidMessage
: this.invalidMessage(this),
],
});
},
};
}
/**
* Url
*/