Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
c70b8c382c
1 changed files with 54 additions and 0 deletions
|
@ -2171,6 +2171,10 @@ func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID, cellID string,
|
|||
|
||||
isUpdatingBlockKey := av.KeyTypeBlock == val.Type
|
||||
oldBoundBlockID := val.BlockID
|
||||
var oldRelation *av.ValueRelation
|
||||
if av.KeyTypeRelation == val.Type {
|
||||
oldRelation = val.Relation
|
||||
}
|
||||
data, err := gulu.JSON.MarshalJSON(valueData)
|
||||
if nil != err {
|
||||
return
|
||||
|
@ -2178,6 +2182,10 @@ func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID, cellID string,
|
|||
if err = gulu.JSON.UnmarshalJSON(data, &val); nil != err {
|
||||
return
|
||||
}
|
||||
if av.KeyTypeRelation == val.Type {
|
||||
// 关联列得 content 是自动渲染的,所以不需要保存
|
||||
val.Relation.Contents = nil
|
||||
}
|
||||
|
||||
// val.IsDetached 只有更新主键的时候才会传入,所以下面需要结合 isUpdatingBlockKey 来判断
|
||||
|
||||
|
@ -2212,6 +2220,52 @@ func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID, cellID string,
|
|||
}
|
||||
}
|
||||
|
||||
key, _ := attrView.GetKey(val.KeyID)
|
||||
if nil != key && av.KeyTypeRelation == key.Type && nil != key.Relation && key.Relation.IsTwoWay {
|
||||
destAv, _ := av.ParseAttributeView(key.Relation.AvID)
|
||||
if nil != destAv {
|
||||
if nil != oldRelation {
|
||||
// 清空旧的双向关联的目标值
|
||||
for _, blockID := range oldRelation.BlockIDs {
|
||||
for _, keyValues := range destAv.KeyValues {
|
||||
if keyValues.Key.ID != key.Relation.BackKeyID {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, value := range keyValues.Values {
|
||||
if value.BlockID == blockID {
|
||||
value.Relation.BlockIDs = gulu.Str.RemoveElem(value.Relation.BlockIDs, rowID)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 更新新的双向关联的目标值
|
||||
for _, blockID := range val.Relation.BlockIDs {
|
||||
for _, keyValues := range destAv.KeyValues {
|
||||
if keyValues.Key.ID != key.Relation.BackKeyID {
|
||||
continue
|
||||
}
|
||||
|
||||
destVal := keyValues.GetValue(blockID)
|
||||
if nil == destVal {
|
||||
destVal = &av.Value{ID: ast.NewNodeID(), KeyID: keyValues.Key.ID, BlockID: blockID, Type: keyValues.Key.Type, Relation: &av.ValueRelation{}}
|
||||
keyValues.Values = append(keyValues.Values, destVal)
|
||||
}
|
||||
|
||||
destVal.Relation.BlockIDs = append(destVal.Relation.BlockIDs, rowID)
|
||||
destVal.Relation.BlockIDs = gulu.Str.RemoveDuplicatedElem(destVal.Relation.BlockIDs)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
av.SaveAttributeView(destAv)
|
||||
util.BroadcastByType("protyle", "refreshAttributeView", 0, "", map[string]interface{}{"id": destAv.ID})
|
||||
}
|
||||
}
|
||||
|
||||
if err = av.SaveAttributeView(attrView); nil != err {
|
||||
return
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue