Fix dashboard stat tiles and add sidebar date filters
- Created Today tile: no longer limits to open statuses (count is all statuses) - Closed Today tile: filters by closed_at range, not updated_at - Add closed_from/closed_to support to TicketModel and DashboardController - Add Created/Updated/Closed date range inputs to sidebar filter panel - Apply button collects date inputs; Clear All removes them - removeFilter handles date chip removal (clears both _from and _to) - Active filter chips shown for date ranges Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+23
-32
@@ -259,6 +259,12 @@ function removeFilter(filterType, filterValue) {
|
||||
}
|
||||
} else if (filterType === 'search') {
|
||||
params.delete('search');
|
||||
} else if (filterType === 'created_from') {
|
||||
params.delete('created_from'); params.delete('created_to');
|
||||
} else if (filterType === 'updated_from') {
|
||||
params.delete('updated_from'); params.delete('updated_to');
|
||||
} else if (filterType === 'closed_from') {
|
||||
params.delete('closed_from'); params.delete('closed_to');
|
||||
} else {
|
||||
params.delete(filterType);
|
||||
}
|
||||
@@ -310,44 +316,33 @@ function initSidebarFilters() {
|
||||
applyFiltersBtn.addEventListener('click', () => {
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
|
||||
// Collect selected statuses
|
||||
// Checkboxes
|
||||
const selectedStatuses = Array.from(
|
||||
document.querySelectorAll('.lt-filter-group input[name="status"]:checked')
|
||||
).map(cb => cb.value);
|
||||
|
||||
// Collect selected categories
|
||||
const selectedCategories = Array.from(
|
||||
document.querySelectorAll('.lt-filter-group input[name="category"]:checked')
|
||||
).map(cb => cb.value);
|
||||
|
||||
// Collect selected types
|
||||
const selectedTypes = Array.from(
|
||||
document.querySelectorAll('.lt-filter-group input[name="type"]:checked')
|
||||
).map(cb => cb.value);
|
||||
|
||||
// Update URL parameters
|
||||
if (selectedStatuses.length > 0) {
|
||||
params.set('status', selectedStatuses.join(','));
|
||||
} else {
|
||||
params.delete('status');
|
||||
}
|
||||
if (selectedStatuses.length > 0) params.set('status', selectedStatuses.join(','));
|
||||
else params.delete('status');
|
||||
if (selectedCategories.length > 0) params.set('category', selectedCategories.join(','));
|
||||
else params.delete('category');
|
||||
if (selectedTypes.length > 0) params.set('type', selectedTypes.join(','));
|
||||
else params.delete('type');
|
||||
|
||||
if (selectedCategories.length > 0) {
|
||||
params.set('category', selectedCategories.join(','));
|
||||
} else {
|
||||
params.delete('category');
|
||||
}
|
||||
// Date inputs
|
||||
const dateFields = ['created_from','created_to','updated_from','updated_to','closed_from','closed_to'];
|
||||
dateFields.forEach(name => {
|
||||
const el = document.getElementById('filter-' + name.replace('_', '-'));
|
||||
if (el && el.value) params.set(name, el.value);
|
||||
else params.delete(name);
|
||||
});
|
||||
|
||||
if (selectedTypes.length > 0) {
|
||||
params.set('type', selectedTypes.join(','));
|
||||
} else {
|
||||
params.delete('type');
|
||||
}
|
||||
|
||||
// Reset to page 1 when filters change
|
||||
params.set('page', '1');
|
||||
|
||||
// Reload with new parameters
|
||||
window.location.search = params.toString();
|
||||
});
|
||||
}
|
||||
@@ -355,14 +350,10 @@ function initSidebarFilters() {
|
||||
if (clearFiltersBtn) {
|
||||
clearFiltersBtn.addEventListener('click', () => {
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
|
||||
// Remove filter parameters
|
||||
params.delete('status');
|
||||
params.delete('category');
|
||||
params.delete('type');
|
||||
['status','category','type',
|
||||
'created_from','created_to','updated_from','updated_to','closed_from','closed_to'
|
||||
].forEach(k => params.delete(k));
|
||||
params.set('page', '1');
|
||||
|
||||
// Reload with cleared filters
|
||||
window.location.search = params.toString();
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user