diff --git a/activityDb.js b/activityDb.js
index 7117455..a5c7231 100644
--- a/activityDb.js
+++ b/activityDb.js
@@ -27,6 +27,20 @@ db.exec(`
)
`);
+db.exec(`
+ CREATE TABLE IF NOT EXISTS agent_settings (
+ agent_id INTEGER PRIMARY KEY,
+ preview_limit INTEGER NOT NULL DEFAULT 10,
+ tickets_per_page INTEGER NOT NULL DEFAULT 50
+ )
+`);
+
+try {
+ db.exec(`ALTER TABLE agent_settings ADD COLUMN tickets_per_page INTEGER NOT NULL DEFAULT 50`);
+} catch (e) {
+ // Column already exists
+}
+
/**
* Generate a UUID v7 (time-ordered).
*/
diff --git a/public/js/views/dashboard.js b/public/js/views/dashboard.js
index 3ec46f0..3333ab3 100644
--- a/public/js/views/dashboard.js
+++ b/public/js/views/dashboard.js
@@ -88,7 +88,19 @@ const DashboardView = {
-
Ticket Recenti
+
+
Ticket Recenti
+
+ Mostra:
+
+
+
${(stats.recent_tickets || []).length > 0 ? `
@@ -132,6 +144,24 @@ const DashboardView = {
});
});
+ // Bind preview limit change event
+ const limitSelect = document.getElementById('dashboard-preview-limit');
+ if (limitSelect) {
+ limitSelect.addEventListener('change', async () => {
+ const newLimit = parseInt(limitSelect.value, 10);
+ try {
+ await App.api('/api/dashboard/settings', {
+ method: 'POST',
+ body: JSON.stringify({ preview_limit: newLimit }),
+ });
+ Toast.success(`Limite anteprima aggiornato a ${newLimit} ticket!`);
+ this.render();
+ } catch (err) {
+ Toast.error('Errore durante il salvataggio dell\'impostazione: ' + err.message);
+ }
+ });
+ }
+
// Update open ticket count in sidebar badge
const badge = document.getElementById('open-ticket-count');
if (badge) {
diff --git a/public/js/views/ticketList.js b/public/js/views/ticketList.js
index 0ffed0f..7ad14a0 100644
--- a/public/js/views/ticketList.js
+++ b/public/js/views/ticketList.js
@@ -19,6 +19,16 @@ const TicketListView = {
// Fetch lookups for filter dropdowns
await App.ensureLookups();
+ // Fetch agent settings for tickets_per_page
+ try {
+ const settings = await App.api('/api/dashboard/settings');
+ if (settings && settings.tickets_per_page) {
+ this.perPage = settings.tickets_per_page;
+ }
+ } catch (err) {
+ console.warn('Failed to load agent settings:', err);
+ }
+
// Build query params
const isMyTickets = window.location.hash.startsWith('#/tickets/my');
Filters.currentMode = isMyTickets ? 'my' : 'general';
@@ -168,6 +178,19 @@ const TicketListView = {
renderPagination(page, per_page, total, total_pages, isTop) {
const marginStyle = isTop ? 'margin-bottom: var(--space-md); margin-top: 0;' : 'margin-top: var(--space-md); margin-bottom: 0;';
+ const limitSelectHtml = `
+
+ Righe:
+
+
+ `;
+
if (total_pages > 1) {
return `