🎨 Improve adding rows of the sorted database table view https://github.com/siyuan-note/siyuan/issues/10099
This commit is contained in:
parent
737839f6bb
commit
c7d5fddb97
2 changed files with 47 additions and 8 deletions
|
@ -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:
|
||||
|
|
|
@ -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
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 仅使用上面的过滤条件计算受影响的值并插入兜底,受影响的排序条件不进行计算值插入
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue