fix(filters): sorting tasks from filters

Resolves https://community.vikunja.io/t/filter-table-view-not-sorting/1416
This commit is contained in:
kolaente 2023-06-21 14:59:40 +02:00
parent 1dc9c50d64
commit 895263f054
Signed by untrusted user: konrad
GPG Key ID: F40E70337AB24C9B
2 changed files with 51 additions and 7 deletions

View File

@ -149,13 +149,21 @@ func (tf *TaskCollection) ReadAll(s *xorm.Session, a web.Auth, search string, pa
return nil, 0, 0, err
}
sf.Filters.SortByArr = append(sf.Filters.SortByArr, tf.SortByArr...)
sf.Filters.SortBy = append(sf.Filters.SortBy, tf.SortBy...)
if len(sf.Filters.OrderBy) > len(sf.Filters.SortBy) {
sf.Filters.OrderBy = sf.Filters.OrderBy[:len(sf.Filters.SortBy)]
}
sf.Filters.OrderBy = append(sf.Filters.OrderBy, tf.OrderBy...)
sf.Filters.OrderByArr = tf.OrderByArr
// By prepending sort options before the saved ones from the filter, we make sure the supplied sort
// options via query take precedence over the rest.
sortby := append(tf.SortBy, tf.SortByArr...)
sortby = append(sortby, sf.Filters.SortBy...)
sortby = append(sortby, sf.Filters.SortByArr...)
orderby := append(tf.OrderBy, tf.OrderByArr...)
orderby = append(orderby, sf.Filters.OrderBy...)
orderby = append(orderby, sf.Filters.OrderByArr...)
sf.Filters.SortBy = sortby
sf.Filters.SortByArr = nil
sf.Filters.OrderBy = orderby
sf.Filters.OrderByArr = nil
return sf.getTaskCollection().ReadAll(s, a, search, page, perPage)
}

View File

@ -1211,6 +1211,42 @@ func TestTaskCollection_ReadAll(t *testing.T) {
task5,
},
},
{
name: "saved filter with sort order asc",
fields: fields{
ProjectID: -2,
SortBy: []string{"title", "id"},
OrderBy: []string{"asc", "asc"},
},
args: args{
a: &user.User{ID: 1},
},
want: []*Task{
task5,
task6,
task7,
task8,
task9,
},
},
{
name: "saved filter with sort by due date",
fields: fields{
ProjectID: -2,
SortBy: []string{"due_date", "id"},
OrderBy: []string{"asc", "asc"},
},
args: args{
a: &user.User{ID: 1},
},
want: []*Task{
task6,
task5,
task7,
task8,
task9,
},
},
}
for _, tt := range tests {