From dfa63b50a8940583033e95454912a56b59c4a80e Mon Sep 17 00:00:00 2001 From: Sven van de Scheur Date: Tue, 6 Jun 2023 10:01:03 +0200 Subject: [PATCH] :recycle: #43 - Refactor validation to suit multiple. --- package.json | 3 +- .../formio/textfield/textfield.component.tsx | 2 +- .../utils/errors/errors.component.tsx | 7 +- .../utils/errors/errors.stories.tsx | 6 +- .../multiple/multiple.container.tsx | 6 +- src/containers/multiple/multiple.stories.tsx | 54 ++++++- src/lib/renderer/renderer.tsx | 8 +- src/lib/validation/validate.ts | 145 +++++++++--------- src/lib/validation/validators/maxlength.ts | 2 +- src/lib/validation/validators/minlength.ts | 2 +- src/lib/validation/validators/pattern.ts | 2 +- src/lib/validation/validators/required.ts | 2 +- .../custom-component.stories.tsx | 10 +- src/types/componentprops.d.ts | 3 +- src/types/config.d.ts | 4 +- 15 files changed, 157 insertions(+), 99 deletions(-) diff --git a/package.json b/package.json index 0f4a0cd..d3155f5 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,8 @@ }, "dependencies": { "clsx": "^1.2.1", - "formik": "^2.2.9" + "formik": "^2.2.9", + "lodash": "^4.17.21" }, "resolutions": { "react-formio/formiojs": "~4.13.0" diff --git a/src/components/formio/textfield/textfield.component.tsx b/src/components/formio/textfield/textfield.component.tsx index 0bdd46e..9cb8b24 100644 --- a/src/components/formio/textfield/textfield.component.tsx +++ b/src/components/formio/textfield/textfield.component.tsx @@ -62,7 +62,7 @@ export const TextField: React.FC = ({callbacks, component, valu {..._callbacks} /> - {!pristineState && component.showCharCount && } + {!pristineState && component.showCharCount && value && } {component.description && } {!pristineState && errors?.length > 0 && } diff --git a/src/components/utils/errors/errors.component.tsx b/src/components/utils/errors/errors.component.tsx index 2d940ae..145db5a 100644 --- a/src/components/utils/errors/errors.component.tsx +++ b/src/components/utils/errors/errors.component.tsx @@ -1,9 +1,10 @@ +import {ValidationError} from '@lib/validation'; import clsx from 'clsx'; import React from 'react'; export interface IErrorsProps { componentId: string; - errors: string[]; + errors: ValidationError[]; } /** @@ -16,11 +17,11 @@ export const Errors: React.FC = ({componentId, errors}) => { return (
    - {errors?.map((error: string, index: number) => { + {errors?.map((error, index: number) => { return (
  • ); diff --git a/src/components/utils/errors/errors.stories.tsx b/src/components/utils/errors/errors.stories.tsx index fa951d8..6e0717c 100644 --- a/src/components/utils/errors/errors.stories.tsx +++ b/src/components/utils/errors/errors.stories.tsx @@ -13,7 +13,11 @@ export default meta; export const errors: ComponentStory = args => ; errors.args = { - errors: ['Postcode is required', 'Postcode does not match the pattern ^\\d{4}\\s?[a-zA-Z]{2}$'], + // errors: [{message: 'Postcode is required'}, {message: 'Postcode does not match the pattern ^\\d{4}\\s?[a-zA-Z]{2}$'}], + errors: [ + {name: 'required', message: 'Postcode is required'}, + {name: 'pattern', message: 'Postcode does not match the pattern ^\\d{4}\\s?[a-zA-Z]{2}$'}, + ], }; errors.play = async ({canvasElement}) => { const canvas = within(canvasElement); diff --git a/src/containers/multiple/multiple.container.tsx b/src/containers/multiple/multiple.container.tsx index 35a6c9d..1b722d6 100644 --- a/src/containers/multiple/multiple.container.tsx +++ b/src/containers/multiple/multiple.container.tsx @@ -73,7 +73,9 @@ export const Multiple: React.FC = props => { return ( -