UNPKG

@aitianyu.cn/tianyu-store

Version:
82 lines 3.12 kB
"use strict"; /** @format */ Object.defineProperty(exports, "__esModule", { value: true }); exports.InstanceParentHolder = void 0; const InstanceIdImpl_1 = require("../impl/InstanceIdImpl"); const Message_1 = require("../../infra/Message"); class InstanceParentHolder { removed; constructor() { this.removed = { root: "", parent: "", instances: [], }; } createInstance(instanceId, instanceMap) { const parent = instanceId.parent; const instanceIdString = instanceId.toString(); if (InstanceIdImpl_1.InstanceIdImpl.isAncestor(parent)) { // parent is ancestor, raw instance should be root node instanceMap.parentMap[instanceIdString] = null; } else { // should check parent const parentInstanceString = parent.toString(); const childrenList = instanceMap.childrenMap[parentInstanceString]; if (!childrenList) { throw new Error(Message_1.MessageBundle.getText("CREATE_INSTANCE_PARENT_NOT_INIT", instanceIdString)); } childrenList.push(instanceIdString); // set parent relations instanceMap.parentMap[instanceIdString] = parentInstanceString; } // always set child list instanceMap.childrenMap[instanceIdString] = []; } applyChanges(instanceMap) { for (const item of this.removed.instances) { instanceMap.childrenMap[item] !== undefined && delete instanceMap.childrenMap[item]; instanceMap.parentMap[item] !== undefined && delete instanceMap.parentMap[item]; } const rootChildren = instanceMap.childrenMap[this.removed.root]; if (rootChildren) { rootChildren.splice(rootChildren.indexOf(this.removed.parent), 1); } this.removed = { root: "", parent: "", instances: [], }; } discardChanges() { this.removed = { root: "", parent: "", instances: [], }; } removeInstance(instanceId, instanceMap) { const parentInstanceIdString = instanceMap.parentMap[instanceId] || ""; const removedChildren = [instanceId, ...this.removeChild(instanceId, instanceMap)]; this.removed = { root: parentInstanceIdString, parent: instanceId, instances: removedChildren, }; return removedChildren; } removeChild(instanceId, instanceMap) { const instances = []; const childrens = instanceMap.childrenMap[instanceId] || []; for (const child of childrens) { // remove all children const removedChildren = this.removeChild(child, instanceMap); instances.push(child); instances.push(...removedChildren); } return instances; } } exports.InstanceParentHolder = InstanceParentHolder; //# sourceMappingURL=InstanceParentHolder.js.map