diff --git a/kernel/api/av.go b/kernel/api/av.go index 5da63d8c1..7a14b903f 100644 --- a/kernel/api/av.go +++ b/kernel/api/av.go @@ -26,6 +26,49 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) +func searchTableView(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, _ := util.JsonArg(c, ret) + if nil == arg { + return + } + + avID := arg["avID"].(string) + viewID := arg["viewID"].(string) + keyword := arg["keyword"].(string) + view, attrView, err := model.SearchTableView(avID, viewID, keyword) + if nil != err { + ret.Code = -1 + ret.Msg = err.Error() + return + } + + var views []map[string]interface{} + for _, v := range attrView.Views { + view := map[string]interface{}{ + "id": v.ID, + "icon": v.Icon, + "name": v.Name, + "hideAttrViewName": v.HideAttrViewName, + "type": v.LayoutType, + } + + views = append(views, view) + } + + ret.Data = map[string]interface{}{ + "name": attrView.Name, + "id": attrView.ID, + "viewType": view.GetType(), + "viewID": view.GetID(), + "views": views, + "view": view, + "isMirror": av.IsMirror(attrView.ID), + } +} + func setDatabaseBlockView(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) diff --git a/kernel/api/router.go b/kernel/api/router.go index 071734604..354c47e26 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -412,6 +412,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/av/removeAttributeViewValues", model.CheckAuth, model.CheckReadonly, removeAttributeViewValues) ginServer.Handle("POST", "/api/av/getAttributeViewPrimaryKeyValues", model.CheckAuth, model.CheckReadonly, getAttributeViewPrimaryKeyValues) ginServer.Handle("POST", "/api/av/setDatabaseBlockView", model.CheckAuth, model.CheckReadonly, setDatabaseBlockView) + ginServer.Handle("POST", "/api/av/searchTableView", model.CheckAuth, model.CheckReadonly, searchTableView) ginServer.Handle("POST", "/api/ai/chatGPT", model.CheckAuth, chatGPT) ginServer.Handle("POST", "/api/ai/chatGPTWithAction", model.CheckAuth, chatGPTWithAction) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index d0406514c..6a8daecb6 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -39,6 +39,25 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) +func SearchTableView(avID, viewID, keyword string) (viewable av.Viewable, attrView *av.AttributeView, err error) { + if avJSONPath := av.GetAttributeViewDataPath(avID); !filelock.IsExist(avJSONPath) { + attrView = av.NewAttributeView(avID) + if err = av.SaveAttributeView(attrView); nil != err { + logging.LogErrorf("save attribute view [%s] failed: %s", avID, err) + return + } + } + + attrView, err = av.ParseAttributeView(avID) + if nil != err { + logging.LogErrorf("parse attribute view [%s] failed: %s", avID, err) + return + } + + viewable, err = renderAttributeView(attrView, viewID, 1, -1) + return +} + func SetDatabaseBlockView(blockID, viewID string) (err error) { node, tree, err := getNodeByBlockID(nil, blockID) if nil != err {