feat(per-page-persistence): remember selected rows per page in localStorage

table-list component now saves per_page selection to localStorage and
restores it when navigating back to any list without explicit per_page
in URL. URL parameter takes priority over stored value to ensure
bookmarked links work predictably.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-07 08:26:53 +02:00
parent 6d0905d97a
commit 24df01cfde
7 changed files with 251 additions and 9 deletions

View File

@@ -337,6 +337,7 @@ $buildUrl = static function (array $params = []) use ($basePath, $query): string
var colsKey = storagePrefix + '_hidden_cols';
var queryKey = storagePrefix + '_query';
var clearKey = storagePrefix + '_cleared';
var perPageKey = storagePrefix + '_per_page';
function readJson(key, fallback) {
try {
@@ -427,9 +428,22 @@ $buildUrl = static function (array $params = []) use ($basePath, $query): string
root.querySelectorAll('.js-per-page-select').forEach(function(select) {
select.addEventListener('change', function() {
writeJson(perPageKey, parseInt(select.value, 10));
var form = select.closest('form');
if (form) form.submit();
});
var urlParams = new URLSearchParams(window.location.search);
if (urlParams.has('per_page')) {
writeJson(perPageKey, parseInt(select.value, 10));
} else {
var savedPerPage = readJson(perPageKey, null);
if (savedPerPage !== null && parseInt(select.value, 10) !== savedPerPage) {
select.value = savedPerPage;
var form = select.closest('form');
if (form) form.submit();
}
}
});
var selectAll = root.querySelector('.js-table-select-all');