Skip to content
Snippets Groups Projects

Hide display_id form element if there is only one display.

1 unresolved thread
@@ -138,6 +138,8 @@ trait ViewsReferenceTrait {
],
];
$this->setDefaultDisplayId($element, $display_id, $form, $form_state);
$field_data = [];
if (!empty($field_value['data'])) {
$field_data = unserialize($field_value['data'], ['allowed_classes' => FALSE]);
@@ -291,13 +293,19 @@ trait ViewsReferenceTrait {
'display_id',
],
];
$display_count = count($element['display_id']['#options']);
$default_display_id = $element['display_id']['#default_value'];
if ($display_count > 2) {
    • Suggested change
      274 if ($display_count > 2) {
      274 if ($display_count >= 2) {

      If there are 2 displays it should also let the user choose.

Please register or sign in to reply
$default_display_id = '';
}
$triggering_element_name = end($triggering_element['#parents']);
if (isset($keys[$triggering_element_name])) {
$input = &$form_state->getUserInput();
foreach ($keys[$triggering_element_name] as $key) {
$parents = array_merge($element['#parents'], [$key]);
NestedArray::setValue($input, $parents, '');
$element[$key]['#value'] = '';
NestedArray::setValue($input, $parents, $default_display_id);
$element[$key]['#value'] = $default_display_id;
}
}
@@ -311,9 +319,44 @@ trait ViewsReferenceTrait {
$triggering_element = $form_state->getTriggeringElement();
$parents = $triggering_element['#array_parents'];
array_pop($parents);
return NestedArray::getValue($form, $parents);
}
/**
* Set Default Display if there is only one views display.
*/
protected function setDefaultDisplayId(&$element, &$display_id, &$form, FormStateInterface $form_state) {
$field_name = $this->fieldDefinition->getName();
$options = $element['display_id']['#options'];
if (count($options) === 1) {
$display_id = array_key_first($options);
$element['display_id']['#default_value'] = $display_id;
$element['display_id']['#value'] = $display_id;
$element['display_id']['#attributes']['class'][] = 'visually-hidden';
$element['display_id']['#label_attributes']['class'][] = 'visually-hidden';
$triggering_element = $form_state->getTriggeringElement();
if ($triggering_element && in_array($field_name, $triggering_element['#parents'])) {
$keys = [
'target_id' => [
'display_id',
],
];
$triggering_element_name = end($triggering_element['#parents']);
if (isset($keys[$triggering_element_name])) {
$input = &$form_state->getUserInput();
foreach ($keys[$triggering_element_name] as $key) {
$parents = $triggering_element['#parents'];
$parents[count($parents) - 1] = $key;
NestedArray::setValue($input, $parents, $display_id);
}
}
}
}
}
/**
* Helper function to get all display ids.
*/
Loading