Browse Source

Merge remote-tracking branch 'origin/dev' into dev

Vanessa 1 year ago
parent
commit
2017494493
3 changed files with 65 additions and 52 deletions
  1. 18 12
      kernel/av/av.go
  2. 6 2
      kernel/model/attribute_view.go
  3. 41 38
      kernel/model/template.go

+ 18 - 12
kernel/av/av.go

@@ -429,14 +429,9 @@ func (av *AttributeView) ShallowClone() (ret *AttributeView) {
 	}
 	}
 
 
 	ret.ID = ast.NewNodeID()
 	ret.ID = ast.NewNodeID()
-	view, err := ret.GetCurrentView()
-	if nil == err {
-		view.ID = ast.NewNodeID()
-		ret.ViewID = view.ID
-	} else {
-		view, _ = NewTableViewWithBlockKey(ast.NewNodeID())
-		ret.ViewID = view.ID
-		ret.Views = append(ret.Views, view)
+	if 1 > len(ret.Views) {
+		logging.LogErrorf("attribute view [%s] has no views", av.ID)
+		return nil
 	}
 	}
 
 
 	keyIDMap := map[string]string{}
 	keyIDMap := map[string]string{}
@@ -447,11 +442,22 @@ func (av *AttributeView) ShallowClone() (ret *AttributeView) {
 		kv.Values = []*Value{}
 		kv.Values = []*Value{}
 	}
 	}
 
 
-	view.Table.ID = ast.NewNodeID()
-	for _, column := range view.Table.Columns {
-		column.ID = keyIDMap[column.ID]
+	for _, view := range ret.Views {
+		view.ID = ast.NewNodeID()
+		view.Table.ID = ast.NewNodeID()
+		for _, column := range view.Table.Columns {
+			column.ID = keyIDMap[column.ID]
+		}
+		view.Table.RowIDs = []string{}
+
+		for _, f := range view.Table.Filters {
+			f.Column = keyIDMap[f.Column]
+		}
+		for _, s := range view.Table.Sorts {
+			s.Column = keyIDMap[s.Column]
+		}
 	}
 	}
-	view.Table.RowIDs = []string{}
+	ret.ViewID = ret.Views[0].ID
 	return
 	return
 }
 }
 
 

+ 6 - 2
kernel/model/attribute_view.go

@@ -1691,8 +1691,12 @@ func addAttributeViewBlock(blockID string, operation *Operation, tree *parse.Tre
 func GetLastSortRow(rows []*av.TableRow) *av.TableRow {
 func GetLastSortRow(rows []*av.TableRow) *av.TableRow {
 	for i := len(rows) - 1; i >= 0; i-- {
 	for i := len(rows) - 1; i >= 0; i-- {
 		row := rows[i]
 		row := rows[i]
-		block := row.GetBlockValue()
-		if nil != block {
+		blockVal := row.GetBlockValue()
+		if nil != blockVal {
+			if nil != blockVal.Block && blockVal.Block.Created == blockVal.Block.Updated {
+				// 说明是刚刚创建的块,跳过
+				continue
+			}
 			return row
 			return row
 		}
 		}
 	}
 	}

+ 41 - 38
kernel/model/template.go

@@ -287,45 +287,48 @@ func renderTemplate(p, id string, preview bool) (string, error) {
 				logging.LogErrorf("parse attribute view [%s] failed: %s", n.AttributeViewID, parseErr)
 				logging.LogErrorf("parse attribute view [%s] failed: %s", n.AttributeViewID, parseErr)
 			} else {
 			} else {
 				cloned := attrView.ShallowClone()
 				cloned := attrView.ShallowClone()
-				if nil != cloned {
-					n.AttributeViewID = cloned.ID
-					if !preview {
-						// 非预览时持久化数据库
-						if saveErr := av.SaveAttributeView(cloned); nil != saveErr {
-							logging.LogErrorf("save attribute view [%s] failed: %s", cloned.ID, saveErr)
-						}
-					} else {
-						// 预览时使用简单表格渲染
-						view, getErr := attrView.GetCurrentView()
-						if nil != getErr {
-							logging.LogErrorf("get attribute view [%s] failed: %s", n.AttributeViewID, getErr)
-							return ast.WalkContinue
-						}
-
-						table, renderErr := renderAttributeViewTable(attrView, view)
-						if nil != renderErr {
-							logging.LogErrorf("render attribute view [%s] table failed: %s", n.AttributeViewID, renderErr)
-							return ast.WalkContinue
-						}
-
-						var aligns []int
-						for range table.Columns {
-							aligns = append(aligns, 0)
-						}
-						mdTable := &ast.Node{Type: ast.NodeTable, TableAligns: aligns}
-						mdTableHead := &ast.Node{Type: ast.NodeTableHead}
-						mdTable.AppendChild(mdTableHead)
-						mdTableHeadRow := &ast.Node{Type: ast.NodeTableRow, TableAligns: aligns}
-						mdTableHead.AppendChild(mdTableHeadRow)
-						for _, col := range table.Columns {
-							cell := &ast.Node{Type: ast.NodeTableCell}
-							cell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(col.Name)})
-							mdTableHeadRow.AppendChild(cell)
-						}
-
-						n.InsertBefore(mdTable)
-						unlinks = append(unlinks, n)
+				if nil == cloned {
+					logging.LogErrorf("clone attribute view [%s] failed", n.AttributeViewID)
+					return ast.WalkContinue
+				}
+
+				n.AttributeViewID = cloned.ID
+				if !preview {
+					// 非预览时持久化数据库
+					if saveErr := av.SaveAttributeView(cloned); nil != saveErr {
+						logging.LogErrorf("save attribute view [%s] failed: %s", cloned.ID, saveErr)
+					}
+				} else {
+					// 预览时使用简单表格渲染
+					view, getErr := attrView.GetCurrentView()
+					if nil != getErr {
+						logging.LogErrorf("get attribute view [%s] failed: %s", n.AttributeViewID, getErr)
+						return ast.WalkContinue
+					}
+
+					table, renderErr := renderAttributeViewTable(attrView, view)
+					if nil != renderErr {
+						logging.LogErrorf("render attribute view [%s] table failed: %s", n.AttributeViewID, renderErr)
+						return ast.WalkContinue
 					}
 					}
+
+					var aligns []int
+					for range table.Columns {
+						aligns = append(aligns, 0)
+					}
+					mdTable := &ast.Node{Type: ast.NodeTable, TableAligns: aligns}
+					mdTableHead := &ast.Node{Type: ast.NodeTableHead}
+					mdTable.AppendChild(mdTableHead)
+					mdTableHeadRow := &ast.Node{Type: ast.NodeTableRow, TableAligns: aligns}
+					mdTableHead.AppendChild(mdTableHeadRow)
+					for _, col := range table.Columns {
+						cell := &ast.Node{Type: ast.NodeTableCell}
+						cell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(col.Name)})
+						mdTableHeadRow.AppendChild(cell)
+					}
+
+					n.InsertBefore(mdTable)
+					unlinks = append(unlinks, n)
 				}
 				}
 			}
 			}
 		}
 		}