object支持
This commit is contained in:
parent
4edb07a0e3
commit
a07ddd95a9
36
es/store.js
36
es/store.js
|
|
@ -405,74 +405,86 @@ export default class TreeStore extends CascadeStore {
|
|||
switch (predicate) {
|
||||
case '$gt': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data > value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$lt': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data < value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$gte': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data >= value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$lte': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data <= value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$eq': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data === value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$ne': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data !== value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$between': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data >= value[0] && data <= value[1] || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$mod': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return typeof data === 'number' && data % value[0] === value[1] || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$startsWith': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['string'].includes(typeof data) && data.startsWith(value) || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$endsWith': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['string'].includes(typeof data) && data.endsWith(value) || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$includes': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['string'].includes(typeof data) && data.includes(value) || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$exists': {
|
||||
assert(typeof value === 'boolean');
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
if (value) {
|
||||
return ![null, undefined].includes(data) || obscurePass(data, option);
|
||||
}
|
||||
|
|
|
|||
36
lib/store.js
36
lib/store.js
|
|
@ -407,74 +407,86 @@ class TreeStore extends CascadeStore_1.CascadeStore {
|
|||
switch (predicate) {
|
||||
case '$gt': {
|
||||
return (row) => {
|
||||
const data = (0, lodash_1.get)(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? (0, lodash_1.get)(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data > value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$lt': {
|
||||
return (row) => {
|
||||
const data = (0, lodash_1.get)(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? (0, lodash_1.get)(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data < value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$gte': {
|
||||
return (row) => {
|
||||
const data = (0, lodash_1.get)(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? (0, lodash_1.get)(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data >= value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$lte': {
|
||||
return (row) => {
|
||||
const data = (0, lodash_1.get)(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? (0, lodash_1.get)(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data <= value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$eq': {
|
||||
return (row) => {
|
||||
const data = (0, lodash_1.get)(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? (0, lodash_1.get)(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data === value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$ne': {
|
||||
return (row) => {
|
||||
const data = (0, lodash_1.get)(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? (0, lodash_1.get)(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data !== value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$between': {
|
||||
return (row) => {
|
||||
const data = (0, lodash_1.get)(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? (0, lodash_1.get)(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data >= value[0] && data <= value[1] || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$mod': {
|
||||
return (row) => {
|
||||
const data = (0, lodash_1.get)(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? (0, lodash_1.get)(row, path) : row;
|
||||
return typeof data === 'number' && data % value[0] === value[1] || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$startsWith': {
|
||||
return (row) => {
|
||||
const data = (0, lodash_1.get)(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? (0, lodash_1.get)(row, path) : row;
|
||||
return ['string'].includes(typeof data) && data.startsWith(value) || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$endsWith': {
|
||||
return (row) => {
|
||||
const data = (0, lodash_1.get)(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? (0, lodash_1.get)(row, path) : row;
|
||||
return ['string'].includes(typeof data) && data.endsWith(value) || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$includes': {
|
||||
return (row) => {
|
||||
const data = (0, lodash_1.get)(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? (0, lodash_1.get)(row, path) : row;
|
||||
return ['string'].includes(typeof data) && data.includes(value) || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$exists': {
|
||||
(0, assert_1.assert)(typeof value === 'boolean');
|
||||
return (row) => {
|
||||
const data = (0, lodash_1.get)(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? (0, lodash_1.get)(row, path) : row;
|
||||
if (value) {
|
||||
return ![null, undefined].includes(data) || obscurePass(data, option);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
"es/**/*"
|
||||
],
|
||||
"dependencies": {
|
||||
"oak-domain": "file:../oak-domain",
|
||||
"oak-domain": "^4.2.7",
|
||||
"uuid": "^8.3.2"
|
||||
},
|
||||
"scripts": {
|
||||
|
|
|
|||
36
src/store.ts
36
src/store.ts
|
|
@ -543,73 +543,85 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
|
|||
switch (predicate) {
|
||||
case '$gt': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data > value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$lt': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data < value || obscurePass(data, option);
|
||||
};
|
||||
} case '$gte': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data >= value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$lte': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data <= value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$eq': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data === value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$ne': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data !== value || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$between': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['number', 'string'].includes(typeof data) && data >= value[0] && data <= value[1] || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$mod': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return typeof data === 'number' && data % value[0] === value[1] || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$startsWith': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['string'].includes(typeof data) && data.startsWith(value) || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$endsWith': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['string'].includes(typeof data) && data.endsWith(value) || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$includes': {
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
return ['string'].includes(typeof data) && data.includes(value) || obscurePass(data, option);
|
||||
};
|
||||
}
|
||||
case '$exists': {
|
||||
assert(typeof value === 'boolean');
|
||||
return (row) => {
|
||||
const data = get(row, path);
|
||||
// JsonFilter有可能是根结点,path为空
|
||||
const data = path ? get(row, path) : row;
|
||||
if (value) {
|
||||
return ![null, undefined].includes(data) || obscurePass(data, option);
|
||||
}
|
||||
|
|
|
|||
40
test/test.ts
40
test/test.ts
|
|
@ -1264,6 +1264,44 @@ describe('基础测试', function () {
|
|||
}
|
||||
}, context, {});
|
||||
|
||||
/**
|
||||
* object 的 $exists查询
|
||||
*/
|
||||
const row10 = store.select('oper', {
|
||||
data: {
|
||||
id: 1,
|
||||
data: {
|
||||
name: 1,
|
||||
price: 1,
|
||||
},
|
||||
},
|
||||
filter: {
|
||||
id,
|
||||
action: 'test',
|
||||
targetEntity: 'bbb',
|
||||
data: {
|
||||
$exists: true,
|
||||
}
|
||||
}
|
||||
}, context, {});
|
||||
const row11 = store.select('oper', {
|
||||
data: {
|
||||
id: 1,
|
||||
data: {
|
||||
name: 1,
|
||||
price: 1,
|
||||
},
|
||||
},
|
||||
filter: {
|
||||
id,
|
||||
action: 'test',
|
||||
targetEntity: 'bbb',
|
||||
data: {
|
||||
$exists: false,
|
||||
}
|
||||
}
|
||||
}, context, {});
|
||||
|
||||
context.commit();
|
||||
assert(row.length === 1);
|
||||
assert(row2.length === 0);
|
||||
|
|
@ -1274,6 +1312,8 @@ describe('基础测试', function () {
|
|||
assert(row7.length === 1);
|
||||
assert(row8.length === 1);
|
||||
assert(row9.length === 1);
|
||||
assert(row10.length === 1);
|
||||
assert(row11.length === 0);
|
||||
// console.log(JSON.stringify(row7));
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue