diff --git a/core/lib/Drupal/Core/Render/Element/Weight.php b/core/lib/Drupal/Core/Render/Element/Weight.php index 468290a1a7..8a2bbd4c40 100644 --- a/core/lib/Drupal/Core/Render/Element/Weight.php +++ b/core/lib/Drupal/Core/Render/Element/Weight.php @@ -59,6 +59,12 @@ public static function processWeight(&$element, FormStateInterface $form_state, for ($n = (-1 * $element['#delta']); $n <= $element['#delta']; $n++) { $weights[$n] = $n; } + $default_value = (int) $element['#default_value']; + if (!isset($weights[$default_value])) { + $weights[$default_value] = $default_value; + ksort($weights); + } + unset($default_value); $element['#options'] = $weights; $element += $element_info_manager->getInfo('select'); } diff --git a/core/tests/Drupal/Tests/Core/Render/Element/WeightTest.php b/core/tests/Drupal/Tests/Core/Render/Element/WeightTest.php new file mode 100644 index 0000000000..3e1d8bbf7c --- /dev/null +++ b/core/tests/Drupal/Tests/Core/Render/Element/WeightTest.php @@ -0,0 +1,52 @@ +installConfig(['system']); + } + + /** + * Test existing #default_value value in #options list. + * + * @covers ::processWeight + */ + public function testProcessWeight() { + $element = []; + $form_state = new FormState(); + $complete_form = []; + + $element_object = new Weight([], 'weight', []); + $info = $element_object->getInfo(); + $element += $info; + + $element['#default_value'] = $element['#delta'] + 5; + + Weight::processWeight($element, $form_state, $complete_form); + + $this->assertTrue( + isset($element['#options'][$element['#default_value']]), + 'Default value exists in the #options list' + ); + } + +}