feat: added clear filter button to sets/parts/problems/minifigures
This commit is contained in:
@@ -434,6 +434,38 @@ window.applyFiltersAndKeepState = function(tableId, storageKey) {
|
||||
}
|
||||
};
|
||||
|
||||
// Shared function to clear all filters for a page (works in both pagination and client-side modes)
|
||||
window.clearPageFilters = function(tableId, filterParams) {
|
||||
const isPaginationMode = window.isPaginationModeForPage(tableId);
|
||||
|
||||
if (isPaginationMode) {
|
||||
// SERVER-SIDE PAGINATION MODE: Remove filter parameters from URL
|
||||
const currentUrl = new URL(window.location);
|
||||
|
||||
// Remove all filter parameters
|
||||
filterParams.forEach(param => {
|
||||
currentUrl.searchParams.delete(param);
|
||||
});
|
||||
|
||||
// Reset to page 1
|
||||
currentUrl.searchParams.set('page', '1');
|
||||
|
||||
// Navigate to cleaned URL
|
||||
window.location.href = currentUrl.toString();
|
||||
} else {
|
||||
// CLIENT-SIDE MODE: Reset all filter dropdowns to "all"
|
||||
filterParams.forEach(param => {
|
||||
const select = document.getElementById(`filter-${param}`);
|
||||
if (select) {
|
||||
select.value = 'all';
|
||||
}
|
||||
});
|
||||
|
||||
// Trigger filter application (will use existing filter logic)
|
||||
window.applyPageFilters(tableId);
|
||||
}
|
||||
};
|
||||
|
||||
// Shared initialization for table pages (parts, problems, minifigures)
|
||||
window.initializeTablePage = function(config) {
|
||||
const {
|
||||
|
||||
@@ -166,6 +166,14 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
const currentOrder = urlParams.get('order');
|
||||
window.initializeSortButtonStates(currentSort, currentOrder);
|
||||
}
|
||||
|
||||
// Initialize clear filters button
|
||||
const clearButton = document.getElementById('table-filter-clear');
|
||||
if (clearButton) {
|
||||
clearButton.addEventListener('click', () => {
|
||||
window.clearPageFilters('minifigures', ['owner', 'problems', 'theme', 'year']);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
function setupSortButtons() {
|
||||
|
||||
@@ -23,5 +23,13 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
},
|
||||
hasColorDropdown: true
|
||||
});
|
||||
|
||||
// Initialize clear filters button
|
||||
const clearButton = document.getElementById('table-filter-clear');
|
||||
if (clearButton) {
|
||||
clearButton.addEventListener('click', () => {
|
||||
window.clearPageFilters('parts', ['owner', 'color', 'theme', 'year']);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -23,4 +23,12 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
},
|
||||
hasColorDropdown: true
|
||||
});
|
||||
|
||||
// Initialize clear filters button
|
||||
const clearButton = document.getElementById('table-filter-clear');
|
||||
if (clearButton) {
|
||||
clearButton.addEventListener('click', () => {
|
||||
window.clearPageFilters('problems', ['owner', 'color', 'theme', 'year', 'storage', 'tag']);
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -22,6 +22,9 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
// Initialize duplicate filter functionality
|
||||
initializeDuplicateFilter();
|
||||
|
||||
// Initialize clear filters button
|
||||
initializeClearFiltersButton();
|
||||
|
||||
if (searchInput && searchClear) {
|
||||
if (isPaginationMode()) {
|
||||
// PAGINATION MODE - Server-side search
|
||||
@@ -704,4 +707,58 @@ function triggerGridRefresh() {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize clear filters button functionality
|
||||
function initializeClearFiltersButton() {
|
||||
const clearFiltersButton = document.getElementById('grid-filter-clear');
|
||||
if (!clearFiltersButton) return;
|
||||
|
||||
clearFiltersButton.addEventListener('click', () => {
|
||||
if (isPaginationMode()) {
|
||||
// SERVER-SIDE PAGINATION MODE: Remove filter parameters from URL
|
||||
const currentUrl = new URL(window.location);
|
||||
|
||||
// Remove all filter parameters
|
||||
const filterParams = ['status', 'theme', 'year', 'owner', 'purchase_location', 'storage', 'tag', 'duplicate'];
|
||||
filterParams.forEach(param => {
|
||||
currentUrl.searchParams.delete(param);
|
||||
});
|
||||
|
||||
// Reset to page 1
|
||||
currentUrl.searchParams.set('page', '1');
|
||||
|
||||
// Navigate to cleaned URL
|
||||
window.location.href = currentUrl.toString();
|
||||
} else {
|
||||
// CLIENT-SIDE MODE: Reset all filter dropdowns to empty string
|
||||
const filterDropdowns = [
|
||||
'grid-status',
|
||||
'grid-theme',
|
||||
'grid-year',
|
||||
'grid-owner',
|
||||
'grid-purchase-location',
|
||||
'grid-storage',
|
||||
'grid-tag'
|
||||
];
|
||||
|
||||
filterDropdowns.forEach(dropdownId => {
|
||||
const dropdown = document.getElementById(dropdownId);
|
||||
if (dropdown) {
|
||||
dropdown.value = '';
|
||||
}
|
||||
});
|
||||
|
||||
// Clear duplicate filter if active
|
||||
const duplicateButton = document.getElementById('duplicate-filter-toggle');
|
||||
if (duplicateButton && duplicateButton.classList.contains('btn-secondary')) {
|
||||
duplicateButton.classList.remove('btn-secondary');
|
||||
duplicateButton.classList.add('btn-outline-secondary');
|
||||
applyDuplicateFilter(false);
|
||||
}
|
||||
|
||||
// Trigger filtering if grid instance exists
|
||||
triggerGridRefresh();
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user