From c6e6709878839e0639d73d7c1e4420a8008e8a33 Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Thu, 9 Aug 2018 11:13:36 +0100 Subject: [PATCH] Issue #2988622 by samuel.mortenson, bkosborne, phenaproxima, chr.fritsch: Media library field widget loses pre-existing selection when editing entity to add another selection --- .../Field/FieldWidget/MediaLibraryWidget.php | 7 +++++- .../FunctionalJavascript/MediaLibraryTest.php | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) 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 e9362a07047f..22ac3ecb7a5e 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 9ae45c3a88c3..da4ebeb16a39 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'); } /** -- GitLab