mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-19 08:00:13 +01:00
🎨 Database grouping by field https://github.com/siyuan-note/siyuan/issues/10964
This commit is contained in:
parent
49d233d92a
commit
0816925e76
1 changed files with 44 additions and 23 deletions
|
|
@ -2936,24 +2936,8 @@ func addAttributeViewBlock(now int64, avID, blockID, groupID, previousBlockID, a
|
||||||
targetView = groupView
|
targetView = groupView
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
viewable := sql.RenderGroupView(attrView, view, targetView)
|
|
||||||
av.Filter(viewable, attrView)
|
nearItem = getNearItem(attrView, view, targetView, previousBlockID)
|
||||||
av.Sort(viewable, attrView)
|
|
||||||
items := viewable.(av.Collection).GetItems()
|
|
||||||
if 0 < len(items) {
|
|
||||||
if "" != previousBlockID {
|
|
||||||
for _, row := range items {
|
|
||||||
if row.GetID() == previousBlockID {
|
|
||||||
nearItem = row
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if 0 < len(items) {
|
|
||||||
nearItem = items[0]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
filterKeyIDs := map[string]bool{}
|
filterKeyIDs := map[string]bool{}
|
||||||
|
|
@ -3054,13 +3038,12 @@ func addAttributeViewBlock(now int64, avID, blockID, groupID, previousBlockID, a
|
||||||
if !filterKeyIDs[groupKey.ID] /* 过滤条件应用过的话就不重复处理了 */ && "" != groupID {
|
if !filterKeyIDs[groupKey.ID] /* 过滤条件应用过的话就不重复处理了 */ && "" != groupID {
|
||||||
if groupView := view.GetGroup(groupID); nil != groupView {
|
if groupView := view.GetGroup(groupID); nil != groupView {
|
||||||
if keyValues, _ := attrView.GetKeyValues(groupKey.ID); nil != keyValues {
|
if keyValues, _ := attrView.GetKeyValues(groupKey.ID); nil != keyValues {
|
||||||
var newValue, defaultVal *av.Value
|
var newValue *av.Value
|
||||||
if nil != nearItem {
|
if nil != nearItem {
|
||||||
defaultVal = nearItem.GetValue(groupKey.ID)
|
defaultVal := nearItem.GetValue(groupKey.ID)
|
||||||
}
|
|
||||||
if nil != defaultVal {
|
|
||||||
newValue = defaultVal.Clone()
|
newValue = defaultVal.Clone()
|
||||||
} else {
|
}
|
||||||
|
if nil == newValue {
|
||||||
newValue = av.GetAttributeViewDefaultValue(ast.NewNodeID(), groupKey.ID, blockID, groupKey.Type)
|
newValue = av.GetAttributeViewDefaultValue(ast.NewNodeID(), groupKey.ID, blockID, groupKey.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3096,6 +3079,29 @@ func addAttributeViewBlock(now int64, avID, blockID, groupID, previousBlockID, a
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getNearItem(attrView *av.AttributeView, view, groupView *av.View, previousItemID string) (ret av.Item) {
|
||||||
|
viewable := sql.RenderGroupView(attrView, view, groupView)
|
||||||
|
av.Filter(viewable, attrView)
|
||||||
|
av.Sort(viewable, attrView)
|
||||||
|
items := viewable.(av.Collection).GetItems()
|
||||||
|
if 0 < len(items) {
|
||||||
|
if "" != previousItemID {
|
||||||
|
for _, row := range items {
|
||||||
|
if row.GetID() == previousItemID {
|
||||||
|
ret = row
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if 0 < len(items) {
|
||||||
|
ret = items[0]
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (tx *Transaction) doRemoveAttrViewBlock(operation *Operation) (ret *TxErr) {
|
func (tx *Transaction) doRemoveAttrViewBlock(operation *Operation) (ret *TxErr) {
|
||||||
err := removeAttributeViewBlock(operation.SrcIDs, operation.AvID, tx)
|
err := removeAttributeViewBlock(operation.SrcIDs, operation.AvID, tx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -3565,6 +3571,21 @@ func sortAttributeViewRow(operation *Operation) (err error) {
|
||||||
targetGroupView = view.GetGroup(operation.TargetGroupID)
|
targetGroupView = view.GetGroup(operation.TargetGroupID)
|
||||||
}
|
}
|
||||||
if nil != targetGroupView {
|
if nil != targetGroupView {
|
||||||
|
groupKey := view.GetGroupKey(attrView)
|
||||||
|
nearItem := getNearItem(attrView, view, targetGroupView, operation.PreviousID)
|
||||||
|
var newValue *av.Value
|
||||||
|
if nil != nearItem {
|
||||||
|
defaultVal := nearItem.GetValue(view.Group.Field)
|
||||||
|
newValue = defaultVal.Clone()
|
||||||
|
}
|
||||||
|
if nil == newValue {
|
||||||
|
newValue = av.GetAttributeViewDefaultValue(ast.NewNodeID(), groupKey.ID, operation.ID, groupKey.Type)
|
||||||
|
|
||||||
|
}
|
||||||
|
val := attrView.GetValue(groupKey.ID, operation.ID)
|
||||||
|
newValueRaw := newValue.GetValByType(groupKey.Type)
|
||||||
|
val.SetValByType(groupKey.Type, newValueRaw)
|
||||||
|
|
||||||
for i, r := range targetGroupView.GroupItemIDs {
|
for i, r := range targetGroupView.GroupItemIDs {
|
||||||
if r == operation.PreviousID {
|
if r == operation.PreviousID {
|
||||||
previousIndex = i + 1
|
previousIndex = i + 1
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue