mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-09-22 08:30:42 +02:00
🎨 Database table view supports synchronizing column width to other table views https://github.com/siyuan-note/siyuan/issues/11022
This commit is contained in:
parent
1bb0c983e8
commit
43d533ce1d
2 changed files with 56 additions and 1 deletions
|
@ -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()}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue