mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-09-22 00:20:47 +02:00
🎨 Improve database field default filling https://github.com/siyuan-note/siyuan/issues/11966
This commit is contained in:
parent
e103b5c2f0
commit
120b0c1e57
2 changed files with 29 additions and 36 deletions
|
@ -330,15 +330,9 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa
|
||||||
if nil != value.Number && nil != other && nil != other.Number {
|
if nil != value.Number && nil != other && nil != other.Number {
|
||||||
switch operator {
|
switch operator {
|
||||||
case FilterOperatorIsEqual:
|
case FilterOperatorIsEqual:
|
||||||
if !other.Number.IsNotEmpty {
|
return value.Number.Content == other.Number.Content && value.Number.IsNotEmpty == other.Number.IsNotEmpty
|
||||||
return true
|
|
||||||
}
|
|
||||||
return value.Number.Content == other.Number.Content
|
|
||||||
case FilterOperatorIsNotEqual:
|
case FilterOperatorIsNotEqual:
|
||||||
if !other.Number.IsNotEmpty {
|
return value.Number.Content != other.Number.Content || value.Number.IsNotEmpty != other.Number.IsNotEmpty
|
||||||
return true
|
|
||||||
}
|
|
||||||
return value.Number.Content != other.Number.Content
|
|
||||||
case FilterOperatorIsGreater:
|
case FilterOperatorIsGreater:
|
||||||
return value.Number.Content > other.Number.Content
|
return value.Number.Content > other.Number.Content
|
||||||
case FilterOperatorIsGreaterOrEqual:
|
case FilterOperatorIsGreaterOrEqual:
|
||||||
|
@ -853,11 +847,6 @@ func (filter *ViewFilter) GetAffectValue(key *Key, addingBlockID string) (ret *V
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if FilterOperatorIsNotEmpty == filter.Operator {
|
|
||||||
// 在过滤非空值的情况下,不设置默认值 https://github.com/siyuan-note/siyuan/issues/15540
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = filter.Value.Clone()
|
ret = filter.Value.Clone()
|
||||||
ret.ID = ast.NewNodeID()
|
ret.ID = ast.NewNodeID()
|
||||||
ret.KeyID = key.ID
|
ret.KeyID = key.ID
|
||||||
|
@ -884,7 +873,7 @@ func (filter *ViewFilter) GetAffectValue(key *Key, addingBlockID string) (ret *V
|
||||||
case FilterOperatorIsEmpty:
|
case FilterOperatorIsEmpty:
|
||||||
ret.Block = &ValueBlock{Content: "", Created: ret.CreatedAt, Updated: ret.UpdatedAt}
|
ret.Block = &ValueBlock{Content: "", Created: ret.CreatedAt, Updated: ret.UpdatedAt}
|
||||||
case FilterOperatorIsNotEmpty:
|
case FilterOperatorIsNotEmpty:
|
||||||
ret.Block = &ValueBlock{Content: "", Created: ret.CreatedAt, Updated: ret.UpdatedAt}
|
return nil
|
||||||
}
|
}
|
||||||
case KeyTypeText:
|
case KeyTypeText:
|
||||||
switch filter.Operator {
|
switch filter.Operator {
|
||||||
|
@ -903,18 +892,14 @@ func (filter *ViewFilter) GetAffectValue(key *Key, addingBlockID string) (ret *V
|
||||||
case FilterOperatorIsEmpty:
|
case FilterOperatorIsEmpty:
|
||||||
ret.Text = &ValueText{Content: ""}
|
ret.Text = &ValueText{Content: ""}
|
||||||
case FilterOperatorIsNotEmpty:
|
case FilterOperatorIsNotEmpty:
|
||||||
ret.Text = &ValueText{Content: ""}
|
return nil
|
||||||
}
|
}
|
||||||
case KeyTypeNumber:
|
case KeyTypeNumber:
|
||||||
switch filter.Operator {
|
switch filter.Operator {
|
||||||
case FilterOperatorIsEqual:
|
case FilterOperatorIsEqual:
|
||||||
ret.Number = &ValueNumber{Content: filter.Value.Number.Content, IsNotEmpty: false}
|
ret.Number = &ValueNumber{Content: filter.Value.Number.Content, IsNotEmpty: false}
|
||||||
case FilterOperatorIsNotEqual:
|
case FilterOperatorIsNotEqual:
|
||||||
if 0 == filter.Value.Number.Content {
|
ret.Number = &ValueNumber{Content: 0, IsNotEmpty: false}
|
||||||
ret.Number = &ValueNumber{Content: 1, IsNotEmpty: true}
|
|
||||||
} else {
|
|
||||||
ret.Number = &ValueNumber{Content: 0, IsNotEmpty: true}
|
|
||||||
}
|
|
||||||
case FilterOperatorIsGreater:
|
case FilterOperatorIsGreater:
|
||||||
ret.Number = &ValueNumber{Content: filter.Value.Number.Content + 1, IsNotEmpty: true}
|
ret.Number = &ValueNumber{Content: filter.Value.Number.Content + 1, IsNotEmpty: true}
|
||||||
case FilterOperatorIsGreaterOrEqual:
|
case FilterOperatorIsGreaterOrEqual:
|
||||||
|
@ -970,6 +955,8 @@ func (filter *ViewFilter) GetAffectValue(key *Key, addingBlockID string) (ret *V
|
||||||
case FilterOperatorIsNotEmpty:
|
case FilterOperatorIsNotEmpty:
|
||||||
if 0 < len(key.Options) {
|
if 0 < len(key.Options) {
|
||||||
ret.MSelect = []*ValueSelect{{Content: key.Options[0].Name, Color: key.Options[0].Color}}
|
ret.MSelect = []*ValueSelect{{Content: key.Options[0].Name, Color: key.Options[0].Color}}
|
||||||
|
} else {
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case KeyTypeURL:
|
case KeyTypeURL:
|
||||||
|
@ -977,7 +964,7 @@ func (filter *ViewFilter) GetAffectValue(key *Key, addingBlockID string) (ret *V
|
||||||
case FilterOperatorIsEqual:
|
case FilterOperatorIsEqual:
|
||||||
ret.URL = &ValueURL{Content: filter.Value.URL.Content}
|
ret.URL = &ValueURL{Content: filter.Value.URL.Content}
|
||||||
case FilterOperatorIsNotEqual:
|
case FilterOperatorIsNotEqual:
|
||||||
ret.URL = &ValueURL{Content: filter.Value.URL.Content}
|
ret.URL = &ValueURL{Content: ""}
|
||||||
case FilterOperatorContains:
|
case FilterOperatorContains:
|
||||||
ret.URL = &ValueURL{Content: filter.Value.URL.Content}
|
ret.URL = &ValueURL{Content: filter.Value.URL.Content}
|
||||||
case FilterOperatorDoesNotContain:
|
case FilterOperatorDoesNotContain:
|
||||||
|
@ -987,16 +974,16 @@ func (filter *ViewFilter) GetAffectValue(key *Key, addingBlockID string) (ret *V
|
||||||
case FilterOperatorEndsWith:
|
case FilterOperatorEndsWith:
|
||||||
ret.URL = &ValueURL{Content: filter.Value.URL.Content}
|
ret.URL = &ValueURL{Content: filter.Value.URL.Content}
|
||||||
case FilterOperatorIsEmpty:
|
case FilterOperatorIsEmpty:
|
||||||
ret.URL = &ValueURL{}
|
ret.URL = &ValueURL{Content: ""}
|
||||||
case FilterOperatorIsNotEmpty:
|
case FilterOperatorIsNotEmpty:
|
||||||
ret.URL = &ValueURL{}
|
return nil
|
||||||
}
|
}
|
||||||
case KeyTypeEmail:
|
case KeyTypeEmail:
|
||||||
switch filter.Operator {
|
switch filter.Operator {
|
||||||
case FilterOperatorIsEqual:
|
case FilterOperatorIsEqual:
|
||||||
ret.Email = &ValueEmail{Content: filter.Value.Email.Content}
|
ret.Email = &ValueEmail{Content: filter.Value.Email.Content}
|
||||||
case FilterOperatorIsNotEqual:
|
case FilterOperatorIsNotEqual:
|
||||||
ret.Email = &ValueEmail{Content: filter.Value.Email.Content}
|
ret.Email = &ValueEmail{Content: ""}
|
||||||
case FilterOperatorContains:
|
case FilterOperatorContains:
|
||||||
ret.Email = &ValueEmail{Content: filter.Value.Email.Content}
|
ret.Email = &ValueEmail{Content: filter.Value.Email.Content}
|
||||||
case FilterOperatorDoesNotContain:
|
case FilterOperatorDoesNotContain:
|
||||||
|
@ -1008,14 +995,14 @@ func (filter *ViewFilter) GetAffectValue(key *Key, addingBlockID string) (ret *V
|
||||||
case FilterOperatorIsEmpty:
|
case FilterOperatorIsEmpty:
|
||||||
ret.Email = &ValueEmail{Content: ""}
|
ret.Email = &ValueEmail{Content: ""}
|
||||||
case FilterOperatorIsNotEmpty:
|
case FilterOperatorIsNotEmpty:
|
||||||
ret.Email = &ValueEmail{Content: ""}
|
return nil
|
||||||
}
|
}
|
||||||
case KeyTypePhone:
|
case KeyTypePhone:
|
||||||
switch filter.Operator {
|
switch filter.Operator {
|
||||||
case FilterOperatorIsEqual:
|
case FilterOperatorIsEqual:
|
||||||
ret.Phone = &ValuePhone{Content: filter.Value.Phone.Content}
|
ret.Phone = &ValuePhone{Content: filter.Value.Phone.Content}
|
||||||
case FilterOperatorIsNotEqual:
|
case FilterOperatorIsNotEqual:
|
||||||
ret.Phone = &ValuePhone{Content: filter.Value.Phone.Content + ""}
|
ret.Phone = &ValuePhone{Content: ""}
|
||||||
case FilterOperatorContains:
|
case FilterOperatorContains:
|
||||||
ret.Phone = &ValuePhone{Content: filter.Value.Phone.Content}
|
ret.Phone = &ValuePhone{Content: filter.Value.Phone.Content}
|
||||||
case FilterOperatorDoesNotContain:
|
case FilterOperatorDoesNotContain:
|
||||||
|
@ -1027,7 +1014,7 @@ func (filter *ViewFilter) GetAffectValue(key *Key, addingBlockID string) (ret *V
|
||||||
case FilterOperatorIsEmpty:
|
case FilterOperatorIsEmpty:
|
||||||
ret.Phone = &ValuePhone{Content: ""}
|
ret.Phone = &ValuePhone{Content: ""}
|
||||||
case FilterOperatorIsNotEmpty:
|
case FilterOperatorIsNotEmpty:
|
||||||
ret.Phone = &ValuePhone{Content: ""}
|
return nil
|
||||||
}
|
}
|
||||||
case KeyTypeMAsset:
|
case KeyTypeMAsset:
|
||||||
switch filter.Operator {
|
switch filter.Operator {
|
||||||
|
|
|
@ -86,10 +86,6 @@ func getAttrViewAddingBlockDefaultValues(attrView *av.AttributeView, view, group
|
||||||
}
|
}
|
||||||
|
|
||||||
nearItem := getNearItem(attrView, view, groupView, previousItemID)
|
nearItem := getNearItem(attrView, view, groupView, previousItemID)
|
||||||
filterKeyIDs := map[string]bool{}
|
|
||||||
for _, f := range view.Filters {
|
|
||||||
filterKeyIDs[f.Column] = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// 对库中存在模板字段和汇总字段的情况进行处理(尽量从临近项获取新值,获取不到的话直接返回)
|
// 对库中存在模板字段和汇总字段的情况进行处理(尽量从临近项获取新值,获取不到的话直接返回)
|
||||||
existSpecialField := false
|
existSpecialField := false
|
||||||
|
@ -111,20 +107,30 @@ func getAttrViewAddingBlockDefaultValues(attrView *av.AttributeView, view, group
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filterKeyIDs := map[string]bool{}
|
||||||
for _, filter := range view.Filters {
|
for _, filter := range view.Filters {
|
||||||
|
filterKeyIDs[filter.Column] = true
|
||||||
keyValues, _ := attrView.GetKeyValues(filter.Column)
|
keyValues, _ := attrView.GetKeyValues(filter.Column)
|
||||||
if nil == keyValues {
|
if nil == keyValues {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
var newValue *av.Value
|
var newValue *av.Value
|
||||||
if nil != nearItem {
|
|
||||||
// 存在临近项时优先通过临近项获取新值
|
switch keyValues.Key.Type {
|
||||||
newValue = getNewValueByNearItem(nearItem, keyValues.Key, addingItemID)
|
case av.KeyTypeNumber:
|
||||||
} else {
|
|
||||||
// 不存在临近项时通过过滤条件计算新值
|
|
||||||
newValue = filter.GetAffectValue(keyValues.Key, addingItemID)
|
newValue = filter.GetAffectValue(keyValues.Key, addingItemID)
|
||||||
|
if nil == newValue {
|
||||||
|
newValue = getNewValueByNearItem(nearItem, keyValues.Key, addingItemID)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
if nil != nearItem {
|
||||||
|
newValue = getNewValueByNearItem(nearItem, keyValues.Key, addingItemID)
|
||||||
|
} else {
|
||||||
|
newValue = filter.GetAffectValue(keyValues.Key, addingItemID)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if nil != newValue {
|
if nil != newValue {
|
||||||
ret[keyValues.Key.ID] = newValue
|
ret[keyValues.Key.ID] = newValue
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue