Skip to content
Snippets Groups Projects
Verified Commit e2872efa authored by Lauri Timmanee's avatar Lauri Timmanee
Browse files

Issue #3384583 by srishtiiee, viren18febS, smustgrave: Default value widget is...

Issue #3384583 by srishtiiee, viren18febS, smustgrave: Default value widget is not updated on field config change

(cherry picked from commit 710ae1c8)
parent b52f3a06
No related branches found
No related tags found
20 merge requests!8376Drupal views: adding more granularity to the ‘use ajax’ functionality,!8300Issue #3443586 View area displays even when parent view has no results.,!7567Issue #3153723 by quietone, Hardik_Patel_12: Change the scaffolding...,!7565Issue #3153723 by quietone, Hardik_Patel_12: Change the scaffolding...,!7509Change label "Block description" to "Block type",!7344Issue #3292350 by O'Briat, KlemenDEV, hswong3i, smustgrave, quietone: Update...,!6922Issue #3412959 by quietone, smustgrave, longwave: Fix 12 'un' words,!6848Issue #3417553 by longwave: Remove withConsecutive() in CacheCollectorTest,!6720Revert "Issue #3358581 by pfrenssen, _tarik_, a.dmitriiev, smustgrave:...,!6560Update ClaroPreRender.php, confirming classes provided are in array format,!6528Issue #3414261 by catch: Add authenticated user umami performance tests,!6501Issue #3263668 by omkar-pd, Wim Leers, hooroomoo: Re-enable inline form errors...,!6354Draft: Issue #3380392 by phma: Updating language weight from the overview reverts label if translated,!6324Issue #3416723 by Ludo.R: Provide a "node type" views default argument,!6119Issue #3405704 by Spokje, longwave: symfony/psr-http-message-bridge major version bump,!5950Issue #3403653 by alexpott, longwave: Incorporate improvements to how contrib runs PHPStan to core,!5858Issue #3401971 by fjgarlin: Test-only job shouldn't require constant rebases...,!5716Draft: Issue #3401102 by Spokje, longwave, smustgrave: Nightwatch artifacts on GitLab not retained,!5674Transaction autocommit during shutdown relies on unreliable object destruction order,!5644Issue #3395563 by nireneko, marvil07, lauriii, borisson_, smustgrave, Wim...
Pipeline #57810 passed with warnings
......@@ -4,7 +4,6 @@
use Drupal\Component\Render\FormattableMarkup;
use Drupal\Component\Utility\Html;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Entity\ContentEntityStorageInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Component\Plugin\Exception\PluginNotFoundException;
......@@ -483,6 +482,7 @@ public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
];
$form['handler']['handler_submit'] = [
'#type' => 'submit',
'#name' => 'handler_settings_submit',
'#value' => $this->t('Change handler'),
'#limit_validation_errors' => [],
'#attributes' => [
......@@ -705,8 +705,8 @@ public static function fieldSettingsAjaxProcess($form, FormStateInterface $form_
public static function fieldSettingsAjaxProcessElement(&$element, $main_form) {
if (!empty($element['#ajax'])) {
$element['#ajax'] = [
'callback' => [static::class, 'settingsAjax'],
'wrapper' => $main_form['#id'],
'trigger_as' => ['name' => 'handler_settings_submit'],
'wrapper' => 'field-combined',
'element' => $main_form['#array_parents'],
];
}
......@@ -731,21 +731,14 @@ public static function formProcessMergeParent($element) {
return $element;
}
/**
* Ajax callback for the handler settings form.
*
* @see static::fieldSettingsForm()
*/
public static function settingsAjax($form, FormStateInterface $form_state) {
return NestedArray::getValue($form, $form_state->getTriggeringElement()['#ajax']['element']);
}
/**
* Submit handler for the non-JS case.
*
* @see static::fieldSettingsForm()
*/
public static function settingsAjaxSubmit($form, FormStateInterface $form_state) {
$form_storage = &$form_state->getStorage();
unset($form_storage['default_value_widget']);
$form_state->setRebuild();
}
......
......@@ -97,8 +97,12 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
$entity = $items->getEntity();
$referenced_entities = $items->referencedEntities();
$selection_settings = [];
// Append the match operation to the selection settings.
$selection_settings = $this->getFieldSetting('handler_settings') + [
if ($this->getFieldSetting('handler_settings') !== NULL) {
$selection_settings = $this->getFieldSetting('handler_settings');
}
$selection_settings += [
'match_operator' => $this->getSetting('match_operator'),
'match_limit' => $this->getSetting('match_limit'),
];
......
......@@ -209,6 +209,21 @@ public function testFieldAdminHandler() {
'field_storage[subform][cardinality]' => -1,
];
$this->submitForm($edit, 'Update settings');
// Assert that the target bundle handler setting is initially set.
$this->assertSession()->checkboxChecked('settings[handler_settings][target_bundles][tags]');
// Change the handler to 'views'.
$this->submitForm([
'settings[handler]' => 'views',
], 'Change handler');
$this->assertSession()->fieldValueEquals('settings[handler]', 'views');
// Change handler back to 'default'.
$this->submitForm([
'settings[handler]' => 'default:taxonomy_term',
], 'Change handler');
// Assert that changing the handler resets the handler settings.
$this->assertSession()->checkboxNotChecked('settings[handler_settings][target_bundles][tags]');
$term_name = $this->randomString();
$result = \Drupal::entityQuery('taxonomy_term')
->condition('name', $term_name)
......@@ -217,6 +232,7 @@ public function testFieldAdminHandler() {
->execute();
$this->assertCount(0, $result, "No taxonomy terms exist with the name '$term_name'.");
$edit = [
'settings[handler_settings][target_bundles][tags]' => TRUE,
// This must be set before new entities will be auto-created.
'settings[handler_settings][auto_create]' => 1,
];
......
<?php
namespace Drupal\Tests\field_ui\FunctionalJavascript;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\Tests\field_ui\Traits\FieldUiJSTestTrait;
use Drupal\Tests\taxonomy\Traits\TaxonomyTestTrait;
/**
* Tests the default value widget in Field UI.
*
* @group field_ui
*/
class DefaultValueWidgetTest extends WebDriverTestBase {
use TaxonomyTestTrait;
use FieldUiJSTestTrait;
/**
* {@inheritdoc}
*/
protected static $modules = [
'node',
'field_ui',
'taxonomy',
];
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritdoc}
*/
protected function setUp(): void {
parent::setUp();
// Create a Content type and two test nodes.
$this->createContentType(['type' => 'test_content']);
$user = $this->drupalCreateUser([
'access content',
'administer content types',
'administer node fields',
]);
$this->drupalLogin($user);
}
/**
* Tests default value options on field config change.
*/
public function testDefaultValueOptionsForChangingBundles() {
$vocab_1 = $this->createVocabulary(['name' => 'Colors']);
$this->createTerm($vocab_1, ['name' => 'red']);
$this->createTerm($vocab_1, ['name' => 'green']);
$vocab_2 = $this->createVocabulary(['name' => 'Tags']);
$this->createTerm($vocab_2, ['name' => 'random tag 1']);
$this->createTerm($vocab_2, ['name' => 'random tag 2']);
$field_name = 'test_field';
$this->fieldUIAddNewFieldJS('admin/structure/types/manage/test_content', $field_name, $field_name, 'entity_reference', FALSE);
$page = $this->getSession()->getPage();
$page->findField('field_storage[subform][settings][target_type]')->selectOption('taxonomy_term');
$this->assertSession()->assertWaitOnAjaxRequest();
$page->findField('settings[handler_settings][target_bundles][' . $vocab_1->id() . ']')->check();
$this->assertSession()->assertWaitOnAjaxRequest();
$page->findField('set_default_value')->check();
$default_value_field = $page->findField('default_value_input[field_' . $field_name . '][0][target_id]');
$default_value_field->setValue('r');
$this->getSession()->getDriver()->keyDown($default_value_field->getXpath(), ' ');
$this->assertSession()->waitOnAutocomplete();
// Check the autocomplete results.
$results = $page->findAll('css', '.ui-autocomplete li');
$this->assertCount(2, $results);
$this->assertSession()->elementTextNotContains('css', '.ui-autocomplete li', 'random tag 1');
$this->assertSession()->elementTextContains('css', '.ui-autocomplete li', 'green');
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment