Skip to content
Snippets Groups Projects

Issue #3169198: Add quick 'Add Column' button

Open Prem Suthar requested to merge issue/tablefield-3169198:3169198-add-quick-add into 3.0.x
Files
5
+ 46
5
@@ -34,6 +34,7 @@ class Tablefield extends FormElementBase {
],
'#theme_wrappers' => ['form_element'],
'#addrow' => FALSE,
'#addcol' => FALSE,
];
}
@@ -52,7 +53,7 @@ class Tablefield extends FormElementBase {
// This is being set in rebuild and import ajax calls.
$storage = NestedArray::getValue($form_state->getStorage(), $element['#parents']);
// Fetch addrow value.
// Fetch addrow/addcol value.
if ($storage && isset($storage['tablefield']['rebuild'])) {
$element['#cols'] = $storage['tablefield']['rebuild']['cols'];
$element['#rows'] = $storage['tablefield']['rebuild']['rows'];
@@ -172,6 +173,36 @@ class Tablefield extends FormElementBase {
];
}
// To change number of columns.
if (!empty($element['#addcol'])) {
$element['tablefield']['addcol']['col_value'] = [
'#title' => t('How many columns'),
'#type' => 'hidden',
'#default_value' => $rows,
'#value' => $rows,
];
$element['tablefield']['addcol']['addcol'] = [
'#type' => 'submit',
'#value' => t('Add Column'),
'#name' => 'tablefield-addcol-' . $id,
'#attributes' => [
'class' => ['tablefield-addcol'],
],
'#submit' => [[get_called_class(), 'submitCallbackRebuild']],
'#limit_validation_errors' => [
array_merge($parents, ['tablefield', 'rebuild', 'cols']),
array_merge($parents, ['tablefield', 'rebuild', 'rows']),
array_merge($parents, ['tablefield', 'rebuild', 'rebuild']),
],
'#ajax' => [
'callback' => [get_called_class(), 'ajaxCallbackRebuild'],
'progress' => ['type' => 'throbber', 'message' => NULL],
'wrapper' => 'tablefield-' . $id . '-wrapper',
'effect' => 'fade',
],
];
}
// If no rebuild, we pass along the rows/cols as a value. Otherwise, we will
// provide form elements to specify the size and ajax rebuild.
if (empty($element['#rebuild'])) {
@@ -349,12 +380,14 @@ class Tablefield extends FormElementBase {
unset($rebuild['format']);
unset($rebuild['_weight']);
// Set row value to default only if there is Add Row button clicked.
// Set values to default only if the Add Row/Col button was clicked.
$op = (string) $triggering_element['#value'];
if ($op === 'Add Row') {
$rebuild['rebuild']['rows']['#value'] = $rebuild['rebuild']['rows']['#default_value'];
}
elseif ($op === 'Add Column') {
$rebuild['rebuild']['cols']['#value'] = $rebuild['rebuild']['cols']['#default_value'];
}
return $rebuild;
}
@@ -374,11 +407,19 @@ class Tablefield extends FormElementBase {
$parents = array_slice($triggering_element['#parents'], 0, -2, TRUE);
$value = $form_state->getValue($parents);
if (isset($triggering_element['#name']) && $triggering_element['#name'] == 'tablefield-rebuild-' . $id || isset($triggering_element['#name']) && $triggering_element['#name'] == 'tablefield-addrow-' . $id) {
$rebuild_names = [
'tablefield-rebuild-' . $id,
'tablefield-addrow-' . $id,
'tablefield-addcol-' . $id,
];
if (isset($triggering_element['#name']) && in_array($triggering_element['#name'], $rebuild_names)) {
$parents[] = 'rebuild';
if (isset($triggering_element['#name']) && $triggering_element['#name'] == 'tablefield-addrow-' . $id) {
if ($triggering_element['#name'] == 'tablefield-addrow-' . $id) {
$value['rebuild']['rows']++;
}
elseif ($triggering_element['#name'] == 'tablefield-addcol-' . $id) {
$value['rebuild']['cols']++;
}
NestedArray::setValue($form_state->getStorage(), $parents, $value['rebuild']);
\Drupal::messenger()->addStatus(t('Table structure rebuilt.'), FALSE);
Loading