🎨 Improve adding rows of the sorted database table view https://github.com/siyuan-note/siyuan/issues/10099

This commit is contained in:
Daniel 2024-01-07 17:30:52 +08:00
parent 737839f6bb
commit c7d5fddb97
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 47 additions and 8 deletions

View file

@ -139,6 +139,23 @@ func (filter *ViewFilter) GetAffectValue(key *Key) (ret *Value) {
case FilterOperatorIsNotEmpty:
ret.Date = &ValueDate{Content: util.CurrentTimeMillis(), IsNotEmpty: true}
}
case KeyTypeSelect:
switch filter.Operator {
case FilterOperatorIsEqual:
if 0 < len(filter.Value.MSelect) {
ret.MSelect = []*ValueSelect{{Content: filter.Value.MSelect[0].Content, Color: filter.Value.MSelect[0].Color}}
}
case FilterOperatorIsNotEqual:
if 0 < len(filter.Value.MSelect) {
ret.MSelect = []*ValueSelect{{Content: filter.Value.MSelect[0].Content + " Untitled", Color: "1"}}
}
case FilterOperatorIsEmpty:
ret.MSelect = []*ValueSelect{}
case FilterOperatorIsNotEmpty:
if 0 < len(key.Options) {
ret.MSelect = []*ValueSelect{{Content: key.Options[0].Name, Color: key.Options[0].Color}}
}
}
case KeyTypeMSelect:
switch filter.Operator {
case FilterOperatorIsEqual, FilterOperatorContains:

View file

@ -1553,20 +1553,28 @@ func addAttributeViewBlock(blockID string, operation *Operation, tree *parse.Tre
blockValue := &av.Value{ID: ast.NewNodeID(), KeyID: blockValues.Key.ID, BlockID: blockID, Type: av.KeyTypeBlock, IsDetached: operation.IsDetached, Block: &av.ValueBlock{ID: blockID, Content: content, Created: now, Updated: now}}
blockValues.Values = append(blockValues.Values, blockValue)
// 如果存在过滤条件,则将过滤条件应用到新添加的块上
// 如果存在排序和过滤条件,则将排序和过滤条件应用到新添加的块上
view, _ := attrView.GetCurrentView()
if nil != view && 0 < len(view.Table.Filters) {
if nil != view && (0 < len(view.Table.Filters) || 0 < len(view.Table.Sorts)) {
viewable, _ := renderAttributeViewTable(attrView, view)
viewable.FilterRows(attrView)
viewable.SortRows()
addedVal := false
affectKeyIDs := map[string]bool{}
for _, f := range view.Table.Filters {
affectKeyIDs[f.Column] = true
}
for _, s := range view.Table.Sorts {
affectKeyIDs[s.Column] = true
}
addedValues := map[string]bool{}
if 0 < len(viewable.Rows) {
row := GetLastSortRow(viewable.Rows)
if nil != row {
for _, filter := range view.Table.Filters {
for affectKeyID, _ := range affectKeyIDs {
for _, cell := range row.Cells {
if nil != cell.Value && cell.Value.KeyID == filter.Column {
if nil != cell.Value && cell.Value.KeyID == affectKeyID {
if av.KeyTypeBlock == cell.ValueType {
blockValue.Block.Content = cell.Value.Block.Content
continue
@ -1576,18 +1584,30 @@ func addAttributeViewBlock(blockID string, operation *Operation, tree *parse.Tre
newValue.ID = ast.NewNodeID()
newValue.BlockID = blockID
newValue.IsDetached = operation.IsDetached
values, _ := attrView.GetKeyValues(filter.Column)
values, _ := attrView.GetKeyValues(affectKeyID)
values.Values = append(values.Values, newValue)
addedValues[affectKeyID] = true
break
}
}
}
addedVal = true
}
}
if !addedVal {
notAddedValues := map[string]bool{}
for affectKeyID, _ := range affectKeyIDs {
if !addedValues[affectKeyID] {
notAddedValues[affectKeyID] = true
break
}
}
if 0 < len(notAddedValues) {
for _, filter := range view.Table.Filters {
if !notAddedValues[filter.Column] {
continue
}
for _, keyValues := range attrView.KeyValues {
if keyValues.Key.ID == filter.Column {
newValue := filter.GetAffectValue(keyValues.Key)
@ -1600,6 +1620,8 @@ func addAttributeViewBlock(blockID string, operation *Operation, tree *parse.Tre
}
}
}
// 仅使用上面的过滤条件计算受影响的值并插入兜底,受影响的排序条件不进行计算值插入
}
}