feat: add per-row css class support for grids
This commit is contained in:
parent
f6fb6957e3
commit
e332975ce9
11 changed files with 253 additions and 75 deletions
|
@ -1286,10 +1286,10 @@ class TestGrid(WebTestCase):
|
|||
|
||||
# form will register grid data
|
||||
form = Form(self.request)
|
||||
self.assertEqual(len(form.grid_vue_data), 0)
|
||||
self.assertEqual(len(form.grid_vue_context), 0)
|
||||
html = grid.render_table_element(form)
|
||||
self.assertEqual(len(form.grid_vue_data), 1)
|
||||
self.assertIn('foobar', form.grid_vue_data)
|
||||
self.assertEqual(len(form.grid_vue_context), 1)
|
||||
self.assertIn('foobar', form.grid_vue_context)
|
||||
|
||||
def test_render_vue_finalize(self):
|
||||
grid = self.make_grid()
|
||||
|
@ -1337,6 +1337,40 @@ class TestGrid(WebTestCase):
|
|||
filters = grid.get_vue_filters()
|
||||
self.assertEqual(len(filters), 2)
|
||||
|
||||
def test_get_vue_context(self):
|
||||
|
||||
# empty if no columns defined
|
||||
grid = self.make_grid()
|
||||
context = grid.get_vue_context()
|
||||
self.assertEqual(context, {'data': [], 'row_classes': {}})
|
||||
|
||||
# typical data is a list
|
||||
mydata = [
|
||||
{'foo': 'bar'},
|
||||
]
|
||||
grid = self.make_grid(columns=['foo'], data=mydata)
|
||||
context = grid.get_vue_context()
|
||||
self.assertEqual(context, {'data': [{'foo': 'bar'}], 'row_classes': {}})
|
||||
|
||||
# if grid has actions, that list may be supplemented
|
||||
grid.actions.append(mod.GridAction(self.request, 'view', url='/blarg'))
|
||||
context = grid.get_vue_context()
|
||||
self.assertIsNot(context['data'], mydata)
|
||||
self.assertEqual(context, {'data': [{'foo': 'bar', '_action_url_view': '/blarg'}],
|
||||
'row_classes': {}})
|
||||
|
||||
# can override value rendering
|
||||
grid.set_renderer('foo', lambda record, key, value: "blah blah")
|
||||
context = grid.get_vue_context()
|
||||
self.assertEqual(context, {'data': [{'foo': 'blah blah', '_action_url_view': '/blarg'}],
|
||||
'row_classes': {}})
|
||||
|
||||
# can set row class
|
||||
grid.row_class = 'whatever'
|
||||
context = grid.get_vue_context()
|
||||
self.assertEqual(context, {'data': [{'foo': 'blah blah', '_action_url_view': '/blarg'}],
|
||||
'row_classes': {'0': 'whatever'}})
|
||||
|
||||
def test_get_vue_data(self):
|
||||
|
||||
# empty if no columns defined
|
||||
|
@ -1358,11 +1392,35 @@ class TestGrid(WebTestCase):
|
|||
self.assertIsNot(data, mydata)
|
||||
self.assertEqual(data, [{'foo': 'bar', '_action_url_view': '/blarg'}])
|
||||
|
||||
# also can override value rendering
|
||||
# can override value rendering
|
||||
grid.set_renderer('foo', lambda record, key, value: "blah blah")
|
||||
data = grid.get_vue_data()
|
||||
self.assertEqual(data, [{'foo': 'blah blah', '_action_url_view': '/blarg'}])
|
||||
|
||||
def test_get_row_class(self):
|
||||
model = self.app.model
|
||||
user = model.User(username='barney', active=True)
|
||||
self.session.add(user)
|
||||
self.session.commit()
|
||||
data = dict(user)
|
||||
|
||||
# null by default
|
||||
grid = self.make_grid()
|
||||
self.assertIsNone(grid.get_row_class(user, data, 1))
|
||||
|
||||
# can use static class
|
||||
grid.row_class = 'foo'
|
||||
self.assertEqual(grid.get_row_class(user, data, 1), 'foo')
|
||||
|
||||
# can use callable
|
||||
def status(u, d, i):
|
||||
if not u.active:
|
||||
return 'inactive'
|
||||
grid.row_class = status
|
||||
self.assertIsNone(grid.get_row_class(user, data, 1))
|
||||
user.active = False
|
||||
self.assertEqual(grid.get_row_class(user, data, 1), 'inactive')
|
||||
|
||||
def test_get_vue_pager_stats(self):
|
||||
data = [
|
||||
{'foo': 1, 'bar': 1},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue