Skip to content
Snippets Groups Projects

fix label in details element

Files
4
@@ -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"];
Loading