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

View file

@ -476,36 +476,6 @@ class CustomerView(MasterView):
items.append(HTML.tag('li', c=[link]))
return HTML.tag('ul', c=items)
# TODO: remove if no longer used
def render_people_removable(self, customer, field):
people = customer.people
if not people:
return ""
route_prefix = self.get_route_prefix()
permission_prefix = self.get_permission_prefix()
view_url = lambda p, i: self.request.route_url('people.view', uuid=p.uuid)
actions = [
grids.GridAction('view', icon='zoomin', url=view_url),
]
if self.people_detachable and self.request.has_perm('{}.detach_person'.format(permission_prefix)):
url = lambda p, i: self.request.route_url('{}.detach_person'.format(route_prefix),
uuid=customer.uuid, person_uuid=p.uuid)
actions.append(
grids.GridAction('detach', icon='trash', url=url))
columns = ['first_name', 'last_name', 'display_name']
g = grids.Grid(
key='{}.people'.format(route_prefix),
data=customer.people,
columns=columns,
labels={'display_name': "Full Name"},
url=lambda p: self.request.route_url('people.view', uuid=p.uuid),
linked_columns=columns,
main_actions=actions)
return HTML.literal(g.render_grid())
def render_shoppers(self, customer, field):
route_prefix = self.get_route_prefix()
permission_prefix = self.get_permission_prefix()

View file

@ -340,11 +340,9 @@ class MasterView(View):
if grid.pageable and hasattr(grid, 'pager'):
self.first_visible_grid_index = grid.pager.first_item
# return grid only, if partial page was requested
# return grid data only, if partial page was requested
if self.request.params.get('partial'):
# render grid data only, as JSON
return render_to_response('json', grid.get_buefy_data(),
request=self.request)
return self.json_response(grid.get_buefy_data())
context = {
'grid': grid,
@ -1156,8 +1154,7 @@ class MasterView(View):
# return grid only, if partial page was requested
if self.request.params.get('partial'):
# render grid data only, as JSON
return render_to_response('json', grid.get_buefy_data(),
request=self.request)
return self.json_response(grid.get_buefy_data())
context = {
'instance': instance,
@ -1284,8 +1281,7 @@ class MasterView(View):
# return grid only, if partial page was requested
if self.request.params.get('partial'):
# render grid data only, as JSON
return render_to_response('json', grid.get_buefy_data(),
request=self.request)
return self.json_response(grid.get_buefy_data())
return self.render_to_response('versions', {
'instance': instance,

View file

@ -461,7 +461,8 @@ class MemberEquityPaymentView(MasterView):
g.set_renderer(field, self.render_member_key)
g.set_filter(field, attr,
label=self.get_member_key_label(),
default_active=True)
default_active=True,
default_verb='equal')
g.set_sorter(field, attr)
# member (name)