Columns
Every field you will define will automatically be converted to a Qore\System\Table\Column
when
a table is loaded. A column defines the way data should be shown in your table.
Usage
You can change the alignment for your column:
Text::make(__('First name'), 'first_name')
->setColumnAlignment('right')
You can define a width:
Text::make(__('Last name'), 'last_name')
->setColumnWidth(100) // OR: ->setColumnWidth('md')
Adding header styles:
Text::make(__('Last name'), 'last_name')
->setColumnHeaderStyle('color: green; font-weight: bold;')
Conditional styling
You can add specific styling to a table row or a column based on conditions.
For example, you may want to set the text color to green for a specific price:
Text::make(__('First name'), 'first_name')
->setColumnStyle(function(TableDataStyler $styler, Model $model) {
if ($model->first_name === 'Willem') {
$styler->setColumnStyle('font-weight: bold; background-color: yellow;');
}
if ($model->id == 494 || $model->id === 505) {
$styler->setRowStyle('background-color: lightgreen');
}
if ($model->id === 501) {
$styler->setRowClass('bg-red-2');
}
if ($model->id === 498) {
$styler->setRowClass('bg-green-2 text-bold');
}
if ($model->email === 'ayden53@yahoo.nl') {
$styler->setColumnClass('text-bold');
}
if ($model->id === 490) {
$styler->setRowClass('text-bold');
}
})
If you want to style a particular row regardless of whether a column/field is visible,
you can override the postProcessTableRow
method on your resource, or postProcessRow
on the Table class if you don't have a resource.
See also Table row styling for more information
Table totals
Fields like Number
and Price
will show totals for the current page, and for all the pages.
You can add your custom summaries for each field:
Text::make(__('Last name'), 'last_name')
->summarizeUsing(function (Builder $query) {
return [
[
'value' => $query->sum('id'),
'label' => __('My custom number'),
'formatter' => 'number'
],
[
'value' => $query->avg('id'),
'label' => __('My custom price'),
'formatter' => 'price'
],
[
'value' => $query->toSql(),
'label' => __('My custom text'),
'formatter' => 'text'
]
];
}, 'total_test')
The total_test
is the unique SELECT key used in the query. You should supply an unreserved identifier here.
At this time of writing, the selected formatters are number
, price
and text
You can disable totals by chaining this on your field/column:
->withoutSummary()