fix: add hidden flag for grid columns
sometimes a column is rendered such that its data cannot be used for other component logic. in which case, can add a hidden column to pass the raw data, for component use
This commit is contained in:
parent
fb1b466072
commit
80aae74907
|
@ -156,6 +156,15 @@ class Grid:
|
||||||
|
|
||||||
See also :meth:`set_link()` and :meth:`is_linked()`.
|
See also :meth:`set_link()` and :meth:`is_linked()`.
|
||||||
|
|
||||||
|
.. attribute:: hidden_columns
|
||||||
|
|
||||||
|
List of column names which should be hidden from view.
|
||||||
|
|
||||||
|
Hidden columns are sometimes useful to pass "extra" data into
|
||||||
|
the grid, for use by other component logic etc.
|
||||||
|
|
||||||
|
See also :meth:`set_hidden()` and :meth:`is_hidden()`.
|
||||||
|
|
||||||
.. attribute:: sortable
|
.. attribute:: sortable
|
||||||
|
|
||||||
Boolean indicating whether *any* column sorting is allowed for
|
Boolean indicating whether *any* column sorting is allowed for
|
||||||
|
@ -372,6 +381,7 @@ class Grid:
|
||||||
row_class=None,
|
row_class=None,
|
||||||
actions=[],
|
actions=[],
|
||||||
linked_columns=[],
|
linked_columns=[],
|
||||||
|
hidden_columns=[],
|
||||||
sortable=False,
|
sortable=False,
|
||||||
sort_multiple=True,
|
sort_multiple=True,
|
||||||
sort_on_backend=True,
|
sort_on_backend=True,
|
||||||
|
@ -399,6 +409,7 @@ class Grid:
|
||||||
self.row_class = row_class
|
self.row_class = row_class
|
||||||
self.actions = actions or []
|
self.actions = actions or []
|
||||||
self.linked_columns = linked_columns or []
|
self.linked_columns = linked_columns or []
|
||||||
|
self.hidden_columns = hidden_columns or []
|
||||||
self.joiners = joiners or {}
|
self.joiners = joiners or {}
|
||||||
|
|
||||||
self.config = self.request.wutta_config
|
self.config = self.request.wutta_config
|
||||||
|
@ -535,6 +546,43 @@ class Grid:
|
||||||
if key in self.columns:
|
if key in self.columns:
|
||||||
self.columns.remove(key)
|
self.columns.remove(key)
|
||||||
|
|
||||||
|
def set_hidden(self, key, hidden=True):
|
||||||
|
"""
|
||||||
|
Set/override the hidden flag for a column.
|
||||||
|
|
||||||
|
Hidden columns are sometimes useful to pass "extra" data into
|
||||||
|
the grid, for use by other component logic etc.
|
||||||
|
|
||||||
|
See also :meth:`is_hidden()`; the list is tracked via
|
||||||
|
:attr:`hidden_columns`.
|
||||||
|
|
||||||
|
:param key: Column key as string.
|
||||||
|
|
||||||
|
:param hidden: Flag indicating whether column should be hidden
|
||||||
|
(vs. shown).
|
||||||
|
"""
|
||||||
|
if hidden:
|
||||||
|
if key not in self.hidden_columns:
|
||||||
|
self.hidden_columns.append(key)
|
||||||
|
else: # un-hide
|
||||||
|
if self.hidden_columns and key in self.hidden_columns:
|
||||||
|
self.hidden_columns.remove(key)
|
||||||
|
|
||||||
|
def is_hidden(self, key):
|
||||||
|
"""
|
||||||
|
Returns boolean indicating if the column is hidden from view.
|
||||||
|
|
||||||
|
See also :meth:`set_hidden()` and :attr:`hidden_columns`.
|
||||||
|
|
||||||
|
:param key: Column key as string.
|
||||||
|
|
||||||
|
:rtype: bool
|
||||||
|
"""
|
||||||
|
if self.hidden_columns:
|
||||||
|
if key in self.hidden_columns:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def set_label(self, key, label, column_only=False):
|
def set_label(self, key, label, column_only=False):
|
||||||
"""
|
"""
|
||||||
Set/override the label for a column.
|
Set/override the label for a column.
|
||||||
|
@ -2090,6 +2138,7 @@ class Grid:
|
||||||
columns.append({
|
columns.append({
|
||||||
'field': name,
|
'field': name,
|
||||||
'label': self.get_label(name),
|
'label': self.get_label(name),
|
||||||
|
'hidden': self.is_hidden(name),
|
||||||
'sortable': self.is_sortable(name),
|
'sortable': self.is_sortable(name),
|
||||||
'searchable': self.is_searchable(name),
|
'searchable': self.is_searchable(name),
|
||||||
})
|
})
|
||||||
|
|
|
@ -165,6 +165,7 @@
|
||||||
>
|
>
|
||||||
|
|
||||||
% for column in grid.get_vue_columns():
|
% for column in grid.get_vue_columns():
|
||||||
|
% if not column['hidden']:
|
||||||
<${b}-table-column field="${column['field']}"
|
<${b}-table-column field="${column['field']}"
|
||||||
label="${column['label']}"
|
label="${column['label']}"
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
|
@ -178,6 +179,7 @@
|
||||||
<span v-html="props.row.${column['field']}"></span>
|
<span v-html="props.row.${column['field']}"></span>
|
||||||
% endif
|
% endif
|
||||||
</${b}-table-column>
|
</${b}-table-column>
|
||||||
|
% endif
|
||||||
% endfor
|
% endfor
|
||||||
|
|
||||||
% if grid.actions:
|
% if grid.actions:
|
||||||
|
|
|
@ -281,6 +281,26 @@ class TestGrid(WebTestCase):
|
||||||
self.assertFalse(grid.is_linked('foo'))
|
self.assertFalse(grid.is_linked('foo'))
|
||||||
self.assertTrue(grid.is_linked('bar'))
|
self.assertTrue(grid.is_linked('bar'))
|
||||||
|
|
||||||
|
def test_hidden_columns(self):
|
||||||
|
grid = self.make_grid(columns=['foo', 'bar'])
|
||||||
|
self.assertEqual(grid.hidden_columns, [])
|
||||||
|
self.assertFalse(grid.is_hidden('foo'))
|
||||||
|
|
||||||
|
grid.set_hidden('foo')
|
||||||
|
self.assertEqual(grid.hidden_columns, ['foo'])
|
||||||
|
self.assertTrue(grid.is_hidden('foo'))
|
||||||
|
self.assertFalse(grid.is_hidden('bar'))
|
||||||
|
|
||||||
|
grid.set_hidden('bar')
|
||||||
|
self.assertEqual(grid.hidden_columns, ['foo', 'bar'])
|
||||||
|
self.assertTrue(grid.is_hidden('foo'))
|
||||||
|
self.assertTrue(grid.is_hidden('bar'))
|
||||||
|
|
||||||
|
grid.set_hidden('foo', False)
|
||||||
|
self.assertEqual(grid.hidden_columns, ['bar'])
|
||||||
|
self.assertFalse(grid.is_hidden('foo'))
|
||||||
|
self.assertTrue(grid.is_hidden('bar'))
|
||||||
|
|
||||||
def test_searchable_columns(self):
|
def test_searchable_columns(self):
|
||||||
grid = self.make_grid(columns=['foo', 'bar'])
|
grid = self.make_grid(columns=['foo', 'bar'])
|
||||||
self.assertEqual(grid.searchable_columns, set())
|
self.assertEqual(grid.searchable_columns, set())
|
||||||
|
|
Loading…
Reference in a new issue