处理了contextMenuFactory中路径为空字符串情况的边界

This commit is contained in:
Xu Chang 2023-07-06 12:26:42 +08:00
parent 942345a4d2
commit f37a130333
2 changed files with 55 additions and 41 deletions

View File

@ -47,29 +47,36 @@ var ContextMenuFactory = /** @class */ (function (_super) {
}); });
return paths.map(function (path) { return paths.map(function (path) {
var p = path[1]; var p = path[1];
var ps = p.split('.'); if (p === '') {
var makeFilterInner = function (entity, idx) { return {
var _a, _b; id: entityId,
var attr = ps[idx]; };
var rel = (0, relation_1.judgeRelation)(_this.cache.getSchema(), entity, attr); }
if (idx === ps.length - 1) { else {
if (rel === 2) { var ps_1 = p.split('.');
return { var makeFilterInner_1 = function (entity, idx) {
entity: attr, var _a, _b;
entityId: entityId, var attr = ps_1[idx];
}; var rel = (0, relation_1.judgeRelation)(_this.cache.getSchema(), entity, attr);
if (idx === ps_1.length - 1) {
if (rel === 2) {
return {
entity: attr,
entityId: entityId,
};
}
(0, assert_1.default)(typeof rel === 'string');
return _a = {},
_a["".concat(attr, "Id")] = entityId,
_a;
} }
(0, assert_1.default)(typeof rel === 'string'); var e = rel === 2 ? attr : rel;
return _a = {}, return _b = {},
_a["".concat(attr, "Id")] = entityId, _b[attr] = makeFilterInner_1(e, idx + 1),
_a; _b;
} };
var e = rel === 2 ? attr : rel; return makeFilterInner_1(destEntity, 0);
return _b = {}, }
_b[attr] = makeFilterInner(e, idx + 1),
_b;
};
return makeFilterInner(destEntity, 0);
}); });
}; };
return Object.assign({}, menu, { return Object.assign({}, menu, {

View File

@ -73,28 +73,35 @@ export class ContextMenuFactory<
return paths.map( return paths.map(
(path) => { (path) => {
const p = path[1]; const p = path[1];
const ps = p.split('.'); if (p === '') {
const makeFilterInner = (entity: keyof ED, idx: number): ED[keyof ED]['Selection']['filter'] => {
const attr = ps[idx];
const rel = judgeRelation(this.cache.getSchema(), entity, attr);
if (idx === ps.length - 1) {
if (rel === 2) {
return {
entity: attr,
entityId,
};
}
assert(typeof rel === 'string');
return {
[`${attr}Id`]: entityId,
};
}
const e = rel === 2 ? attr : rel as string;
return { return {
[attr]: makeFilterInner(e, idx + 1), id: entityId,
}; };
} }
return makeFilterInner(destEntity, 0); else {
const ps = p.split('.');
const makeFilterInner = (entity: keyof ED, idx: number): ED[keyof ED]['Selection']['filter'] => {
const attr = ps[idx];
const rel = judgeRelation(this.cache.getSchema(), entity, attr);
if (idx === ps.length - 1) {
if (rel === 2) {
return {
entity: attr,
entityId,
};
}
assert(typeof rel === 'string');
return {
[`${attr}Id`]: entityId,
};
}
const e = rel === 2 ? attr : rel as string;
return {
[attr]: makeFilterInner(e, idx + 1),
};
};
return makeFilterInner(destEntity, 0);
}
} }
) )
}; };