Add back-end support for multi-column grid sorting

or very nearly, anyway.  front-end still just supports 1 column yet
This commit is contained in:
Lance Edgar 2023-10-08 14:29:01 -05:00
parent 4beca7af20
commit 6d7754cf2a
9 changed files with 222 additions and 202 deletions
tailbone/templates/grids

View file

@ -202,7 +202,7 @@
% endif
% if grid.sortable:
:default-sort="[sortField, sortOrder]"
:default-sort="sortingPriority[0]"
backend-sorting
@sort="onSort"
% endif
@ -352,8 +352,9 @@
firstItem: ${json.dumps(grid_data['first_item'] if grid.pageable else None)|n},
lastItem: ${json.dumps(grid_data['last_item'] if grid.pageable else None)|n},
sortField: ${json.dumps(grid.sortkey if grid.sortable else None)|n},
sortOrder: ${json.dumps(grid.sortdir if grid.sortable else None)|n},
% if grid.sortable:
sortingPriority: ${json.dumps(grid.active_sorters)|n},
% endif
## filterable: ${json.dumps(grid.filterable)|n},
filters: ${json.dumps(filters_data if grid.filterable else None)|n},
@ -454,8 +455,10 @@
getBasicParams() {
let params = {}
% if grid.sortable:
params.sortkey = this.sortField
params.sortdir = this.sortOrder
for (let i = 1; i <= this.sortingPriority.length; i++) {
params['sort'+i+'key'] = this.sortingPriority[i-1][0]
params['sort'+i+'dir'] = this.sortingPriority[i-1][1]
}
% endif
% if grid.pageable:
params.pagesize = this.perPage
@ -535,8 +538,7 @@
},
onSort(field, order) {
this.sortField = field
this.sortOrder = order
this.sortingPriority = [[field, order]]
// always reset to first page when changing sort options
// TODO: i mean..right? would we ever not want that?
this.currentPage = 1