cascade对多对一级联返回的空值未正确处理

This commit is contained in:
Xu Chang 2022-10-15 18:41:20 +08:00
parent b9a764cad3
commit ca1fe55c3b
9 changed files with 62 additions and 146 deletions

View File

@ -128,7 +128,7 @@ var CascadeStore = /** @class */ (function (_super) {
subCascadeSelectionFns.forEach(function (ele) { return cascadeSelectionFns.push(function (result) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, ele(result.map(function (ele2) { return ele2[attr]; }))];
case 0: return [4 /*yield*/, ele(result.map(function (ele2) { return ele2[attr]; }).filter(function (ele2) { return !!ele2; }))];
case 1:
_a.sent();
return [2 /*return*/];
@ -222,7 +222,7 @@ var CascadeStore = /** @class */ (function (_super) {
subCascadeSelectionFns.forEach(function (ele) { return cascadeSelectionFns.push(function (result) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, ele(result.map(function (ele2) { return ele2[attr]; }))];
case 0: return [4 /*yield*/, ele(result.map(function (ele2) { return ele2[attr]; }).filter(function (ele2) { return !!ele2; }))];
case 1:
_a.sent();
return [2 /*return*/];

View File

@ -21,48 +21,19 @@ function createOperationsFromModies(modies) {
exports.createOperationsFromModies = createOperationsFromModies;
function applyModis(filter, context, option) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var modis, _a, _b, _c;
var _a, _b, _c;
var _d;
return tslib_1.__generator(this, function (_e) {
switch (_e.label) {
case 0: return [4 /*yield*/, context.rowStore.select('modi', {
data: {
id: 1,
},
filter: filter,
sorter: [
{
$attr: {
$$createAt$$: 1,
},
$direction: 'asc',
}
]
}, context, Object.assign({}, option, {
blockTrigger: false,
}))];
case 1:
modis = (_e.sent()).result;
case 0:
_b = (_a = context.rowStore).operate;
_c = ['modi'];
_d = {};
return [4 /*yield*/, generateNewId()];
case 2: return [2 /*return*/, _b.apply(_a, _c.concat([(_d.id = _e.sent(),
case 1: return [2 /*return*/, _b.apply(_a, _c.concat([(_d.id = _e.sent(),
_d.action = 'apply',
_d.data = {},
_d.filter = {
id: {
$in: modis.map(function (ele) { return ele.id; }),
}
},
_d.sorter = [
{
$attr: {
$$createAt$$: 1,
},
$direction: 'asc',
}
],
_d.filter = filter,
_d), context, Object.assign({}, option, {
blockTrigger: false,
})]))];

View File

@ -10,7 +10,7 @@ var triggers = [
fn: function (_a, context, option) {
var operation = _a.operation;
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var filter, modies, modies_1, modies_1_1, modi, targetEntity, id, action, data, filter_1, targets, e_1_1;
var filter, modies, modies_1, modies_1_1, modi, targetEntity, id, action, data, filter_1, e_1_1;
var e_1, _b;
return tslib_1.__generator(this, function (_c) {
switch (_c.label) {
@ -30,49 +30,39 @@ var triggers = [
modies = (_c.sent()).result;
_c.label = 2;
case 2:
_c.trys.push([2, 8, 9, 10]);
_c.trys.push([2, 7, 8, 9]);
modies_1 = tslib_1.__values(modies), modies_1_1 = modies_1.next();
_c.label = 3;
case 3:
if (!!modies_1_1.done) return [3 /*break*/, 7];
if (!!modies_1_1.done) return [3 /*break*/, 6];
modi = modies_1_1.value;
targetEntity = modi.targetEntity, id = modi.id, action = modi.action, data = modi.data, filter_1 = modi.filter;
return [4 /*yield*/, context.rowStore.select(targetEntity, {
data: {
id: 1,
},
return [4 /*yield*/, context.rowStore.operate(targetEntity, {
id: id,
action: action,
data: data,
filter: filter_1,
}, context, Object.assign({}, option, {
blockTrigger: true,
}))];
case 4:
targets = _c.sent();
return [4 /*yield*/, context.rowStore.operate(targetEntity, {
id: id,
action: action,
data: data,
filter: targets.result.map(function (ele) { return ele.id; }),
}, context, Object.assign({}, option, {
blockTrigger: true,
}))];
case 5:
_c.sent();
_c.label = 6;
case 6:
_c.label = 5;
case 5:
modies_1_1 = modies_1.next();
return [3 /*break*/, 3];
case 7: return [3 /*break*/, 10];
case 8:
case 6: return [3 /*break*/, 9];
case 7:
e_1_1 = _c.sent();
e_1 = { error: e_1_1 };
return [3 /*break*/, 10];
case 9:
return [3 /*break*/, 9];
case 8:
try {
if (modies_1_1 && !modies_1_1.done && (_b = modies_1.return)) _b.call(modies_1);
}
finally { if (e_1) throw e_1.error; }
return [7 /*endfinally*/];
case 10: return [2 /*return*/, modies.length];
case 9: return [2 /*return*/, modies.length];
}
});
});

17
lib/utils/lodash.d.ts vendored
View File

@ -2,19 +2,4 @@
* lodash打包体积过大
* assign, keys尽量使用Object的函数
*/
import unset from 'lodash/unset';
import uniqBy from 'lodash/uniqBy';
import pull from 'lodash/pull';
import uniq from 'lodash/uniq';
import get from 'lodash/get';
import set from 'lodash/set';
import intersection from 'lodash/intersection';
import omit from 'lodash/omit';
import merge from 'lodash/merge';
import cloneDeep from 'lodash/cloneDeep';
import pick from 'lodash/pick';
import isEqual from 'lodash/isEqual';
import union from 'lodash/union';
import difference from 'lodash/difference';
import groupBy from 'lodash/groupBy';
export { unset, pull, uniq, uniqBy, get, set, intersection, omit, merge, cloneDeep, pick, isEqual, union, difference, groupBy, };
export { unset, pull, uniq, uniqBy, get, set, intersection, omit, merge, cloneDeep, pick, isEqual, union, difference, groupBy, } from 'lodash';

View File

@ -1,38 +1,38 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.groupBy = exports.difference = exports.union = exports.isEqual = exports.pick = exports.cloneDeep = exports.merge = exports.omit = exports.intersection = exports.set = exports.get = exports.uniqBy = exports.uniq = exports.pull = exports.unset = void 0;
var tslib_1 = require("tslib");
/**
* 避免lodash打包体积过大
* 像assign, keys尽量使用Object的函数
*/
var unset_1 = tslib_1.__importDefault(require("lodash/unset"));
exports.unset = unset_1.default;
var uniqBy_1 = tslib_1.__importDefault(require("lodash/uniqBy"));
exports.uniqBy = uniqBy_1.default;
var pull_1 = tslib_1.__importDefault(require("lodash/pull"));
exports.pull = pull_1.default;
var uniq_1 = tslib_1.__importDefault(require("lodash/uniq"));
exports.uniq = uniq_1.default;
var get_1 = tslib_1.__importDefault(require("lodash/get"));
exports.get = get_1.default;
var set_1 = tslib_1.__importDefault(require("lodash/set"));
exports.set = set_1.default;
var intersection_1 = tslib_1.__importDefault(require("lodash/intersection"));
exports.intersection = intersection_1.default;
var omit_1 = tslib_1.__importDefault(require("lodash/omit"));
exports.omit = omit_1.default;
var merge_1 = tslib_1.__importDefault(require("lodash/merge"));
exports.merge = merge_1.default;
var cloneDeep_1 = tslib_1.__importDefault(require("lodash/cloneDeep"));
exports.cloneDeep = cloneDeep_1.default;
var pick_1 = tslib_1.__importDefault(require("lodash/pick"));
exports.pick = pick_1.default;
var isEqual_1 = tslib_1.__importDefault(require("lodash/isEqual"));
exports.isEqual = isEqual_1.default;
var union_1 = tslib_1.__importDefault(require("lodash/union"));
exports.union = union_1.default;
var difference_1 = tslib_1.__importDefault(require("lodash/difference"));
exports.difference = difference_1.default;
var groupBy_1 = tslib_1.__importDefault(require("lodash/groupBy"));
exports.groupBy = groupBy_1.default;
/* import unset from 'lodash/unset';
import uniqBy from 'lodash/uniqBy';
import pull from 'lodash/pull';
import uniq from 'lodash/uniq';
import get from 'lodash/get';
import set from 'lodash/set';
import intersection from 'lodash/intersection';
import omit from 'lodash/omit';
import merge from 'lodash/merge';
import cloneDeep from 'lodash/cloneDeep';
import pick from 'lodash/pick';
import isEqual from 'lodash/isEqual';
import union from 'lodash/union';
import difference from 'lodash/difference';
import groupBy from 'lodash/groupBy'; */
var lodash_1 = require("lodash");
Object.defineProperty(exports, "unset", { enumerable: true, get: function () { return lodash_1.unset; } });
Object.defineProperty(exports, "pull", { enumerable: true, get: function () { return lodash_1.pull; } });
Object.defineProperty(exports, "uniq", { enumerable: true, get: function () { return lodash_1.uniq; } });
Object.defineProperty(exports, "uniqBy", { enumerable: true, get: function () { return lodash_1.uniqBy; } });
Object.defineProperty(exports, "get", { enumerable: true, get: function () { return lodash_1.get; } });
Object.defineProperty(exports, "set", { enumerable: true, get: function () { return lodash_1.set; } });
Object.defineProperty(exports, "intersection", { enumerable: true, get: function () { return lodash_1.intersection; } });
Object.defineProperty(exports, "omit", { enumerable: true, get: function () { return lodash_1.omit; } });
Object.defineProperty(exports, "merge", { enumerable: true, get: function () { return lodash_1.merge; } });
Object.defineProperty(exports, "cloneDeep", { enumerable: true, get: function () { return lodash_1.cloneDeep; } });
Object.defineProperty(exports, "pick", { enumerable: true, get: function () { return lodash_1.pick; } });
Object.defineProperty(exports, "isEqual", { enumerable: true, get: function () { return lodash_1.isEqual; } });
Object.defineProperty(exports, "union", { enumerable: true, get: function () { return lodash_1.union; } });
Object.defineProperty(exports, "difference", { enumerable: true, get: function () { return lodash_1.difference; } });
Object.defineProperty(exports, "groupBy", { enumerable: true, get: function () { return lodash_1.groupBy; } });

View File

@ -158,8 +158,8 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict, Cxt e
});
subCascadeSelectionFns.forEach(
ele => cascadeSelectionFns.push(
async (result) => {
await ele(result.map(ele2 => ele2[attr] as any));
async (result) => {
await ele(result.map(ele2 => ele2[attr] as any).filter(ele2 => !!ele2));
}
)
);
@ -256,7 +256,7 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict, Cxt e
subCascadeSelectionFns.forEach(
ele => cascadeSelectionFns.push(
async (result) => {
await ele(result.map(ele2 => ele2[attr] as any));
await ele(result.map(ele2 => ele2[attr] as any).filter(ele2 => !!ele2));
}
)
);

View File

@ -25,40 +25,19 @@ export function createOperationsFromModies(modies: Modi[]): Array<{
}
export async function applyModis<ED extends EntityDict & BaseEntityDict, Cxt extends UniversalContext<ED>, Op extends OperateOption>(filter: ED['modi']['Selection']['filter'], context: Cxt, option: Op) {
const { result: modis } = await context.rowStore.select('modi', {
data: {
id: 1,
},
filter,
sorter: [
{
$attr: {
$$createAt$$: 1,
},
$direction: 'asc',
}
]
}, context, Object.assign({}, option, {
blockTrigger: false,
}));
return context.rowStore.operate('modi', {
id: await generateNewId(),
action: 'apply',
data: {},
filter: {
id: {
$in: modis.map(ele => ele.id),
}
},
sorter: [
filter,
/* sorter: [
{
$attr: {
$$createAt$$: 1,
},
$direction: 'asc',
}
]
] */
}, context, Object.assign({}, option, {
blockTrigger: false,
}));

View File

@ -23,19 +23,11 @@ const triggers: Trigger<EntityDict, 'modi', UniversalContext<EntityDict>>[] = [
for (const modi of modies) {
const { targetEntity, id, action, data, filter} = modi;
const targets = await context.rowStore.select(targetEntity as keyof EntityDict, {
data: {
id: 1,
},
filter: filter as any,
}, context, Object.assign({}, option, {
blockTrigger: true,
}));
await context.rowStore.operate(targetEntity as keyof EntityDict, {
id,
action,
data,
filter: targets.result.map(ele => ele.id),
filter: filter as any,
}, context, Object.assign({}, option, {
blockTrigger: true,
}));

View File

@ -2,7 +2,7 @@
* lodash打包体积过大
* assign, keys尽量使用Object的函数
*/
import unset from 'lodash/unset';
/* import unset from 'lodash/unset';
import uniqBy from 'lodash/uniqBy';
import pull from 'lodash/pull';
import uniq from 'lodash/uniq';
@ -16,8 +16,7 @@ import pick from 'lodash/pick';
import isEqual from 'lodash/isEqual';
import union from 'lodash/union';
import difference from 'lodash/difference';
import groupBy from 'lodash/groupBy';
import groupBy from 'lodash/groupBy'; */
export {
unset,
pull,
@ -34,4 +33,4 @@ export {
union,
difference,
groupBy,
};
} from 'lodash';