@antv/g6
Version:
A Graph Visualization Framework in JavaScript
95 lines • 3.69 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.reduceDataChanges = reduceDataChanges;
exports.groupByChangeType = groupByChangeType;
const util_1 = require("@antv/util");
const id_1 = require("./id");
/**
* <zh/> 对数据操作进行约简
*
* <en/> Reduce data changes
* @param changes - <zh/> 数据操作 | <en/> data changes
* @returns <zh/> 约简后的数据操作 | <en/> reduced data changes
*/
function reduceDataChanges(changes) {
const results = {
Added: new Map(),
Updated: new Map(),
Removed: new Map(),
};
changes.forEach((change) => {
const { type, value } = change;
const id = (0, id_1.idOf)(value);
if (type === 'NodeAdded' || type === 'EdgeAdded' || type === 'ComboAdded') {
results.Added.set(id, change);
}
else if (type === 'NodeUpdated' || type === 'EdgeUpdated' || type === 'ComboUpdated') {
// 如果存在 Added,将当前操作置为 Added 操作
// If there is an Added operation, set the current operation to Added
if (results.Added.has(id)) {
results.Added.set(id, { type: type.replace('Updated', 'Added'), value });
}
// 如果存在 Updated,将当前操作置为 Updated 操作,但使用更早版本的 original
// If there is an Updated operation, set the current operation to Updated, but use an earlier version of original
else if (results.Updated.has(id)) {
const { original } = results.Updated.get(id);
results.Updated.set(id, { type, value, original });
}
else if (results.Removed.has(id)) {
// 如果存在 Removed,不做任何操作
// If there is a Removed operation, do nothing
}
else
results.Updated.set(id, change);
}
else if (type === 'NodeRemoved' || type === 'EdgeRemoved' || type === 'ComboRemoved') {
// 如果存在 Added 或者 Updated 的操作,删除 Removed 操作
// If there is an Added or Updated operation, delete the Removed operation
if (results.Added.has(id)) {
results.Added.delete(id);
}
else if (results.Updated.has(id)) {
results.Updated.delete(id);
results.Removed.set(id, change);
}
else {
results.Removed.set(id, change);
}
}
});
// 顺序并不重要
// The order is not important
return [
...Array.from(results.Added.values()),
...Array.from(results.Updated.values()),
...Array.from(results.Removed.values()),
];
}
/**
* <zh/> 对数据操作进行分类
*
* <en/> Classify data changes
* @param changes - <zh/> 数据操作 | <en/> data changes
* @returns <zh/> 分类后的数据操作 | <en/> classified data changes
*/
function groupByChangeType(changes) {
const { NodeAdded = [], NodeUpdated = [], NodeRemoved = [], EdgeAdded = [], EdgeUpdated = [], EdgeRemoved = [], ComboAdded = [], ComboUpdated = [], ComboRemoved = [], } = (0, util_1.groupBy)(changes, (change) => change.type);
return {
add: {
nodes: NodeAdded,
edges: EdgeAdded,
combos: ComboAdded,
},
update: {
nodes: NodeUpdated,
edges: EdgeUpdated,
combos: ComboUpdated,
},
remove: {
nodes: NodeRemoved,
edges: EdgeRemoved,
combos: ComboRemoved,
},
};
}
//# sourceMappingURL=change.js.map
;