tpl/collections: Fix slice type handling in sort

The `sort` template func was producing a `[]page.Page` which did not work in `.Paginate`.

Fixes #6023
This commit is contained in:
Bjørn Erik Pedersen
2019-06-09 12:50:53 +02:00
parent 3e6cb2cb77
commit e8a716b23a
6 changed files with 72 additions and 23 deletions

View File

@@ -31,21 +31,23 @@ func (ns *Namespace) Sort(seq interface{}, args ...interface{}) (interface{}, er
return nil, errors.New("sequence must be provided")
}
seqv := reflect.ValueOf(seq)
seqv, isNil := indirect(seqv)
seqv, isNil := indirect(reflect.ValueOf(seq))
if isNil {
return nil, errors.New("can't iterate over a nil value")
}
var sliceType reflect.Type
switch seqv.Kind() {
case reflect.Array, reflect.Slice, reflect.Map:
// ok
case reflect.Array, reflect.Slice:
sliceType = seqv.Type()
case reflect.Map:
sliceType = reflect.SliceOf(seqv.Type().Elem())
default:
return nil, errors.New("can't sort " + reflect.ValueOf(seq).Type().String())
}
// Create a list of pairs that will be used to do the sort
p := pairList{SortAsc: true, SliceType: reflect.SliceOf(seqv.Type().Elem())}
p := pairList{SortAsc: true, SliceType: sliceType}
p.Pairs = make([]pair, seqv.Len())
var sortByField string