From 8542a65d49e6ebd3b32689c03c265423f9f9f95f Mon Sep 17 00:00:00 2001 From: Lauri Eskola <lauri.eskola@acquia.com> Date: Mon, 20 Feb 2023 18:24:38 +0200 Subject: [PATCH] Issue #3181634 by Wongjn: States API: Empty/Filled state with number <input> does not update when using spinner --- core/misc/states.js | 4 ++++ .../src/Form/JavascriptStatesForm.php | 15 +++++++++++++ .../Drupal/Nightwatch/Tests/statesTest.js | 21 +++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/core/misc/states.js b/core/misc/states.js index 39cd7b41bb3a..643a72f146d7 100644 --- a/core/misc/states.js +++ b/core/misc/states.js @@ -526,6 +526,10 @@ // the state. return this.val() === ''; }, + // Listen to 'change' for number native "spinner" widgets. + change() { + return this.val() === ''; + }, }, checked: { diff --git a/core/modules/system/tests/modules/form_test/src/Form/JavascriptStatesForm.php b/core/modules/system/tests/modules/form_test/src/Form/JavascriptStatesForm.php index 4f8095739ff2..851c55e2fc53 100644 --- a/core/modules/system/tests/modules/form_test/src/Form/JavascriptStatesForm.php +++ b/core/modules/system/tests/modules/form_test/src/Form/JavascriptStatesForm.php @@ -106,6 +106,10 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#empty_value' => '_none', '#empty_option' => '- None -', ]; + $form['number_trigger'] = [ + '#type' => 'number', + '#title' => 'Number trigger', + ]; // Tested fields. // Checkbox trigger. @@ -374,6 +378,17 @@ public function buildForm(array $form, FormStateInterface $form_state) { ], ]; + // Number triggers. + $form['item_visible_when_number_trigger_filled_by_spinner'] = [ + '#type' => 'item', + '#title' => 'Item visible when number trigger filled by spinner widget', + '#states' => [ + 'visible' => [ + ':input[name="number_trigger"]' => ['filled' => TRUE], + ], + ], + ]; + $form['select'] = [ '#type' => 'select', '#title' => 'select 1', diff --git a/core/tests/Drupal/Nightwatch/Tests/statesTest.js b/core/tests/Drupal/Nightwatch/Tests/statesTest.js index 2ae6d41de457..4d48d8d3aac8 100644 --- a/core/tests/Drupal/Nightwatch/Tests/statesTest.js +++ b/core/tests/Drupal/Nightwatch/Tests/statesTest.js @@ -21,4 +21,25 @@ module.exports = { .waitForElementNotVisible('input[name="textfield"]', 1000) .assert.noDeprecationErrors(); }, + 'Test number trigger with spinner widget': (browser) => { + browser + .drupalRelativeURL('/form-test/javascript-states-form') + .waitForElementVisible('body', 1000) + .waitForElementNotVisible( + '#edit-item-visible-when-number-trigger-filled-by-spinner', + 1000, + ) + .execute(() => { + // Emulate usage of the spinner browser widget on number inputs + // on modern browsers. + const numberTrigger = document.getElementById('edit-number-trigger'); + numberTrigger.value = 1; + numberTrigger.dispatchEvent(new Event('change')); + }); + + browser.waitForElementVisible( + '#edit-item-visible-when-number-trigger-filled-by-spinner', + 1000, + ); + }, }; -- GitLab