1.修复搜索进行一次单个替换后再全部替换不正确的问题;2.不会再直接修改传入的data对象,内部会深拷贝一份

This commit is contained in:
wanglin2
2023-07-28 16:36:56 +08:00
parent 6ca9a116c2
commit def2f02eea
2 changed files with 15 additions and 7 deletions

View File

@@ -48,7 +48,7 @@ class Render {
this.themeConfig = this.mindMap.themeConfig
this.draw = this.mindMap.draw
// 渲染树,操作过程中修改的都是这里的数据
this.renderTree = merge({}, this.mindMap.opt.data || {})
this.renderTree = merge({}, simpleDeepClone(this.mindMap.opt.data) || {})
// 是否重新渲染
this.reRender = false
// 是否正在渲染中

View File

@@ -13,15 +13,18 @@ class Search {
this.matchNodeList = []
// 当前所在的节点列表索引
this.currentIndex = -1
// 是否正在跳转中
this.isJumping = false
// 不要复位搜索文本
this.notResetSearchText = false
this.onDataChange = this.onDataChange.bind(this)
this.mindMap.on('data_change', this.onDataChange)
}
// 节点数据改变了,需要重新搜索
onDataChange() {
if (this.isJumping) return
if (this.notResetSearchText) {
this.notResetSearchText = false
return
}
this.searchText = ''
}
@@ -48,7 +51,7 @@ class Search {
this.searchText = ''
this.matchNodeList = []
this.currentIndex = -1
this.isJumping = false
this.notResetSearchText = false
this.isSearching = false
this.emitEvent()
}
@@ -77,9 +80,8 @@ class Search {
this.currentIndex = 0
}
let currentNode = this.matchNodeList[this.currentIndex]
this.isJumping = true
this.notResetSearchText = true
this.mindMap.execCommand('GO_TARGET_NODE', currentNode, () => {
this.isJumping = false
callback()
})
}
@@ -92,10 +94,16 @@ class Search {
let currentNode = this.matchNodeList[this.currentIndex]
if (!currentNode) return
let text = this.getReplacedText(currentNode, this.searchText, replaceText)
this.notResetSearchText = true
currentNode.setText(text, currentNode.nodeData.data.richText)
this.matchNodeList = this.matchNodeList.filter(node => {
return currentNode !== node
})
if (this.currentIndex > this.matchNodeList.length - 1) {
this.currentIndex = -1
} else {
this.currentIndex--
}
this.emitEvent()
}