From f3fe2dbc7b79b73ff5e5f7a623879ce59a1011ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A1=97=E8=A7=92=E5=B0=8F=E6=9E=97?= <1013335014@qq.com> Date: Wed, 6 Mar 2024 10:05:00 +0800 Subject: [PATCH] =?UTF-8?q?Feat=EF=BC=9A=E5=A2=9E=E5=8A=A0=E5=8D=8F?= =?UTF-8?q?=E5=90=8C=E7=BC=96=E8=BE=91=E8=8A=82=E7=82=B9=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=89=8D=E7=9A=84=E7=94=9F=E5=91=BD=E5=91=A8?= =?UTF-8?q?=E6=9C=9F=E5=87=BD=E6=95=B0=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/constants/defaultOptions.js | 11 ++++++++++- simple-mind-map/src/plugins/Cooperate.js | 13 +++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) 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) } })