Skip to content
Snippets Groups Projects

Draft: Issue #3508641 by pdureau, grimreaper: Define form elements from SDC

@@ -4,6 +4,7 @@
use Drupal\Core\Render\Attribute\RenderElement;
use Drupal\Core\Render\Component\Exception\InvalidComponentDataException;
use Drupal\Core\Render\Attribute\FormElement;
use Drupal\Core\Render\Element;
use Drupal\Core\Security\DoTrustedCallbackTrait;
@@ -33,8 +34,8 @@
*
* @see \Drupal\Core\Render\Element\Textarea
*/
#[RenderElement('component')]
class ComponentElement extends RenderElementBase {
#[FormElement('component')]
class ComponentElement extends FormElementBase {
use DoTrustedCallbackTrait;
@@ -75,6 +76,21 @@ public function preRenderComponent(array $element): array {
unset($element[$key]);
}
// This component is a form component.
if (!empty($element['#name'])) {
if (!empty($element['#names'])) {
foreach ($element['#names'] as $componentName => $formName) {
$props['form_state'][$componentName]['name'] = $element['#name'] . '[' . $formName . ']';
$props['form_state'][$componentName]['required'] = $element['#required'] ?? FALSE;
}
}
// Try to provide a sane default.
else {
$props['form_state']['value']['name'] = $element['#name'];
$props['form_state']['value']['required'] = $element['#required'] ?? FALSE;
}
}
$inline_template = $this->generateComponentTemplate(
$element['#component'],
$element['#slots'],
Loading