new: [genericElement:group_table_action] Added support of `show # element` in the table

pull/121/head
Sami Mokaddem 2022-10-28 09:13:15 +02:00
parent 67eb9de05a
commit 03bd4aba30
No known key found for this signature in database
GPG Key ID: 164C473F627A06FA
3 changed files with 76 additions and 1 deletions

View File

@ -9,6 +9,7 @@ use Cake\Utility\Inflector;
use Cake\Utility\Text;
use Cake\View\ViewBuilder;
use Cake\ORM\TableRegistry;
use Cake\ORM\Query;
use Cake\Routing\Router;
use Cake\Http\Exception\MethodNotAllowedException;
use Cake\Http\Exception\NotFoundException;
@ -105,6 +106,7 @@ class CRUDComponent extends Component
if ($this->metaFieldsSupported()) {
$query = $this->includeRequestedMetaFields($query);
}
$query = $this->setRequestedEntryAmount($query);
$data = $this->Controller->paginate($query, $this->Controller->paginate ?? []);
if (isset($options['afterFind'])) {
$function = $options['afterFind'];
@ -707,6 +709,15 @@ class CRUDComponent extends Component
]);
}
protected function setRequestedEntryAmount()
{
$user = $this->Controller->ACL->getUser();
$tableSettings = IndexSetting::getTableSetting($user, $this->Table);
if (!empty($tableSettings['number_of_element'])) {
$this->Controller->paginate['limit'] = intval($tableSettings['number_of_element']);
}
}
public function view(int $id, array $params = []): void
{
if (empty($id)) {

View File

@ -8,6 +8,7 @@ if (empty($data['table_setting_id']) && empty($model)) {
$data['table_setting_id'] = !empty($data['table_setting_id']) ? $data['table_setting_id'] : IndexSetting::getIDFromTable($model);
$tableSettings = IndexSetting::getTableSetting($loggedUser, $data['table_setting_id']);
$compactDisplay = !empty($tableSettings['compact_display']);
$numberOfElement = $tableSettings['number_of_element'] ?? 20;
$availableColumnsHtml = $this->element('/genericElements/ListTopBar/group_table_action/hiddenColumns', [
'table_data' => $table_data,
@ -51,7 +52,13 @@ $compactDisplayHtml = $this->element('/genericElements/ListTopBar/group_table_ac
'table_data' => $table_data,
'tableSettings' => $tableSettings,
'table_setting_id' => $data['table_setting_id'],
'compactDisplay' => $compactDisplay
'compactDisplay' => $compactDisplay,
]);
$numberOfElementHtml = $this->element('/genericElements/ListTopBar/group_table_action/numberOfElement', [
'table_data' => $table_data,
'tableSettings' => $tableSettings,
'table_setting_id' => $data['table_setting_id'],
'numberOfElement' => $numberOfElement,
]);
?>
<?php if (!isset($data['requirement']) || $data['requirement']) : ?>
@ -63,6 +70,7 @@ $compactDisplayHtml = $this->element('/genericElements/ListTopBar/group_table_ac
'toggle-button' => [
'icon' => 'sliders-h',
'variant' => 'primary',
'class' => ['table_setting_dropdown_button'],
],
'submenu_alignment' => 'end',
'submenu_direction' => 'start',
@ -79,8 +87,22 @@ $compactDisplayHtml = $this->element('/genericElements/ListTopBar/group_table_ac
],
[
'html' => $compactDisplayHtml,
],
[
'html' => $numberOfElementHtml,
]
]
]);
?>
<?php endif; ?>
<script>
$(document).ready(function() {
const dropdownBtn = document.querySelector('button.table_setting_dropdown_button')
dropdownBtn.addEventListener('hidden.bs.dropdown', function() {
const $dropdownBtn = $(this)
const debouncedFunctions = $dropdownBtn.data('debouncedFunctions')
firePendingDebouncedFunctions(dropdownBtn)
})
})
</script>

View File

@ -0,0 +1,42 @@
<?php
$numberOfElementSelectSeed = 'seed-' . mt_rand();
?>
<label class="dropdown-item d-flex align-items-center cursor-pointer" href="#" for="<?= $numberOfElementSelectSeed ?>">
<span class="fw-bold">#</span>
<span class="ms-2"><?= __('Show') ?></span>
<select id="<?= $numberOfElementSelectSeed ?>" class="select-number-of-element form-select ms-auto" style="width: 5em;">
<option value="20" <?= $numberOfElement == 20 ? 'selected' : '' ?>><?= __('20') ?></option>
<option value="50" <?= $numberOfElement == 50 ? 'selected' : '' ?>><?= __('50') ?></option>
<option value="100" <?= $numberOfElement == 100 ? 'selected' : '' ?>><?= __('100') ?></option>
<option value="200" <?= $numberOfElement == 200 ? 'selected' : '' ?>><?= __('200') ?></option>
</select>
</label>
<script>
(function() {
const debouncedNumberElementSaver = debounce(mergeAndSaveSettingsWithReload, 2000)
$('#<?= $numberOfElementSelectSeed ?>').change(function() {
const $dropdownMenu = $(this).closest('.dropdown')
const tableRandomValue = $dropdownMenu.attr('data-table-random-value')
const $container = $dropdownMenu.closest('div[id^="table-container-"]')
const $table = $container.find(`table[data-table-random-value="${tableRandomValue}"]`)
const table_setting_id = $dropdownMenu.data('table_setting_id');
let newTableSettings = {}
newTableSettings[table_setting_id] = {
'number_of_element': $(this).val()
}
debouncedNumberElementSaver(table_setting_id, newTableSettings, $table)
})
$(document).ready(function() {
const $select = $('#<?= $numberOfElementSelectSeed ?>')
const $dropdownMenu = $select.closest('.dropdown')
const tableRandomValue = $dropdownMenu.attr('data-table-random-value')
const $container = $dropdownMenu.closest('div[id^="table-container-"]')
const $table = $container.find(`table[data-table-random-value="${tableRandomValue}"]`)
registerDebouncedFunction($container, debouncedNumberElementSaver)
})
})()
</script>