import { LinkedTree, LinkedTreeNode } from 'ts-toolset'; import { UndoRedoActionCollection, UndoRedoActionPairsCollection } from '../../common/undoRedo/types'; /** 协议数据操作 key 集合 */ export const TreeDndDatasetHandleKeys = { /** 添加到子节点 */ addChildren: 'add_children', /** 添加到上一个节点 */ addPrevious: 'add_previous', /** 添加到下一个节点 */ addNext: 'add_next', /** 移动到子节点 */ moveChildren: 'move_children', /** 移动到上一个节点 */ movePrevious: 'move_previous', /** 移动到下一个节点 */ moveNext: 'move_next', /** 删除节点 */ deleteSelf: 'delete_self', /** 删除所有子节点 */ deleteChildren: 'delete_children', /** 剪切节点 */ cutSelf: 'cut_self', /** 剪切所有子节点 */ //cutChildren: 'cut_children', /** 粘贴到子节点 */ pasteChildren: 'paste_children', /** 粘贴到上一个节点 */ pastePrevious: 'paste_previous', /** 粘贴到下一个节点 */ pasteNext: 'paste_next', /** 撤销移动节点 */ restoreMove: 'restore_move', /** 撤销删除节点 */ restoreDelete: 'restore_delete', /** 更新节点数据,更新的 维度 是 数据节点的第一层子集 */ updateData: 'updateData' }; /** 操作函数 key */ export const TreeDndDatasetUndoRedoActionCollection: UndoRedoActionCollection = { [TreeDndDatasetHandleKeys.addChildren]: function (linkedTree: LinkedTree, source: LinkedTreeNode, target: LinkedTreeNode) { linkedTree.addToChildrenLast(source, target); }, [TreeDndDatasetHandleKeys.addPrevious]: function (linkedTree: LinkedTree, source: LinkedTreeNode, target: LinkedTreeNode) { linkedTree.addToBefore(source, target); }, [TreeDndDatasetHandleKeys.addNext]: function (linkedTree: LinkedTree, source: LinkedTreeNode, target: LinkedTreeNode) { linkedTree.addToAfter(source, target); }, [TreeDndDatasetHandleKeys.moveChildren]: function (linkedTree: LinkedTree, source: LinkedTreeNode, target: LinkedTreeNode) { linkedTree.moveToChildrenLast(source, target); }, [TreeDndDatasetHandleKeys.movePrevious]: function (linkedTree: LinkedTree, source: LinkedTreeNode, target: LinkedTreeNode) { linkedTree.moveToBefore(source, target); }, [TreeDndDatasetHandleKeys.moveNext]: function (linkedTree: LinkedTree, source: LinkedTreeNode, target: LinkedTreeNode) { linkedTree.moveToAfter(source, target); }, [TreeDndDatasetHandleKeys.deleteSelf]: function (linkedTree: LinkedTree, target: LinkedTreeNode) { linkedTree.remove(target); }, // [TreeDndDatasetHandleKeys.deleteChildren]: function (operate: LinkedTree) { // operate.Clear(); // }, [TreeDndDatasetHandleKeys.cutSelf]: function (linkedTree: LinkedTree, target: LinkedTreeNode) { // operate.Slice(); linkedTree.separate(target); }, // [TreeDndDatasetHandleKeys.cutChildren]: function (operate: LinkedTree, effect: LinkedTree) { // }, [TreeDndDatasetHandleKeys.pasteChildren]: function (linkedTree: LinkedTree, source: LinkedTreeNode, target: LinkedTreeNode) { linkedTree.addToChildrenLast(source, target); }, [TreeDndDatasetHandleKeys.pastePrevious]: function (linkedTree: LinkedTree, source: LinkedTreeNode, target: LinkedTreeNode) { linkedTree.addToBefore(source, target); }, [TreeDndDatasetHandleKeys.pasteNext]: function (linkedTree: LinkedTree, source: LinkedTreeNode, target: LinkedTreeNode) { linkedTree.addToAfter(source, target); }, [TreeDndDatasetHandleKeys.restoreMove]: function (linkedTree: LinkedTree, source: LinkedTreeNode, target: LinkedTreeNode, addToChildren: boolean) { addToChildren ? linkedTree.moveToChildrenLast(source, target) : linkedTree.moveToBefore(source, target); }, [TreeDndDatasetHandleKeys.restoreDelete]: function (linkedTree: LinkedTree, source: LinkedTreeNode, target: LinkedTreeNode, addToChildren: boolean) { addToChildren ? linkedTree.addToChildrenLast(source, target) : linkedTree.addToBefore(source, target); }, [TreeDndDatasetHandleKeys.updateData]: function (data: any, changes: any) { Object.keys(changes).forEach(key => data[key] = changes[key]); } }; /** 协议数据 撤销、恢复 函数 key */ export const TreeDndDatasetUndoRedoActionPairsCollection: UndoRedoActionPairsCollection = { [TreeDndDatasetHandleKeys.addChildren]: { set: TreeDndDatasetHandleKeys.addChildren, restore: TreeDndDatasetHandleKeys.deleteSelf }, [TreeDndDatasetHandleKeys.addPrevious]: { set: TreeDndDatasetHandleKeys.addPrevious, restore: TreeDndDatasetHandleKeys.deleteSelf }, [TreeDndDatasetHandleKeys.addNext]: { set: TreeDndDatasetHandleKeys.addNext, restore: TreeDndDatasetHandleKeys.deleteSelf }, [TreeDndDatasetHandleKeys.moveChildren]: { set: TreeDndDatasetHandleKeys.moveChildren, restore: TreeDndDatasetHandleKeys.restoreMove }, [TreeDndDatasetHandleKeys.movePrevious]: { set: TreeDndDatasetHandleKeys.movePrevious, restore: TreeDndDatasetHandleKeys.restoreMove }, [TreeDndDatasetHandleKeys.moveNext]: { set: TreeDndDatasetHandleKeys.moveNext, restore: TreeDndDatasetHandleKeys.restoreMove }, [TreeDndDatasetHandleKeys.deleteSelf]: { set: TreeDndDatasetHandleKeys.addChildren, restore: TreeDndDatasetHandleKeys.restoreDelete }, // 比较复杂,后续实现 // [TreeDndDatasetHandleKeys.deleteChildren]: { set: TreeDndDatasetHandleKeys.addChildren, restore: TreeDndDatasetHandleKeys.deleteSelf }, [TreeDndDatasetHandleKeys.cutSelf]: { set: TreeDndDatasetHandleKeys.cutSelf, restore: TreeDndDatasetHandleKeys.restoreDelete }, // 比较复杂,后续实现 // [TreeDndDatasetHandleKeys.cutChildren]: { set: TreeDndDatasetHandleKeys.addChildren, restore: TreeDndDatasetHandleKeys.deleteSelf }, [TreeDndDatasetHandleKeys.pasteChildren]: { set: TreeDndDatasetHandleKeys.addChildren, restore: TreeDndDatasetHandleKeys.deleteSelf }, [TreeDndDatasetHandleKeys.pastePrevious]: { set: TreeDndDatasetHandleKeys.addPrevious, restore: TreeDndDatasetHandleKeys.deleteSelf }, [TreeDndDatasetHandleKeys.pasteNext]: { set: TreeDndDatasetHandleKeys.addNext, restore: TreeDndDatasetHandleKeys.deleteSelf }, [TreeDndDatasetHandleKeys.updateData]: { set: TreeDndDatasetHandleKeys.updateData, restore: TreeDndDatasetHandleKeys.updateData }, };