Skip to content

Commit e579212

Browse files
committed
Fix multi-filter not finding crashes
1 parent ece950c commit e579212

2 files changed

Lines changed: 60 additions & 49 deletions

File tree

src/js/filters.js

Lines changed: 51 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ export function captureCurrentFilterState() {
7070
licenseType: getSelectValues('licenseType'),
7171
vehRegState: getSelectValues('vehRegState'),
7272
directionTravel: getSelectValues('directionTravel'),
73-
unitMovement: getSelectValues('unitMovement')
73+
unitMovement: getSelectValues('unitMovement'),
74+
// Capture draw area state for proper change detection
75+
drawnArea: drawState.drawnLayer ? JSON.stringify(drawState.drawnLayer.toGeoJSON()) : null
7476
};
7577
return state;
7678
}
@@ -712,47 +714,20 @@ export function matchesUnitsFilters(row, filters) {
712714
const hasRegStateFilter = !filters.selectedRegStates.includes('all');
713715
const hasDirectionFilter = !filters.selectedDirections.includes('all');
714716
const hasMovementFilter = !filters.selectedMovements.includes('all');
717+
const hasHeavyVehicleFilter = filters.heavyVehicle !== 'all';
718+
const hasTowingFilter = filters.towing !== 'all';
719+
const hasRolloverFilter = filters.rollover !== 'all';
720+
const hasFireFilter = filters.fire !== 'all';
715721

716-
const hasAnyMultiSelectUnitFilter = hasVehicleTypeFilter || hasVehicleYearFilter ||
717-
hasOccupantsFilter || hasLicenseTypeFilter ||
718-
hasRegStateFilter || hasDirectionFilter || hasMovementFilter;
722+
const hasAnyUnitFilter = hasVehicleTypeFilter || hasVehicleYearFilter ||
723+
hasOccupantsFilter || hasLicenseTypeFilter ||
724+
hasRegStateFilter || hasDirectionFilter || hasMovementFilter ||
725+
hasHeavyVehicleFilter || hasTowingFilter || hasRolloverFilter || hasFireFilter;
719726

720-
// Handle Heavy Vehicle filter
721-
if (filters.heavyVehicle !== 'all') {
722-
if (units.length === 0) return filters.heavyVehicle !== 'yes';
723-
const hasHeavyVehicle = units.some(u => HEAVY_VEHICLE_TYPES.includes(u['Unit Type']));
724-
if (filters.heavyVehicle === 'yes' && !hasHeavyVehicle) return false;
725-
if (filters.heavyVehicle === 'no' && hasHeavyVehicle) return false;
726-
}
727-
728-
// Handle Towing filter
729-
if (filters.towing !== 'all') {
730-
if (units.length === 0) return filters.towing !== 'Yes';
731-
const hasTowing = units.some(u => {
732-
const val = (u.Towing || '').trim();
733-
return val !== '' && val !== 'Not Towing' && val !== 'Unknown';
734-
});
735-
if (filters.towing === 'Yes' && !hasTowing) return false;
736-
if (filters.towing === 'No' && hasTowing) return false;
737-
}
738-
739-
// Handle Rollover filter
740-
if (filters.rollover !== 'all') {
741-
if (units.length === 0) return filters.rollover !== 'Yes';
742-
const hasRollover = units.some(u => u.Rollover && u.Rollover.trim() !== '');
743-
if (filters.rollover === 'Yes' && !hasRollover) return false;
744-
if (filters.rollover === 'No' && hasRollover) return false;
745-
}
746-
747-
// Handle Fire filter
748-
if (filters.fire !== 'all') {
749-
if (units.length === 0) return filters.fire !== 'Yes';
750-
const hasFire = units.some(u => u.Fire && u.Fire.trim() !== '');
751-
if (filters.fire === 'Yes' && !hasFire) return false;
752-
if (filters.fire === 'No' && hasFire) return false;
753-
}
727+
// If no unit filters are active, pass all crashes
728+
if (!hasAnyUnitFilter) return true;
754729

755-
if (!hasAnyMultiSelectUnitFilter) return true;
730+
// If filters are active but crash has no units, reject
756731
if (units.length === 0) return false;
757732

758733
// Create Sets for O(1) lookups
@@ -764,12 +739,43 @@ export function matchesUnitsFilters(row, filters) {
764739
const directionSet = hasDirectionFilter ? new Set(filters.selectedDirections) : null;
765740
const movementSet = hasMovementFilter ? new Set(filters.selectedMovements) : null;
766741

767-
// Check if ANY unit matches ALL active multi-select filters
742+
// Check if ANY unit matches ALL active filters (including yes/no filters)
768743
return units.some(unit => {
744+
// Heavy Vehicle filter - must be checked per unit
745+
if (hasHeavyVehicleFilter) {
746+
const isHeavyVehicle = HEAVY_VEHICLE_TYPES.includes(unit['Unit Type']);
747+
if (filters.heavyVehicle === 'yes' && !isHeavyVehicle) return false;
748+
if (filters.heavyVehicle === 'no' && isHeavyVehicle) return false;
749+
}
750+
751+
// Towing filter - must be checked per unit
752+
if (hasTowingFilter) {
753+
const val = (unit.Towing || '').trim();
754+
const hasTowing = val !== '' && val !== 'Not Towing' && val !== 'Unknown';
755+
if (filters.towing === 'Yes' && !hasTowing) return false;
756+
if (filters.towing === 'No' && hasTowing) return false;
757+
}
758+
759+
// Rollover filter - must be checked per unit
760+
if (hasRolloverFilter) {
761+
const hasRollover = unit.Rollover && unit.Rollover.trim() !== '';
762+
if (filters.rollover === 'Yes' && !hasRollover) return false;
763+
if (filters.rollover === 'No' && hasRollover) return false;
764+
}
765+
766+
// Fire filter - must be checked per unit
767+
if (hasFireFilter) {
768+
const hasFire = unit.Fire && unit.Fire.trim() !== '';
769+
if (filters.fire === 'Yes' && !hasFire) return false;
770+
if (filters.fire === 'No' && hasFire) return false;
771+
}
772+
773+
// Vehicle Type filter
769774
if (hasVehicleTypeFilter && !vehicleTypeSet.has(unit['Unit Type'])) {
770775
return false;
771776
}
772777

778+
// Vehicle Year filter
773779
if (hasVehicleYearFilter) {
774780
const year = parseInt(unit['Veh Year']);
775781
if (isNaN(year)) return false;
@@ -783,6 +789,7 @@ export function matchesUnitsFilters(row, filters) {
783789
if (!matchesAnyYear) return false;
784790
}
785791

792+
// Occupants filter
786793
if (hasOccupantsFilter) {
787794
const occupantsStr = unit['Number Occupants'];
788795
if (occupantsStr !== undefined && occupantsStr !== null) {
@@ -806,18 +813,22 @@ export function matchesUnitsFilters(row, filters) {
806813
}
807814
}
808815

816+
// License Type filter
809817
if (hasLicenseTypeFilter && !licenseTypeSet.has(unit['Licence Type'])) {
810818
return false;
811819
}
812820

821+
// Registration State filter
813822
if (hasRegStateFilter && !regStateSet.has(unit['Veh Reg State'])) {
814823
return false;
815824
}
816825

826+
// Direction of Travel filter
817827
if (hasDirectionFilter && !directionSet.has(unit['Direction Of Travel'])) {
818828
return false;
819829
}
820830

831+
// Unit Movement filter
821832
if (hasMovementFilter && !movementSet.has(unit['Unit Movement'])) {
822833
return false;
823834
}

src/js/map-renderer.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -222,9 +222,9 @@ export function initMap() {
222222
document.body.classList.remove('draw-mode-active');
223223
updateDrawAreaUI();
224224

225-
// Trigger filter application (assumes applyFilters is available globally)
226-
if (typeof window.applyFilters === 'function') {
227-
window.applyFilters();
225+
// Mark filters as changed to trigger proper state tracking
226+
if (typeof window.markFiltersChanged === 'function') {
227+
window.markFiltersChanged();
228228
}
229229
});
230230

@@ -1411,9 +1411,9 @@ export function clearLocationSearch() {
14111411
if (input) input.value = '';
14121412
if (results) results.style.display = 'none';
14131413

1414-
// Reapply normal filters (assumes applyFilters is available globally)
1415-
if (typeof window.applyFilters === 'function') {
1416-
window.applyFilters();
1414+
// Mark filters as changed to trigger proper state tracking
1415+
if (typeof window.markFiltersChanged === 'function') {
1416+
window.markFiltersChanged();
14171417
}
14181418
}
14191419

@@ -1652,9 +1652,9 @@ export function clearDrawArea() {
16521652
drawState.drawnLayer = null;
16531653
updateDrawAreaUI();
16541654

1655-
// Reapply filters (assumes applyFilters is available globally)
1656-
if (typeof window.applyFilters === 'function') {
1657-
window.applyFilters();
1655+
// Mark filters as changed to trigger proper state tracking
1656+
if (typeof window.markFiltersChanged === 'function') {
1657+
window.markFiltersChanged();
16581658
}
16591659
}
16601660

0 commit comments

Comments
 (0)