🎨 Database select field supports sorting by option order Fix https://github.com/siyuan-note/siyuan/issues/10665

This commit is contained in:
Daniel 2024-03-21 10:03:08 +08:00
parent d522a74654
commit 30d95605df
No known key found for this signature in database
GPG Key ID: 86211BA83DF03017
4 changed files with 30 additions and 15 deletions

View File

@ -25,7 +25,7 @@ import (
) )
type Sortable interface { type Sortable interface {
SortRows() SortRows(attrView *AttributeView)
} }
type ViewSort struct { type ViewSort struct {
@ -40,7 +40,7 @@ const (
SortOrderDesc SortOrder = "DESC" SortOrderDesc SortOrder = "DESC"
) )
func (value *Value) Compare(other *Value) int { func (value *Value) Compare(other *Value, attrView *AttributeView) int {
switch value.Type { switch value.Type {
case KeyTypeBlock: case KeyTypeBlock:
if nil != value.Block && nil != other.Block { if nil != value.Block && nil != other.Block {
@ -112,14 +112,29 @@ func (value *Value) Compare(other *Value) int {
return 0 return 0
} }
case KeyTypeSelect, KeyTypeMSelect: case KeyTypeSelect, KeyTypeMSelect:
if nil != value.MSelect && nil != other.MSelect { if 0 < len(value.MSelect) && 0 < len(other.MSelect) {
var v1 string v1 := value.MSelect[0].Content
for _, v := range value.MSelect { v2 := other.MSelect[0].Content
v1 += v.Content if v1 == v2 {
return 0
} }
var v2 string
for _, v := range other.MSelect { key, _ := attrView.GetKey(value.KeyID)
v2 += v.Content if nil != key {
optionSort := map[string]int{}
for i, op := range key.Options {
optionSort[op.Name] = i
}
v1Sort := optionSort[v1]
v2Sort := optionSort[v2]
if v1Sort > v2Sort {
return 1
}
if v1Sort < v2Sort {
return -1
}
return 0
} }
return strings.Compare(v1, v2) return strings.Compare(v1, v2)
} }

View File

@ -153,7 +153,7 @@ func (table *Table) GetID() string {
return table.ID return table.ID
} }
func (table *Table) SortRows() { func (table *Table) SortRows(attrView *AttributeView) {
if 1 > len(table.Sorts) { if 1 > len(table.Sorts) {
return return
} }
@ -220,7 +220,7 @@ func (table *Table) SortRows() {
return colIndexSort.Order != SortOrderAsc return colIndexSort.Order != SortOrderAsc
} }
result := val1.Compare(val2) result := val1.Compare(val2, attrView)
if 0 == result { if 0 == result {
sorted = false sorted = false
continue continue

View File

@ -724,7 +724,7 @@ func renderAttributeView(attrView *av.AttributeView, viewID, query string, page,
} }
viewable.FilterRows(attrView) viewable.FilterRows(attrView)
viewable.SortRows() viewable.SortRows(attrView)
viewable.CalcCols() viewable.CalcCols()
// 分页 // 分页
@ -2010,7 +2010,7 @@ func addAttributeViewBlock(avID, blockID, previousBlockID, addingBlockID string,
if nil != view && 0 < len(view.Table.Filters) && !ignoreFillFilter { if nil != view && 0 < len(view.Table.Filters) && !ignoreFillFilter {
viewable, _ := renderAttributeViewTable(attrView, view, "") viewable, _ := renderAttributeViewTable(attrView, view, "")
viewable.FilterRows(attrView) viewable.FilterRows(attrView)
viewable.SortRows() viewable.SortRows(attrView)
var nearRow *av.TableRow var nearRow *av.TableRow
if 0 < len(viewable.Rows) { if 0 < len(viewable.Rows) {

View File

@ -87,7 +87,7 @@ func ExportAv2CSV(avID, blockID string) (zipPath string, err error) {
// 遵循视图过滤和排序规则 Use filtering and sorting of current view settings when exporting database blocks https://github.com/siyuan-note/siyuan/issues/10474 // 遵循视图过滤和排序规则 Use filtering and sorting of current view settings when exporting database blocks https://github.com/siyuan-note/siyuan/issues/10474
table.FilterRows(attrView) table.FilterRows(attrView)
table.SortRows() table.SortRows(attrView)
exportFolder := filepath.Join(util.TempDir, "export", "csv", name) exportFolder := filepath.Join(util.TempDir, "export", "csv", name)
if err = os.MkdirAll(exportFolder, 0755); nil != err { if err = os.MkdirAll(exportFolder, 0755); nil != err {
@ -2284,7 +2284,7 @@ func exportTree(tree *parse.Tree, wysiwyg, expandKaTexMacros, keepFold bool,
// 遵循视图过滤和排序规则 Use filtering and sorting of current view settings when exporting database blocks https://github.com/siyuan-note/siyuan/issues/10474 // 遵循视图过滤和排序规则 Use filtering and sorting of current view settings when exporting database blocks https://github.com/siyuan-note/siyuan/issues/10474
table.FilterRows(attrView) table.FilterRows(attrView)
table.SortRows() table.SortRows(attrView)
var aligns []int var aligns []int
for range table.Columns { for range table.Columns {