@@ -3,32 +3,38 @@ import { isObject } from "./utils";
3
3
4
4
import { OR , AND , NOT } from "./constants" ;
5
5
6
- export default function checkField ( fieldVal , rule ) {
7
- if ( Array . isArray ( fieldVal ) ) {
8
- // Simple rule - like emptyString
9
- return fieldVal . some ( val => checkField ( val , rule ) ) ;
10
- } else if ( isObject ( rule ) ) {
11
- // Complicated rule - like { greater then 10 }
12
- return Object . keys ( rule ) . every ( p => {
13
- let subRule = rule [ p ] ;
14
- if ( p === OR || p === AND ) {
15
- if ( Array . isArray ( subRule ) ) {
16
- if ( p === OR ) {
17
- return subRule . some ( rule => checkField ( fieldVal , rule ) ) ;
18
- } else {
19
- return subRule . every ( rule => checkField ( fieldVal , rule ) ) ;
20
- }
6
+ const parseObjectRule = ( rule , fieldVal ) => {
7
+ return Object . keys ( rule ) . every ( p => {
8
+ let subRule = rule [ p ] ;
9
+ if ( p === OR || p === AND ) {
10
+ if ( Array . isArray ( subRule ) ) {
11
+ if ( p === OR ) {
12
+ return subRule . some ( rule => checkField ( fieldVal , rule ) ) ;
21
13
} else {
22
- return false ;
14
+ return subRule . every ( rule => checkField ( fieldVal , rule ) ) ;
23
15
}
24
- } else if ( p === NOT ) {
25
- return ! checkField ( fieldVal , subRule ) ;
26
- } else if ( predicate [ p ] ) {
27
- return predicate [ p ] ( fieldVal , subRule ) ;
28
16
} else {
29
17
return false ;
30
18
}
31
- } ) ;
19
+ } else if ( p === NOT ) {
20
+ return ! checkField ( fieldVal , subRule ) ;
21
+ } else if ( predicate [ p ] ) {
22
+ return predicate [ p ] ( fieldVal , subRule ) ;
23
+ } else {
24
+ return false ;
25
+ }
26
+ } ) ;
27
+ } ;
28
+
29
+ export default function checkField ( fieldVal , rule ) {
30
+ if ( Array . isArray ( fieldVal ) ) {
31
+ return isObject ( rule )
32
+ ? fieldVal . some ( val => checkField ( val , rule ) ) || parseObjectRule ( rule )
33
+ : fieldVal . some ( val => checkField ( val , rule ) ) ||
34
+ predicate [ rule ] ( fieldVal ) ;
35
+ } else if ( isObject ( rule ) ) {
36
+ // Complicated rule - like { greater then 10 }
37
+ return parseObjectRule ( rule , fieldVal ) ;
32
38
} else {
33
39
return predicate [ rule ] ( fieldVal ) ;
34
40
}
0 commit comments