Skip to content

Commit

Permalink
fix: add when validation for all fields
Browse files Browse the repository at this point in the history
  • Loading branch information
Prabhu-Kathiresan committed Feb 14, 2022
1 parent cc11889 commit 4ed1ca5
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 6 deletions.
2 changes: 1 addition & 1 deletion example/src/FormComponent.js
Expand Up @@ -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,
Expand Down
29 changes: 24 additions & 5 deletions src/Form/schema.ts
Expand Up @@ -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())
Expand All @@ -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)
Expand All @@ -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 {
Expand All @@ -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
}
Expand Down

0 comments on commit 4ed1ca5

Please sign in to comment.