This commit is contained in:
Daniel 2025-06-11 11:01:51 +08:00
parent c5bea14bd6
commit 05d1085633
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
3 changed files with 53 additions and 89 deletions

View file

@ -25,6 +25,7 @@ import (
"github.com/siyuan-note/logging" "github.com/siyuan-note/logging"
"github.com/siyuan-note/siyuan/kernel/av" "github.com/siyuan-note/siyuan/kernel/av"
"github.com/siyuan-note/siyuan/kernel/filesys" "github.com/siyuan-note/siyuan/kernel/filesys"
"github.com/siyuan-note/siyuan/kernel/treenode"
"github.com/siyuan-note/siyuan/kernel/util" "github.com/siyuan-note/siyuan/kernel/util"
) )
@ -173,6 +174,54 @@ func RenderTemplateField(ial map[string]string, keyValues []*av.KeyValues, tplCo
return return
} }
func generateAttrViewItems(attrView *av.AttributeView) (ret map[string][]*av.KeyValues) {
ret = map[string][]*av.KeyValues{}
for _, keyValues := range attrView.KeyValues {
for _, val := range keyValues.Values {
values := ret[val.BlockID]
if nil == values {
values = []*av.KeyValues{{Key: keyValues.Key, Values: []*av.Value{val}}}
} else {
values = append(values, &av.KeyValues{Key: keyValues.Key, Values: []*av.Value{val}})
}
ret[val.BlockID] = values
}
}
return
}
func filterNotFoundAttrViewItems(keyValuesMap *map[string][]*av.KeyValues) {
var notFound []string
var toCheckBlockIDs []string
for blockID, keyValues := range *keyValuesMap {
blockValue := getBlockValue(keyValues)
if nil == blockValue {
notFound = append(notFound, blockID)
continue
}
if blockValue.IsDetached {
continue
}
if nil != blockValue.Block && "" == blockValue.Block.ID {
notFound = append(notFound, blockID)
continue
}
toCheckBlockIDs = append(toCheckBlockIDs, blockID)
}
checkRet := treenode.ExistBlockTrees(toCheckBlockIDs)
for blockID, exist := range checkRet {
if !exist {
notFound = append(notFound, blockID)
}
}
for _, blockID := range notFound {
delete(*keyValuesMap, blockID)
}
}
func fillAttributeViewNilValue(value *av.Value, typ av.KeyType) { func fillAttributeViewNilValue(value *av.Value, typ av.KeyType) {
value.Type = typ value.Type = typ
switch typ { switch typ {

View file

@ -64,50 +64,8 @@ func RenderAttributeViewGallery(attrView *av.AttributeView, view *av.View, query
}) })
} }
// 生成卡片 cardsValues := generateAttrViewItems(attrView) // 生成卡片
cardsValues := map[string][]*av.KeyValues{} filterNotFoundAttrViewItems(&cardsValues) // 过滤掉不存在的卡片
for _, keyValues := range attrView.KeyValues {
for _, val := range keyValues.Values {
values := cardsValues[val.BlockID]
if nil == values {
values = []*av.KeyValues{{Key: keyValues.Key, Values: []*av.Value{val}}}
} else {
values = append(values, &av.KeyValues{Key: keyValues.Key, Values: []*av.Value{val}})
}
cardsValues[val.BlockID] = values
}
}
// 过滤掉不存在的卡片
var notFound []string
var toCheckBlockIDs []string
for blockID, keyValues := range cardsValues {
blockValue := getBlockValue(keyValues)
if nil == blockValue {
notFound = append(notFound, blockID)
continue
}
if blockValue.IsDetached {
continue
}
if nil != blockValue.Block && "" == blockValue.Block.ID {
notFound = append(notFound, blockID)
continue
}
toCheckBlockIDs = append(toCheckBlockIDs, blockID)
}
checkRet := treenode.ExistBlockTrees(toCheckBlockIDs)
for blockID, exist := range checkRet {
if !exist {
notFound = append(notFound, blockID)
}
}
for _, blockID := range notFound {
delete(cardsValues, blockID)
}
// 生成卡片字段值 // 生成卡片字段值
for cardID, cardValues := range cardsValues { for cardID, cardValues := range cardsValues {

View file

@ -22,7 +22,6 @@ import (
"github.com/88250/lute/ast" "github.com/88250/lute/ast"
"github.com/siyuan-note/siyuan/kernel/av" "github.com/siyuan-note/siyuan/kernel/av"
"github.com/siyuan-note/siyuan/kernel/treenode"
"github.com/siyuan-note/siyuan/kernel/util" "github.com/siyuan-note/siyuan/kernel/util"
) )
@ -72,50 +71,8 @@ func RenderAttributeViewTable(attrView *av.AttributeView, view *av.View, query s
}) })
} }
// 生成行 rowsValues := generateAttrViewItems(attrView) // 生成行
rowsValues := map[string][]*av.KeyValues{} filterNotFoundAttrViewItems(&rowsValues) // 过滤掉不存在的行
for _, keyValues := range attrView.KeyValues {
for _, val := range keyValues.Values {
values := rowsValues[val.BlockID]
if nil == values {
values = []*av.KeyValues{{Key: keyValues.Key, Values: []*av.Value{val}}}
} else {
values = append(values, &av.KeyValues{Key: keyValues.Key, Values: []*av.Value{val}})
}
rowsValues[val.BlockID] = values
}
}
// 过滤掉不存在的行
var notFound []string
var toCheckBlockIDs []string
for blockID, keyValues := range rowsValues {
blockValue := getBlockValue(keyValues)
if nil == blockValue {
notFound = append(notFound, blockID)
continue
}
if blockValue.IsDetached {
continue
}
if nil != blockValue.Block && "" == blockValue.Block.ID {
notFound = append(notFound, blockID)
continue
}
toCheckBlockIDs = append(toCheckBlockIDs, blockID)
}
checkRet := treenode.ExistBlockTrees(toCheckBlockIDs)
for blockID, exist := range checkRet {
if !exist {
notFound = append(notFound, blockID)
}
}
for _, blockID := range notFound {
delete(rowsValues, blockID)
}
// 生成行单元格 // 生成行单元格
for rowID, rowValues := range rowsValues { for rowID, rowValues := range rowsValues {