diff --git a/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php b/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php index e9362a07047fbeadc4cc8a296f93a104cc78868a..22ac3ecb7a5e96010a09b5c480d76f7ff4496888 100644 --- a/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php +++ b/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php @@ -509,8 +509,13 @@ protected static function getNewMediaItems(array $element, FormStateInterface $f * - weight: (int) A weight for the selection. */ protected static function getFieldState(array $element, FormStateInterface $form_state) { + // Default to using the current selection if the form is new. + $path = $element['#parents']; + $values = NestedArray::getValue($form_state->getValues(), $path); + $selection = isset($values['selection']) ? $values['selection'] : []; + $widget_state = static::getWidgetState($element['#field_parents'], $element['#field_name'], $form_state); - $widget_state['items'] = isset($widget_state['items']) ? $widget_state['items'] : []; + $widget_state['items'] = isset($widget_state['items']) ? $widget_state['items'] : $selection; return $widget_state; } diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php index 9ae45c3a88c3e7606e53080e7865bfa2176e54ca..da4ebeb16a399969a5180fc57606fee9a32777ad 100644 --- a/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php +++ b/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php @@ -235,6 +235,30 @@ public function testWidget() { $assert_session->pageTextContains('Bear'); $assert_session->pageTextContains('Horse'); $assert_session->pageTextContains('Turtle'); + + // Re-edit the content and make a new selection. + $this->drupalGet('node/1/edit'); + $assert_session->pageTextNotContains('Dog'); + $assert_session->pageTextContains('Cat'); + $assert_session->pageTextContains('Bear'); + $assert_session->pageTextContains('Horse'); + $assert_session->pageTextContains('Turtle'); + $unlimited_button = $assert_session->elementExists('css', '.media-library-open-button[href*="field_unlimited_media"]'); + $unlimited_button->click(); + $assert_session->assertWaitOnAjaxRequest(); + $assert_session->pageTextContains('Media library'); + // Select the first media items (should be Dog, again). + $checkbox_selector = '.media-library-view .js-click-to-select-checkbox input'; + $checkboxes = $page->findAll('css', $checkbox_selector); + $checkboxes[0]->click(); + $assert_session->elementExists('css', '.ui-dialog-buttonpane')->pressButton('Select media'); + $assert_session->assertWaitOnAjaxRequest(); + // "Dog" and the existing selection should still exist. + $assert_session->pageTextContains('Dog'); + $assert_session->pageTextContains('Cat'); + $assert_session->pageTextContains('Bear'); + $assert_session->pageTextContains('Horse'); + $assert_session->pageTextContains('Turtle'); } /**