🎨 Database table view supports paged loading https://github.com/siyuan-note/siyuan/issues/9424

This commit is contained in:
Daniel 2023-12-06 17:00:37 +08:00
parent 533f4eb9dc
commit 3aa32f7f8d
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
4 changed files with 34 additions and 13 deletions

View file

@ -123,7 +123,19 @@ func renderAttributeView(c *gin.Context) {
if nil != viewIDArg { if nil != viewIDArg {
viewID = viewIDArg.(string) viewID = viewIDArg.(string)
} }
view, attrView, err := model.RenderAttributeView(id, viewID) page := 1
pageArg := arg["page"]
if nil != pageArg {
page = int(pageArg.(float64))
}
pageSize := -1
pageSizeArg := arg["pageSize"]
if nil != pageSizeArg {
pageSize = int(pageSizeArg.(float64))
}
view, attrView, err := model.RenderAttributeView(id, viewID, page, pageSize)
if nil != err { if nil != err {
ret.Code = -1 ret.Code = -1
ret.Msg = err.Error() ret.Msg = err.Error()

View file

@ -224,7 +224,7 @@ func RenderRepoSnapshotAttributeView(indexID, avID string) (viewable av.Viewable
} }
} }
viewable, err = renderAttributeView(attrView, "") viewable, err = renderAttributeView(attrView, "", 1, -1)
return return
} }
@ -267,11 +267,11 @@ func RenderHistoryAttributeView(avID, created string) (viewable av.Viewable, att
} }
} }
viewable, err = renderAttributeView(attrView, "") viewable, err = renderAttributeView(attrView, "", 1, -1)
return return
} }
func RenderAttributeView(avID, viewID string) (viewable av.Viewable, attrView *av.AttributeView, err error) { func RenderAttributeView(avID, viewID string, page, pageSize int) (viewable av.Viewable, attrView *av.AttributeView, err error) {
waitForSyncingStorages() waitForSyncingStorages()
if avJSONPath := av.GetAttributeViewDataPath(avID); !filelock.IsExist(avJSONPath) { if avJSONPath := av.GetAttributeViewDataPath(avID); !filelock.IsExist(avJSONPath) {
@ -288,11 +288,11 @@ func RenderAttributeView(avID, viewID string) (viewable av.Viewable, attrView *a
return return
} }
viewable, err = renderAttributeView(attrView, viewID) viewable, err = renderAttributeView(attrView, viewID, page, pageSize)
return return
} }
func renderAttributeView(attrView *av.AttributeView, viewID string) (viewable av.Viewable, err error) { func renderAttributeView(attrView *av.AttributeView, viewID string, page, pageSize int) (viewable av.Viewable, err error) {
if 1 > len(attrView.Views) { if 1 > len(attrView.Views) {
view, _ := av.NewTableViewWithBlockKey(ast.NewNodeID()) view, _ := av.NewTableViewWithBlockKey(ast.NewNodeID())
attrView.Views = append(attrView.Views, view) attrView.Views = append(attrView.Views, view)
@ -372,7 +372,7 @@ func renderAttributeView(attrView *av.AttributeView, viewID string) (viewable av
} }
view.Table.Sorts = tmpSorts view.Table.Sorts = tmpSorts
viewable, err = renderAttributeViewTable(attrView, view) viewable, err = renderAttributeViewTable(attrView, view, page, pageSize)
} }
viewable.FilterRows() viewable.FilterRows()
@ -440,7 +440,7 @@ func renderTemplateCol(ial map[string]string, tplContent string, rowValues []*av
return buf.String() return buf.String()
} }
func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *av.Table, err error) { func renderAttributeViewTable(attrView *av.AttributeView, view *av.View, page, pageSize int) (ret *av.Table, err error) {
ret = &av.Table{ ret = &av.Table{
ID: view.ID, ID: view.ID,
Icon: view.Icon, Icon: view.Icon,
@ -621,6 +621,15 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
} }
return iv < jv return iv < jv
}) })
if 0 < pageSize {
start := (page - 1) * pageSize
end := start + pageSize
if len(ret.Rows) < end {
end = len(ret.Rows)
}
ret.Rows = ret.Rows[start:end]
}
return return
} }

View file

@ -1916,7 +1916,7 @@ func exportTree(tree *parse.Tree, wysiwyg, expandKaTexMacros, keepFold bool,
return ast.WalkContinue return ast.WalkContinue
} }
table, err := renderAttributeViewTable(attrView, view) table, err := renderAttributeViewTable(attrView, view, 1, -1)
if nil != err { if nil != err {
logging.LogErrorf("render attribute view [%s] table failed: %s", avID, err) logging.LogErrorf("render attribute view [%s] table failed: %s", avID, err)
return ast.WalkContinue return ast.WalkContinue

View file

@ -47,10 +47,10 @@ func RenderGoTemplate(templateContent string) (ret string, err error) {
tmpl := template.New("") tmpl := template.New("")
tmpl = tmpl.Funcs(sprig.TxtFuncMap()) tmpl = tmpl.Funcs(sprig.TxtFuncMap())
tmpl = tmpl.Funcs(template.FuncMap{ tmpl = tmpl.Funcs(template.FuncMap{
"Weekday": util.Weekday, "Weekday": util.Weekday,
"WeekdayCN": util.WeekdayCN, "WeekdayCN": util.WeekdayCN,
"WeekdayCN2": util.WeekdayCN2, "WeekdayCN2": util.WeekdayCN2,
"ISOWeek": util.ISOWeek, "ISOWeek": util.ISOWeek,
}) })
tpl, err := tmpl.Parse(templateContent) tpl, err := tmpl.Parse(templateContent)
if nil != err { if nil != err {
@ -333,7 +333,7 @@ func renderTemplate(p, id string, preview bool) (string, error) {
return ast.WalkContinue return ast.WalkContinue
} }
table, renderErr := renderAttributeViewTable(attrView, view) table, renderErr := renderAttributeViewTable(attrView, view, 1, -1)
if nil != renderErr { if nil != renderErr {
logging.LogErrorf("render attribute view [%s] table failed: %s", n.AttributeViewID, renderErr) logging.LogErrorf("render attribute view [%s] table failed: %s", n.AttributeViewID, renderErr)
return ast.WalkContinue return ast.WalkContinue