@@ -25,6 +25,8 @@ function replaceMessage(template: string, kv: Record<string, string>): string {
2525 } ) ;
2626}
2727
28+ const CODE_LOGIC_ERROR = 'CODE_LOGIC_ERROR' ;
29+
2830async function validateRule (
2931 name : string ,
3032 value : StoreValue ,
@@ -39,6 +41,18 @@ async function validateRule(
3941 // https://github.com/react-component/field-form/issues/313
4042 delete ( cloneRule as any ) . ruleIndex ;
4143
44+ if ( cloneRule . validator ) {
45+ const originValidator = cloneRule . validator ;
46+ cloneRule . validator = ( ...args ) => {
47+ try {
48+ return originValidator ( ...args ) ;
49+ } catch ( error ) {
50+ console . error ( error ) ;
51+ return Promise . reject ( CODE_LOGIC_ERROR ) ;
52+ }
53+ } ;
54+ }
55+
4256 // We should special handle array validate
4357 let subRuleField : RuleObject = null ;
4458 if ( cloneRule && cloneRule . type === 'array' && cloneRule . defaultField ) {
@@ -59,15 +73,14 @@ async function validateRule(
5973 await Promise . resolve ( validator . validate ( { [ name ] : value } , { ...options } ) ) ;
6074 } catch ( errObj ) {
6175 if ( errObj . errors ) {
62- result = errObj . errors . map ( ( { message } , index ) =>
63- // Wrap ReactNode with `key`
64- React . isValidElement ( message )
65- ? React . cloneElement ( message , { key : `error_${ index } ` } )
66- : message ,
67- ) ;
68- } else {
69- console . error ( errObj ) ;
70- result = [ messages . default ] ;
76+ result = errObj . errors . map ( ( { message } , index : number ) => {
77+ const mergedMessage = message === CODE_LOGIC_ERROR ? messages . default : message ;
78+
79+ return React . isValidElement ( mergedMessage )
80+ ? // Wrap ReactNode with `key`
81+ React . cloneElement ( mergedMessage , { key : `error_${ index } ` } )
82+ : mergedMessage ;
83+ } ) ;
7184 }
7285 }
7386
0 commit comments