Skip to content
Snippets Groups Projects
Commit 37c8dd09 authored by Mikael Meulle's avatar Mikael Meulle
Browse files

Issue #3491238 by just_like_good_vibes, smustgrave: Normalization of slots...

Issue #3491238 by just_like_good_vibes, smustgrave: Normalization of slots triggers some unwanted filtering
parent c330a4d9
Branches
Tags
1 merge request!287Issue #3491238 by just_like_good_vibes, smustgrave: Normalization of slots triggers some unwanted filtering
Pipeline #360492 passed
......@@ -53,7 +53,7 @@ class ComponentElementAlter implements TrustedCallbackInterface {
unset($element['#slots'][$slot_id]);
continue;
}
$slot = SlotPropType::normalize($slot);
// Because SDC validator is sometimes confused by an empty slot.
// We check the current slot render element.
if (is_array($slot) && self::isSlotEmpty($slot)) {
......@@ -61,7 +61,7 @@ class ComponentElementAlter implements TrustedCallbackInterface {
unset($element['#slots'][$slot_id]);
continue;
}
$element["#slots"][$slot_id] = SlotPropType::normalize($slot);
$element["#slots"][$slot_id] = $slot;
}
return $element;
}
......
......@@ -34,7 +34,7 @@ class SlotPropType extends PropTypePluginBase {
return self::convertObject($value);
}
if (is_string($value)) {
return Markup::create($value);
return ['#children' => Markup::create($value)];
}
if (is_array($value) && empty(Element::properties($value))) {
// Twig `is sequence` and `is mapping `tests are not useful when a list
......@@ -56,7 +56,7 @@ class SlotPropType extends PropTypePluginBase {
$value = $value->toRenderable();
}
if ($value instanceof MarkupInterface) {
return $value;
return ['#children' => $value];
}
elseif ($value instanceof \Stringable) {
return [
......
......@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Drupal\Tests\ui_patterns\Kernel;
use Drupal\Core\Render\Markup;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\ui_patterns\Traits\TestDataTrait;
......@@ -48,6 +49,8 @@ class SlotNormalizationTest extends KernelTestBase {
*/
public function testSlotNormalization() : void {
$tested_values = [
Markup::create("my slot"),
new TranslatableMarkup("my slot"),
["my slot"],
"my slot",
Markup::create("my slot"),
......@@ -71,6 +74,22 @@ class SlotNormalizationTest extends KernelTestBase {
array_merge($render_array_test, ["#context" => ["injected" => $tested_value]])
);
}
// With render array.
$render_array_test = [
"#type" => "component",
'#component' => 'ui_patterns_test:test-component',
"#slots" => ["slot" => []],
];
foreach ($tested_values as $slots_value) {
$render_array_test["#slots"]["slot"] = $slots_value;
$this->assertExpectedOutput(
[
"rendered_value" => "my slot",
"assert" => "assertStringContainsString",
],
$render_array_test
);
}
}
/**
......@@ -78,27 +97,41 @@ class SlotNormalizationTest extends KernelTestBase {
*/
public function testNestedComponentWithForm() : void {
// Test nested component with form.
$render_array_test = [
"#type" => "inline_template",
"#template" => "
{% set comp_form = include('ui_patterns_test:test-form-component', {}) %}
{{ include('ui_patterns_test:test-component', {slot: comp_form}) }}",
"#context" => [],
];
$this->assertExpectedOutput(
$render_array_tests = [
[
"rendered_value" => "<input ",
"assert" => "assertStringContainsString",
"#type" => "inline_template",
"#template" => "
{% set comp_form = include('ui_patterns_test:test-form-component', {}) %}
{{ include('ui_patterns_test:test-component', {slot: comp_form}) }}",
"#context" => [],
],
$render_array_test
);
$this->assertExpectedOutput(
[
"rendered_value" => "<form ",
"assert" => "assertStringContainsString",
[
"#type" => "component",
'#component' => 'ui_patterns_test:test-component',
"#slots" => [
"slot" => [
"#type" => "component",
'#component' => 'ui_patterns_test:test-form-component',
],
$render_array_test
);
],
],
];
foreach ($render_array_tests as $render_array_test) {
$this->assertExpectedOutput(
[
"rendered_value" => "<input ",
"assert" => "assertStringContainsString",
],
$render_array_test
);
$this->assertExpectedOutput(
[
"rendered_value" => "<form ",
"assert" => "assertStringContainsString",
],
$render_array_test
);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment