🎨 Improve av refresh https://github.com/siyuan-note/siyuan/issues/12997
This commit is contained in:
parent
885348293a
commit
f3bee2adcf
1 changed files with 24 additions and 4 deletions
|
@ -1235,7 +1235,7 @@ func getRefDefIDs(node *ast.Node) (refDefIDs []string) {
|
|||
}
|
||||
|
||||
func upsertAvBlockRel(node *ast.Node) {
|
||||
var avIDs []string
|
||||
var affectedAvIDs []string
|
||||
ast.Walk(node, func(n *ast.Node, entering bool) ast.WalkStatus {
|
||||
if !entering {
|
||||
return ast.WalkContinue
|
||||
|
@ -1244,13 +1244,33 @@ func upsertAvBlockRel(node *ast.Node) {
|
|||
if ast.NodeAttributeView == n.Type {
|
||||
avID := n.AttributeViewID
|
||||
if changed := av.UpsertBlockRel(avID, n.ID); changed {
|
||||
avIDs = append(avIDs, avID)
|
||||
affectedAvIDs = append(affectedAvIDs, avID)
|
||||
}
|
||||
}
|
||||
return ast.WalkContinue
|
||||
})
|
||||
avIDs = gulu.Str.RemoveDuplicatedElem(avIDs)
|
||||
for _, avID := range avIDs {
|
||||
|
||||
updatedNodes := []*ast.Node{node}
|
||||
var parents []*ast.Node
|
||||
for parent := node.Parent; nil != parent && ast.NodeDocument != parent.Type; parent = parent.Parent {
|
||||
parents = append(parents, parent)
|
||||
}
|
||||
updatedNodes = append(updatedNodes, parents...)
|
||||
for _, updatedNode := range updatedNodes {
|
||||
ast.Walk(updatedNode, func(n *ast.Node, entering bool) ast.WalkStatus {
|
||||
avs := n.IALAttr(av.NodeAttrNameAvs)
|
||||
if "" == avs {
|
||||
return ast.WalkContinue
|
||||
}
|
||||
|
||||
avIDs := strings.Split(avs, ",")
|
||||
affectedAvIDs = append(affectedAvIDs, avIDs...)
|
||||
return ast.WalkContinue
|
||||
})
|
||||
}
|
||||
|
||||
affectedAvIDs = gulu.Str.RemoveDuplicatedElem(affectedAvIDs)
|
||||
for _, avID := range affectedAvIDs {
|
||||
ReloadAttrView(avID)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue