🎨 Database table view supports synchronizing column width to other table views https://github.com/siyuan-note/siyuan/issues/11022

This commit is contained in:
Daniel 2025-07-11 10:43:09 +08:00
parent 1bb0c983e8
commit 43d533ce1d
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 56 additions and 1 deletions

View file

@ -44,6 +44,59 @@ import (
"github.com/xrash/smetrics" "github.com/xrash/smetrics"
) )
func (tx *Transaction) doSyncAttrViewTableColWidth(operation *Operation) (ret *TxErr) {
err := syncAttrViewTableColWidth(operation)
if err != nil {
return &TxErr{code: TxErrHandleAttributeView, id: operation.AvID, msg: err.Error()}
}
return
}
func syncAttrViewTableColWidth(operation *Operation) (err error) {
attrView, err := av.ParseAttributeView(operation.AvID)
if err != nil {
return
}
view := attrView.GetView(operation.ID)
if nil == view {
err = av.ErrViewNotFound
logging.LogErrorf("view [%s] not found in attribute view [%s]", operation.ID, operation.AvID)
return
}
var width string
switch view.LayoutType {
case av.LayoutTypeTable:
for _, column := range view.Table.Columns {
if column.ID == operation.KeyID {
width = operation.Data.(string)
break
}
}
case av.LayoutTypeGallery:
return
}
if "" == width {
return
}
for _, v := range attrView.Views {
if av.LayoutTypeTable == v.LayoutType {
for _, column := range v.Table.Columns {
if column.ID == operation.KeyID {
column.Width = width
break
}
}
}
}
err = av.SaveAttributeView(attrView)
return
}
func (tx *Transaction) doSetGroupHideEmpty(operation *Operation) (ret *TxErr) { func (tx *Transaction) doSetGroupHideEmpty(operation *Operation) (ret *TxErr) {
if err := SetGroupHideEmpty(operation.AvID, operation.BlockID, operation.Data.(bool)); nil != err { if err := SetGroupHideEmpty(operation.AvID, operation.BlockID, operation.Data.(bool)); nil != err {
return &TxErr{code: TxErrHandleAttributeView, id: operation.AvID, msg: err.Error()} return &TxErr{code: TxErrHandleAttributeView, id: operation.AvID, msg: err.Error()}

View file

@ -303,6 +303,8 @@ func performTx(tx *Transaction) (ret *TxErr) {
ret = tx.doHideAttrViewGroup(op) ret = tx.doHideAttrViewGroup(op)
case "setGroupHideEmpty": case "setGroupHideEmpty":
ret = tx.doSetGroupHideEmpty(op) ret = tx.doSetGroupHideEmpty(op)
case "syncAttrViewTableColWidth":
ret = tx.doSyncAttrViewTableColWidth(op)
} }
if nil != ret { if nil != ret {
@ -1502,7 +1504,7 @@ type Operation struct {
Name string `json:"name"` // 属性视图列名 Name string `json:"name"` // 属性视图列名
Typ string `json:"type"` // 属性视图列类型 Typ string `json:"type"` // 属性视图列类型
Format string `json:"format"` // 属性视图列格式化 Format string `json:"format"` // 属性视图列格式化
KeyID string `json:"keyID"` // 属性视 ID KeyID string `json:"keyID"` // 属性视图字段 ID
RowID string `json:"rowID"` // 属性视图行 ID RowID string `json:"rowID"` // 属性视图行 ID
IsTwoWay bool `json:"isTwoWay"` // 属性视图关联列是否是双向关系 IsTwoWay bool `json:"isTwoWay"` // 属性视图关联列是否是双向关系
BackRelationKeyID string `json:"backRelationKeyID"` // 属性视图关联列回链关联列的 ID BackRelationKeyID string `json:"backRelationKeyID"` // 属性视图关联列回链关联列的 ID