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

This commit is contained in:
Vanessa 2024-01-08 12:39:59 +08:00
commit 2017494493
3 changed files with 64 additions and 51 deletions

View file

@ -429,14 +429,9 @@ func (av *AttributeView) ShallowClone() (ret *AttributeView) {
}
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{}
@ -447,11 +442,22 @@ func (av *AttributeView) ShallowClone() (ret *AttributeView) {
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
}

View file

@ -1691,8 +1691,12 @@ func addAttributeViewBlock(blockID string, operation *Operation, tree *parse.Tre
func GetLastSortRow(rows []*av.TableRow) *av.TableRow {
for i := len(rows) - 1; i >= 0; 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
}
}

View file

@ -287,45 +287,48 @@ func renderTemplate(p, id string, preview bool) (string, error) {
logging.LogErrorf("parse attribute view [%s] failed: %s", n.AttributeViewID, parseErr)
} else {
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
}
if nil == cloned {
logging.LogErrorf("clone attribute view [%s] failed", n.AttributeViewID)
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)
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)
}
}
}