♻️ Improve av

This commit is contained in:
Daniel 2025-07-01 13:28:20 +08:00
parent 863bd7d78a
commit 5f57be269b
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 29 additions and 24 deletions

View file

@ -1229,26 +1229,9 @@ func renderAttributeView(attrView *av.AttributeView, viewID, query string, page,
}
// 做一些数据兼容和订正处理
checkViewInstance(attrView)
checkViewInstance(attrView, view)
upgradeAttributeViewSpec(attrView)
// 字段删除以后需要删除设置的过滤和排序
tmpFilters := []*av.ViewFilter{}
for _, f := range view.Filters {
if k, _ := attrView.GetKey(f.Column); nil != k {
tmpFilters = append(tmpFilters, f)
}
}
view.Filters = tmpFilters
tmpSorts := []*av.ViewSort{}
for _, s := range view.Sorts {
if k, _ := attrView.GetKey(s.Column); nil != k {
tmpSorts = append(tmpSorts, s)
}
}
view.Sorts = tmpSorts
viewable = sql.RenderView(view, attrView, query)
if nil == viewable {
err = av.ErrViewNotFound

View file

@ -23,13 +23,34 @@ import (
"github.com/siyuan-note/siyuan/kernel/treenode"
)
func checkViewInstance(attrView *av.AttributeView) {
changed := false
for i, view := range attrView.Views {
if av.LayoutTypeGallery == view.LayoutType && nil == view.Gallery {
func checkViewInstance(attrView *av.AttributeView, view *av.View) {
// 字段删除以后需要删除设置的过滤和排序
tmpFilters := []*av.ViewFilter{}
for _, f := range view.Filters {
if k, _ := attrView.GetKey(f.Column); nil != k {
tmpFilters = append(tmpFilters, f)
}
}
changed := len(tmpFilters) != len(view.Filters)
view.Filters = tmpFilters
tmpSorts := []*av.ViewSort{}
for _, s := range view.Sorts {
if k, _ := attrView.GetKey(s.Column); nil != k {
tmpSorts = append(tmpSorts, s)
}
}
if !changed {
changed = len(tmpSorts) != len(view.Sorts)
}
view.Sorts = tmpSorts
// 视图类型不匹配时需要订正
for i, v := range attrView.Views {
if av.LayoutTypeGallery == v.LayoutType && nil == v.Gallery {
// 切换为画廊视图时可能没有初始化画廊实例 https://github.com/siyuan-note/siyuan/issues/15122
if nil != view.Table {
view.LayoutType = av.LayoutTypeTable
if nil != v.Table {
v.LayoutType = av.LayoutTypeTable
changed = true
} else {
attrView.Views = append(attrView.Views[:i], attrView.Views[i+1:]...)
@ -37,6 +58,7 @@ func checkViewInstance(attrView *av.AttributeView) {
}
}
}
if changed {
av.SaveAttributeView(attrView)
}