Skip to content

Commit e56ea95

Browse files
committed
1 parent 15850bb commit e56ea95

File tree

3 files changed

+37
-35
lines changed

3 files changed

+37
-35
lines changed

.eslintrc

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"parser": "babel-eslint",
33
"rules": {
4+
"max-len": "off",
45
"react/jsx-uses-react": 2,
56
"react/jsx-uses-vars": 2,
67
"react/react-in-jsx-scope": 2,

package.json

+10-10
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
"tdd": "jest --watchAll",
1717
"test": "jest --coverage"
1818
},
19+
"prettierOptions": "--jsx-bracket-same-line --trailing-comma es5 --semi",
1920
"jest": {
2021
"verbose": true,
2122
"collectCoverage": true,
2223
"collectCoverageFrom": [
2324
"src/**/*.{js,jsx}"
2425
]
2526
},
26-
"prettierOptions": "--jsx-bracket-same-line --trailing-comma es5 --semi",
2727
"lint-staged": {
2828
"{src,test}/**/*.js": [
2929
"npm run lint",
@@ -59,30 +59,30 @@
5959
"babel-preset-es2015": "^6.24.1",
6060
"babel-preset-react": "^6.24.1",
6161
"babel-register": "^6.24.1",
62-
"codemirror": "^5.27.4",
62+
"codemirror": "^5.28.0",
6363
"coveralls": "^2.13.1",
64-
"cross-env": "^5.0.1",
64+
"cross-env": "^5.0.5",
6565
"css-loader": "^0.28.4",
66-
"eslint": "^4.1.1",
66+
"eslint": "^4.4.1",
6767
"eslint-plugin-jest": "^20.0.3",
6868
"eslint-plugin-react": "^7.1.0",
6969
"eslint-plugin-standard": "^3.0.1",
7070
"exit-hook": "^1.1.1",
71-
"express": "^4.15.3",
72-
"extract-text-webpack-plugin": "^2.1.2",
71+
"express": "^4.15.4",
72+
"extract-text-webpack-plugin": "^3.0.0",
7373
"gh-pages": "^1.0.0",
7474
"has-flag": "^2.0.0",
7575
"html": "1.0.0",
7676
"husky": "^0.14.3",
7777
"jest": "^20.0.4",
7878
"jsdom": "^11.1.0",
79-
"lint-staged": "^4.0.0",
80-
"prettier": "^1.5.2",
79+
"lint-staged": "^4.0.3",
80+
"prettier": "^1.5.3",
8181
"regenerator-runtime": "^0.10.5",
8282
"rimraf": "^2.6.1",
83-
"sinon": "^2.3.6",
83+
"sinon": "^3.1.0",
8484
"style-loader": "^0.18.2",
85-
"webpack": "^3.0.0"
85+
"webpack": "^3.5.1"
8686
},
8787
"directories": {
8888
"test": "test"

src/checkField.js

+26-25
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,41 @@
11
import predicate from "predicate";
22
import { isObject } from "./utils";
33

4-
import { OR, AND, NOT } from "./constants";
4+
import { AND, NOT, OR } from "./constants";
55

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));
6+
const checkRule = (fieldVal, rule) => {
7+
if (isObject(rule)) {
8+
return Object.keys(rule).every(p => {
9+
let subRule = rule[p];
10+
if (p === OR || p === AND) {
11+
if (Array.isArray(subRule)) {
12+
if (p === OR) {
13+
return subRule.some(rule => checkField(fieldVal, rule));
14+
} else {
15+
return subRule.every(rule => checkField(fieldVal, rule));
16+
}
1317
} else {
14-
return subRule.every(rule => checkField(fieldVal, rule));
18+
return false;
1519
}
20+
} else if (p === NOT) {
21+
return !checkField(fieldVal, subRule);
22+
} else if (predicate[p]) {
23+
return predicate[p](fieldVal, subRule);
1624
} else {
1725
return false;
1826
}
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+
} else {
29+
return predicate[rule](fieldVal);
30+
}
2731
};
2832

2933
export default function checkField(fieldVal, rule) {
3034
if (Array.isArray(fieldVal)) {
31-
return isObject(rule)
32-
? fieldVal.some(val => checkField(val, rule)) || parseObjectRule(rule)
33-
: fieldVal.some(val => checkField(val, rule)) || predicate[rule](fieldVal);
34-
} else if (isObject(rule)) {
35-
// Complicated rule - like { greater then 10 }
36-
return parseObjectRule(rule, fieldVal);
37-
} else {
38-
return predicate[rule](fieldVal);
35+
let hasValidEntry = fieldVal.some(val => checkField(val, rule));
36+
if (hasValidEntry) {
37+
return true;
38+
}
3939
}
40+
return checkRule(fieldVal, rule);
4041
}

0 commit comments

Comments
 (0)