diff --git a/core/lib/Drupal/Core/Render/Element/Weight.php b/core/lib/Drupal/Core/Render/Element/Weight.php index 468290a1a7..5b71a1aa24 100644 --- a/core/lib/Drupal/Core/Render/Element/Weight.php +++ b/core/lib/Drupal/Core/Render/Element/Weight.php @@ -59,6 +59,10 @@ public static function processWeight(&$element, FormStateInterface $form_state, for ($n = (-1 * $element['#delta']); $n <= $element['#delta']; $n++) { $weights[$n] = $n; } + if (!in_array($element['#default_value'], $weights)) { + $weights[$element['#default_value']] = $element['#default_value']; + ksort($weights); + } $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..5ca2a70c8d --- /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( + in_array($element['#default_value'], $element['#options']), + 'Default value exists in the #options list' + ); + } + +}