mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-05-04 07:02:03 +08:00
🎨 Database select field supports sorting by option order Fix https://github.com/siyuan-note/siyuan/issues/10665
This commit is contained in:
parent
d522a74654
commit
30d95605df
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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) {
|
||||||
|
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user