Commit 6b62f6bc authored by alexpott's avatar alexpott

Issue #2718655 by dawehner, Jo Fitzgerald, Wim Leers: #type actions with...

Issue #2718655 by dawehner, Jo Fitzgerald, Wim Leers: #type actions with dropbutton loses bubbleable metadata
parent 2421ca24
......@@ -3,6 +3,7 @@
namespace Drupal\Core\Render\Element;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\BubbleableMetadata;
use Drupal\Core\Render\Element;
/**
......@@ -103,6 +104,10 @@ public static function preRenderActionsDropbutton(&$element, FormStateInterface
$dropbuttons[$dropbutton]['#links'][$key] = [
'title' => $button,
];
// Merge metadata like drupalSettings.
BubbleableMetadata::createFromRenderArray($dropbuttons[$dropbutton])
->merge(BubbleableMetadata::createFromRenderArray($element[$key]))
->applyTo($dropbuttons[$dropbutton]);
}
}
// @todo For now, all dropbuttons appear first. Consider to invent a more
......
<?php
namespace Drupal\KernelTests\Core\Render\Element;
use Drupal\Core\Form\FormInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\KernelTests\KernelTestBase;
/**
* @coversDefaultClass \Drupal\Core\Render\Element\Actions
* @group Render
*/
class ActionsTest extends KernelTestBase implements FormInterface {
/**
* {@inheritdoc}
*/
public static $modules = ['system'];
/**
* {@inheritdoc}
*/
public function getFormId() {
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$form['actions'] = ['#type' => 'actions'];
$form['actions']['key'] = [
'#type' => 'submit',
'#value' => 'Key',
'#dropbutton' => 'submit',
'#cache' => [
'tags' => ['foo'],
],
'#attached' => [
'library' => [
'system/base',
],
],
];
$form['actions']['submit'] = [
'#type' => 'submit',
'#value' => 'Save',
];
return $form;
}
/**
* {@inheritdoc}
*/
public function validateForm(array &$form, FormStateInterface $form_state) {
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
}
public function testDropbuttonWithBubbleableMetadata() {
$result = \Drupal::formBuilder()->getForm($this);
\Drupal::service('renderer')->renderRoot($result);
$this->assertEquals(['system/base', 'core/drupal.dropbutton'], $result['#attached']['library']);
$this->assertEquals(['foo'], $result['#cache']['tags']);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment