Skip to content
Snippets Groups Projects
Commit b80a00bf authored by Mikael Meulle's avatar Mikael Meulle
Browse files

Issue #3479095 by just_like_good_vibes: adding data to slot and then remove...

Issue #3479095 by just_like_good_vibes: adding data to slot and then remove it, empties all previous configuration
parent bd0ffbd2
No related branches found
No related tags found
1 merge request!236Fixed bug in slot source removal
Pipeline #304542 passed with warnings
......@@ -84,18 +84,42 @@ class ComponentSlotForm extends ComponentFormBase {
}
/**
* Build single slot form.
* Handle the rebuild of the form and operations.
*/
public static function buildForm(array &$element, FormStateInterface $form_state): array {
$slot_id = $element['#slot_id'];
protected static function handleFormRebuild(array &$element, FormStateInterface $form_state) : void {
$trigger_element = $form_state->getTriggeringElement();
if ($form_state->isRebuilding() && isset($trigger_element['#ui_patterns_slot'])) {
if ($trigger_element['#ui_patterns_slot_parents'] == $element['#parents']) {
$value = $form_state->getValue($trigger_element['#ui_patterns_slot_parents']);
if (isset($trigger_element['#ui_patterns_slot_operation']) && $slot_operation = $trigger_element['#ui_patterns_slot_operation']) {
switch ($slot_operation) {
case 'remove':
$delta_to_remove = $trigger_element['#delta'];
$value['sources'] = array_filter($value['sources'], function ($key) use ($delta_to_remove) {
return $key !== $delta_to_remove;
}, ARRAY_FILTER_USE_KEY);
break;
case 'add':
$source_id = $trigger_element['#source_id'];
$value['sources'][] = [
'source_id' => $source_id,
'source' => [],
];
break;
}
}
$element['#default_value'] = $value;
}
}
}
/**
* Build single slot form.
*/
public static function buildForm(array &$element, FormStateInterface $form_state): array {
static::handleFormRebuild($element, $form_state);
$slot_id = $element['#slot_id'];
$component = static::getComponent($element);
if ($component !== NULL) {
$slots = $component->metadata->slots;
......@@ -251,11 +275,12 @@ class ComponentSlotForm extends ComponentFormBase {
'#name' => strtr($slot_id, '-', '_') . $id . '_' . $delta . '_remove',
'#value' => t('Remove'),
'#submit' => [
static::class . '::removeSource',
static::class . '::rebuildForm',
],
'#access' => TRUE,
'#delta' => $delta,
'#ui_patterns_slot' => TRUE,
'#ui_patterns_slot_operation' => 'remove',
'#ui_patterns_slot_parents' => $element['#parents'],
'#ui_patterns_slot_array_parents' => $element['#array_parents'],
'#limit_validation_errors' => [],
......@@ -289,10 +314,11 @@ class ComponentSlotForm extends ComponentFormBase {
'#name' => strtr($slot_id, '-', '_') . implode('-', $element['#array_parents']) . '_' . $source_id . '_add_more',
'#value' => $label,
'#submit' => [
static::class . '::addSource',
static::class . '::rebuildForm',
],
'#access' => TRUE,
'#source_id' => $source_id,
'#ui_patterns_slot_operation' => 'add',
'#ui_patterns_slot' => TRUE,
'#ui_patterns_slot_parents' => $element['#parents'],
'#ui_patterns_slot_array_parents' => $element['#array_parents'],
......@@ -379,21 +405,11 @@ class ComponentSlotForm extends ComponentFormBase {
}
/**
* Ajax submit handler: Add source.
* Ajax submit handler: trigger rebuild of the sources form.
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public static function addSource(array $form, FormStateInterface $form_state) : void {
$trigger_element = $form_state->getTriggeringElement();
$source_id = $trigger_element['#source_id'];
$component_form_parents = $trigger_element['#ui_patterns_slot_parents'];
$configuration = $form_state->getValue($component_form_parents);
$configuration['sources'][] = [
'source_id' => $source_id,
'source' => [],
];
$form_state->setValue($component_form_parents, $configuration);
public static function rebuildForm(array $form, FormStateInterface $form_state) : void {
$form_state->setRebuild();
}
......@@ -406,19 +422,4 @@ class ComponentSlotForm extends ComponentFormBase {
return NestedArray::getValue($form, $parents);
}
/**
* Ajax submit handler: Remove source.
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public static function removeSource(array $form, FormStateInterface $form_state): void {
$trigger_element = $form_state->getTriggeringElement();
$delta = $trigger_element['#delta'];
$component_form_parents = $trigger_element['#ui_patterns_slot_parents'];
$configuration = $form_state->getValue($component_form_parents);
unset($configuration['sources'][$delta]);
$form_state->setValue($component_form_parents, $configuration);
$form_state->setRebuild();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment