Kaynağa Gözat

:art: Database table view in-table search https://github.com/siyuan-note/siyuan/issues/10419

Daniel 1 yıl önce
ebeveyn
işleme
b6c2c829b1
2 değiştirilmiş dosya ile 24 ekleme ve 3 silme
  1. 2 2
      kernel/api/av.go
  2. 22 1
      kernel/model/attribute_view.go

+ 2 - 2
kernel/api/av.go

@@ -37,8 +37,8 @@ func searchTableView(c *gin.Context) {
 
 	avID := arg["avID"].(string)
 	viewID := arg["viewID"].(string)
-	keyword := arg["keyword"].(string)
-	view, attrView, err := model.SearchTableView(avID, viewID, keyword)
+	query := arg["query"].(string)
+	view, attrView, err := model.SearchTableView(avID, viewID, query)
 	if nil != err {
 		ret.Code = -1
 		ret.Msg = err.Error()

+ 22 - 1
kernel/model/attribute_view.go

@@ -39,7 +39,7 @@ import (
 	"github.com/siyuan-note/siyuan/kernel/util"
 )
 
-func SearchTableView(avID, viewID, keyword string) (viewable av.Viewable, attrView *av.AttributeView, err error) {
+func SearchTableView(avID, viewID, query 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 {
@@ -54,7 +54,28 @@ func SearchTableView(avID, viewID, keyword string) (viewable av.Viewable, attrVi
 		return
 	}
 
+	keywords := strings.Split(query, " ")
 	viewable, err = renderAttributeView(attrView, viewID, 1, -1)
+	var rows []*av.TableRow
+	switch viewable.GetType() {
+	case av.LayoutTypeTable:
+		table := viewable.(*av.Table)
+		for _, row := range table.Rows {
+			hit := false
+			for _, cell := range row.Cells {
+				for _, keyword := range keywords {
+					if strings.Contains(strings.ToLower(cell.Value.String()), strings.ToLower(keyword)) {
+						hit = true
+						break
+					}
+				}
+			}
+			if hit {
+				rows = append(rows, row)
+			}
+		}
+		table.Rows = rows
+	}
 	return
 }