diff -u b/core/modules/media_library/src/Form/AddFormBase.php b/core/modules/media_library/src/Form/AddFormBase.php --- b/core/modules/media_library/src/Form/AddFormBase.php +++ b/core/modules/media_library/src/Form/AddFormBase.php @@ -138,7 +138,7 @@ 'js-media-library-add-form', ]; - $added_media = $form_state->get('media'); + $added_media = $this->getAddedMediaItems($form_state); if (empty($added_media)) { $form['#attributes']['class'][] = 'media-library-add-form--without-input'; $form = $this->buildInputElement($form, $form_state); @@ -474,8 +474,7 @@ * {@inheritdoc} */ public function validateForm(array &$form, FormStateInterface $form_state) { - $added_media = $form_state->get('media') ?: []; - foreach ($added_media as $delta => $media) { + foreach ($this->getAddedMediaItems($form_state) as $delta => $media) { $this->validateMediaEntity($media, $form, $form_state, $delta); } } @@ -502,8 +501,7 @@ * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { - $added_media = $form_state->get('media') ?: []; - foreach ($added_media as $delta => $media) { + foreach ($this->getAddedMediaItems($form_state) as $delta => $media) { EntityFormDisplay::collectRenderDisplay($media, 'media_library') ->extractFormValues($media, $form['media'][$delta]['fields'], $form_state); $this->prepareMediaEntityForSave($media); @@ -528,10 +526,9 @@ return $form; } - $added_media = $form_state->get('media') ?: []; $media_ids = array_map(function (MediaInterface $media) { return $media->id(); - }, $added_media); + }, $this->getAddedMediaItems($form_state)); // Get the render array for the media library. The media library state might // contain the 'media_library_content' when it has been opened from a @@ -599,7 +596,7 @@ } /** - * Get all pre-selected media IDs from the form state. + * Get all pre-selected media items from the form state. * * @param \Drupal\Core\Form\FormStateInterface $form_state * The current form state. @@ -616,15 +613,28 @@ } /** - * Get all pre-selected and added media IDs from the form state. + * Get all added media items from the form state. + * + * @param \Drupal\Core\Form\FormStateInterface $form_state + * The current form state. + * + * @return \Drupal\media\MediaInterface[] + * An array containing the added media items keyed by delta. The media items + * won't have an ID untill they are saved in ::submitForm(). + */ + protected function getAddedMediaItems(FormStateInterface $form_state) { + return $form_state->get('media') ?: []; + } + + /** + * Get all pre-selected and added media items from the form state. * * @param \Drupal\Core\Form\FormStateInterface $form_state * The current form state. * * @return \Drupal\media\MediaInterface[] - * An array containing all pre-selected and added media items. The - * pre-selected media items are keyed by ID and the added items are keyed by - * delta. + * An array containing all pre-selected and added media items with + * renumbered numeric keys. */ protected function getCurrentMediaItems(FormStateInterface $form_state) { $pre_selected_media = $this->getPreSelectedMediaItems($form_state); diff -u b/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php --- b/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php +++ b/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php @@ -602,7 +602,7 @@ $assert_session->elementNotExists('css', '.media-library-add-form--with-input'); $page->attachFileToField('Add files', $this->container->get('file_system')->realpath($png_image->uri)); $assert_session->assertWaitOnAjaxRequest(); - $assert_session->pageTextContains('The media item has been created. Fill in any required fields and save to make it available in the media library.'); + $assert_session->pageTextContains('The media item has been created. Fill in any required fields and save to add it to the media library.'); $assert_session->elementExists('css', '.media-library-add-form--with-input'); $assert_session->elementNotExists('css', '.media-library-add-form--without-input'); // We do not have a pre-selected items, so the container should not be added