From 060d93339004c30450a5f627755a9ed188be3b9a Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 7 Jul 2023 11:44:59 +0800 Subject: [PATCH 1/2] :art: Block data sync to Attribute View https://github.com/siyuan-note/siyuan/issues/8696 --- kernel/av/av.go | 18 ++++++++++++++--- kernel/model/attribute_view.go | 4 ++-- kernel/model/transaction.go | 37 +++++++++++++++++++++++++++++++++- 3 files changed, 53 insertions(+), 6 deletions(-) diff --git a/kernel/av/av.go b/kernel/av/av.go index 9550deb80..202eb5fe8 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -40,9 +40,10 @@ type AttributeView struct { Columns []*Column `json:"columns"` // 表格列名 Rows []*Row `json:"rows"` // 表格行记录 - Type AttributeViewType `json:"type"` // 属性视图类型 - Filters []*AttributeViewFilter `json:"filters"` // 过滤规则 - Sorts []*AttributeViewSort `json:"sorts"` // 排序规则 + Type AttributeViewType `json:"type"` // 属性视图类型 + Filters []*AttributeViewFilter `json:"filters"` // 过滤规则 + Sorts []*AttributeViewSort `json:"sorts"` // 排序规则 + Calculates []*AttributeViewCalc `json:"calculates"` // 计算规则 } // AttributeViewType 描述了属性视图的类型。 @@ -98,6 +99,17 @@ const ( FilterOperatorIsRelativeToToday FilterOperator = "Is relative to today" ) +type AttributeViewCalc struct { + Column string `json:"column"` + Operator CalcOperator `json:"operator"` +} + +type CalcOperator string + +const ( + CalcOperatorIsEqual FilterOperator = "=" +) + type AttributeViewSort struct { Column string `json:"column"` // 列 ID Order SortOrder `json:"order"` // 排序顺序 diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index ba20ce367..9f6a6cc2b 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -558,6 +558,6 @@ func addAttributeViewBlock(blockID, previousRowID, avID string, tree *parse.Tree } const ( - NodeAttrNameAVs = "avs" - NodeAttrNamePrefixAvCol = "av-col-" + NodeAttrNameAVs = "custom-avs" + NodeAttrNamePrefixAvCol = "custom-av-col-" ) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 124d19238..06254f890 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -19,6 +19,7 @@ package model import ( "bytes" "fmt" + "github.com/siyuan-note/siyuan/kernel/av" "path/filepath" "strings" "sync" @@ -1188,7 +1189,41 @@ func refreshDynamicRefTexts(updatedDefNodes map[string]*ast.Node, updatedTrees m } } - // TODO 2. 更新属性视图主键内容 + // 2. 更新属性视图主键内容 + for _, updatedDefNode := range updatedDefNodes { + avs := updatedDefNode.IALAttr(NodeAttrNameAVs) + if "" == avs { + continue + } + + avIDs := strings.Split(avs, ",") + for _, avID := range avIDs { + attrView, parseErr := av.ParseAttributeView(avID) + if nil != parseErr { + continue + } + + changedAv := false + for _, row := range attrView.Rows { + blockCell := row.GetBlockCell() + if nil == blockCell || nil == blockCell.Value || nil == blockCell.Value.Block { + continue + } + + if blockCell.Value.Block.ID == updatedDefNode.ID { + newContent := getNodeRefText(updatedDefNode) + if newContent != blockCell.Value.Block.Content { + blockCell.Value.Block.Content = newContent + changedAv = true + } + break + } + } + if changedAv { + av.SaveAttributeView(attrView) + } + } + } // 3. 保存变更 for _, tree := range changedRefTree { From 33e6a2ff2c8219735ff581f550243977d3b71585 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 7 Jul 2023 15:35:48 +0800 Subject: [PATCH 2/2] :art: Block data sync to Attribute View https://github.com/siyuan-note/siyuan/issues/8696 --- kernel/av/av.go | 7 ++++++- kernel/model/transaction.go | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/kernel/av/av.go b/kernel/av/av.go index 202eb5fe8..fee3661d1 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -107,7 +107,8 @@ type AttributeViewCalc struct { type CalcOperator string const ( - CalcOperatorIsEqual FilterOperator = "=" + CalcOperatorNone FilterOperator = "" + CalcOperatorCountAll FilterOperator = "Count all" ) type AttributeViewSort struct { @@ -312,3 +313,7 @@ func (av *AttributeView) FilterRows() { av.Rows = rows } } + +func (av *AttributeView) CalcCols() { + +} diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 06254f890..4ce788690 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -1221,6 +1221,12 @@ func refreshDynamicRefTexts(updatedDefNodes map[string]*ast.Node, updatedTrees m } if changedAv { av.SaveAttributeView(attrView) + + evt := util.NewCmdResult("refreshAttributeView", 0, util.PushModeBroadcast) + evt.Data = map[string]interface{}{ + "id": avID, + } + util.PushEvent(evt) } } }