diff --git a/kernel/api/av.go b/kernel/api/av.go index 8cfebc766..940284ab7 100644 --- a/kernel/api/av.go +++ b/kernel/api/av.go @@ -93,7 +93,7 @@ func setAttrViewGroup(c *gin.Context) { return } - ret = renderAttrView(blockID, avID, "", "", 1, -1) + ret = renderAttrView(blockID, avID, "", "", 1, -1, nil) c.JSON(http.StatusOK, ret) } @@ -116,7 +116,7 @@ func changeAttrViewLayout(c *gin.Context) { return } - ret = renderAttrView(blockID, avID, "", "", 1, -1) + ret = renderAttrView(blockID, avID, "", "", 1, -1, nil) c.JSON(http.StatusOK, ret) } @@ -664,13 +664,19 @@ func renderAttributeView(c *gin.Context) { query = queryArg.(string) } - ret = renderAttrView(blockID, id, viewID, query, page, pageSize) + groupPaging := map[string]interface{}{} + groupPagingArg := arg["groupPaging"] + if nil != groupPagingArg { + groupPaging = groupPagingArg.(map[string]interface{}) + } + + ret = renderAttrView(blockID, id, viewID, query, page, pageSize, groupPaging) c.JSON(http.StatusOK, ret) } -func renderAttrView(blockID, avID, viewID, query string, page, pageSize int) (ret *gulu.Result) { +func renderAttrView(blockID, avID, viewID, query string, page, pageSize int, groupPaging map[string]interface{}) (ret *gulu.Result) { ret = gulu.Ret.NewResult() - view, attrView, err := model.RenderAttributeView(blockID, avID, viewID, query, page, pageSize) + view, attrView, err := model.RenderAttributeView(blockID, avID, viewID, query, page, pageSize, groupPaging) if err != nil { ret.Code = -1 ret.Msg = err.Error() diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 1708bf78e..7a5707868 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -1395,7 +1395,7 @@ func RenderRepoSnapshotAttributeView(indexID, avID string) (viewable av.Viewable } } - viewable, err = renderAttributeView(attrView, "", "", "", 1, -1) + viewable, err = renderAttributeView(attrView, "", "", "", 1, -1, nil) return } @@ -1438,11 +1438,11 @@ func RenderHistoryAttributeView(avID, created string) (viewable av.Viewable, att } } - viewable, err = renderAttributeView(attrView, "", "", "", 1, -1) + viewable, err = renderAttributeView(attrView, "", "", "", 1, -1, nil) return } -func RenderAttributeView(blockID, avID, viewID, query string, page, pageSize int) (viewable av.Viewable, attrView *av.AttributeView, err error) { +func RenderAttributeView(blockID, avID, viewID, query string, page, pageSize int, groupPaging map[string]interface{}) (viewable av.Viewable, attrView *av.AttributeView, err error) { waitForSyncingStorages() if avJSONPath := av.GetAttributeViewDataPath(avID); !filelock.IsExist(avJSONPath) { @@ -1459,7 +1459,7 @@ func RenderAttributeView(blockID, avID, viewID, query string, page, pageSize int return } - viewable, err = renderAttributeView(attrView, blockID, viewID, query, page, pageSize) + viewable, err = renderAttributeView(attrView, blockID, viewID, query, page, pageSize, groupPaging) return } @@ -1471,7 +1471,7 @@ const ( groupValueNext7Days, groupValueNext30Days = "_@next7Days@_", "_@next30Days@_" ) -func renderAttributeView(attrView *av.AttributeView, blockID, viewID, query string, page, pageSize int) (viewable av.Viewable, err error) { +func renderAttributeView(attrView *av.AttributeView, blockID, viewID, query string, page, pageSize int, groupPaging map[string]interface{}) (viewable av.Viewable, err error) { if 1 > len(attrView.Views) { view, _, _ := av.NewTableViewWithBlockKey(ast.NewNodeID()) attrView.Views = append(attrView.Views, view) @@ -1557,8 +1557,18 @@ func renderAttributeView(attrView *av.AttributeView, blockID, viewID, query stri var groups []av.Viewable for _, groupView := range view.Groups { - groupViewable := sql.RenderGroupView(attrView, view, groupView) - err = renderViewableInstance(groupViewable, view, attrView, page, pageSize) + groupViewable := sql.RenderGroupView(attrView, view, groupView, query) + + groupPage, groupPageSize := page, pageSize + if nil != groupPaging { + if paging := groupPaging[groupView.ID]; nil != paging { + pagingMap := paging.(map[string]interface{}) + groupPage = int(pagingMap["page"].(float64)) + groupPageSize = int(pagingMap["pageSize"].(float64)) + } + } + + err = renderViewableInstance(groupViewable, view, attrView, groupPage, groupPageSize) if nil != err { return } @@ -1856,7 +1866,7 @@ func genAttrViewViewGroups(view *av.View, attrView *av.AttributeView) { if av.GroupOrderDesc == view.Group.Order { slices.Reverse(relativeDateGroups) } - + view.Groups = relativeDateGroups } else { sort.SliceStable(view.Groups, func(i, j int) bool { @@ -3216,7 +3226,7 @@ func getNewValueByNearItem(nearItem av.Item, key *av.Key, blockID string) (ret * } func getNearItem(attrView *av.AttributeView, view, groupView *av.View, previousItemID string) (ret av.Item) { - viewable := sql.RenderGroupView(attrView, view, groupView) + viewable := sql.RenderGroupView(attrView, view, groupView, "") av.Filter(viewable, attrView) av.Sort(viewable, attrView) items := viewable.(av.Collection).GetItems() diff --git a/kernel/sql/av.go b/kernel/sql/av.go index cd534fd2b..86f913aee 100644 --- a/kernel/sql/av.go +++ b/kernel/sql/av.go @@ -32,7 +32,7 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) -func RenderGroupView(attrView *av.AttributeView, view, groupView *av.View) (ret av.Viewable) { +func RenderGroupView(attrView *av.AttributeView, view, groupView *av.View, query string) (ret av.Viewable) { switch groupView.LayoutType { case av.LayoutTypeTable: groupView.Table.Columns = view.Table.Columns @@ -42,7 +42,7 @@ func RenderGroupView(attrView *av.AttributeView, view, groupView *av.View) (ret groupView.Filters = view.Filters groupView.Sorts = view.Sorts - return RenderView(attrView, groupView, "") + return RenderView(attrView, groupView, query) } func RenderView(attrView *av.AttributeView, view *av.View, query string) (ret av.Viewable) {