diff --git a/src/Element/ComponentFormBase.php b/src/Element/ComponentFormBase.php index fb2fd0fa5d921f622d300c32b096b8e81b91f5a3..17d2c9a6ce911bcc9d9f4f30f536ca1d00b30b22 100644 --- a/src/Element/ComponentFormBase.php +++ b/src/Element/ComponentFormBase.php @@ -22,6 +22,32 @@ abstract class ComponentFormBase extends FormElementBase implements TrustedCallb return ['preRenderPropOrSlot', 'processPropOrSlot']; } + /** + * Check if the form element needs a details. + * + * @param array $element + * The form element. + * + * @return string|null + * Prop or slot id if the form element needs a details. + */ + protected static function checkDetailsElement(array &$element) : ?string { + if (!isset($element["#wrap"]) || !$element["#wrap"]) { + return NULL; + } + $prop_or_slot_id = $element["#prop_id"] ?? $element["#slot_id"]; + $title_in_component = $element["#title_in_component"] ?? $prop_or_slot_id; + $title = !empty($element['#title']) ? $element['#title'] : $title_in_component; + if (!array_key_exists($prop_or_slot_id, $element)) { + $element[$prop_or_slot_id] = [ + "#type" => "details", + "#title" => $title, + "#open" => FALSE, + ]; + } + return $prop_or_slot_id; + } + /** * Customize slot or prop form elements (pre-render). * @@ -32,17 +58,8 @@ abstract class ComponentFormBase extends FormElementBase implements TrustedCallb * Processed element */ public static function preRenderPropOrSlot(array $element) : array { - if (isset($element["#wrap"]) && $element["#wrap"]) { - $prop_or_slot_id = $element["#prop_id"] ?? $element["#slot_id"]; - $title = !empty($element['#title']) ? $element['#title'] : $prop_or_slot_id; + if ($prop_or_slot_id = static::checkDetailsElement($element)) { $children_keys = Element::children($element); - if (!array_key_exists($prop_or_slot_id, $element)) { - $element[$prop_or_slot_id] = [ - "#type" => "details", - "#title" => $title, - "#open" => FALSE, - ]; - } foreach ($children_keys as $child_key) { if ($child_key === $prop_or_slot_id) { continue; @@ -67,17 +84,7 @@ abstract class ComponentFormBase extends FormElementBase implements TrustedCallb */ public static function processPropOrSlot(array &$element, FormStateInterface $form_state) { $triggering_element = $form_state->getTriggeringElement(); - if (isset($element["#wrap"]) && $element["#wrap"]) { - $prop_or_slot_id = $element["#prop_id"] ?? $element["#slot_id"]; - $title = !empty($element['#title']) ? $element['#title'] : $prop_or_slot_id; - if (!array_key_exists($prop_or_slot_id, $element)) { - $element[$prop_or_slot_id] = [ - "#type" => "details", - "#title" => $title, - "#open" => FALSE, - ]; - } - + if ($prop_or_slot_id = static::checkDetailsElement($element)) { if (is_array($triggering_element) && isset($triggering_element["#array_parents"]) && is_array($triggering_element["#array_parents"])) { $element_array_parents = $element["#array_parents"]; $trigger_array_parents = $triggering_element["#array_parents"]; diff --git a/src/Element/ComponentSlotForm.php b/src/Element/ComponentSlotForm.php index 6f4a7d5b5bc1209d47549615f8bcc08cf15d5b0e..589ebe00defb69c7b317be4f21e246d831e6c083 100644 --- a/src/Element/ComponentSlotForm.php +++ b/src/Element/ComponentSlotForm.php @@ -78,6 +78,7 @@ class ComponentSlotForm extends ComponentFormBase { [$class, 'preRenderPropOrSlot'], ], "#wrap" => TRUE, + "#title_in_component" => NULL, ]; } @@ -109,6 +110,7 @@ class ComponentSlotForm extends ComponentFormBase { $wrapper_id = static::getElementId($element, 'ui-patterns-slot-' . $slot_id); $element['#tree'] = TRUE; $element['#table_title'] = $element['#title']; + $element['#title_in_component'] = $element['#title']; $element['#title'] = ''; $element['sources'] = static::buildSourcesForm($element, $form_state, $definition, $wrapper_id); if ($element['#cardinality_multiple'] === TRUE ||