improve list views (#1191)

This commit is contained in:
Kevin Papst
2019-10-25 16:21:30 +02:00
committed by GitHub
parent 1114538f41
commit 949c59230f
6 changed files with 106 additions and 41 deletions

View File

@@ -69,9 +69,10 @@ class DatatableExtensions extends AbstractExtension
*
* @param string $dataTable
* @param string $column
* @param array $columns
* @return bool
*/
public function isColumnVisible(string $dataTable, string $column)
public function isColumnVisible(string $dataTable, string $column, array $columns)
{
// name handling is spread between here and datatables.html.twig (data_table_column_modal)
$cookie = $this->getVisibilityCookieName($dataTable);
@@ -86,13 +87,34 @@ class DatatableExtensions extends AbstractExtension
$values = $this->cookies[$cookie];
if (empty($values) || !is_array($values)) {
return true;
return $this->checkInColumDefinition($columns, $column);
}
if (isset($values[$column]) && $values[$column] === false) {
if (!isset($values[$column])) {
return $this->checkInColumDefinition($columns, $column);
}
if ($values[$column] === false) {
return false;
}
return true;
}
private function checkInColumDefinition(array $columns, string $column)
{
if (array_key_exists($column, $columns)) {
$tmp = $columns[$column];
if (is_array($tmp)) {
$tmp = $tmp['class'];
}
foreach (explode(' ', $tmp) as $class) {
if ($class === 'hidden') {
return false;
}
}
}
return true;
}
}

View File

@@ -18,65 +18,68 @@ final class IconExtension extends AbstractExtension
* @var string[]
*/
private static $icons = [
'about' => 'fas fa-info-circle',
'activity' => 'fas fa-tasks',
'admin' => 'fas fa-wrench',
'audit' => 'fas fa-history',
'avatar' => 'fas fa-user',
'back' => 'fas fa-long-arrow-alt-left',
'calendar' => 'far fa-calendar-alt',
'customer' => 'fas fa-user-tie',
'clock' => 'far fa-clock',
'configuration' => 'fas fa-cogs',
'copy' => 'far fa-copy',
'create' => 'far fa-plus-square',
'csv' => 'fas fa-table',
'customer' => 'fas fa-user-tie',
'dashboard' => 'fas fa-tachometer-alt',
'debug' => 'far fa-file-alt',
'delete' => 'far fa-trash-alt',
'doctor' => 'fas fa-medkit',
'download' => 'fas fa-download',
'duration' => 'far fa-hourglass',
'edit' => 'far fa-edit',
'export' => 'fas fa-file-export',
'filter' => 'fas fa-filter',
'help' => 'far fa-question-circle',
'home' => 'fas fa-home',
'invoice' => 'fas fa-file-invoice',
'list' => 'fas fa-list',
'logout' => 'fas fa-sign-out-alt',
'mail' => 'fas fa-envelope-open',
'mail-sent' => 'fas fa-paper-plane',
'manual' => 'fas fa-book',
'mobile' => 'fas fa-mobile',
'money' => 'far fa-money-bill-alt',
'ods' => 'fas fa-table',
'off' => 'fas fa-toggle-off',
'on' => 'fas fa-toggle-on',
'pdf' => 'fas fa-file-pdf',
'permissions' => 'fas fa-user-lock',
'phone' => 'fas fa-phone',
'plugin' => 'fas fa-plug',
'print' => 'fas fa-print',
'profile' => 'fas fa-user-edit',
'profile-stats' => 'far fa-chart-bar',
'project' => 'fas fa-briefcase',
'repeat' => 'fas fa-redo-alt',
'search' => 'fas fa-search',
'settings' => 'fas fa-cog',
'shop' => 'fas fa-shopping-cart',
'start' => 'fas fa-play-circle',
'start-small' => 'far fa-play-circle',
'stop' => 'fas fa-stop',
'stop-small' => 'far fa-stop-circle',
'timesheet' => 'fas fa-clock',
'trash' => 'far fa-trash-alt',
'success' => 'fas fa-check',
'tag' => 'fas fa-tags',
'team' => 'fas fa-users',
'timesheet' => 'fas fa-clock',
'timesheet-team' => 'fas fa-user-clock',
'trash' => 'far fa-trash-alt',
'unlocked' => 'fas fa-unlock-alt',
'user' => 'fas fa-user-friends',
'visibility' => 'far fa-eye',
'settings' => 'fas fa-cog',
'export' => 'fas fa-file-export',
'pdf' => 'fas fa-file-pdf',
'csv' => 'fas fa-table',
'ods' => 'fas fa-table',
'xlsx' => 'fas fa-file-excel',
'on' => 'fas fa-toggle-on',
'off' => 'fas fa-toggle-off',
'audit' => 'fas fa-history',
'home' => 'fas fa-home',
'shop' => 'fas fa-shopping-cart',
'about' => 'fas fa-info-circle',
'debug' => 'far fa-file-alt',
'profile-stats' => 'far fa-chart-bar',
'profile' => 'fas fa-user-edit',
'warning' => 'fas fa-exclamation-triangle',
'permissions' => 'fas fa-user-lock',
'unlocked' => 'fas fa-unlock-alt',
'back' => 'fas fa-long-arrow-alt-left',
'tag' => 'fas fa-tags',
'avatar' => 'fas fa-user',
'timesheet-team' => 'fas fa-user-clock',
'plugin' => 'fas fa-plug',
'configuration' => 'fas fa-cogs',
'mail-sent' => 'fas fa-paper-plane',
'mail' => 'fas fa-envelope-open',
'doctor' => 'fas fa-medkit',
'success' => 'fas fa-check',
'xlsx' => 'fas fa-file-excel',
];
/**

View File

@@ -8,7 +8,7 @@
'name': 'alwaysVisible',
'customer': 'hidden-xs',
'project': 'hidden-xs',
'comment': 'hidden-xs',
'comment': 'hidden-xs hidden-sm',
} %}
{% for field in metaColumns %}
{% set columns = columns|merge({
@@ -16,7 +16,7 @@
}) %}
{% endfor %}
{% set columns = columns|merge({
'visible': {'class': '', 'orderBy': false},
'visible': {'class': 'text-center', 'orderBy': false},
'actions': 'actions alwaysVisible',
}) %}

View File

@@ -16,8 +16,12 @@
}) %}
{% endfor %}
{% set columns = columns|merge({
'team': {'class': '', 'orderBy': false},
'visible': {'class': 'hidden-xs', 'orderBy': false},
'email': {'class': 'text-center hidden hidden-xs', 'orderBy': false},
'homepage': {'class': 'text-center hidden hidden-xs', 'orderBy': false},
'mobile': {'class': 'text-center hidden hidden-xs', 'orderBy': false},
'phone': {'class': 'text-center hidden hidden-xs', 'orderBy': false},
'team': {'class': 'text-center', 'orderBy': false},
'visible': {'class': 'text-center', 'orderBy': false},
'actions': 'actions alwaysVisible',
}) %}
@@ -49,6 +53,34 @@
{{ tables.datatable_meta_column(entry, field) }}
</td>
{% endfor %}
<td class="{{ tables.data_table_column_class(tableName, columns, 'email') }}">
{% if entry.email is not empty %}
<a href="mailto:{{ entry.email }}"><i class="{{ 'mail'|icon }}"></i></a>
{% else %}
&ndash;
{% endif %}
</td>
<td class="{{ tables.data_table_column_class(tableName, columns, 'homepage') }}">
{% if entry.homepage is not empty %}
<a href="{{ entry.homepage }}" target="_blank"><i class="{{ 'home'|icon }}"></i></a>
{% else %}
&ndash;
{% endif %}
</td>
<td class="{{ tables.data_table_column_class(tableName, columns, 'mobile') }}">
{% if entry.mobile is not empty %}
<a href="tel:{{ entry.mobile }}"><i class="{{ 'mobile'|icon }}"></i></a>
{% else %}
&ndash;
{% endif %}
</td>
<td class="{{ tables.data_table_column_class(tableName, columns, 'phone') }}">
{% if entry.phone is not empty %}
<a href="tel:{{ entry.phone }}"><i class="{{ 'phone'|icon }}"></i></a>
{% else %}
&ndash;
{% endif %}
</td>
<td class="{{ tables.data_table_column_class(tableName, columns, 'team') }}">
{% if entry.teams|length > 0 %}
{{ widgets.badge_counter(entry.teams|length) }}

View File

@@ -20,7 +20,7 @@
{% endif %}
{% if 'alwaysVisible' not in headerOptions.class %}
<div class="form-group">
<input type="checkbox" id="column_{{ title }}" name="{{ title }}"{% if is_visible_column(name, title) %} checked="checked"{% endif %}>
<input type="checkbox" id="column_{{ title }}" name="{{ title }}"{% if is_visible_column(name, title, columns) %} checked="checked"{% endif %}>
<label class="control-label" for="column_{{ title }}">{{ headerTitle }}</label>
</div>
{% endif %}
@@ -105,15 +105,17 @@
{% endif %}
{% endfor %}
{% else %}
{% if not is_visible_column(name, column) %}
{% if not is_visible_column(name, column, columns) %}
{% set classes = classes ~ ' hidden' %}
{% elseif not is_datatable_configured(name) %}
{# needs to be a foreach, as classes like "hidden-xs" would match in: if 'hidden' in classes #}
{% for tmp in classes|split(' ') %}
{% if 'hidden' == tmp %}
{% set classes = classes|replace({(tmp): ''}) %}
{% endif %}
{% endfor %}
{% else %}
{# needs to be a foreach, as classes like "hidden-xs" would match in: if 'hidden' in classes #}
{% for tmp in classes|split(' ') %}
{% if 'hidden' in tmp %}
{% set classes = classes|replace({(tmp): ''}) %}

View File

@@ -9,6 +9,7 @@
'customer': 'hidden-xs',
'comment': 'hidden-xs hidden-sm',
'orderNumber': 'hidden-xs hidden-sm',
'orderDate': 'hidden-xs hidden-sm',
} %}
{% for field in metaColumns %}
{% set columns = columns|merge({
@@ -16,8 +17,8 @@
}) %}
{% endfor %}
{% set columns = columns|merge({
'team': {'class': '', 'orderBy': false},
'visible': {'class': '', 'orderBy': false},
'team': {'class': 'text-center', 'orderBy': false},
'visible': {'class': 'text-center', 'orderBy': false},
'actions': 'actions alwaysVisible',
}) %}
@@ -46,6 +47,11 @@
</td>
<td class="{{ tables.data_table_column_class(tableName, columns, 'comment') }}">{{ entry.comment|comment2html }}</td>
<td class="{{ tables.data_table_column_class(tableName, columns, 'orderNumber') }}">{{ entry.orderNumber }}</td>
<td class="{{ tables.data_table_column_class(tableName, columns, 'orderDate') }}">
{% if entry.orderDate is not empty %}
{{ entry.orderDate|date_short }}
{% endif %}
</td>
{% for field in metaColumns %}
<td class="text-nowrap {{ tables.data_table_column_class(tableName, columns, 'mf_' ~ field.name) }}">
{{ tables.datatable_meta_column(entry, field) }}