fix: some fixes for wutta people view

This commit is contained in:
Lance Edgar 2024-08-22 19:21:48 -05:00
parent 4c3e3aeb6a
commit 29531c83c4
3 changed files with 41 additions and 12 deletions

View file

@ -24,9 +24,10 @@
Core Grid Classes Core Grid Classes
""" """
from urllib.parse import urlencode import inspect
import warnings
import logging import logging
import warnings
from urllib.parse import urlencode
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
@ -858,9 +859,13 @@ class Grid(WuttaGrid):
settings['page'] = self.page settings['page'] = self.page
if self.filterable: if self.filterable:
for filtr in self.iter_filters(): for filtr in self.iter_filters():
settings['filter.{}.active'.format(filtr.key)] = filtr.default_active defaults = self.filter_defaults.get(filtr.key, {})
settings['filter.{}.verb'.format(filtr.key)] = filtr.default_verb settings[f'filter.{filtr.key}.active'] = defaults.get('active',
settings['filter.{}.value'.format(filtr.key)] = filtr.default_value filtr.default_active)
settings[f'filter.{filtr.key}.verb'] = defaults.get('verb',
filtr.default_verb)
settings[f'filter.{filtr.key}.value'] = defaults.get('value',
filtr.default_value)
# If user has default settings on file, apply those first. # If user has default settings on file, apply those first.
if self.user_has_defaults(): if self.user_has_defaults():
@ -1239,7 +1244,7 @@ class Grid(WuttaGrid):
view = None view = None
for action in self.actions: for action in self.actions:
if action.key == 'view': if action.key == 'view':
return action.click_handler return getattr(action, 'click_handler', None)
def set_filters_sequence(self, filters, only=False): def set_filters_sequence(self, filters, only=False):
""" """
@ -1475,10 +1480,22 @@ class Grid(WuttaGrid):
# leverage configured rendering logic where applicable; # leverage configured rendering logic where applicable;
# otherwise use "raw" data value as string # otherwise use "raw" data value as string
if self.renderers and name in self.renderers:
value = self.renderers[name](rowobj, name)
else:
value = self.obtain_value(rowobj, name) value = self.obtain_value(rowobj, name)
if self.renderers and name in self.renderers:
renderer = self.renderers[name]
# TODO: legacy renderer callables require 2 args,
# but wuttaweb callables require 3 args
sig = inspect.signature(renderer)
required = [param for param in sig.parameters.values()
if param.default == param.empty]
if len(required) == 2:
# TODO: legacy renderer
value = renderer(rowobj, name)
else: # the future
value = renderer(rowobj, name, value)
if value is None: if value is None:
value = "" value = ""

View file

@ -612,7 +612,9 @@ class MasterView(View):
# delete action # delete action
if self.rows_deletable and self.has_perm('delete_row'): if self.rows_deletable and self.has_perm('delete_row'):
actions.append(self.make_action('delete', icon='trash', url=self.row_delete_action_url)) actions.append(self.make_action('delete', icon='trash',
url=self.row_delete_action_url,
link_class='has-text-danger'))
defaults['delete_speedbump'] = self.rows_deletable_speedbump defaults['delete_speedbump'] = self.rows_deletable_speedbump
defaults['actions'] = actions defaults['actions'] = actions
@ -3322,7 +3324,7 @@ class MasterView(View):
url=self.default_clone_url) url=self.default_clone_url)
def make_grid_action_delete(self): def make_grid_action_delete(self):
kwargs = {} kwargs = {'link_class': 'has-text-danger'}
if self.delete_confirm == 'simple': if self.delete_confirm == 'simple':
kwargs['click_handler'] = 'deleteObject' kwargs['click_handler'] = 'deleteObject'
return self.make_action('delete', icon='trash', url=self.default_delete_url, **kwargs) return self.make_action('delete', icon='trash', url=self.default_delete_url, **kwargs)

View file

@ -32,6 +32,7 @@ from wuttaweb.views import people as wutta
from tailbone.views import people as tailbone from tailbone.views import people as tailbone
from tailbone.db import Session from tailbone.db import Session
from rattail.db.model import Person from rattail.db.model import Person
from tailbone.grids import Grid
class PersonView(wutta.PersonView): class PersonView(wutta.PersonView):
@ -44,7 +45,6 @@ class PersonView(wutta.PersonView):
""" """
model_class = Person model_class = Person
Session = Session Session = Session
sort_defaults = 'display_name'
labels = { labels = {
'display_name': "Full Name", 'display_name': "Full Name",
@ -59,6 +59,11 @@ class PersonView(wutta.PersonView):
'merge_requested', 'merge_requested',
] ]
filter_defaults = {
'display_name': {'active': True, 'verb': 'contains'},
}
sort_defaults = 'display_name'
form_fields = [ form_fields = [
'first_name', 'first_name',
'middle_name', 'middle_name',
@ -74,6 +79,11 @@ class PersonView(wutta.PersonView):
# CRUD methods # CRUD methods
############################## ##############################
# TODO: must use older grid for now, to render filters correctly
def make_grid(self, **kwargs):
""" """
return Grid(self.request, **kwargs)
def configure_grid(self, g): def configure_grid(self, g):
""" """ """ """
super().configure_grid(g) super().configure_grid(g)