function ListItemBase::deleteSubmit
Same name in other branches
- 10 core/modules/options/src/Plugin/Field/FieldType/ListItemBase.php \Drupal\options\Plugin\Field\FieldType\ListItemBase::deleteSubmit()
Deletes a row/option.
Parameters
array $form: The form array to add elements to.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
File
-
core/
modules/ options/ src/ Plugin/ Field/ FieldType/ ListItemBase.php, line 294
Class
- ListItemBase
- Plugin base class inherited by the options field types.
Namespace
Drupal\options\Plugin\Field\FieldTypeCode
public static function deleteSubmit(array $form, FormStateInterface $form_state) {
$allowed_values = $form_state->getStorage()['allowed_values'];
$button = $form_state->getTriggeringElement();
$element = NestedArray::getValue($form, array_slice($button['#array_parents'], 0, -1));
$item_to_be_removed = $element['item']['label']['#default_value'];
$remaining_allowed_values = array_diff($allowed_values, [
$item_to_be_removed,
]);
$form_state->set('allowed_values', $remaining_allowed_values);
// The user input is directly modified to preserve the rest of the data on
// the page as it cannot be rebuilt from a fresh form state.
$user_input = $form_state->getUserInput();
NestedArray::unsetValue($user_input, $element['#parents']);
// Reset the keys in the array.
$table_parents = $element['#parents'];
array_pop($table_parents);
$new_values = array_values(NestedArray::getValue($user_input, $table_parents));
NestedArray::setValue($user_input, $table_parents, $new_values);
$form_state->setUserInput($user_input);
$form_state->set('items_count', $form_state->get('items_count') - 1);
$form_state->setRebuild();
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.