Feat:增加协同编辑节点操作同步前的生命周期函数配置信息

This commit is contained in:
街角小林 2024-03-06 10:05:00 +08:00
parent a72d2e6748
commit f3fe2dbc7b
2 changed files with 23 additions and 1 deletions

View File

@ -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
}

View File

@ -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)
}
})