Add <b-table> element template for simple grids with "static" data

This commit is contained in:
Lance Edgar 2019-06-04 13:33:56 -05:00
parent e5472a6fae
commit 1c07508f39
2 changed files with 63 additions and 3 deletions

View file

@ -946,6 +946,18 @@ class Grid(object):
return self.render_complete(template=template, **kwargs)
def render_buefy_table_element(self, template='/grids/b-table.mako', data_prop='gridData', **kwargs):
"""
This is intended for ad-hoc "small" grids with static data. Renders
just a ``<b-table>`` element instead of the typical "full" grid.
"""
context = dict(kwargs)
context['grid'] = self
context['data_prop'] = data_prop
if 'grid_columns' not in context:
context['grid_columns'] = self.get_buefy_columns()
return render(template, context)
def get_filters_sequence(self):
"""
Returns a list of filter keys (strings) in the sequence with which they
@ -1133,9 +1145,11 @@ class Grid(object):
# set action URL(s) for row, as needed
self.set_action_urls(row, rowobj, i)
status = self.extra_row_class(rowobj, i)
if status:
status_map[i] = status
# set extra row class if applicable
if self.extra_row_class:
status = self.extra_row_class(rowobj, i)
if status:
status_map[i] = status
data.append(row)

View file

@ -0,0 +1,46 @@
## -*- coding: utf-8; -*-
<b-table
:data="${data_prop}"
icon-pack="fas"
striped
hoverable
narrowed>
<template slot-scope="props">
% for column in grid_columns:
<b-table-column field="${column['field']}" label="${column['label']}" ${'sortable' if column['sortable'] else ''}>
% if grid.is_linked(column['field']):
<a :href="props.row._action_url_view" v-html="props.row.${column['field']}"></a>
% else:
<span v-html="props.row.${column['field']}"></span>
% endif
</b-table-column>
% endfor
% if grid.main_actions or grid.more_actions:
<b-table-column field="actions" label="Actions">
% for action in grid.main_actions:
<a :href="props.row._action_url_${action.key}"><i class="fas fa-${action.icon}"></i>
${action.label}
</a>
% endfor
</b-table-column>
% endif
</template>
<template slot="empty">
<section class="section">
<div class="content has-text-grey has-text-centered">
<p>
<b-icon
pack="fas"
icon="fas fa-sad-tear"
size="is-large">
</b-icon>
</p>
<p>Nothing here.</p>
</div>
</section>
</template>
</b-table>