mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-03-04 11:50:15 +01:00
🐛 Unable to obtain the correct number of view entries when viewing unreferenced databases or historical databases (#17088)
This commit is contained in:
parent
b77580c86e
commit
75d29419c5
4 changed files with 88 additions and 49 deletions
|
|
@ -281,6 +281,11 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle
|
|||
} else if (protyle.options.action.includes(Constants.CB_GET_HISTORY)) {
|
||||
blockElement.setAttribute(Constants.CUSTOM_SY_AV_VIEW, target.dataset.id);
|
||||
blockElement.removeAttribute("data-render");
|
||||
if (target.dataset.page) {
|
||||
blockElement.querySelectorAll(".av__body").forEach((bodyItem: HTMLElement) => {
|
||||
bodyItem.dataset.pageSize = target.dataset.page;
|
||||
});
|
||||
}
|
||||
avRender(blockElement, protyle);
|
||||
} else {
|
||||
transaction(protyle, [{
|
||||
|
|
|
|||
|
|
@ -721,17 +721,17 @@ func renderSnapshotAttributeView(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
var views []map[string]interface{}
|
||||
var views []*av.ViewData
|
||||
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)
|
||||
views = append(views, &av.ViewData{
|
||||
ID: v.ID,
|
||||
Icon: v.Icon,
|
||||
Name: v.Name,
|
||||
Desc: v.Desc,
|
||||
HideAttrViewName: v.HideAttrViewName,
|
||||
Type: v.LayoutType,
|
||||
PageSize: v.PageSize,
|
||||
})
|
||||
}
|
||||
|
||||
ret.Data = map[string]interface{}{
|
||||
|
|
@ -797,17 +797,17 @@ func renderHistoryAttributeView(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
var views []map[string]interface{}
|
||||
var views []*av.ViewData
|
||||
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)
|
||||
views = append(views, &av.ViewData{
|
||||
ID: v.ID,
|
||||
Icon: v.Icon,
|
||||
Name: v.Name,
|
||||
Desc: v.Desc,
|
||||
HideAttrViewName: v.HideAttrViewName,
|
||||
Type: v.LayoutType,
|
||||
PageSize: v.PageSize,
|
||||
})
|
||||
}
|
||||
|
||||
ret.Data = map[string]interface{}{
|
||||
|
|
@ -883,19 +883,17 @@ func renderAttrView(blockID, avID, viewID, query string, page, pageSize int, gro
|
|||
return
|
||||
}
|
||||
|
||||
var views []map[string]interface{}
|
||||
var views []*av.ViewData
|
||||
for _, v := range attrView.Views {
|
||||
view := map[string]interface{}{
|
||||
"id": v.ID,
|
||||
"icon": v.Icon,
|
||||
"name": v.Name,
|
||||
"desc": v.Desc,
|
||||
"hideAttrViewName": v.HideAttrViewName,
|
||||
"type": v.LayoutType,
|
||||
"pageSize": v.PageSize,
|
||||
}
|
||||
|
||||
views = append(views, view)
|
||||
views = append(views, &av.ViewData{
|
||||
ID: v.ID,
|
||||
Icon: v.Icon,
|
||||
Name: v.Name,
|
||||
Desc: v.Desc,
|
||||
HideAttrViewName: v.HideAttrViewName,
|
||||
Type: v.LayoutType,
|
||||
PageSize: v.PageSize,
|
||||
})
|
||||
}
|
||||
|
||||
ret.Data = map[string]interface{}{
|
||||
|
|
|
|||
|
|
@ -238,6 +238,17 @@ type View struct {
|
|||
GroupSort int `json:"groupSort"` // 分组排序值,用于手动排序
|
||||
}
|
||||
|
||||
// ViewData 用于序列化视图数据到前端
|
||||
type ViewData struct {
|
||||
ID string `json:"id"`
|
||||
Icon string `json:"icon"`
|
||||
Name string `json:"name"`
|
||||
Desc string `json:"desc"`
|
||||
HideAttrViewName bool `json:"hideAttrViewName"`
|
||||
Type LayoutType `json:"type"`
|
||||
PageSize int `json:"pageSize"`
|
||||
}
|
||||
|
||||
func (view *View) IsGroupView() bool {
|
||||
return nil != view.Group && "" != view.Group.Field
|
||||
}
|
||||
|
|
@ -587,22 +598,24 @@ func SaveAttributeView(av *AttributeView) (err error) {
|
|||
|
||||
// 值去重
|
||||
blockValues := av.GetBlockKeyValues()
|
||||
blockIDs := map[string]bool{}
|
||||
var duplicatedValueIDs []string
|
||||
for _, blockValue := range blockValues.Values {
|
||||
if !blockIDs[blockValue.BlockID] {
|
||||
blockIDs[blockValue.BlockID] = true
|
||||
} else {
|
||||
duplicatedValueIDs = append(duplicatedValueIDs, blockValue.ID)
|
||||
if nil != blockValues {
|
||||
blockIDs := map[string]bool{}
|
||||
var duplicatedValueIDs []string
|
||||
for _, blockValue := range blockValues.Values {
|
||||
if !blockIDs[blockValue.BlockID] {
|
||||
blockIDs[blockValue.BlockID] = true
|
||||
} else {
|
||||
duplicatedValueIDs = append(duplicatedValueIDs, blockValue.ID)
|
||||
}
|
||||
}
|
||||
}
|
||||
var tmp []*Value
|
||||
for _, blockValue := range blockValues.Values {
|
||||
if !gulu.Str.Contains(blockValue.ID, duplicatedValueIDs) {
|
||||
tmp = append(tmp, blockValue)
|
||||
var tmp []*Value
|
||||
for _, blockValue := range blockValues.Values {
|
||||
if !gulu.Str.Contains(blockValue.ID, duplicatedValueIDs) {
|
||||
tmp = append(tmp, blockValue)
|
||||
}
|
||||
}
|
||||
blockValues.Values = tmp
|
||||
}
|
||||
blockValues.Values = tmp
|
||||
|
||||
// 视图值去重
|
||||
for _, view := range av.Views {
|
||||
|
|
|
|||
|
|
@ -104,8 +104,14 @@ func renderAttributeViewGroups(viewable av.Viewable, attrView *av.AttributeView,
|
|||
preferredGroupKey := getKanbanPreferredGroupKey(attrView)
|
||||
group := &av.ViewGroup{Field: preferredGroupKey.ID}
|
||||
setAttributeViewGroup(attrView, view, group)
|
||||
av.SaveAttributeView(attrView)
|
||||
if err = av.SaveAttributeView(attrView); err != nil {
|
||||
logging.LogErrorf("save attribute view [%s] failed: %s", attrView.ID, err)
|
||||
return
|
||||
}
|
||||
groupKey = view.GetGroupKey(attrView)
|
||||
if nil == groupKey {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
return
|
||||
}
|
||||
|
|
@ -116,20 +122,29 @@ func renderAttributeViewGroups(viewable av.Viewable, attrView *av.AttributeView,
|
|||
createdDate := time.UnixMilli(view.GroupCreated).Format("2006-01-02")
|
||||
if time.Now().Format("2006-01-02") != createdDate {
|
||||
genAttrViewGroups(view, attrView) // 仅重新生成一个视图的分组以提升性能
|
||||
av.SaveAttributeView(attrView)
|
||||
if err = av.SaveAttributeView(attrView); err != nil {
|
||||
logging.LogErrorf("save attribute view [%s] failed: %s", attrView.ID, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 如果是按模板分组则需要重新生成分组
|
||||
if isGroupByTemplate(attrView, view) {
|
||||
genAttrViewGroups(view, attrView) // 仅重新生成一个视图的分组以提升性能
|
||||
av.SaveAttributeView(attrView)
|
||||
if err = av.SaveAttributeView(attrView); err != nil {
|
||||
logging.LogErrorf("save attribute view [%s] failed: %s", attrView.ID, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 渲染分组视图
|
||||
if nil == view.Groups {
|
||||
genAttrViewGroups(view, attrView)
|
||||
av.SaveAttributeView(attrView)
|
||||
if err = av.SaveAttributeView(attrView); err != nil {
|
||||
logging.LogErrorf("save attribute view [%s] failed: %s", attrView.ID, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
for _, groupView := range view.Groups {
|
||||
|
|
@ -510,10 +525,13 @@ func RenderRepoSnapshotAttributeView(indexID, avID string) (viewable av.Viewable
|
|||
}
|
||||
|
||||
attrView = av.NewAttributeView(avID)
|
||||
err = av.ErrAttributeViewNotFound
|
||||
return
|
||||
} else {
|
||||
data, readErr := repo.OpenFile(avFile)
|
||||
if nil != readErr {
|
||||
logging.LogErrorf("read attribute view [%s] failed: %s", avID, readErr)
|
||||
err = readErr
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -537,6 +555,7 @@ func RenderHistoryAttributeView(blockID, avID, viewID, query string, page, pageS
|
|||
createdUnix, parseErr := strconv.ParseInt(created, 10, 64)
|
||||
if nil != parseErr {
|
||||
logging.LogErrorf("parse created [%s] failed: %s", created, parseErr)
|
||||
err = fmt.Errorf("parse created [%s] failed: %w", created, parseErr)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -548,6 +567,7 @@ func RenderHistoryAttributeView(blockID, avID, viewID, query string, page, pageS
|
|||
return
|
||||
}
|
||||
if 1 > len(matches) {
|
||||
err = av.ErrAttributeViewNotFound
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -565,10 +585,13 @@ func RenderHistoryAttributeView(blockID, avID, viewID, query string, page, pageS
|
|||
}
|
||||
|
||||
attrView = av.NewAttributeView(avID)
|
||||
err = av.ErrAttributeViewNotFound
|
||||
return
|
||||
} else {
|
||||
data, readErr := os.ReadFile(avJSONPath)
|
||||
if nil != readErr {
|
||||
logging.LogErrorf("read attribute view [%s] failed: %s", avID, readErr)
|
||||
err = readErr
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue