Browse Source

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

Daniel 1 year ago
parent
commit
3aa32f7f8d
4 changed files with 34 additions and 13 deletions
  1. 13 1
      kernel/api/av.go
  2. 16 7
      kernel/model/attribute_view.go
  3. 1 1
      kernel/model/export.go
  4. 4 4
      kernel/model/template.go

+ 13 - 1
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()

+ 16 - 7
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
 }
 

+ 1 - 1
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

+ 4 - 4
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