mirror of
https://github.com/documenso/documenso.git
synced 2025-11-12 15:53:02 +10:00
chore: add more field types (#1141)
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.
This commit is contained in:
41
packages/lib/advanced-fields-validation/validate-radio.ts
Normal file
41
packages/lib/advanced-fields-validation/validate-radio.ts
Normal file
@ -0,0 +1,41 @@
|
||||
interface RadioFieldMeta {
|
||||
readOnly?: boolean;
|
||||
required?: boolean;
|
||||
values?: { checked: boolean; value: string }[];
|
||||
}
|
||||
|
||||
export const validateRadioField = (
|
||||
value: string | undefined,
|
||||
fieldMeta: RadioFieldMeta,
|
||||
isSigningPage: boolean = false,
|
||||
): string[] => {
|
||||
const errors = [];
|
||||
|
||||
const { readOnly, required, values } = fieldMeta;
|
||||
|
||||
if (readOnly && required) {
|
||||
errors.push('A field cannot be both read-only and required');
|
||||
}
|
||||
|
||||
if (readOnly && (!values || values.length === 0)) {
|
||||
errors.push('A read-only field must have at least one value');
|
||||
}
|
||||
|
||||
if (isSigningPage && required && !value) {
|
||||
errors.push('Choosing an option is required');
|
||||
}
|
||||
|
||||
if (values) {
|
||||
const checkedRadioFieldValues = values.filter((option) => option.checked);
|
||||
|
||||
if (values.length === 0) {
|
||||
errors.push('Radio field must have at least one option');
|
||||
}
|
||||
|
||||
if (checkedRadioFieldValues.length > 1) {
|
||||
errors.push('There cannot be more than one checked option');
|
||||
}
|
||||
}
|
||||
|
||||
return errors;
|
||||
};
|
||||
Reference in New Issue
Block a user