Skip to content

Commit 75c4ab3

Browse files
committed
Fix: Gallery tab filters now populate from database
PROBLÈME UTILISATEUR: - Filtres Galerie: Seul le filtre nom fonctionnait - Département/Compagnie dropdowns: Vides (pas d'options) - Utilisateur ne pouvait pas filtrer par bataillon ROOT CAUSE: - loadTabData('gallery') appelait seulement refreshGallery() - Aucun appel pour charger les départements dans les dropdowns - Comparaison: Reports tab appelle loadReportDepartments() ✅ FIX IMPLÉMENTÉ: ✅ Nouvelle fonction: loadGalleryDepartments() ✅ Fetch /api/departments (même endpoint que Reports) ✅ Populate filterDepartment dropdown avec bataillons ✅ Store sub_departments data globalement (cascade) ✅ Appelée quand Gallery tab se charge LOGIQUE DROPDOWN CASCADE: 1. User selects battalion → filterDepartment 2. JavaScript popule filterSubDepartment avec compagnies de ce bataillon 3. User peut affiner par compagnie/section 4. applyGalleryFilters() envoie les 2 filtres à l'API RÉSULTAT: ✅ filterDepartment: Affiche tous les bataillons (10BPAG, 1BCAS, etc.) ✅ filterSubDepartment: Affiche compagnies selon bataillon sélectionné ✅ Filtres fonctionnent correctement avec nouvelle architecture metadata ✅ API /api/images/gallery reçoit: name, department, sub_department, status TEST UTILISATEUR: 1. Gallery tab → Dropdown "Bataillon / Unité" → Options visibles 2. Sélectionner bataillon → Dropdown "Compagnie / Section" → Cascade 3. Filtrer → Images filtrées correctement dashboard-service/src/static/js/dashboard.js:115,871-898,1030 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent 710a19e commit 75c4ab3

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

dashboard-service/src/static/js/dashboard.js

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ function loadTabData(tabName) {
112112
refreshUnauthorized();
113113
break;
114114
case 'gallery':
115+
loadGalleryDepartments(); // Load department options for filters
115116
refreshGallery();
116117
break;
117118
case 'cameras':
@@ -867,6 +868,35 @@ async function loadDepartments() {
867868
}
868869
}
869870

871+
async function loadGalleryDepartments() {
872+
//Load departments from database to populate gallery filter dropdowns
873+
try {
874+
const response = await fetch(`${CONFIG.API_BASE_URL}/api/departments`);
875+
const data = await response.json();
876+
877+
// Populate department dropdown
878+
const deptSelect = document.getElementById('filterDepartment');
879+
if (deptSelect && data.departments) {
880+
deptSelect.innerHTML = '<option value="">Tous les bataillons</option>';
881+
data.departments.forEach(dept => {
882+
const option = document.createElement('option');
883+
option.value = dept;
884+
option.textContent = dept;
885+
deptSelect.appendChild(option);
886+
});
887+
}
888+
889+
// Store sub-departments data globally for cascade
890+
if (data.sub_departments) {
891+
window.subDepartmentsData = data.sub_departments;
892+
}
893+
894+
console.log('Gallery filter departments loaded:', data.departments);
895+
} catch (error) {
896+
console.error('Error loading gallery departments:', error);
897+
}
898+
}
899+
870900
async function refreshGallery(page = 1) {
871901
//Load gallery images with current filters
872902
const imageGrid = document.getElementById('galleryImagesGrid');
@@ -997,7 +1027,7 @@ document.addEventListener('DOMContentLoaded', function() {
9971027
const selectedDept = this.value;
9981028

9991029
// Clear sub-department dropdown
1000-
subDeptSelect.innerHTML = '<option value="">Tous les sous-départements</option>';
1030+
subDeptSelect.innerHTML = '<option value="">Toutes les compagnies</option>';
10011031

10021032
// Populate with matching sub-departments
10031033
if (selectedDept && window.subDepartmentsData && window.subDepartmentsData[selectedDept]) {

0 commit comments

Comments
 (0)