From 4ed1ca5422dcce75399d78cf1e8c52aa3425c494 Mon Sep 17 00:00:00 2001 From: Prabhu-Kathiresan Date: Mon, 14 Feb 2022 22:16:45 +0530 Subject: [PATCH] fix: add when validation for all fields --- example/src/FormComponent.js | 2 +- src/Form/schema.ts | 29 ++++++++++++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/example/src/FormComponent.js b/example/src/FormComponent.js index ebedcf0..954707f 100644 --- a/example/src/FormComponent.js +++ b/example/src/FormComponent.js @@ -412,7 +412,7 @@ export default function FormComponent({ stickyFooter = true, onError = () => { } const service = new Service(['post', 'put']); const toasts = useToasts(); const [data,] = useState({ - _id: 1, + _id: null, name: 'Prabhu Kathiresan', email: 'prabhukathir30@gmail.com', role: null, diff --git a/src/Form/schema.ts b/src/Form/schema.ts index 7e014b5..189fcc6 100644 --- a/src/Form/schema.ts +++ b/src/Form/schema.ts @@ -81,7 +81,10 @@ export default class Schema { case 'date': case 'datetime': field = date().nullable(nullable) - if (required) field = field.required(requiredMessage) + if (Array.isArray(rest.when)) { + let [dependentFields, handler] = rest.when + field = field.when(dependentFields, handler) + } else if (required) field = field.required(requiredMessage) if (defaultValue instanceof Date) field = field.default(defaultValue) if (rest.min instanceof Date) field = field.min(dayjs(rest.min).startOf('d').toDate()) if (rest.max instanceof Date) field = field.max(dayjs(rest.max).endOf('d').toDate()) @@ -91,7 +94,11 @@ export default class Schema { nullable: _nullable = true } = props; field = number().nullable(_nullable) - if (required) field = field.required(requiredMessage) + if (Array.isArray(rest.when)) { + let [dependentFields, handler] = rest.when + field = field.when(dependentFields, handler) + } else if (required) field = field.required(requiredMessage) + if (typeof defaultValue === 'number') field = field.default(defaultValue) if (rest.enum?.length) field = field.oneOf(rest.enum) if (typeof rest.min === 'number') field = field.min(rest.min) @@ -110,7 +117,13 @@ export default class Schema { case 'url': case 'password': field = string().nullable(nullable) - if (required) field = field.required(requiredMessage) + if (Array.isArray(rest.when)) { + let [dependentFields, handler] = rest.when + field = field.when(dependentFields, handler) + } else { + if (required) field = field.required(requiredMessage) + else if (nullable) field = field.nullable() + } field = field.default(defaultValue) field = field.trim() let { @@ -137,11 +150,17 @@ export default class Schema { break case 'object': field = object().nullable(nullable) - if (required) field = field.required(requiredMessage) + if (Array.isArray(rest.when)) { + let [dependentFields, handler] = rest.when + field = field.when(dependentFields, handler) + } else if (required) field = field.required(requiredMessage) field = field.default(defaultValue || undefined) default: field = mixed().nullable(nullable) - if (required) field = field.required(requiredMessage) + if (Array.isArray(rest.when)) { + let [dependentFields, handler] = rest.when + field = field.when(dependentFields, handler) + } else if (required) field = field.required(requiredMessage) field = field.default(defaultValue || null) break }