mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-01-23 16:56:10 +01:00
🎨 Improve av http://github.com/siyuan-note/siyuan/issues/15544
This commit is contained in:
parent
83e6f5d664
commit
0f48f94704
2 changed files with 73 additions and 16 deletions
|
|
@ -87,23 +87,26 @@ func getAttrViewAddingBlockDefaultValues(attrView *av.AttributeView, view, group
|
|||
|
||||
nearItem := getNearItem(attrView, view, groupView, previousItemID)
|
||||
|
||||
// 对库中存在模板字段和汇总字段的情况进行处理(尽量从临近项获取新值,获取不到的话直接返回)
|
||||
existSpecialField := false
|
||||
// 使用模板或汇总进行过滤或分组时,需要解析涉及到的其他字段
|
||||
templateRelevantKeys, rollupRelevantKeys := map[string][]*av.Key{}, map[string]*av.Key{}
|
||||
for _, keyValues := range attrView.KeyValues {
|
||||
if av.KeyTypeTemplate == keyValues.Key.Type || av.KeyTypeRollup == keyValues.Key.Type {
|
||||
existSpecialField = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if existSpecialField {
|
||||
if nil != nearItem {
|
||||
// 存在临近项时从临近项获取新值
|
||||
for _, keyValues := range attrView.KeyValues {
|
||||
newValue := getNewValueByNearItem(nearItem, keyValues.Key, addingItemID)
|
||||
ret[keyValues.Key.ID] = newValue
|
||||
if av.KeyTypeTemplate == keyValues.Key.Type {
|
||||
if tplRelevantKeys := attrView.GetTemplateKeyRelevantKeys(keyValues.Key); 0 < len(tplRelevantKeys) {
|
||||
for _, k := range tplRelevantKeys {
|
||||
templateRelevantKeys[keyValues.Key.ID] = append(templateRelevantKeys[keyValues.Key.ID], k)
|
||||
}
|
||||
}
|
||||
} else if av.KeyTypeRollup == keyValues.Key.Type {
|
||||
if nil != keyValues.Key.Rollup {
|
||||
relKey, _ := attrView.GetKey(keyValues.Key.Rollup.RelationKeyID)
|
||||
if nil != relKey && nil != relKey.Relation {
|
||||
if attrView.ID == relKey.Relation.AvID {
|
||||
if k, _ := attrView.GetKey(keyValues.Key.Rollup.KeyID); nil != k {
|
||||
rollupRelevantKeys[k.ID] = k
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // 不存在临近项时不生成任何新值
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -115,6 +118,26 @@ func getAttrViewAddingBlockDefaultValues(attrView *av.AttributeView, view, group
|
|||
continue
|
||||
}
|
||||
|
||||
if av.KeyTypeTemplate == keyValues.Key.Type && nil != nearItem {
|
||||
if keys := templateRelevantKeys[keyValues.Key.ID]; 0 < len(keys) {
|
||||
for _, k := range keys {
|
||||
if nil == ret[k.ID] {
|
||||
ret[k.ID] = getNewValueByNearItem(nearItem, k, addingItemID)
|
||||
}
|
||||
}
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
if av.KeyTypeRollup == keyValues.Key.Type && nil != nearItem {
|
||||
if relKey, ok := rollupRelevantKeys[keyValues.Key.ID]; ok {
|
||||
if nil == ret[relKey.ID] {
|
||||
ret[relKey.ID] = getNewValueByNearItem(nearItem, relKey, addingItemID)
|
||||
}
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
newValue := filter.GetAffectValue(keyValues.Key, addingItemID)
|
||||
if nil == newValue {
|
||||
newValue = getNewValueByNearItem(nearItem, keyValues.Key, addingItemID)
|
||||
|
|
@ -135,7 +158,7 @@ func getAttrViewAddingBlockDefaultValues(attrView *av.AttributeView, view, group
|
|||
}
|
||||
|
||||
newValue := getNewValueByNearItem(nearItem, groupKey, addingItemID)
|
||||
if av.KeyTypeSelect == groupKey.Type || av.KeyTypeMSelect == groupKey.Type { // 单独处理单选或多选
|
||||
if av.KeyTypeSelect == groupKey.Type || av.KeyTypeMSelect == groupKey.Type {
|
||||
// 因为单选或多选只能按选项分组,并且可能存在空白分组(找不到临近项),所以单选或多选类型的分组字段使用分组值内容对应的选项
|
||||
if opt := groupKey.GetOption(groupView.GetGroupValue()); nil != opt && groupValueDefault != groupView.GetGroupValue() {
|
||||
if nil == newValue {
|
||||
|
|
@ -159,6 +182,26 @@ func getAttrViewAddingBlockDefaultValues(attrView *av.AttributeView, view, group
|
|||
return
|
||||
}
|
||||
|
||||
if av.KeyTypeTemplate == keyValues.Key.Type && nil != nearItem {
|
||||
if keys := templateRelevantKeys[keyValues.Key.ID]; 0 < len(keys) {
|
||||
for _, k := range keys {
|
||||
if nil == ret[k.ID] {
|
||||
ret[k.ID] = getNewValueByNearItem(nearItem, k, addingItemID)
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if av.KeyTypeRollup == keyValues.Key.Type && nil != nearItem {
|
||||
if relKey, ok := rollupRelevantKeys[keyValues.Key.ID]; ok {
|
||||
if nil == ret[relKey.ID] {
|
||||
ret[relKey.ID] = getNewValueByNearItem(nearItem, relKey, addingItemID)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if nil != newValue && !filterKeyIDs[groupKey.ID] /* 命中了过滤条件的话就不重复处理了 */ {
|
||||
ret[groupKey.ID] = newValue
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue