Allow grid columns to be *invisible* (but still present in grid)
this can be useful when you need contextual data for a given row, for sake of front-end UI features, but do not want to actually show the extra data column(s)
This commit is contained in:
parent
fe584f193f
commit
4d742bacb1
|
@ -69,7 +69,7 @@ class Grid(object):
|
||||||
|
|
||||||
def __init__(self, key, data, columns=None, width='auto', request=None,
|
def __init__(self, key, data, columns=None, width='auto', request=None,
|
||||||
model_class=None, model_title=None, model_title_plural=None,
|
model_class=None, model_title=None, model_title_plural=None,
|
||||||
enums={}, labels={}, assume_local_times=False, renderers={},
|
enums={}, labels={}, assume_local_times=False, renderers={}, invisible=[],
|
||||||
extra_row_class=None, linked_columns=[], url='#',
|
extra_row_class=None, linked_columns=[], url='#',
|
||||||
joiners={}, filterable=False, filters={}, use_byte_string_filters=False,
|
joiners={}, filterable=False, filters={}, use_byte_string_filters=False,
|
||||||
sortable=False, sorters={}, default_sortkey=None, default_sortdir='asc',
|
sortable=False, sorters={}, default_sortkey=None, default_sortdir='asc',
|
||||||
|
@ -105,6 +105,7 @@ class Grid(object):
|
||||||
self.labels = labels or {}
|
self.labels = labels or {}
|
||||||
self.assume_local_times = assume_local_times
|
self.assume_local_times = assume_local_times
|
||||||
self.renderers = self.make_default_renderers(renderers or {})
|
self.renderers = self.make_default_renderers(renderers or {})
|
||||||
|
self.invisible = invisible or []
|
||||||
self.extra_row_class = extra_row_class
|
self.extra_row_class = extra_row_class
|
||||||
self.linked_columns = linked_columns or []
|
self.linked_columns = linked_columns or []
|
||||||
self.url = url
|
self.url = url
|
||||||
|
@ -161,13 +162,38 @@ class Grid(object):
|
||||||
return [prop.key for prop in mapper.iterate_properties]
|
return [prop.key for prop in mapper.iterate_properties]
|
||||||
|
|
||||||
def hide_column(self, key):
|
def hide_column(self, key):
|
||||||
|
"""
|
||||||
|
This *removes* a column from the grid, altogether.
|
||||||
|
|
||||||
|
This method should really be renamed to ``remove_column()``
|
||||||
|
instead.
|
||||||
|
"""
|
||||||
if key in self.columns:
|
if key in self.columns:
|
||||||
self.columns.remove(key)
|
self.columns.remove(key)
|
||||||
|
|
||||||
def hide_columns(self, *keys):
|
def hide_columns(self, *keys):
|
||||||
|
"""
|
||||||
|
This *removes* columns from the grid, altogether.
|
||||||
|
|
||||||
|
This method should really be renamed to ``remove_columns()``
|
||||||
|
instead.
|
||||||
|
"""
|
||||||
for key in keys:
|
for key in keys:
|
||||||
self.hide_column(key)
|
self.hide_column(key)
|
||||||
|
|
||||||
|
def set_invisible(self, key, invisible=True):
|
||||||
|
"""
|
||||||
|
Mark the given column as "invisible" (but do not remove it).
|
||||||
|
|
||||||
|
Use :meth:`hide_column()` if you actually want to remove it.
|
||||||
|
"""
|
||||||
|
if invisible:
|
||||||
|
if key not in self.invisible:
|
||||||
|
self.invisible.append(key)
|
||||||
|
else:
|
||||||
|
if key in self.invisible:
|
||||||
|
self.invisible.remove(key)
|
||||||
|
|
||||||
def append(self, field):
|
def append(self, field):
|
||||||
self.columns.append(field)
|
self.columns.append(field)
|
||||||
|
|
||||||
|
@ -1185,6 +1211,7 @@ class Grid(object):
|
||||||
'field': name,
|
'field': name,
|
||||||
'label': self.get_label(name),
|
'label': self.get_label(name),
|
||||||
'sortable': self.sortable and name in self.sorters,
|
'sortable': self.sortable and name in self.sorters,
|
||||||
|
'visible': name not in self.invisible,
|
||||||
})
|
})
|
||||||
return columns
|
return columns
|
||||||
|
|
||||||
|
|
|
@ -176,7 +176,10 @@
|
||||||
|
|
||||||
<template slot-scope="props">
|
<template slot-scope="props">
|
||||||
% for column in grid_columns:
|
% for column in grid_columns:
|
||||||
<b-table-column field="${column['field']}" label="${column['label']}" ${'sortable' if column['sortable'] else ''}>
|
<b-table-column field="${column['field']}"
|
||||||
|
label="${column['label']}"
|
||||||
|
:sortable="${json.dumps(column['sortable'])}"
|
||||||
|
:visible="${json.dumps(column['visible'])}">
|
||||||
% if grid.is_linked(column['field']):
|
% if grid.is_linked(column['field']):
|
||||||
<a :href="props.row._action_url_view" v-html="props.row.${column['field']}"></a>
|
<a :href="props.row._action_url_view" v-html="props.row.${column['field']}"></a>
|
||||||
% else:
|
% else:
|
||||||
|
|
Loading…
Reference in a new issue