From f1f363d77bba087b70184ebb6079322db8c5a199 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 25 Jul 2025 22:36:02 +0800 Subject: [PATCH] :art: Database grouping by field https://github.com/siyuan-note/siyuan/issues/10964 --- kernel/model/attribute_view.go | 37 ++++++++++++++++++++++++++++++++++ kernel/model/transaction.go | 2 ++ 2 files changed, 39 insertions(+) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index f1e0b0992..cd215741d 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -206,6 +206,43 @@ func hideAttributeViewGroup(avID, blockID, groupID string, hidden int) (err erro return nil } +func (tx *Transaction) doFoldAttrViewGroup(operation *Operation) (ret *TxErr) { + if err := foldAttrViewGroup(operation.AvID, operation.BlockID, operation.ID, operation.Data.(bool)); nil != err { + return &TxErr{code: TxErrHandleAttributeView, id: operation.AvID, msg: err.Error()} + } + return +} + +func foldAttrViewGroup(avID, blockID, groupID string, folded bool) (err error) { + attrView, err := av.ParseAttributeView(avID) + if err != nil { + return err + } + + view, err := getAttrViewViewByBlockID(attrView, blockID) + if err != nil { + return err + } + + if nil == view.Group { + return + } + + for _, group := range view.Groups { + if group.ID == groupID { + group.GroupFolded = folded + break + } + } + + err = av.SaveAttributeView(attrView) + if err != nil { + logging.LogErrorf("save attribute view [%s] failed: %s", avID, err) + return err + } + return nil +} + func (tx *Transaction) doSetAttrViewGroup(operation *Operation) (ret *TxErr) { data, err := gulu.JSON.MarshalJSON(operation.Data) if nil != err { diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index c48273021..a9aee1db6 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -301,6 +301,8 @@ func performTx(tx *Transaction) (ret *TxErr) { ret = tx.doSetAttrViewGroup(op) case "hideAttrViewGroup": ret = tx.doHideAttrViewGroup(op) + case "foldAttrViewGroup": + ret = tx.doFoldAttrViewGroup(op) case "syncAttrViewTableColWidth": ret = tx.doSyncAttrViewTableColWidth(op) case "removeAttrViewGroup":