From 021068d7f0e063a1fc739d40501423e4033995c9 Mon Sep 17 00:00:00 2001 From: Kyrielin Date: Thu, 4 Aug 2022 18:50:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(form):=20setFields=20=E6=94=AF=E6=8C=81=20?= =?UTF-8?q?validateMessage=20=E5=8F=82=E6=95=B0=20(#1226)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/form/FormItem.tsx | 10 +-- .../__snapshots__/form.test.tsx.snap | 82 ++++++++++++++----- src/form/_example/base.jsx | 24 ++++-- src/form/hooks/useInstance.tsx | 4 +- test/ssr/__snapshots__/ssr.test.js.snap | 2 +- 5 files changed, 85 insertions(+), 37 deletions(-) diff --git a/src/form/FormItem.tsx b/src/form/FormItem.tsx index a970954d4..8d8c02660 100644 --- a/src/form/FormItem.tsx +++ b/src/form/FormItem.tsx @@ -77,7 +77,7 @@ const FormItem = forwardRef((props, ref) => { requiredMark = requiredMarkFromContext, } = props; - const [freeShowErrorMessage, setFreeShowErrorMessage] = useState(false); + const [freeShowErrorMessage, setFreeShowErrorMessage] = useState(undefined); const [errorList, setErrorList] = useState([]); const [successList, setSuccessList] = useState([]); const [verifyStatus, setVerifyStatus] = useState(ValidateStatus.TO_BE_VALIDATED); @@ -287,11 +287,11 @@ const FormItem = forwardRef((props, ref) => { setVerifyStatus(ValidateStatus.TO_BE_VALIDATED); } - function setField(field: { value?: string; status?: ValidateStatus }) { - const { value, status } = field; + function setField(field: { value?: string; status?: ValidateStatus; validateMessage?: FormItemValidateMessage }) { + const { value, status, validateMessage } = field; if (typeof status !== 'undefined') { - setErrorList([]); - setSuccessList([]); + setErrorList(validateMessage ? [validateMessage] : []); + setSuccessList(validateMessage ? [validateMessage] : []); setNeedResetField(false); setVerifyStatus(status); } diff --git a/src/form/__tests__/__snapshots__/form.test.tsx.snap b/src/form/__tests__/__snapshots__/form.test.tsx.snap index 296dad1de..5f1c9b4e1 100644 --- a/src/form/__tests__/__snapshots__/form.test.tsx.snap +++ b/src/form/__tests__/__snapshots__/form.test.tsx.snap @@ -500,27 +500,53 @@ exports[`base.jsx 1`] = `
- - +
+
- 重置 - - + +
+
+ +
+ @@ -4534,7 +4560,7 @@ exports[`validate-message.jsx 1`] = ` class="t-form" >
一句话介绍自己
+
+ 自定义个人简介校验信息提示 +
{ + formRef.current.setFields([ + { name: 'name', status: 'fail', validateMessage: { type: 'error', message: '输入有误' } }, + { name: 'birthday', status: 'waning', validateMessage: { type: 'warning', message: '时间有误' } }, + ]); + }; + return (
@@ -53,12 +60,15 @@ export default function BaseForm() {
- - + + + + + ); diff --git a/src/form/hooks/useInstance.tsx b/src/form/hooks/useInstance.tsx index 1bcbed55d..91802e618 100644 --- a/src/form/hooks/useInstance.tsx +++ b/src/form/hooks/useInstance.tsx @@ -190,10 +190,10 @@ export default function useInstance(props: TdFormProps, formRef, formMapRef: Rea if (!Array.isArray(fields)) throw new Error('setFields 参数需要 Array 类型'); fields.forEach((field) => { - const { name, value, status } = field; + const { name, ...restFields } = field; const formItemRef = getMapValue(name, formMapRef); - formItemRef?.current?.setField({ value, status }); + formItemRef?.current?.setField({ ...restFields }); }); } diff --git a/test/ssr/__snapshots__/ssr.test.js.snap b/test/ssr/__snapshots__/ssr.test.js.snap index 5bf802600..c06aab996 100644 --- a/test/ssr/__snapshots__/ssr.test.js.snap +++ b/test/ssr/__snapshots__/ssr.test.js.snap @@ -332,7 +332,7 @@ exports[`ssr snapshot test renders ./src/dropdown/_example/split.jsx correctly 1 exports[`ssr snapshot test renders ./src/form/_example/align.jsx correctly 1`] = `"
"`; -exports[`ssr snapshot test renders ./src/form/_example/base.jsx correctly 1`] = `"
"`; +exports[`ssr snapshot test renders ./src/form/_example/base.jsx correctly 1`] = `"
"`; exports[`ssr snapshot test renders ./src/form/_example/clear-validate.jsx correctly 1`] = `"
这是用户名字段帮助说明
一句话介绍自己
"`;