From 3aa32f7f8d2247a4c68c9e6dabe3cfd83d073a65 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 6 Dec 2023 17:00:37 +0800 Subject: [PATCH] :art: Database table view supports paged loading https://github.com/siyuan-note/siyuan/issues/9424 --- kernel/api/av.go | 14 +++++++++++++- kernel/model/attribute_view.go | 23 ++++++++++++++++------- kernel/model/export.go | 2 +- kernel/model/template.go | 8 ++++---- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/kernel/api/av.go b/kernel/api/av.go index b7b1d66ee..c3959bf7f 100644 --- a/kernel/api/av.go +++ b/kernel/api/av.go @@ -123,7 +123,19 @@ func renderAttributeView(c *gin.Context) { if nil != viewIDArg { 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 { ret.Code = -1 ret.Msg = err.Error() diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 57c17705a..4208946c4 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -224,7 +224,7 @@ func RenderRepoSnapshotAttributeView(indexID, avID string) (viewable av.Viewable } } - viewable, err = renderAttributeView(attrView, "") + viewable, err = renderAttributeView(attrView, "", 1, -1) 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 } -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() if avJSONPath := av.GetAttributeViewDataPath(avID); !filelock.IsExist(avJSONPath) { @@ -288,11 +288,11 @@ func RenderAttributeView(avID, viewID string) (viewable av.Viewable, attrView *a return } - viewable, err = renderAttributeView(attrView, viewID) + viewable, err = renderAttributeView(attrView, viewID, page, pageSize) 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) { view, _ := av.NewTableViewWithBlockKey(ast.NewNodeID()) attrView.Views = append(attrView.Views, view) @@ -372,7 +372,7 @@ func renderAttributeView(attrView *av.AttributeView, viewID string) (viewable av } view.Table.Sorts = tmpSorts - viewable, err = renderAttributeViewTable(attrView, view) + viewable, err = renderAttributeViewTable(attrView, view, page, pageSize) } viewable.FilterRows() @@ -440,7 +440,7 @@ func renderTemplateCol(ial map[string]string, tplContent string, rowValues []*av 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{ ID: view.ID, Icon: view.Icon, @@ -621,6 +621,15 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a } 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 } diff --git a/kernel/model/export.go b/kernel/model/export.go index 59c72af42..b9941345a 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -1916,7 +1916,7 @@ func exportTree(tree *parse.Tree, wysiwyg, expandKaTexMacros, keepFold bool, return ast.WalkContinue } - table, err := renderAttributeViewTable(attrView, view) + table, err := renderAttributeViewTable(attrView, view, 1, -1) if nil != err { logging.LogErrorf("render attribute view [%s] table failed: %s", avID, err) return ast.WalkContinue diff --git a/kernel/model/template.go b/kernel/model/template.go index e3978c5bf..9dbab95b3 100644 --- a/kernel/model/template.go +++ b/kernel/model/template.go @@ -47,10 +47,10 @@ func RenderGoTemplate(templateContent string) (ret string, err error) { tmpl := template.New("") tmpl = tmpl.Funcs(sprig.TxtFuncMap()) tmpl = tmpl.Funcs(template.FuncMap{ - "Weekday": util.Weekday, - "WeekdayCN": util.WeekdayCN, + "Weekday": util.Weekday, + "WeekdayCN": util.WeekdayCN, "WeekdayCN2": util.WeekdayCN2, - "ISOWeek": util.ISOWeek, + "ISOWeek": util.ISOWeek, }) tpl, err := tmpl.Parse(templateContent) if nil != err { @@ -333,7 +333,7 @@ func renderTemplate(p, id string, preview bool) (string, error) { return ast.WalkContinue } - table, renderErr := renderAttributeViewTable(attrView, view) + table, renderErr := renderAttributeViewTable(attrView, view, 1, -1) if nil != renderErr { logging.LogErrorf("render attribute view [%s] table failed: %s", n.AttributeViewID, renderErr) return ast.WalkContinue