From e22f67a831096c779967420981f6741239b1ba59 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: Fri, 8 Mar 2024 10:06:15 +0800 Subject: [PATCH] =?UTF-8?q?Feat=EF=BC=9A=E4=BF=AE=E6=94=B9=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?=E7=9A=84=E6=9B=B4=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/plugins/Cooperate.js | 41 ++++++++++++++++-------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/simple-mind-map/src/plugins/Cooperate.js b/simple-mind-map/src/plugins/Cooperate.js index 9923f345..68be66f9 100644 --- a/simple-mind-map/src/plugins/Cooperate.js +++ b/simple-mind-map/src/plugins/Cooperate.js @@ -136,30 +136,43 @@ class Cooperate { this.currentData = data this.ydoc.transact(() => { // 找出新增的或修改的 + const createOrUpdateList = [] 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]) + createOrUpdateList.push({ + uid, + data: data[uid], + oldData: oldData[uid], + }) } }) + if (beforeCooperateUpdate && createOrUpdateList.length > 0) { + beforeCooperateUpdate({ + type: 'createOrUpdate', + list: createOrUpdateList, + data + }) + } + createOrUpdateList.forEach(item => { + this.ymap.set(item.uid, item.data) + }) // 找出删除的 + const deleteList = [] Object.keys(oldData).forEach(uid => { if (!data[uid]) { - if (beforeCooperateUpdate) { - beforeCooperateUpdate({ - type: 'delete', - data: oldData[uid] - }) - } - this.ymap.delete(uid) + deleteList.push({ uid, data: oldData[uid] }) } }) + if (beforeCooperateUpdate && deleteList.length > 0) { + beforeCooperateUpdate({ + type: 'delete', + list: deleteList + }) + } + deleteList.forEach(item => { + this.ymap.delete(item.uid) + }) }) }