🎨 Add multi-select type column to Attribute View https://github.com/siyuan-note/siyuan/issues/8695

This commit is contained in:
Daniel 2023-07-10 10:39:54 +08:00
parent 807db89c5e
commit 8c999c5957
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 68 additions and 0 deletions

View file

@ -167,6 +167,14 @@ func (tx *Transaction) doRemoveAttrViewBlock(operation *Operation) (ret *TxErr)
return
}
func (tx *Transaction) doRemoveAttrViewColOption(operation *Operation) (ret *TxErr) {
err := removeAttributeViewColumnOption(operation)
if nil != err {
return &TxErr{code: TxErrWriteAttributeView, id: operation.ParentID, msg: err.Error()}
}
return
}
func (tx *Transaction) doUpdateAttrViewColOptions(operation *Operation) (ret *TxErr) {
err := updateAttributeViewColumnOptions(operation.Data, operation.ID, operation.ParentID)
if nil != err {
@ -299,6 +307,64 @@ func updateAttributeViewColumn(id, name string, typ string, avID string) (err er
return
}
func removeAttributeViewColumnOption(operation *Operation) (err error) {
avID := operation.ParentID
attrView, err := av.ParseAttributeView(avID)
if nil != err {
return
}
colID := operation.ID
optName := operation.Data.(string)
var colIndex int
for i, col := range attrView.Columns {
if col.ID != colID {
continue
}
colIndex = i
for _, opt := range col.Options {
if opt.Name != optName {
continue
}
col.Options = append(col.Options[:i], col.Options[i+1:]...)
break
}
break
}
for _, row := range attrView.Rows {
for k, cell := range row.Cells {
if colIndex != k {
continue
}
if nil != cell.Value {
if nil != cell.Value.Select {
if optName == cell.Value.Select.Content {
cell.Value = nil
break
}
} else if nil != cell.Value.MSelect {
for j, opt := range cell.Value.MSelect {
if optName == opt.Content {
cell.Value.MSelect = append(cell.Value.MSelect[:j], cell.Value.MSelect[j+1:]...)
break
}
}
}
}
break
}
}
err = av.SaveAttributeView(attrView)
return
}
func updateAttributeViewColumnOptions(data interface{}, id, avID string) (err error) {
attrView, err := av.ParseAttributeView(avID)
if nil != err {