From 45b25f08b78394d0892fdafd59bed51a794967fa Mon Sep 17 00:00:00 2001 From: Lauri Eskola Date: Fri, 13 Dec 2019 17:51:57 +0200 Subject: [PATCH] Issue #3089523 by benjifisher, jhodgdon: Use progressive disclosure to hide Sort options on entity reference fields until bundles are selected (cherry picked from commit 75534512d6b60bd877cb3bc8639acd87a471f02a) --- .../EntityReferenceSelection/DefaultSelection.php | 7 +++++++ .../EntityReference/EntityReferenceAdminTest.php | 10 ++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php index 31dcabe5ded..426dee11d1b 100644 --- a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php +++ b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php @@ -254,6 +254,13 @@ class DefaultSelection extends SelectionPluginBase implements ContainerFactoryPl '#limit_validation_errors' => [], '#default_value' => $configuration['sort']['field'], ]; + if ($entity_type->hasKey('bundle')) { + $form['sort']['field']['#states'] = [ + 'visible' => [ + ':input[name^="settings[handler_settings][target_bundles]["]' => ['checked' => TRUE], + ], + ]; + } $form['sort']['settings'] = [ '#type' => 'container', diff --git a/core/modules/field/tests/src/FunctionalJavascript/EntityReference/EntityReferenceAdminTest.php b/core/modules/field/tests/src/FunctionalJavascript/EntityReference/EntityReferenceAdminTest.php index 3e9fb2fffe2..f5eab5a408f 100644 --- a/core/modules/field/tests/src/FunctionalJavascript/EntityReference/EntityReferenceAdminTest.php +++ b/core/modules/field/tests/src/FunctionalJavascript/EntityReference/EntityReferenceAdminTest.php @@ -101,9 +101,16 @@ class EntityReferenceAdminTest extends WebDriverTestBase { $entity_type_id = 'node'; // Check that the type label is correctly displayed. $assert_session->pageTextContains('Content type'); + // Check that sort options are not yet visible. + $sort_by = $page->findField('settings[handler_settings][sort][field]'); + $this->assertNotEmpty($sort_by); + $this->assertFalse($sort_by->isVisible(), 'The "sort by" options are hidden.'); + // Select all bundles so that sort options are available. $bundles = $this->container->get('entity_type.bundle.info')->getBundleInfo($entity_type_id); foreach ($bundles as $bundle_name => $bundle_info) { $this->assertFieldByName('settings[handler_settings][target_bundles][' . $bundle_name . ']'); + $page->findField('settings[handler_settings][target_bundles][' . $bundle_name . ']')->setValue($bundle_name); + $assert_session->assertWaitOnAjaxRequest(); } reset($bundles); @@ -143,8 +150,6 @@ class EntityReferenceAdminTest extends WebDriverTestBase { $this->assertNoFieldByName('settings[handler_settings][sort][direction]'); // Third step: confirm. - $page->findField('settings[handler_settings][target_bundles][' . key($bundles) . ']')->setValue(key($bundles)); - $assert_session->assertWaitOnAjaxRequest(); $this->drupalPostForm(NULL, [ 'required' => '1', ], t('Save settings')); @@ -177,6 +182,7 @@ class EntityReferenceAdminTest extends WebDriverTestBase { $this->drupalPostForm($bundle_path . '/fields/' . $field_name . '/storage', $edit, t('Save field settings')); $this->drupalGet($bundle_path . '/fields/' . $field_name); $this->assertFieldByName('settings[handler_settings][filter][type]', '_none'); + $this->assertFieldByName('settings[handler_settings][sort][field]', '_none'); // Switch the target type to 'node'. $field_name = 'node.' . $this->type . '.field_test';