mirror of
https://github.com/documenso/documenso.git
synced 2025-11-10 04:22:32 +10:00
Adds a number of new field types and capabilities to existing fields. A massive change with far too many moving pieces to document in a single commit.
83 lines
2.3 KiB
TypeScript
83 lines
2.3 KiB
TypeScript
import { checkboxValidationSigns } from '@documenso/ui/primitives/document-flow/field-items-advanced-settings/constants';
|
|
|
|
interface CheckboxFieldMeta {
|
|
readOnly?: boolean;
|
|
required?: boolean;
|
|
validationRule?: string;
|
|
validationLength?: number;
|
|
}
|
|
|
|
export const validateCheckboxField = (
|
|
values: string[],
|
|
fieldMeta: CheckboxFieldMeta,
|
|
isSigningPage: boolean = false,
|
|
): string[] => {
|
|
const errors = [];
|
|
|
|
const { readOnly, required, validationRule, validationLength } = fieldMeta;
|
|
|
|
if (readOnly && required) {
|
|
errors.push('A field cannot be both read-only and required');
|
|
}
|
|
|
|
if (values.length === 0) {
|
|
errors.push('At least one option must be added');
|
|
}
|
|
|
|
if (readOnly && values.length === 0) {
|
|
errors.push('A read-only field must have at least one value');
|
|
}
|
|
|
|
if (isSigningPage && required && values.length === 0) {
|
|
errors.push('Selecting an option is required');
|
|
}
|
|
|
|
if (validationRule && !validationLength) {
|
|
errors.push('You need to specify the number of options for validation');
|
|
}
|
|
|
|
if (validationLength && !validationRule) {
|
|
errors.push('You need to specify the validation rule');
|
|
}
|
|
|
|
if (validationRule && validationLength) {
|
|
const validation = checkboxValidationSigns.find((sign) => sign.label === validationRule);
|
|
|
|
if (validation) {
|
|
let lengthCondition = false;
|
|
|
|
switch (validation.value) {
|
|
case '=':
|
|
lengthCondition = isSigningPage
|
|
? values.length !== validationLength
|
|
: values.length < validationLength;
|
|
break;
|
|
case '>=':
|
|
lengthCondition = values.length < validationLength;
|
|
break;
|
|
case '<=':
|
|
lengthCondition = isSigningPage
|
|
? values.length > validationLength
|
|
: values.length < validationLength;
|
|
break;
|
|
}
|
|
|
|
if (lengthCondition) {
|
|
let errorMessage;
|
|
if (isSigningPage) {
|
|
errorMessage = `You need to ${validationRule.toLowerCase()} ${validationLength} options`;
|
|
} else {
|
|
errorMessage =
|
|
validation.value === '<='
|
|
? `You need to select at least ${validationLength} options`
|
|
: `You need to add at least ${validationLength} options`;
|
|
}
|
|
|
|
errors.push(errorMessage);
|
|
}
|
|
}
|
|
}
|
|
|
|
return errors;
|
|
};
|