From 30d35a2368994461e5053b7437a67b071a3560cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Wed, 10 Jun 2026 19:14:33 +0200 Subject: [PATCH] fix: ensure deselecting presence modifier re-enables string input --- e2e/test_string_filter_e2e.py | 17 +++++++++++++++++ games/static/js/filter_bar.js | 18 +++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/e2e/test_string_filter_e2e.py b/e2e/test_string_filter_e2e.py index b646a86..142e3b7 100644 --- a/e2e/test_string_filter_e2e.py +++ b/e2e/test_string_filter_e2e.py @@ -126,3 +126,20 @@ def test_string_filter_prefilled_states(live_server, page): assert group_input.input_value() == "" assert not group_input.is_enabled() assert page.locator('input[name="filter-group-modifier"][value="IS_NULL"]').is_checked() + + +@pytest.mark.django_db +@override_settings(ROOT_URLCONF="e2e.test_string_filter_e2e") +def test_string_filter_deselect_re_enables(live_server, page): + page.goto(live_server.url + "/test-string-filter-empty/") + + name_input = page.locator('input[name="filter-name"]') + is_null_radio = page.locator('input[name="filter-name-modifier"][value="IS_NULL"]') + + # 1. Click "is null" -> disables input + is_null_radio.click() + assert not name_input.is_enabled() + + # 2. Click "is null" again to deselect/uncheck -> should re-enable the text input + is_null_radio.click() + assert name_input.is_enabled() diff --git a/games/static/js/filter_bar.js b/games/static/js/filter_bar.js index 53696e3..a5e7914 100644 --- a/games/static/js/filter_bar.js +++ b/games/static/js/filter_bar.js @@ -316,7 +316,11 @@ if (!container) return; var textInput = container.querySelector('input[type="text"]'); if (!textInput) return; - var val = radio.value; + + // Find the currently checked radio in the container + var checkedRadio = container.querySelector('input[type="radio"]:checked'); + var val = checkedRadio ? checkedRadio.value : ""; + if (val === "IS_NULL" || val === "NOT_NULL") { textInput.disabled = true; textInput.value = ""; @@ -455,9 +459,21 @@ }); } + /** + * Set up event listeners for string modifier radio buttons. + */ + function setupStringFilters() { + document.querySelectorAll('input[data-string-modifier-radio]').forEach(function (radio) { + radio.addEventListener('change', function () { + window.toggleStringFilterInput(this); + }); + }); + } + document.addEventListener("DOMContentLoaded", function () { injectSearchInputs(); setupDeselectableRadios(); + setupStringFilters(); loadPresets(); }); })();