Skip to content
Snippets Groups Projects
Verified Commit 710ae1c8 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
parent 5ed165d5
No related branches found
No related tags found
35 merge requests!8528Issue #3456871 by Tim Bozeman: Support NULL services,!8323Fix source code editing and in place front page site studio editing.,!6278Issue #3187770 by godotislate, smustgrave, catch, quietone: Views Rendered...,!3878Removed unused condition head title for views,!38582585169-10.1.x,!3818Issue #2140179: $entity->original gets stale between updates,!3742Issue #3328429: Create item list field formatter for displaying ordered and unordered lists,!3731Claro: role=button on status report items,!3668Resolve #3347842 "Deprecate the trusted",!3651Issue #3347736: Create new SDC component for Olivero (header-search),!3546refactored dialog.pcss file,!3531Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!3502Issue #3335308: Confusing behavior with FormState::setFormState and FormState::setMethod,!3452Issue #3332701: Refactor Claro's tablesort-indicator stylesheet,!3355Issue #3209129: Scrolling problems when adding a block via layout builder,!3226Issue #2987537: Custom menu link entity type should not declare "bundle" entity key,!3154Fixes #2987987 - CSRF token validation broken on routes with optional parameters.,!3147Issue #3328457: Replace most substr($a, $i) where $i is negative with str_ends_with(),!3146Issue #3328456: Replace substr($a, 0, $i) with str_starts_with(),!3133core/modules/system/css/components/hidden.module.css,!2812Issue #3312049: [Followup] Fix Drupal.Commenting.FunctionComment.MissingReturnType returns for NULL,!2614Issue #2981326: Replace non-test usages of \Drupal::logger() with IoC injection,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2062Issue #3246454: Add weekly granularity to views date sort,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!877Issue #2708101: Default value for link text is not saved,!844Resolve #3036010 "Updaters",!673Issue #3214208: FinishResponseSubscriber could create duplicate headers,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!23Issue #2879087: Use comment access handler instead of hardcoding permissions
Pipeline #57809 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