From 30e56aa336788178e24eedf1497746a31bd8b6b6 Mon Sep 17 00:00:00 2001 From: danranvm Date: Fri, 15 Jul 2022 17:56:45 +0800 Subject: [PATCH] feat(pro:form): add ProForm component fix #981 --- packages/cdk/forms/src/messages/en-US.ts | 2 +- packages/cdk/forms/src/messages/zh-CN.ts | 6 +- packages/cdk/forms/src/validators.ts | 7 +- packages/components/checkbox/src/types.ts | 4 +- .../config/__tests__/globalConfig.spec.ts | 2 +- .../form/demo/CustomizedValidation.md | 6 +- .../form/demo/CustomizedValidation.vue | 11 +- packages/components/form/demo/DynamicItem.vue | 2 +- packages/components/form/docs/Index.zh.md | 2 +- packages/components/form/index.ts | 1 - packages/components/form/src/FormItem.tsx | 10 +- .../form/src/composables/useFormItem.ts | 3 + packages/components/form/src/types.ts | 15 +- .../components/modal/src/ModalWrapper.tsx | 1 + packages/components/table/docs/Index.zh.md | 1 - packages/pro/config/src/defaultConfig.ts | 16 +- packages/pro/config/src/types.ts | 43 ++++- packages/pro/default.less | 4 +- packages/pro/form/__tests__/proForm.spec.ts | 25 +++ packages/pro/form/demo/Basic.md | 14 ++ packages/pro/form/demo/Basic.vue | 69 +++++++ packages/pro/form/demo/BasicSchema.md | 14 ++ packages/pro/form/demo/BasicSchema.vue | 81 ++++++++ packages/pro/form/demo/Register.md | 14 ++ packages/pro/form/demo/Register.vue | 116 ++++++++++++ packages/pro/form/demo/RegisterSchema.md | 14 ++ packages/pro/form/demo/RegisterSchema.vue | 125 ++++++++++++ packages/pro/form/docs/Design.en.md | 3 + packages/pro/form/docs/Design.zh.md | 3 + packages/pro/form/docs/Index.en.md | 29 +++ packages/pro/form/docs/Index.zh.md | 89 +++++++++ packages/pro/form/index.ts | 23 +++ packages/pro/form/src/ProForm.tsx | 76 ++++++++ .../form/src/composables/useAjvValidator.ts | 122 ++++++++++++ packages/pro/form/src/composables/useForm.ts | 178 ++++++++++++++++++ packages/pro/form/src/types.ts | 124 ++++++++++++ packages/pro/form/style/index.less | 5 + packages/pro/form/style/themes/default.less | 4 + packages/pro/form/style/themes/default.ts | 5 + .../form/style/themes/default.variable.less | 0 packages/pro/form/style/themes/seer.less | 4 + packages/pro/form/style/themes/seer.ts | 5 + .../pro/form/style/themes/seer.variable.less | 1 + packages/pro/index.ts | 5 +- packages/pro/package.json | 2 + packages/pro/seer.less | 1 + packages/pro/style/variable/prefix.less | 5 +- packages/pro/types.d.ts | 2 + 48 files changed, 1253 insertions(+), 41 deletions(-) create mode 100644 packages/pro/form/__tests__/proForm.spec.ts create mode 100644 packages/pro/form/demo/Basic.md create mode 100644 packages/pro/form/demo/Basic.vue create mode 100644 packages/pro/form/demo/BasicSchema.md create mode 100644 packages/pro/form/demo/BasicSchema.vue create mode 100644 packages/pro/form/demo/Register.md create mode 100644 packages/pro/form/demo/Register.vue create mode 100644 packages/pro/form/demo/RegisterSchema.md create mode 100644 packages/pro/form/demo/RegisterSchema.vue create mode 100644 packages/pro/form/docs/Design.en.md create mode 100644 packages/pro/form/docs/Design.zh.md create mode 100644 packages/pro/form/docs/Index.en.md create mode 100644 packages/pro/form/docs/Index.zh.md create mode 100644 packages/pro/form/index.ts create mode 100644 packages/pro/form/src/ProForm.tsx create mode 100644 packages/pro/form/src/composables/useAjvValidator.ts create mode 100644 packages/pro/form/src/composables/useForm.ts create mode 100644 packages/pro/form/src/types.ts create mode 100644 packages/pro/form/style/index.less create mode 100644 packages/pro/form/style/themes/default.less create mode 100644 packages/pro/form/style/themes/default.ts create mode 100644 packages/pro/form/style/themes/default.variable.less create mode 100644 packages/pro/form/style/themes/seer.less create mode 100644 packages/pro/form/style/themes/seer.ts create mode 100644 packages/pro/form/style/themes/seer.variable.less diff --git a/packages/cdk/forms/src/messages/en-US.ts b/packages/cdk/forms/src/messages/en-US.ts index 31d63d97c..3c689d9e2 100644 --- a/packages/cdk/forms/src/messages/en-US.ts +++ b/packages/cdk/forms/src/messages/en-US.ts @@ -37,7 +37,7 @@ export const enUSMessages = { return `Please enter a number no greater than ${err.max}` }, range: (err: Omit, __: AbstractControl): string => { - return `Please enter a number between ${err.min - 1}-${err.max + 1}` + return `Please enter a number between ${err.min}-${err.max}` }, minLength: (err: Omit, __: AbstractControl): string => { const { minLength, isArray } = err diff --git a/packages/cdk/forms/src/messages/zh-CN.ts b/packages/cdk/forms/src/messages/zh-CN.ts index 64e476f0e..f12e66708 100644 --- a/packages/cdk/forms/src/messages/zh-CN.ts +++ b/packages/cdk/forms/src/messages/zh-CN.ts @@ -30,13 +30,13 @@ export const zhCNMessages = { return `请输入正确的邮箱格式${example ? ', 例: ' + example : ''}` }, min: (err: Omit, __: AbstractControl): string => { - return `请输入一个不小于 ${err.min} 的数字` + return `请输入不小于 ${err.min} 的数字` }, max: (err: Omit, __: AbstractControl): string => { - return `请输入一个不大于 ${err.max} 的数字` + return `请输入不大于 ${err.max} 的数字` }, range: (err: Omit, __: AbstractControl): string => { - return `请输入一个 ${err.min - 1}-${err.max + 1} 之间的数字` + return `请输入 ${err.min}-${err.max} 之间的数字` }, minLength: (err: Omit, __: AbstractControl): string => { const { minLength, isArray } = err diff --git a/packages/cdk/forms/src/validators.ts b/packages/cdk/forms/src/validators.ts index 15e08ae91..15335f135 100644 --- a/packages/cdk/forms/src/validators.ts +++ b/packages/cdk/forms/src/validators.ts @@ -13,6 +13,7 @@ import type { AsyncValidatorFn, ValidateError, ValidateErrors, + ValidateMessage, ValidateMessageFn, ValidateMessages, ValidatorFn, @@ -35,6 +36,10 @@ export class Validators { Validators.messages = { ...Validators.messages, ...messages } } + static getMessage(key: string): ValidateMessage | undefined { + return Validators.messages[key] + } + static getError( key: string, control: AbstractControl, @@ -207,7 +212,7 @@ export class Validators { /** checks whether string or array is empty */ function isEmpty(val: any): boolean { - return isNil(val) || (val.length === 0 && (isString(val) || isArray(val))) + return isNil(val) || ((isString(val) || isArray(val)) && val.length === 0) } /** checks whether variable has length props */ diff --git a/packages/components/checkbox/src/types.ts b/packages/components/checkbox/src/types.ts index 90577a156..f16a1c849 100644 --- a/packages/components/checkbox/src/types.ts +++ b/packages/components/checkbox/src/types.ts @@ -27,9 +27,9 @@ export const checkboxProps = { size: { type: String as PropType, default: undefined }, // events - 'onUpdate:checked': { type: [Function, Array] as PropType(checked: K) => void>> }, + 'onUpdate:checked': { type: [Function, Array] as PropType void>> }, onChange: { - type: [Function, Array] as PropType(newChecked: K, oldChecked: K) => void>>, + type: [Function, Array] as PropType void>>, }, onBlur: { type: [Function, Array] as PropType void>> }, onFocus: { type: [Function, Array] as PropType void>> }, diff --git a/packages/components/config/__tests__/globalConfig.spec.ts b/packages/components/config/__tests__/globalConfig.spec.ts index 296eb212d..00fa722de 100644 --- a/packages/components/config/__tests__/globalConfig.spec.ts +++ b/packages/components/config/__tests__/globalConfig.spec.ts @@ -14,7 +14,7 @@ const ParentComponent = { components: { ChildComponent }, template: ``, setup() { - const [, changeConfig] = useGlobalConfig('form', true) + const [, changeConfig] = useGlobalConfig('form', {}) return { changeConfig } }, } diff --git a/packages/components/form/demo/CustomizedValidation.md b/packages/components/form/demo/CustomizedValidation.md index 41e524994..bfba2a877 100644 --- a/packages/components/form/demo/CustomizedValidation.md +++ b/packages/components/form/demo/CustomizedValidation.md @@ -7,16 +7,14 @@ order: 7 ## zh -我们提供了 `status`, `hasFeedback` 和 `message` 等属性,你可以不通过 `control` 来设置验证状态和提示信息。 +我们提供了 `status`, 和 `message` 等属性,你可以不通过 `control` 来设置验证状态和提示信息。 - `status`: 校验状态, 共3种: `valid`, `validating`, `invalid`。 -- `hasFeedback`: 添加反馈图标。 - `message`: 设置提示信息。 ## en -We provide properties like `status`, `hasFeedback` and `message` to customize validate status and message, without using `control`. +We provide properties like `status` and `message` to customize validate status and message, without using `control`. - `status`: validate status of form components which could be `valid`, `validating` and `invalid`. -- `hasFeedback`: display feed icon of input control - `message`: display validate message. diff --git a/packages/components/form/demo/CustomizedValidation.vue b/packages/components/form/demo/CustomizedValidation.vue index 2d30db828..85166fd12 100644 --- a/packages/components/form/demo/CustomizedValidation.vue +++ b/packages/components/form/demo/CustomizedValidation.vue @@ -1,15 +1,15 @@