diff --git a/simple-mind-map/src/constants/defaultOptions.js b/simple-mind-map/src/constants/defaultOptions.js index b1c6a80e..e192b262 100644 --- a/simple-mind-map/src/constants/defaultOptions.js +++ b/simple-mind-map/src/constants/defaultOptions.js @@ -279,5 +279,14 @@ export const defaultOpt = { // 是否仅搜索当前渲染的节点,被收起的节点不会被搜索到 isOnlySearchCurrentRenderNodes: false, // 协同编辑时,同一个节点不能同时被多人选中 - onlyOneEnableActiveNodeOnCooperate: false + onlyOneEnableActiveNodeOnCooperate: false, + // 协同编辑时,节点操作即将更新到其他客户端前的生命周期函数 + // 函数接收一个对象作为参数: + /* + { + type: createOrUpdate(创建节点或更新节点)、delete(删除节点) + data: 1.当type=createOrUpdate时,代表被创建或被更新的节点数据,即将同步到其他客户端,所以你可以修改该数据;2.当type=delete时,代表被删除的节点数据 + } + */ + beforeCooperateUpdate: null } diff --git a/simple-mind-map/src/plugins/Cooperate.js b/simple-mind-map/src/plugins/Cooperate.js index 09258deb..48183650 100644 --- a/simple-mind-map/src/plugins/Cooperate.js +++ b/simple-mind-map/src/plugins/Cooperate.js @@ -131,6 +131,7 @@ class Cooperate { // 找出更新点 updateChanges(data) { + const { beforeCooperateUpdate } = this.mindMap.opt const oldData = this.currentData this.currentData = data this.ydoc.transact(() => { @@ -138,12 +139,24 @@ class Cooperate { Object.keys(data).forEach(uid => { // 新增的或已经存在的,如果数据发生了改变 if (!oldData[uid] || !isSameObject(oldData[uid], data[uid])) { + if (beforeCooperateUpdate) { + beforeCooperateUpdate({ + type: 'createOrUpdate', + data: data[uid] + }) + } this.ymap.set(uid, data[uid]) } }) // 找出删除的 Object.keys(oldData).forEach(uid => { if (!data[uid]) { + if (beforeCooperateUpdate) { + beforeCooperateUpdate({ + type: 'delete', + data: oldData[uid] + }) + } this.ymap.delete(uid) } })