179 lines
6.4 KiB
JavaScript
179 lines
6.4 KiB
JavaScript
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var tslib_1 = require("tslib");
|
||
var assert_1 = tslib_1.__importDefault(require("assert"));
|
||
var lodash_1 = require("oak-domain/lib/utils/lodash");
|
||
exports.default = OakComponent({
|
||
entity: 'relationAuth',
|
||
projection: {
|
||
id: 1,
|
||
sourceRelationId: 1,
|
||
destRelationId: 1,
|
||
path: 1,
|
||
},
|
||
isList: true,
|
||
properties: {
|
||
entity: '',
|
||
relationIds: [],
|
||
},
|
||
filters: [
|
||
{
|
||
filter: function () {
|
||
var _a = this.props, entity = _a.entity, relationIds = _a.relationIds;
|
||
// 这里不能用relationIds过滤,否则没法处理relationId的反选
|
||
return {
|
||
destRelation: {
|
||
entity: entity,
|
||
entityId: {
|
||
$exists: false,
|
||
},
|
||
},
|
||
};
|
||
/* if (relationIds && relationIds.length > 0) {
|
||
return {
|
||
destRelationId: {
|
||
$in: relationIds,
|
||
},
|
||
};
|
||
}
|
||
else {
|
||
return {
|
||
destRelation: {
|
||
entity: entity as string,
|
||
entityId: {
|
||
$exists: false,
|
||
},
|
||
},
|
||
};
|
||
} */
|
||
},
|
||
}
|
||
],
|
||
pagination: {
|
||
pageSize: 1000,
|
||
currentPage: 0,
|
||
},
|
||
formData: function (_a) {
|
||
var data = _a.data;
|
||
var _b = this.props, entity = _b.entity, relationIds = _b.relationIds;
|
||
var auths = this.features.relationAuth.getCascadeRelationAuths(entity, true);
|
||
var sourceEntities = auths.map(function (ele) { return ele[2]; });
|
||
var sourceRelations = this.features.cache.get('relation', {
|
||
data: {
|
||
id: 1,
|
||
entity: 1,
|
||
entityId: 1,
|
||
name: 1,
|
||
display: 1,
|
||
},
|
||
filter: {
|
||
entity: {
|
||
$in: sourceEntities,
|
||
},
|
||
entityId: {
|
||
$exists: false,
|
||
},
|
||
},
|
||
});
|
||
return {
|
||
relationAuths: data,
|
||
auths: auths,
|
||
sourceRelations: sourceRelations,
|
||
};
|
||
},
|
||
listeners: {
|
||
relationIds: function (prev, next) {
|
||
var _this = this;
|
||
var relationAuths = this.features.runningTree.getFreshValue(this.state.oakFullpath);
|
||
if (relationAuths) {
|
||
var relationIds_1 = next.relationIds;
|
||
relationAuths.forEach(function (relationAuth) {
|
||
if (relationAuth.$$createAt$$ === 1 && !relationIds_1.includes(relationAuth.destRelationId)) {
|
||
var id = relationAuth.id;
|
||
_this.removeItem(id);
|
||
}
|
||
});
|
||
}
|
||
this.reRender();
|
||
},
|
||
},
|
||
lifetimes: {
|
||
ready: function () {
|
||
var entity = this.props.entity;
|
||
var auths = this.features.relationAuth.getCascadeRelationAuths(entity, true);
|
||
var sourceEntities = auths.map(function (ele) { return ele[2]; });
|
||
this.features.cache.refresh('relation', {
|
||
data: {
|
||
id: 1,
|
||
entity: 1,
|
||
entityId: 1,
|
||
name: 1,
|
||
display: 1,
|
||
},
|
||
filter: {
|
||
entity: {
|
||
$in: sourceEntities,
|
||
},
|
||
entityId: {
|
||
$exists: false,
|
||
},
|
||
},
|
||
});
|
||
},
|
||
},
|
||
methods: {
|
||
onChange: function (checked, sourceRelationId, path, relationAuths) {
|
||
var e_1, _a;
|
||
var _this = this;
|
||
var relationIds = this.props.relationIds;
|
||
(0, assert_1.default)(relationIds);
|
||
if (checked) {
|
||
if (relationAuths) {
|
||
// 这些relationAuths可能是已经带有relationIds的,也有可能是被删除掉的,比较复杂
|
||
var includedRelationIds = [];
|
||
try {
|
||
for (var relationAuths_1 = tslib_1.__values(relationAuths), relationAuths_1_1 = relationAuths_1.next(); !relationAuths_1_1.done; relationAuths_1_1 = relationAuths_1.next()) {
|
||
var auth = relationAuths_1_1.value;
|
||
if (auth.$$deleteAt$$) {
|
||
this.recoverItem(auth.id);
|
||
}
|
||
includedRelationIds.push(auth.destRelationId);
|
||
}
|
||
}
|
||
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
||
finally {
|
||
try {
|
||
if (relationAuths_1_1 && !relationAuths_1_1.done && (_a = relationAuths_1.return)) _a.call(relationAuths_1);
|
||
}
|
||
finally { if (e_1) throw e_1.error; }
|
||
}
|
||
var restRelationIds = (0, lodash_1.difference)(relationIds, includedRelationIds);
|
||
restRelationIds.forEach(function (relationId) { return _this.addItem({
|
||
sourceRelationId: sourceRelationId,
|
||
path: path,
|
||
destRelationId: relationId,
|
||
}); });
|
||
}
|
||
else {
|
||
relationIds.forEach(function (relationId) { return _this.addItem({
|
||
sourceRelationId: sourceRelationId,
|
||
path: path,
|
||
destRelationId: relationId,
|
||
}); });
|
||
}
|
||
}
|
||
else {
|
||
(0, assert_1.default)(relationAuths);
|
||
relationAuths.forEach(function (relationAuth) {
|
||
if (!relationAuth.$$deleteAt$$) {
|
||
_this.removeItem(relationAuth.id);
|
||
}
|
||
});
|
||
}
|
||
},
|
||
confirm: function () {
|
||
this.execute();
|
||
},
|
||
}
|
||
});
|