From 226cefdafe00989a28f0e1d1b67ac063253629d9 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 4 Jul 2024 16:59:58 +0800 Subject: [PATCH] :art: Improve av template importing https://github.com/siyuan-note/siyuan/issues/11820 --- kernel/av/av.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/kernel/av/av.go b/kernel/av/av.go index 8ae52ce79..c109deabc 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -21,6 +21,7 @@ import ( "errors" "os" "path/filepath" + "sort" "strings" "time" @@ -659,14 +660,25 @@ func (av *AttributeView) ShallowClone() (ret *AttributeView) { return nil } + var oldKeyIDs []string keyIDMap := map[string]string{} for _, kv := range ret.KeyValues { newID := ast.NewNodeID() keyIDMap[kv.Key.ID] = newID + oldKeyIDs = append(oldKeyIDs, kv.Key.ID) kv.Key.ID = newID kv.Values = []*Value{} } + oldKeyIDs = gulu.Str.RemoveDuplicatedElem(oldKeyIDs) + sorts := map[string]int{} + for i, k := range ret.KeyIDs { + sorts[k] = i + } + sort.Slice(oldKeyIDs, func(i, j int) bool { + return sorts[oldKeyIDs[i]] < sorts[oldKeyIDs[j]] + }) + for _, view := range ret.Views { view.ID = ast.NewNodeID() view.Table.ID = ast.NewNodeID() @@ -683,6 +695,12 @@ func (av *AttributeView) ShallowClone() (ret *AttributeView) { } } ret.ViewID = ret.Views[0].ID + + ret.KeyIDs = nil + for _, oldKeyID := range oldKeyIDs { + newKeyID := keyIDMap[oldKeyID] + ret.KeyIDs = append(ret.KeyIDs, newKeyID) + } return }