From 9d59e84d7692eb62dc1cd47fed73248c3d409263 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 9 Jul 2025 10:42:10 +0800 Subject: [PATCH] :art: Database grouping by field https://github.com/siyuan-note/siyuan/issues/10964 --- kernel/model/attribute_view.go | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 826ef3409..83a059901 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -143,7 +143,7 @@ func SetAttributeViewGroup(avID, blockID string, group *av.ViewGroup) (err error } view.Group = group - genGroup(view, attrView) + genAttrViewViewGroups(view, attrView) return err } @@ -1351,7 +1351,7 @@ func renderAttributeView(attrView *av.AttributeView, viewID, query string, page, if isGroupByDate(view) { updatedDate := time.UnixMilli(view.GroupUpdated).Format("2006-01-02") if time.Now().Format("2006-01-02") != updatedDate { - genGroup(view, attrView) + genAttrViewViewGroups(view, attrView) } for _, groupView := range view.Groups { @@ -1395,7 +1395,7 @@ func renderAttributeView(attrView *av.AttributeView, viewID, query string, page, return } -func genGroup(view *av.View, attrView *av.AttributeView) { +func genAttrViewViewGroups(view *av.View, attrView *av.AttributeView) { if nil == view.Group { return } @@ -1413,6 +1413,18 @@ func genGroup(view *av.View, attrView *av.AttributeView) { return } + // 如果是按日期分组,则需要记录每个分组视图的一些状态字段,以便后面重新计算分组后可以恢复这些状态 + type GroupState struct{ Folded, Hidden bool } + groupStates := map[string]*GroupState{} + if isGroupByDate(view) { + for _, groupView := range view.Groups { + groupStates[groupView.Name] = &GroupState{ + Folded: groupView.GroupFolded, + Hidden: groupView.GroupHidden, + } + } + } + var rangeStart, rangeEnd float64 switch group.Method { case av.GroupMethodValue: @@ -1548,6 +1560,14 @@ func genGroup(view *av.View, attrView *av.AttributeView) { if isGroupByDate(view) { view.GroupUpdated = time.Now().UnixMilli() + + // 则恢复分组视图状态 + for _, groupView := range view.Groups { + if state, ok := groupStates[groupView.Name]; ok { + groupView.GroupFolded = state.Folded + groupView.GroupHidden = state.Hidden + } + } } av.SaveAttributeView(attrView)