From e0c7399998cbfe12313c57496395eb776d96eb05 Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Tue, 8 Sep 2026 10:54:56 -0400 Subject: [PATCH] Advanced Search: swap inverted date/priority ranges instead of submitting them (#61) A user could set an end date before a start date, or priority_min > priority_max, and the filter would be silently sent as an unsatisfiable range with zero results and no explanation. Now swaps min/max (and from/to) before building the query string when they're in the wrong order. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01MGDKHiU5RJdo3dqQUDow3X --- assets/js/advanced-search.js | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/assets/js/advanced-search.js b/assets/js/advanced-search.js index 7155fc5..09c42f9 100644 --- a/assets/js/advanced-search.js +++ b/assets/js/advanced-search.js @@ -87,11 +87,17 @@ function performAdvancedSearch(event) { params.set('search', searchText); } - // Date ranges - const createdFrom = document.getElementById('adv-created-from').value; - const createdTo = document.getElementById('adv-created-to').value; - const updatedFrom = document.getElementById('adv-updated-from').value; - const updatedTo = document.getElementById('adv-updated-to').value; + // Date ranges — swap if the user entered an end date before the start date + let createdFrom = document.getElementById('adv-created-from').value; + let createdTo = document.getElementById('adv-created-to').value; + if (createdFrom && createdTo && createdFrom > createdTo) { + [createdFrom, createdTo] = [createdTo, createdFrom]; + } + let updatedFrom = document.getElementById('adv-updated-from').value; + let updatedTo = document.getElementById('adv-updated-to').value; + if (updatedFrom && updatedTo && updatedFrom > updatedTo) { + [updatedFrom, updatedTo] = [updatedTo, updatedFrom]; + } if (createdFrom) params.set('created_from', createdFrom); if (createdTo) params.set('created_to', createdTo); @@ -105,9 +111,12 @@ function performAdvancedSearch(event) { params.set('status', selectedStatuses.join(',')); } - // Priority range - const priorityMin = document.getElementById('adv-priority-min').value; - const priorityMax = document.getElementById('adv-priority-max').value; + // Priority range — swap if min > max so the range is always satisfiable + let priorityMin = document.getElementById('adv-priority-min').value; + let priorityMax = document.getElementById('adv-priority-max').value; + if (priorityMin && priorityMax && Number(priorityMin) > Number(priorityMax)) { + [priorityMin, priorityMax] = [priorityMax, priorityMin]; + } if (priorityMin) params.set('priority_min', priorityMin); if (priorityMax) params.set('priority_max', priorityMax);