From 6d7973f6e1cc3552df45ac7ce2e2107d18061abf Mon Sep 17 00:00:00 2001 From: Romain Hamel Date: Sat, 12 Aug 2023 16:48:53 +0200 Subject: [PATCH] feat(Form): improve form control and input validation trigger (#487) Co-authored-by: Benjamin Canac --- docs/components/content/ComponentCard.vue | 4 +- .../content/examples/FormExampleBasic.vue | 13 +- .../content/examples/FormExampleElements.vue | 16 +- .../content/examples/FormExampleJoi.vue | 28 ++- .../content/examples/FormExampleYup.vue | 29 ++- .../content/examples/FormExampleZod.vue | 29 ++- .../examples/FormGroupErrorExample.vue | 9 + docs/content/3.forms/10.form.md | 177 +++++++++++------- docs/content/3.forms/9.form-group.md | 43 ++++- src/runtime/components/forms/Checkbox.vue | 11 +- .../components/forms/{Form.ts => Form.vue} | 95 +++++++--- src/runtime/components/forms/FormGroup.ts | 108 ----------- src/runtime/components/forms/FormGroup.vue | 107 +++++++++++ src/runtime/components/forms/Input.vue | 32 ++-- src/runtime/components/forms/Radio.vue | 15 +- src/runtime/components/forms/Range.vue | 25 +-- src/runtime/components/forms/Select.vue | 34 ++-- src/runtime/components/forms/SelectMenu.vue | 34 ++-- src/runtime/components/forms/Textarea.vue | 18 +- src/runtime/components/forms/Toggle.vue | 15 +- src/runtime/composables/useFormEvents.ts | 18 -- src/runtime/composables/useFormGroup.ts | 38 ++++ src/runtime/types/form.d.ts | 12 +- 23 files changed, 529 insertions(+), 381 deletions(-) create mode 100644 docs/components/content/examples/FormGroupErrorExample.vue rename src/runtime/components/forms/{Form.ts => Form.vue} (63%) delete mode 100644 src/runtime/components/forms/FormGroup.ts create mode 100644 src/runtime/components/forms/FormGroup.vue delete mode 100644 src/runtime/composables/useFormEvents.ts create mode 100644 src/runtime/composables/useFormGroup.ts diff --git a/docs/components/content/ComponentCard.vue b/docs/components/content/ComponentCard.vue index c9c753c0..d3ff5d33 100644 --- a/docs/components/content/ComponentCard.vue +++ b/docs/components/content/ComponentCard.vue @@ -164,9 +164,7 @@ const code = computed(() => { continue } - const prop = meta?.meta?.props?.find((prop: any) => prop.name === key) - - code += ` ${(prop?.type === 'boolean' && value !== true) || typeof value === 'object' ? ':' : ''}${key === 'modelValue' ? 'value' : useKebabCase(key)}${prop?.type === 'boolean' && !!value && key !== 'modelValue' ? '' : `="${typeof value === 'object' ? renderObject(value) : value}"`}` + code += ` ${(typeof value === 'boolean' && value !== true) || typeof value === 'object' ? ':' : ''}${key === 'modelValue' ? 'value' : useKebabCase(key)}${typeof value === 'boolean' && !!value && key !== 'modelValue' ? '' : `="${typeof value === 'object' ? renderObject(value) : value}"`}` } if (props.slots) { diff --git a/docs/components/content/examples/FormExampleBasic.vue b/docs/components/content/examples/FormExampleBasic.vue index d60d356d..1c79be93 100644 --- a/docs/components/content/examples/FormExampleBasic.vue +++ b/docs/components/content/examples/FormExampleBasic.vue @@ -1,6 +1,6 @@ diff --git a/docs/components/content/examples/FormExampleJoi.vue b/docs/components/content/examples/FormExampleJoi.vue index 00e3f02e..f811e728 100644 --- a/docs/components/content/examples/FormExampleJoi.vue +++ b/docs/components/content/examples/FormExampleJoi.vue @@ -1,40 +1,38 @@